Make relationship inputs strictly optional

This commit is contained in:
kylewhirl
2026-01-08 22:11:38 -10:00
parent ac756b4802
commit a30efd64f8
3 changed files with 9 additions and 38 deletions
@@ -297,7 +297,7 @@
<Layout.Stack direction="row">
<InputSelect
{id}
required={column.required}
required={column.required === true}
{options}
bind:value={relatedList[0]}
placeholder={`Select ${column.key}`}
@@ -316,7 +316,7 @@
<Layout.Stack direction="row">
<InputSelect
{id}
required={column.required}
required={column.required === true}
autofocus={limited}
options={getAvailableOptions(actualIndex)}
bind:value={relatedList[actualIndex]}
@@ -346,7 +346,7 @@
<Layout.Stack direction="row">
<InputSelect
{id}
required={column.required}
required={column.required === true}
options={getAvailableOptions(i)}
bind:value={item}
on:change={updateRelatedList}
@@ -376,7 +376,7 @@
<Layout.Stack direction="row">
<Input.ComboBox
{id}
required={column.required}
required={column.required === true}
on:change={addNewItem}
bind:value={newItemValue}
options={availableOptions}
@@ -417,7 +417,7 @@
{options}
autofocus={limited}
bind:value={newItemValue}
required={column.required}
required={column.required === true}
label={limited ? undefined : label}
placeholder={`Select ${column.key}`}
noResultsOption={searchNoResultsOption}
@@ -444,7 +444,7 @@
{options}
autofocus={limited}
bind:value={newItemValue}
required={column.required}
required={column.required === true}
label={limited ? undefined : label}
disabled={noOptions}
placeholder={noOptions ? 'No related items available' : `Select ${column.key}`}
@@ -118,10 +118,6 @@
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<string, unknown>) =>
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<string, unknown>)
: { ...$work };
await sdk.forProject(page.params.region, page.params.project).tablesDB.updateRow({
databaseId,
tableId,
rowId: row.$id,
data,
data: $work,
permissions: $work.$permissions
});
@@ -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<string, unknown>);
}
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
});
});