diff --git a/src/CsvEntry/CsvEntryModels.ts b/src/CsvEntry/CsvEntryModels.ts index 2e5f55a5..7dc2bd1e 100644 --- a/src/CsvEntry/CsvEntryModels.ts +++ b/src/CsvEntry/CsvEntryModels.ts @@ -4,43 +4,89 @@ export interface CsvRowModel extends ItemRevisionModel { index: number; } -export function parseCsv(csvValue?: string, namespaces?: NamespaceModel[]): CsvRowModel[] { - const data: CsvRowModel[] = []; +export function parseCsv( + csvValue?: string, + namespaces?: NamespaceModel[] +): CsvRowModel[] { + let data: CsvRowModel[] = []; - if (csvValue) { + if (csvValue && namespaces) { const lines = csvValue.split("\n"); - let index = 0; - - for (const line of lines) { - const values = line.split(","); - - const row: CsvRowModel = { - index, - namespace: values[0] - }; - - if (values.length === 4) { - row.hasBankKey = true; - row.bankKey = +values[1]; - row.itemKey = +values[2]; - row.section = values[3]; - } else if (values.length === 3) { - row.hasBankKey = false; - row.bankKey = getBankKeyByNamespace(row.namespace, namespaces); - row.itemKey = +values[1]; - row.section = values[2]; - } - - data.push(row); - index = index + 1; + data = parseLines(lines, namespaces); + } + + return data; +} + +function parseLines(lines: string[], namespaces: NamespaceModel[]) { + const data: CsvRowModel[] = []; + let index = 0; + + for (const line of lines) { + const values = line.split(","); + + const row: CsvRowModel = { index }; + // row.namespace = values[0]; + setNamespace(row, values[0], namespaces); + + if (values.length === 4) { + setCsvRowWithBankKey(row, values); + } else if (values.length === 3) { + setCsvRowWithoutBankKey(row, values, namespaces); + } else { + continue; } + + data.push(row); + index = index + 1; } return data; } -function getBankKeyByNamespace(namespace?: string, namespaces?: NamespaceModel[]): number | undefined { +function setNamespace( + row: CsvRowModel, + namespace: string, + namespaces: NamespaceModel[] +) { + const matchedNamespace: NamespaceModel = namespaces.find( + s => s.name === namespace + ); + if (matchedNamespace) { + row.namespace = matchedNamespace.name; + } +} + +function setCsvRowWithBankKey(row: CsvRowModel, values: string[]) { + row.hasBankKey = true; + row.bankKey = +values[1]; + row.itemKey = +values[2]; + row.section = values[3]; +} + +function setCsvRowWithoutBankKey( + row: CsvRowModel, + values: string[], + namespaces: NamespaceModel[] +) { + row.hasBankKey = false; + row.bankKey = getBankKeyByNamespace(row.namespace, namespaces); + row.itemKey = +values[1]; + row.section = values[2]; +} + +function getBankKeyByNamespace( + namespace?: string, + namespaces?: NamespaceModel[] +): number | undefined { + let bankKey: number | undefined; + if (namespaces) { - return namespaces.filter(s => s.name === namespace)[0].bankKey; + const matchedNamespace: NamespaceModel = namespaces.find( + s => s.name === namespace + ); + if (matchedNamespace) bankKey = matchedNamespace.bankKey; } -} \ No newline at end of file + + return bankKey; +}