Handle single

This commit is contained in:
Adria Navarro 2024-09-10 13:48:58 +02:00
parent 18084b16f7
commit b9c3838312
1 changed files with 44 additions and 17 deletions

View File

@ -5,8 +5,7 @@ import { getCellID, parseCellID } from "../lib/utils"
import { tick } from "svelte" import { tick } from "svelte"
import { Helpers } from "@budibase/bbui" import { Helpers } from "@budibase/bbui"
import { sleep } from "../../../utils/utils" import { sleep } from "../../../utils/utils"
import { FieldType } from "@budibase/types" import { FieldType, RelationshipType } from "@budibase/types"
import { processStringSync } from "@budibase/string-templates"
export const createStores = () => { export const createStores = () => {
const rows = writable([]) const rows = writable([])
@ -42,26 +41,50 @@ export const createStores = () => {
} }
} }
function getRelatedTableValues(row, field) { function getRelatedTableValues(row, field, isSingle) {
let result = "" let result = "Not rendable"
const separator = ", " try {
if (isSingle) {
result = row[field.related.field]?.[0]?.[field.related.subField]
switch (field.type) { switch (field.type) {
case FieldType.STRING: case FieldType.JSON:
case FieldType.NUMBER: case FieldType.SIGNATURE_SINGLE:
default: case FieldType.ATTACHMENT_SINGLE:
result = processStringSync( case FieldType.ATTACHMENTS:
`{{ join (pluck ${field.related.field} '${field.related.subField}') '${separator}' }}`, case FieldType.BB_REFERENCE:
row result = JSON.parse(result)
)
break break
case FieldType.ARRAY:
case FieldType.OPTIONS: case FieldType.LINK:
console.error(`${field.type} type is not rendable`)
}
} else {
// TODO: check all types
result = Array.from( result = Array.from(
new Set( new Set(
row[field.related.field].flatMap(r => r[field.related.subField]) row[field.related.field].flatMap(r => r[field.related.subField])
) )
) )
switch (field.type) {
case FieldType.STRING:
case FieldType.NUMBER:
case FieldType.BIGINT:
result = result.join(", ")
break
case FieldType.JSON:
case FieldType.ATTACHMENTS:
case FieldType.SIGNATURE_SINGLE:
result = result.map(JSON.parse)
break
case FieldType.LINK:
console.error(`${field.type} type is not rendable`)
}
}
} catch (e) {
console.error(e.message)
} }
return result return result
@ -81,7 +104,11 @@ export const deriveStores = context => {
...row, ...row,
__idx: idx, __idx: idx,
...customColumns.reduce((acc, c) => { ...customColumns.reduce((acc, c) => {
acc[c.name] = getRelatedTableValues(row, c) const isSingle =
$enrichedSchema[c.related.field].relationshipType ===
RelationshipType.ONE_TO_MANY
acc[c.name] = getRelatedTableValues(row, c, isSingle)
return acc return acc
}, {}), }, {}),
})) }))