Browse Source

Merge pull request #8855 from nocodb/nc-fix/lookup-array-value-bug

Nc fix/lookup array value bug
pull/8870/head
Pranav C 5 months ago committed by GitHub
parent
commit
c00bd0792e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      packages/nc-gui/components/virtual-cell/BelongsTo.vue
  2. 31
      packages/nocodb/src/db/BaseModelSqlv2.ts

2
packages/nc-gui/components/virtual-cell/BelongsTo.vue

@ -88,7 +88,7 @@ watch(value, (next) => {
<div class="flex w-full chips-wrapper items-center" :class="{ active }"> <div class="flex w-full chips-wrapper items-center" :class="{ active }">
<LazyVirtualCellComponentsLinkRecordDropdown v-model:is-open="isOpen"> <LazyVirtualCellComponentsLinkRecordDropdown v-model:is-open="isOpen">
<div class="flex items-center w-full"> <div class="flex items-center w-full">
<div class="nc-cell-field chips flex items-center flex-1 max-w-[calc(100%_-_16px)]"> <div class="nc-cell-field chips flex items-center flex-1" :class="{ 'max-w-[calc(100%_-_16px)]': !isUnderLookup }">
<template v-if="value && (relatedTableDisplayValueProp || relatedTableDisplayValuePropId)"> <template v-if="value && (relatedTableDisplayValueProp || relatedTableDisplayValuePropId)">
<VirtualCellComponentsItemChip <VirtualCellComponentsItemChip
:item="value" :item="value"

31
packages/nocodb/src/db/BaseModelSqlv2.ts

@ -5973,13 +5973,21 @@ class BaseModelSqlv2 {
); );
if (btData) { if (btData) {
if (typeof btData[col.id] === 'object') { if (typeof btData[col.id] === 'object') {
for (const k of Object.keys(btData[col.id])) { for (const k of Object.keys(
Array.isArray(btData[col.id])
? btData[col.id][0] || {}
: btData[col.id],
)) {
const btAlias = idToAliasMap[k]; const btAlias = idToAliasMap[k];
if (!btAlias) { if (!btAlias) {
idToAliasPromiseMap[k] = Column.get(this.context, { idToAliasPromiseMap[k] = Column.get(this.context, {
colId: k, colId: k,
}).then((col) => { })
.then((col) => {
return col.title; return col.title;
})
.catch((e) => {
return Promise.resolve(e);
}); });
} }
} }
@ -5989,8 +5997,12 @@ class BaseModelSqlv2 {
if (!btAlias) { if (!btAlias) {
idToAliasPromiseMap[col.id] = Column.get(this.context, { idToAliasPromiseMap[col.id] = Column.get(this.context, {
colId: col.id, colId: col.id,
}).then((col) => { })
.then((col) => {
return col.title; return col.title;
})
.catch((e) => {
return Promise.resolve(e);
}); });
} }
} }
@ -6002,6 +6014,9 @@ class BaseModelSqlv2 {
for (const k of Object.keys(idToAliasPromiseMap)) { for (const k of Object.keys(idToAliasPromiseMap)) {
idToAliasMap[k] = await idToAliasPromiseMap[k]; idToAliasMap[k] = await idToAliasPromiseMap[k];
if ((idToAliasMap[k] as unknown) instanceof Error) {
throw idToAliasMap[k];
}
} }
data.forEach((item) => { data.forEach((item) => {
@ -6010,13 +6025,19 @@ class BaseModelSqlv2 {
if (alias) { if (alias) {
if (btMap[key]) { if (btMap[key]) {
if (value && typeof value === 'object') { if (value && typeof value === 'object') {
const tempObj = {}; function transformObject(value, idToAliasMap) {
let result = {};
Object.entries(value).forEach(([k, v]) => { Object.entries(value).forEach(([k, v]) => {
const btAlias = idToAliasMap[k]; const btAlias = idToAliasMap[k];
if (btAlias) { if (btAlias) {
tempObj[btAlias] = v; result[btAlias] = v;
} }
}); });
return result;
}
let tempObj = Array.isArray(value) ? value.map(arrVal => transformObject(arrVal, idToAliasMap)) : transformObject(value, idToAliasMap);
item[alias] = tempObj;
item[alias] = tempObj; item[alias] = tempObj;
} else { } else {
item[alias] = value; item[alias] = value;

Loading…
Cancel
Save