From d3c17308ab71e0b7af055307497f650e9478270d Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 30 Mar 2023 08:53:09 +0100 Subject: [PATCH] Fix one-to-many relationships allowing selecting multiple rows on both sides --- .../sheet/SheetCreateColumnModal.svelte | 4 +++- .../modals/sheet/SheetEditColumnModal.svelte | 2 +- .../sheet/cells/RelationshipCell.svelte | 23 ++++++++++++++----- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/packages/builder/src/components/backend/DataTable/modals/sheet/SheetCreateColumnModal.svelte b/packages/builder/src/components/backend/DataTable/modals/sheet/SheetCreateColumnModal.svelte index 9d2614e0c8..a998974e9c 100644 --- a/packages/builder/src/components/backend/DataTable/modals/sheet/SheetCreateColumnModal.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/sheet/SheetCreateColumnModal.svelte @@ -11,5 +11,7 @@ - rows.actions.refreshSchema()} /> + rows.actions.refreshTableDefinition()} + /> diff --git a/packages/builder/src/components/backend/DataTable/modals/sheet/SheetEditColumnModal.svelte b/packages/builder/src/components/backend/DataTable/modals/sheet/SheetEditColumnModal.svelte index 2a9c9dba36..18e3538ad0 100644 --- a/packages/builder/src/components/backend/DataTable/modals/sheet/SheetEditColumnModal.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/sheet/SheetEditColumnModal.svelte @@ -9,7 +9,7 @@ let editColumnModal const updateColumns = () => { - rows.actions.refreshSchema() + rows.actions.refreshTableDefinition() } const editColumn = column => { diff --git a/packages/frontend-core/src/components/sheet/cells/RelationshipCell.svelte b/packages/frontend-core/src/components/sheet/cells/RelationshipCell.svelte index c00f4e199f..34fd07210e 100644 --- a/packages/frontend-core/src/components/sheet/cells/RelationshipCell.svelte +++ b/packages/frontend-core/src/components/sheet/cells/RelationshipCell.svelte @@ -11,6 +11,8 @@ export let schema export let onChange + $: selected && console.log(schema.relationshipType) + const { API } = getContext("sheet") let isOpen = false @@ -22,6 +24,7 @@ let candidateIndex let lastSearchId + $: oneRowOnly = schema?.relationshipType === "one-to-many" $: editable = selected && !readonly $: results = getResults(searchResults, value) $: lookupMap = buildLookupMap(value, isOpen) @@ -166,16 +169,24 @@ if (value?.some(x => x._id === row._id)) { // If the row is already included, remove it and update the candidate // row to be the the same position if possible - const newValue = value.filter(x => x._id !== row._id) - if (!newValue.length) { - candidateIndex = null + if (oneRowOnly) { + await onChange([]) } else { - candidateIndex = Math.min(candidateIndex, newValue.length - 1) + const newValue = value.filter(x => x._id !== row._id) + if (!newValue.length) { + candidateIndex = null + } else { + candidateIndex = Math.min(candidateIndex, newValue.length - 1) + } + await onChange(newValue) } - await onChange(newValue) } else { // If we don't have this row, include it - await onChange(sortRows([...(value || []), row])) + if (oneRowOnly) { + await onChange([row]) + } else { + await onChange(sortRows([...(value || []), row])) + } candidateIndex = null }