From 4cdec7368403e60a35c8aaf6ce1c90733f1fe1d2 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Thu, 22 Sep 2022 12:26:35 +0530 Subject: [PATCH] fix: import- self link, empty options Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- .../src/lib/meta/api/sync/helpers/job.ts | 51 +++++++++++-------- .../api/sync/helpers/readAndProcessData.ts | 5 ++ 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/packages/nocodb/src/lib/meta/api/sync/helpers/job.ts b/packages/nocodb/src/lib/meta/api/sync/helpers/job.ts index f1b6e295ab..7996419fec 100644 --- a/packages/nocodb/src/lib/meta/api/sync/helpers/job.ts +++ b/packages/nocodb/src/lib/meta/api/sync/helpers/job.ts @@ -16,17 +16,17 @@ import { importData, importLTARData } from './readAndProcessData'; dayjs.extend(utc); const selectColors = { - "blue": "#cfdfff", - "cyan": "#d0f0fd", - "teal": "#c2f5e9", - "green": "#d1f7c4", - "orange": "#fee2d5", - "yellow": "#ffeab6", - "red": "#ffdce5", - "pink": "#ffdaf6", - "purple": "#ede2fe", - "gray": "#eee" -} + blue: '#cfdfff', + cyan: '#d0f0fd', + teal: '#c2f5e9', + green: '#d1f7c4', + orange: '#fee2d5', + yellow: '#ffeab6', + red: '#ffdce5', + pink: '#ffdaf6', + purple: '#ede2fe', + gray: '#eee', +}; export default async ( syncDB: AirtableSyncConfig, @@ -411,13 +411,15 @@ export default async ( // TODO fix record mapping (this causes every record to map first option, we can't handle them using data api as they don't provide option id within data we might instead get the correct mapping from schema file ) let dupNo = 1; const defaultName = (value as any).name; - while (options.find(el => el.title === (value as any).name)) { + while (options.find((el) => el.title === (value as any).name)) { (value as any).name = `${defaultName}_${dupNo++}`; } options.push({ order: order++, title: (value as any).name, - color: selectColors[(value as any).color] ? selectColors[(value as any).color] : null + color: selectColors[(value as any).color] + ? selectColors[(value as any).color] + : null, }); sMap.addToMappingTbl( @@ -538,9 +540,11 @@ export default async ( case 'select': case 'multiSelect': ncCol.colOptions = { - options: [...colOptions.data] - } - ncCol.dtxp = colOptions.data.map(el => `'${el.title}'`).join(','); + options: [...colOptions.data], + }; + // if options are empty, configure '' as default option + ncCol.dtxp = + colOptions.data.map((el) => `'${el.title}'`).join(',') || "''"; break; case undefined: break; @@ -1362,12 +1366,14 @@ export default async ( break; case UITypes.MultiSelect: - rec[key] = value.map((v) => { - if (v === '') { - return 'nc_empty'; - } - return `${v.replace(/,/g, '.')}`; - }).join(','); + rec[key] = value + .map((v) => { + if (v === '') { + return 'nc_empty'; + } + return `${v.replace(/,/g, '.')}`; + }) + .join(','); break; case UITypes.Attachment: @@ -2215,6 +2221,7 @@ export default async ( logDetailed, records: recordsMap[ncTbl.id], atNcAliasRef, + ncLinkMappingTable, }); } diff --git a/packages/nocodb/src/lib/meta/api/sync/helpers/readAndProcessData.ts b/packages/nocodb/src/lib/meta/api/sync/helpers/readAndProcessData.ts index 5f1f52493a..9b605a0349 100644 --- a/packages/nocodb/src/lib/meta/api/sync/helpers/readAndProcessData.ts +++ b/packages/nocodb/src/lib/meta/api/sync/helpers/readAndProcessData.ts @@ -136,6 +136,7 @@ export async function importLTARData({ logBasic = (_str) => {}, records, atNcAliasRef, + ncLinkMappingTable, }: { projectName: string; table: { title?: string; id?: string }; @@ -151,6 +152,7 @@ export async function importLTARData({ [ncTitle: string]: string; }; }; + ncLinkMappingTable: Record>[]; }) { const assocTableMetas: Array<{ modelMeta: { id?: string; title?: string }; @@ -182,6 +184,9 @@ export async function importLTARData({ // skip if already inserted if (colMeta.colOptions.fk_mm_model_id in insertedAssocRef) continue; + // self links: skip if the column under consideration is the add-on column NocoDB creates + if (ncLinkMappingTable.every((a) => a.nc.title !== colMeta.title)) continue; + // mark as inserted insertedAssocRef[colMeta.colOptions.fk_mm_model_id] = true;