Skip to content

Commit 9aea24a

Browse files
committed
Edits to ensure that header identification in tables is working correctly, and to ensure we preserve the new header range.
1 parent ec2177b commit 9aea24a

5 files changed

Lines changed: 39 additions & 18 deletions

File tree

fixtures/tables_test.xlsx

78 Bytes
Binary file not shown.

lib/importer/src/dudk/sheets.js

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,16 @@ exports.GetTablePreview = (sid, sheet, table, count=10) => {
162162
const tableRange = tableRangeContainer.range
163163
const tableRowCount = tableRange.end.row - tableRange.start.row
164164
const tableColumnCount = tableRange.end.column - tableRange.start.column + 1 //need to add 1 otherwise it will drop the last column
165+
const headerRange = this.GetTableHeader(sid, sheet, table)
166+
if (headerRange == null) {
167+
tableStart = { row: tableRange.start.row, column: tableRange.start.column } //if 1st row not header include in table (preview) range
168+
} else {
169+
tableStart = { row: tableRange.start.row + 1, column: tableRange.start.column } //if 1st row is header, dont include in (preview) range
170+
};
171+
165172
const tablePreview = backend.SessionGetInputSampleRows(sid, {
166173
sheet: sheet,
167-
start: { row: tableRange.start.row + 1, column: tableRange.start.column }, //skip first row assuming it is header
174+
start: tableStart,
168175
end: tableRange.end
169176
}, Math.min(count, tableRowCount), 0, 0)[0];
170177

@@ -213,24 +220,38 @@ exports.GetTableHeader = (sid, sheet, table) => {
213220
const tableRangeContainer = backend.SessionGetInputTableRanges(sid, sheet).get(table);
214221
assert(tableRangeContainer, `Table Range ${table} not found in ${sheet}` )
215222
const tableRange = tableRangeContainer.range
223+
const tableColumnCount = tableRange.end.column - tableRange.start.column + 1 //need to add 1 otherwise it will drop the last column
216224

217225
const headerRange = {
218-
start: tableRange.start,
219-
end: {row: tableRange.start.row, column: tableRange.end.column}
226+
start: { row: tableRange.start.row, column: tableRange.start.column },
227+
end: {row: tableRange.start.row, column: tableRange.end.column }
220228
}
221-
222229
const headerPreview = backend.SessionGetInputSampleRows(sid, {
223230
sheet: sheet,
224-
start: headerRange.start,
225-
end: headerRange.end
226-
})
231+
start: tableRange.start,
232+
end: tableRange.end
233+
}, 1, 0, 0)[0];
234+
headerRow = processMergedCells(tableColumnCount, headerPreview)
227235

228-
const headerList = headerPreview.row;
229-
const columnList = tableRangeContainer.columns;
236+
const headerList = [];
237+
for (var i = 0; i < headerRow[0].row.length; i++) {
238+
headerList.push(headerRow[0].row[i].value)
239+
}
240+
const columnRow = tableRangeContainer.columns;
241+
const columnList = [];
242+
for (var i = 0; i < columnRow.length; i++) {
243+
columnList.push(columnRow[i].name)
244+
}
230245

231-
if (headerList != columnList) {
246+
if (headerList.length != columnList.length) {
232247
return null;
233248
}
249+
for (var i = 0; i < headerList.length; i++) {
250+
if (headerList[i] != columnList[i]) {
251+
return null;
252+
}
253+
}
254+
234255

235256
return headerRange;
236257

lib/importer/src/index.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,6 @@ exports.Initialise = (config, router, prototypeKit) => {
9999
for (let [key, value] of IMPORTER_ROUTE_MAP) {
100100
const k = key;
101101
const v = value;
102-
console.debug(k)
103-
console.debug(v)
104102

105103
prototypeKit.views.addFunction(
106104
k,
@@ -276,7 +274,7 @@ exports.Initialise = (config, router, prototypeKit) => {
276274
return;
277275
}
278276

279-
277+
console.debug(session.footerRange)
280278

281279
session.table = request.body.table;
282280

@@ -291,15 +289,17 @@ exports.Initialise = (config, router, prototypeKit) => {
291289
// In some cases, the user will next select a header row which tells us where
292290
// the headers are. Sometimes, this will not be part of the flow, and so we
293291
// should default to the first row in the sheet.
294-
session.headerRange = sheets_lib.GetTableHeader(session.backendSid, session.sheet, session.table)
295-
296-
if (session.headerRange == null) {
292+
headerRange = sheets_lib.GetTableHeader(session.backendSid, session.sheet, session.table)
293+
console.debug("header range", headerRange);
294+
if (headerRange == null) {
297295
request.session.data[IMPORTER_ERROR_KEY] =
298296
"Column names for table are not in the first row";
299297
response.redirect(request.get("Referrer"));
300298
return;
301299
}
302300

301+
session.headerRange = headerRange //overwrite assumed header range with table header range
302+
303303
// The user
304304

305305
// Ensure the session is persisted. Currently in session, eventually another way

lib/importer/templates/select_table.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
{% block content %}
1111
<div class="govuk-grid-row">
1212
<div class="govuk-grid-column-full">
13-
<form action="{{importerSelectTablePath('/select_header_row', '/select_footer_row')}}" method="post" enctype="multipart/form-data">
13+
<form action="{{ importerSelectTablePath('/select_header_row', '/select_footer_row') }}" method="post">
1414
<div class="govuk-form-group">
1515
<fieldset class="govuk-fieldset">
1616
<legend class="govuk-fieldset__legend govuk-fieldset__legend--l">

prototypes/table-test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Subproject commit 167d4cfb1223ce10e5277b454167f62ba1dab0a2
1+
Subproject commit db84abc513e8daef7f03b366ad763c5c485a59a4

0 commit comments

Comments
 (0)