Improve xlsx import (#1271)

* use xlsx

* add existing custom fields to import map

* keep colours of existing custom fields

* use unknown

* fix

* revert

* allow space and upper case

* fix test

* define empty sheet
This commit is contained in:
Alex Christoffer Rasmussen
2024-10-22 19:13:07 +02:00
committed by GitHub
parent 59c1c77d48
commit 42984eed87
8 changed files with 211 additions and 135 deletions
+14 -5
View File
@@ -1,4 +1,5 @@
import {
customFieldLabelToKey,
defaultImportMap,
generateId,
type ImportMap,
@@ -54,18 +55,22 @@ function parseBooleanString(value: unknown): boolean {
return value.toLowerCase() !== 'false';
}
export function getCustomFieldData(importMap: ImportMap): {
export function getCustomFieldData(
importMap: ImportMap,
existingCustomFields: CustomFields,
): {
customFields: CustomFields;
customFieldImportKeys: Record<keyof CustomFields, string>;
} {
const customFields = {};
const customFieldImportKeys = {};
for (const ontimeLabel in importMap.custom) {
const ontimeKey = ontimeLabel.toLowerCase();
const ontimeKey = customFieldLabelToKey(ontimeLabel);
const importLabel = importMap.custom[ontimeLabel].toLowerCase();
const colour = ontimeKey in existingCustomFields ? existingCustomFields[ontimeKey].colour : '';
customFields[ontimeKey] = {
type: 'string',
colour: '',
colour,
label: ontimeLabel,
};
customFieldImportKeys[importLabel] = ontimeKey;
@@ -79,7 +84,11 @@ export function getCustomFieldData(importMap: ImportMap): {
* @param {ImportOptions} options - an object that contains the import map
* @returns {object} - parsed object
*/
export const parseExcel = (excelData: unknown[][], options?: Partial<ImportMap>): ExcelData => {
export const parseExcel = (
excelData: unknown[][],
existingCustomFields: CustomFields,
options?: Partial<ImportMap>,
): ExcelData => {
const rundownMetadata = {};
const importMap: ImportMap = { ...defaultImportMap, ...options };
@@ -89,7 +98,7 @@ export const parseExcel = (excelData: unknown[][], options?: Partial<ImportMap>)
}
}
const { customFields, customFieldImportKeys } = getCustomFieldData(importMap);
const { customFields, customFieldImportKeys } = getCustomFieldData(importMap, existingCustomFields);
const rundown: OntimeRundown = [];
// title stuff: strings