UNPKG

subhasmitalmg-react-spreadsheet-import

Version:

React spreadsheet import for xlsx and csv files with column matching and validation steps

39 lines (36 loc) 1.63 kB
import { ColumnType } from '../MatchColumnsStep.js'; import { normalizeCheckboxValue } from './normalizeCheckboxValue.js'; const normalizeTableData = (columns, data, fields) => data.map((row) => columns.reduce((acc, column, index) => { const curr = row[index]; switch (column.type) { case ColumnType.matchedCheckbox: { const field = fields.find((field) => field.key === column.value); if ("booleanMatches" in field.fieldType && Object.keys(field.fieldType).length) { const booleanMatchKey = Object.keys(field.fieldType.booleanMatches || []).find((key) => key.toLowerCase() === curr?.toLowerCase()); const booleanMatch = field.fieldType.booleanMatches?.[booleanMatchKey]; acc[column.value] = booleanMatchKey ? booleanMatch : normalizeCheckboxValue(curr); } else { acc[column.value] = normalizeCheckboxValue(curr); } return acc; } case ColumnType.matched: { acc[column.value] = curr === "" ? undefined : curr; return acc; } case ColumnType.matchedSelect: case ColumnType.matchedSelectOptions: { const matchedOption = column.matchedOptions.find(({ entry, value }) => entry === curr); acc[column.value] = matchedOption?.value || undefined; return acc; } case ColumnType.empty: case ColumnType.ignored: { return acc; } default: return acc; } }, {})); export { normalizeTableData };