Skip to content

Commit b25aa9f

Browse files
committed
Some updates to how we handle table header and use it in the final mapData step so that we can import data without visible headers
1 parent 3cff231 commit b25aa9f

4 files changed

Lines changed: 55 additions & 14 deletions

File tree

fixtures/tables_test.xlsx

858 Bytes
Binary file not shown.

lib/importer/src/dudk/sheets.js

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,11 +252,23 @@ exports.GetTableHeader = (sid, sheet, table) => {
252252
}
253253
}
254254

255-
256255
return headerRange;
257256

258257
}
259258

259+
exports.GetTableColumns = (sid, sheet, table) => {
260+
const tableRangeContainer = backend.SessionGetInputTableRanges(sid, sheet).get(table);
261+
assert(tableRangeContainer, `Table Range ${table} not found in ${sheet}` )
262+
263+
const columnRow = tableRangeContainer.columns;
264+
const columnList = [];
265+
for (var i = 0; i < columnRow.length; i++) {
266+
columnList.push(columnRow[i].name)
267+
}
268+
269+
return columnList;
270+
}
271+
260272
exports.GetTableFooter = (sid, sheet, table) => {
261273
const tableRangeContainer = backend.SessionGetInputTableRanges(sid, sheet).get(table);
262274
const sheetDimensions = backend.SessionGetInputDimensions(sid)
@@ -421,9 +433,24 @@ const RewriteMapping = (mapping, fields) => {
421433
// Uses the session ID provided, which must contain a sheet name and a
422434
// mapping to perform the mapping of the data across the remaining
423435
// rows in the sheet to return an array of objects.
424-
exports.MapData = (sid, sheet, mapping, fields, previewLimit = DEFAULT_PREVIEW_LIMIT) => {
425-
const hRange = backend.SessionGetHeaderRange(sid, sheet)
436+
exports.MapData = (sid, sheet, mapping, fields, table = null, previewLimit = DEFAULT_PREVIEW_LIMIT) => {
437+
let hRange = backend.SessionGetHeaderRange(sid, sheet)
426438
const fRange = backend.SessionGetFooterRange(sid, sheet)
439+
console.debug(hRange)
440+
441+
if (table != null && hRange.start.row == -1) {
442+
tableRangeContainer = backend.SessionGetInputTableRanges(sid, sheet).get(table);
443+
assert(tableRangeContainer, `Table Range ${table} not found in ${sheet}` )
444+
tableRange = tableRangeContainer.range
445+
446+
hRange = {
447+
sheet: sheet,
448+
start: { row: tableRange.start.row -1, column: tableRange.start.column },
449+
end: { row: tableRange.start.row -1, column: tableRange.end.column },
450+
}
451+
}
452+
453+
427454

428455
// Construct the range to be mapped - everything but the first row
429456
const rowRange = backend.SessionSuggestDataRange(sid, hRange, fRange);

lib/importer/src/functions.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ const importerGetHeaders = (data) => {
141141
const session = new session_lib.Session(session_data)
142142

143143
let header_names = sheets_lib.GetHeader(session.backendSid, session.sheet);
144+
144145
const response = {
145146
data: [],
146147
error: false,
@@ -191,7 +192,7 @@ const importerMappedData = (data) => {
191192
const session_data = data[IMPORTER_SESSION_KEY];
192193
const session = new session_lib.Session(session_data)
193194

194-
const mapResults = sheets_lib.MapData(session.backendSid, session.sheet, session.mapping, session.fields);
195+
const mapResults = sheets_lib.MapData(session.backendSid, session.sheet, session.mapping, session.fields, session.table);
195196
const headers = session.fields;
196197

197198
return {
@@ -221,7 +222,7 @@ const data_sum = (data, column) => {
221222
const session_data = data[IMPORTER_SESSION_KEY];
222223
const session = new session_lib.Session(session_data)
223224

224-
const mapResults = sheets_lib.MapData(session.backendSid, session.sheet, session.mapping, session.fields);
225+
const mapResults = sheets_lib.MapData(session.backendSid, session.sheet, session.mapping, session.fields, session.table);
225226
const headers = session.fields;
226227

227228
const idx = headers.findIndex((x) => x.name == column)
@@ -241,7 +242,7 @@ const data_avg = (data, column) => {
241242
const session_data = data[IMPORTER_SESSION_KEY];
242243
const session = new session_lib.Session(session_data)
243244

244-
const mapResults = sheets_lib.MapData(session.backendSid, session.sheet, session.mapping, session.fields);
245+
const mapResults = sheets_lib.MapData(session.backendSid, session.sheet, session.mapping, session.fields, session.table);
245246
const headers = session.fields;
246247

247248
const idx = headers.findIndex((x) => x.name == column)

lib/importer/src/index.js

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -283,8 +283,21 @@ exports.Initialise = (config, router, prototypeKit) => {
283283
if (request.body.table == "no_table") {
284284
session.table = null
285285
//redirectOnwards(request, response); //if no table is selected we don't need to persist one
286-
//return;
287-
// Ensure the session is persisted. Currently in session, eventually another way
286+
maxCol = sheets_lib.GetTotalColumns(session.backendSid, session.sheet);
287+
maxRow = sheets_lib.GetTotalRows(session.backendSid, session.sheet)
288+
289+
session.headerRange = {
290+
sheet: session.sheet,
291+
start: { row: -1, column: 0 },
292+
end: { row: -1, column: maxCol - 1 },
293+
};
294+
295+
session.footerRange = {
296+
sheet: session.sheet,
297+
start: { row: maxRow, column: 0 },
298+
end: {row: maxRow, column: maxCol - 1 }
299+
}
300+
// Ensure the session is persisted. Currently in session, eventually another way.
288301
request.session.data[IMPORTER_SESSION_KEY] = session;
289302
redirectOnwards(request, response);
290303
return;
@@ -300,15 +313,15 @@ exports.Initialise = (config, router, prototypeKit) => {
300313
// Get header range, for tables this will check the column names against the first row of the table.
301314
// If they match that first row will be designated as the headerRange, otherwise it will be null.
302315
headerRange = sheets_lib.GetTableHeader(session.backendSid, session.sheet, session.table)
303-
if (headerRange != null) {
304-
session.headerRange = headerRange //overwrite assumed header range with table header range
305-
}
316+
317+
session.headerRange = headerRange //overwrite assumed header range with table header range
318+
306319

307320
//Set a footer range, this may be overridden later
308321
footerRange = sheets_lib.GetTableFooter(session.backendSid, session.sheet, session.table)
309-
if (footerRange != null) {
310-
session.footerRange = footerRange
311-
}
322+
323+
session.footerRange = footerRange
324+
312325

313326
// The user
314327

0 commit comments

Comments
 (0)