From 6eef0f65c7ac523a5d466f16a751752771044bf4 Mon Sep 17 00:00:00 2001 From: tesaide Date: Tue, 9 Dec 2025 15:26:52 +0200 Subject: [PATCH 1/4] fix: corrected import export logic --- index.ts | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/index.ts b/index.ts index aee0237..4f56bc2 100644 --- a/index.ts +++ b/index.ts @@ -128,6 +128,27 @@ export default class ImportExport extends AdminForthPlugin { let updatedCount = 0; await Promise.all(rows.map(async (row) => { + this.resourceConfig.columns.forEach((col) => { + if (col.isArray?.enabled) { + const val = row[col.name]; + if (typeof val === 'string') { + if (!val.trim()) { + row[col.name] = []; + } else { + if (val.trim().startsWith('[') && val.trim().endsWith(']')) { + try { row[col.name] = JSON.parse(val); } + catch (e) { row[col.name] = val.split(',').map(s => s.trim()); } + } else { + row[col.name] = val.split(',').map(s => s.trim()); + } + } + } else if (typeof val === 'number') { + row[col.name] = [val.toString()]; + } else if (val === null || val === undefined) { + row[col.name] = []; + } + } + }); try { if (primaryKeyColumn && row[primaryKeyColumn.name]) { const existingRecord = await this.adminforth.resource(this.resourceConfig.resourceId) @@ -186,7 +207,30 @@ export default class ImportExport extends AdminForthPlugin { let importedCount = 0; + await Promise.all(rows.map(async (row) => { + this.resourceConfig.columns.forEach((col) => { + if (col.isArray?.enabled) { + const val = row[col.name]; + if (typeof val === 'string') { + if (!val.trim()) { + row[col.name] = []; + } else { + if (val.trim().startsWith('[') && val.trim().endsWith(']')) { + try { row[col.name] = JSON.parse(val); } + catch (e) { row[col.name] = val.split(',').map(s => s.trim()); } + } else { + row[col.name] = val.split(',').map(s => s.trim()); + } + } + } else if (typeof val === 'number') { + row[col.name] = [val.toString()]; + } else if (val === null || val === undefined) { + row[col.name] = []; + } + } + }); + try { if (primaryKeyColumn && row[primaryKeyColumn.name]) { const existingRecord = await this.adminforth.resource(this.resourceConfig.resourceId) From 3fdf3810fe20e50431828174d37b80ff2a258151 Mon Sep 17 00:00:00 2001 From: tesaide Date: Tue, 9 Dec 2025 16:24:32 +0200 Subject: [PATCH 2/4] fix: corrected import export logic --- index.ts | 68 ++++++++++++++++++++++---------------------------------- 1 file changed, 26 insertions(+), 42 deletions(-) diff --git a/index.ts b/index.ts index 4f56bc2..1d74b28 100644 --- a/index.ts +++ b/index.ts @@ -48,6 +48,30 @@ export default class ImportExport extends AdminForthPlugin { // Needed if plugin can have multiple instances on one resource return `${this.pluginInstanceId}`; } + fixArrayFields(row: any) { + this.resourceConfig.columns.forEach((col) => { + if (col.isArray?.enabled) { + const val = row[col.name]; + + if (typeof val === 'string') { + if (!val.trim()) { + row[col.name] = []; + } else { + if (val.trim().startsWith('[') && val.trim().endsWith(']')) { + try { row[col.name] = JSON.parse(val); } + catch (e) { row[col.name] = val.split(',').map(s => s.trim()); } + } else { + row[col.name] = val.split(',').map(s => s.trim()); + } + } + } else if (typeof val === 'number') { + row[col.name] = [val.toString()]; + } else if (val === null || val === undefined) { + row[col.name] = []; + } + } + }); + } setupEndpoints(server: IHttpServer) { server.endpoint({ @@ -128,27 +152,7 @@ export default class ImportExport extends AdminForthPlugin { let updatedCount = 0; await Promise.all(rows.map(async (row) => { - this.resourceConfig.columns.forEach((col) => { - if (col.isArray?.enabled) { - const val = row[col.name]; - if (typeof val === 'string') { - if (!val.trim()) { - row[col.name] = []; - } else { - if (val.trim().startsWith('[') && val.trim().endsWith(']')) { - try { row[col.name] = JSON.parse(val); } - catch (e) { row[col.name] = val.split(',').map(s => s.trim()); } - } else { - row[col.name] = val.split(',').map(s => s.trim()); - } - } - } else if (typeof val === 'number') { - row[col.name] = [val.toString()]; - } else if (val === null || val === undefined) { - row[col.name] = []; - } - } - }); + this.fixArrayFields(row); try { if (primaryKeyColumn && row[primaryKeyColumn.name]) { const existingRecord = await this.adminforth.resource(this.resourceConfig.resourceId) @@ -209,27 +213,7 @@ export default class ImportExport extends AdminForthPlugin { await Promise.all(rows.map(async (row) => { - this.resourceConfig.columns.forEach((col) => { - if (col.isArray?.enabled) { - const val = row[col.name]; - if (typeof val === 'string') { - if (!val.trim()) { - row[col.name] = []; - } else { - if (val.trim().startsWith('[') && val.trim().endsWith(']')) { - try { row[col.name] = JSON.parse(val); } - catch (e) { row[col.name] = val.split(',').map(s => s.trim()); } - } else { - row[col.name] = val.split(',').map(s => s.trim()); - } - } - } else if (typeof val === 'number') { - row[col.name] = [val.toString()]; - } else if (val === null || val === undefined) { - row[col.name] = []; - } - } - }); + this.fixArrayFields(row); try { if (primaryKeyColumn && row[primaryKeyColumn.name]) { From 10526f0621104fd32e8986c746d9ade8d80bd3db Mon Sep 17 00:00:00 2001 From: tesaide Date: Wed, 10 Dec 2025 12:11:00 +0200 Subject: [PATCH 3/4] fix: apply DRY to array --- index.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/index.ts b/index.ts index 1d74b28..039a6c6 100644 --- a/index.ts +++ b/index.ts @@ -57,10 +57,16 @@ export default class ImportExport extends AdminForthPlugin { if (!val.trim()) { row[col.name] = []; } else { + let useCommaParsing = false; + if (val.trim().startsWith('[') && val.trim().endsWith(']')) { try { row[col.name] = JSON.parse(val); } - catch (e) { row[col.name] = val.split(',').map(s => s.trim()); } + catch (e) { useCommaParsing = true; } } else { + useCommaParsing = true; + } + + if (useCommaParsing) { row[col.name] = val.split(',').map(s => s.trim()); } } From ce7126ddedd2695fa3eb5ec7251ab57017e7ba95 Mon Sep 17 00:00:00 2001 From: tesaide Date: Thu, 11 Dec 2025 13:40:22 +0200 Subject: [PATCH 4/4] fix: import and clear code --- index.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/index.ts b/index.ts index 039a6c6..69c69b9 100644 --- a/index.ts +++ b/index.ts @@ -57,7 +57,7 @@ export default class ImportExport extends AdminForthPlugin { if (!val.trim()) { row[col.name] = []; } else { - let useCommaParsing = false; + let useCommaParsing = false; if (val.trim().startsWith('[') && val.trim().endsWith(']')) { try { row[col.name] = JSON.parse(val); } @@ -70,8 +70,6 @@ export default class ImportExport extends AdminForthPlugin { row[col.name] = val.split(',').map(s => s.trim()); } } - } else if (typeof val === 'number') { - row[col.name] = [val.toString()]; } else if (val === null || val === undefined) { row[col.name] = []; }