From a8f4ae87e1b5ecba91323b89a357a14a68c28070 Mon Sep 17 00:00:00 2001 From: kylewhirl Date: Thu, 8 Jan 2026 20:25:30 -1000 Subject: [PATCH 1/5] Fix null relationship update comparison --- .../database-[database]/table-[table]/rows/edit.svelte | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/edit.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/edit.svelte index bfa9e7b4c..3f1faea38 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/edit.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/edit.svelte @@ -118,6 +118,10 @@ if (isRelationship(column)) { if (isRelationshipToMany(column as Models.ColumnRelationship)) { + if (!Array.isArray(workColumn) || !Array.isArray(currentColumn)) { + return workColumn === currentColumn; + } + const workIds = workColumn.map((doc: string | Record) => typeof doc === 'string' ? doc : doc.$id ); From ac756b480240f42beb8b0460938c20c410f9c421 Mon Sep 17 00:00:00 2001 From: kylewhirl Date: Thu, 8 Jan 2026 20:29:56 -1000 Subject: [PATCH 2/5] Fix relationship required and partial update --- .../rows/columns/types/relationship.svelte | 8 ++++---- .../table-[table]/rows/edit.svelte | 11 +++++++++- .../table-[table]/rows/editRelated.svelte | 20 +++++++++++++++++-- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/relationship.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/relationship.svelte index f790579c5..fccc94df4 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/relationship.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/relationship.svelte @@ -297,7 +297,7 @@ { + if (!compareColumns(column, $work, row)) { + acc[column.key] = $work?.[column.key]; + } + return acc; + }, {} as Record) + : { ...$work }; + await sdk.forProject(page.params.region, page.params.project).tablesDB.updateRow({ databaseId, tableId, rowId: row.$id, - data: $work, + data, permissions: $work.$permissions }); diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte index 501149348..12abfdc5d 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte @@ -213,6 +213,19 @@ return workColumn === currentColumn; } + function buildUpdateData(workValue: Models.Row, originalRow: Models.Row) { + if (!relatedTable?.columns?.length) { + return { ...workValue }; + } + + return relatedTable.columns.reduce((acc, column) => { + if (!compareColumns(column, workValue, originalRow)) { + acc[column.key] = workValue?.[column.key]; + } + return acc; + }, {} as Record); + } + function calculateAndCompareDisabledState() { if (!relatedTable?.columns?.length || !fetchedRows.length) return true; @@ -245,11 +258,13 @@ const work = workData.get(rowId); const workValue = get(work); + const originalRow = fetchedRows.find((row) => row.$id === rowId); + const data = originalRow ? buildUpdateData(workValue, originalRow) : { ...workValue }; await sdk.forProject(page.params.region, page.params.project).tablesDB.updateRow({ databaseId, tableId: relatedTable.$id, rowId: rowId, - data: workValue, + data, permissions: workValue.$permissions }); @@ -263,13 +278,14 @@ if (!work) return; const workValue = get(work); + const data = buildUpdateData(workValue, row); return sdk .forProject(page.params.region, page.params.project) .tablesDB.updateRow({ databaseId, tableId: relatedTable.$id, rowId: row.$id, - data: workValue, + data, permissions: workValue.$permissions }); }); From a30efd64f88b0e23985286820ee31a244fcf83df Mon Sep 17 00:00:00 2001 From: kylewhirl Date: Thu, 8 Jan 2026 22:11:38 -1000 Subject: [PATCH 3/5] Make relationship inputs strictly optional --- .../rows/columns/types/relationship.svelte | 12 +++++------ .../table-[table]/rows/edit.svelte | 15 +------------- .../table-[table]/rows/editRelated.svelte | 20 ++----------------- 3 files changed, 9 insertions(+), 38 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/relationship.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/relationship.svelte index fccc94df4..9cc4bd868 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/relationship.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/relationship.svelte @@ -297,7 +297,7 @@ ) => typeof doc === 'string' ? doc : doc.$id ); @@ -146,20 +142,11 @@ if (!row || !work) return; try { - const data = $table?.columns?.length - ? $table.columns.reduce((acc, column) => { - if (!compareColumns(column, $work, row)) { - acc[column.key] = $work?.[column.key]; - } - return acc; - }, {} as Record) - : { ...$work }; - await sdk.forProject(page.params.region, page.params.project).tablesDB.updateRow({ databaseId, tableId, rowId: row.$id, - data, + data: $work, permissions: $work.$permissions }); diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte index 12abfdc5d..501149348 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte @@ -213,19 +213,6 @@ return workColumn === currentColumn; } - function buildUpdateData(workValue: Models.Row, originalRow: Models.Row) { - if (!relatedTable?.columns?.length) { - return { ...workValue }; - } - - return relatedTable.columns.reduce((acc, column) => { - if (!compareColumns(column, workValue, originalRow)) { - acc[column.key] = workValue?.[column.key]; - } - return acc; - }, {} as Record); - } - function calculateAndCompareDisabledState() { if (!relatedTable?.columns?.length || !fetchedRows.length) return true; @@ -258,13 +245,11 @@ const work = workData.get(rowId); const workValue = get(work); - const originalRow = fetchedRows.find((row) => row.$id === rowId); - const data = originalRow ? buildUpdateData(workValue, originalRow) : { ...workValue }; await sdk.forProject(page.params.region, page.params.project).tablesDB.updateRow({ databaseId, tableId: relatedTable.$id, rowId: rowId, - data, + data: workValue, permissions: workValue.$permissions }); @@ -278,14 +263,13 @@ if (!work) return; const workValue = get(work); - const data = buildUpdateData(workValue, row); return sdk .forProject(page.params.region, page.params.project) .tablesDB.updateRow({ databaseId, tableId: relatedTable.$id, rowId: row.$id, - data, + data: workValue, permissions: workValue.$permissions }); }); From 748856ffb1d89b0c8eb4095d08f540975eab2ec4 Mon Sep 17 00:00:00 2001 From: kylewhirl Date: Thu, 8 Jan 2026 22:43:32 -1000 Subject: [PATCH 4/5] Fix spatial JSON parsing in spreadsheet editor --- .../rows/columns/types/string.svelte | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte index 491d8ceda..1e7c5f8d0 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/string.svelte @@ -95,9 +95,20 @@ value = newArray as string[] | number[] | boolean[]; } } else { - const parsedValue = isSpatialType(column) - ? JSON.parse(stringValue) - : parseValue(stringValue); + let parsedValue = parseValue(stringValue); + + if (isSpatialType(column)) { + if (!stringValue?.trim()) { + parsedValue = null; + } else { + try { + parsedValue = JSON.parse(stringValue); + } catch { + return; + } + } + } + if (JSON.stringify(parsedValue) !== JSON.stringify(value)) { value = parsedValue; } From 482ef5ba6c59388b5a2723b80315ddd86256837c Mon Sep 17 00:00:00 2001 From: kylewhirl Date: Fri, 9 Jan 2026 08:17:18 -1000 Subject: [PATCH 5/5] Use column.required directly for relationship inputs --- .../rows/columns/types/relationship.svelte | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/relationship.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/relationship.svelte index 9cc4bd868..fccc94df4 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/relationship.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/columns/types/relationship.svelte @@ -297,7 +297,7 @@