Skip to content

Commit 3e29e58

Browse files
authored
Merge pull request #2962 from appwrite/fix/edit-related-request-loop
fix(console): stop related row request loop and correct load order
2 parents b0553df + b828cef commit 3e29e58

3 files changed

Lines changed: 57 additions & 55 deletions

File tree

src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+layout.svelte

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -529,11 +529,13 @@
529529
disabled: editRelatedRowDisabled,
530530
onClick: async () => await editRelatedRow?.update()
531531
}}>
532-
<EditRelatedRow
533-
bind:this={editRelatedRow}
534-
rows={$databaseRelatedRowSheetOptions.rows}
535-
tableId={$databaseRelatedRowSheetOptions.tableId}
536-
bind:disabledState={editRelatedRowDisabled} />
532+
{#if $databaseRelatedRowSheetOptions.show && $databaseRelatedRowSheetOptions.tableId && $databaseRelatedRowSheetOptions.rows != null}
533+
<EditRelatedRow
534+
bind:this={editRelatedRow}
535+
rows={$databaseRelatedRowSheetOptions.rows}
536+
tableId={$databaseRelatedRowSheetOptions.tableId}
537+
bind:disabledState={editRelatedRowDisabled} />
538+
{/if}
537539
</SideSheet>
538540

539541
<SideSheet

src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/editRelated.svelte

Lines changed: 19 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,12 @@
99
import { Dependencies } from '$lib/constants';
1010
import { invalidate } from '$app/navigation';
1111
import { type Columns, PROHIBITED_ROW_KEYS } from '../store';
12-
import ColumnItem from './columns/columnItem.svelte';
12+
import RelatedRowColumns from './relatedRowColumns.svelte';
1313
import { buildWildcardColumnsQuery, isRelationship, isRelationshipToMany } from './store';
1414
import { Accordion, Layout, Skeleton } from '@appwrite.io/pink-svelte';
1515
import { deepClone } from '$lib/helpers/object';
1616
import { preferences } from '$lib/stores/preferences';
17-
import {
18-
type Entity,
19-
type Field,
20-
getTerminologies,
21-
toRelationalField
22-
} from '$database/(entity)';
17+
import { type Entity, type Field, getTerminologies } from '$database/(entity)';
2318
import { onMount } from 'svelte';
2419
2520
const databaseId = page.params.database;
@@ -63,6 +58,12 @@
6358
6459
try {
6560
if (isSingleStore()) {
61+
// Load schema first so relationship wildcard selects are correct.
62+
relatedTable = await databaseSdk.getEntity({
63+
databaseId,
64+
entityId: tableId
65+
});
66+
6667
const fetchedRow = await sdk
6768
.forProject(page.params.region, page.params.project)
6869
.tablesDB.getRow({
@@ -72,12 +73,6 @@
7273
queries: buildWildcardColumnsQuery(relatedTable)
7374
});
7475
75-
// cannot use page.data.entities!
76-
relatedTable = await databaseSdk.getEntity({
77-
databaseId,
78-
entityId: tableId
79-
});
80-
8176
fetchedRows = [fetchedRow];
8277
} else {
8378
let fetchedTables = [];
@@ -314,11 +309,6 @@
314309
firstInput?.focus({ preventScroll: true });
315310
}
316311
317-
function getStore(id: string) {
318-
const rowInstance = workData.get(id);
319-
return get(rowInstance);
320-
}
321-
322312
function handleFormUpdate(rowId: string) {
323313
return (updatedFormValues: object) => {
324314
const workStore = workData.get(rowId);
@@ -343,14 +333,6 @@
343333
return `${values.join(' | ')} (...${row.$id.slice(-5)})`;
344334
}
345335
346-
$effect(() => {
347-
if (rows && tableId) {
348-
loadRelatedRow().then(() => {
349-
focusFirstInput();
350-
});
351-
}
352-
});
353-
354336
$effect(() => {
355337
disabledState = calculateAndCompareDisabledState();
356338
});
@@ -375,40 +357,27 @@
375357

376358
<div bind:this={columnFormWrapper}>
377359
{#if fetchedRows.length === 1}
378-
{@const workStore = getStore(fetchedRows[0].$id)}
360+
{@const workStore = workData.get(fetchedRows[0].$id)}
379361
{#if workStore}
380-
<Layout.Stack direction="column" gap="l">
381-
{#each columnsToRender as column}
382-
{@const label = column.key}
383-
<ColumnItem
384-
{label}
385-
editing
386-
formValues={workStore}
387-
column={toRelationalField(column)}
388-
onUpdateFormValues={handleFormUpdate(fetchedRows[0].$id)} />
389-
{/each}
390-
</Layout.Stack>
362+
<RelatedRowColumns
363+
{workStore}
364+
{columnsToRender}
365+
onUpdateFormValues={handleFormUpdate(fetchedRows[0].$id)} />
391366
{/if}
392367
{:else}
393368
<Layout.Stack direction="column" gap="m" class="column-item-stack">
394369
<Layout.Stack direction="column" gap="xs" class="column-item-stack">
395370
{#each fetchedRows as row, index (row.$id)}
396-
{@const workStore = getStore(row.$id)}
371+
{@const workStore = workData.get(row.$id)}
397372
<Accordion
398373
title={getAccordionTitle(row)}
399374
hideDivider={index >= fetchedRows.length - 1}>
400375
{#if workStore}
401-
<Layout.Stack direction="column" gap="m">
402-
{#each columnsToRender as column}
403-
{@const label = column.key}
404-
<ColumnItem
405-
{label}
406-
editing
407-
formValues={workStore}
408-
column={toRelationalField(column)}
409-
onUpdateFormValues={handleFormUpdate(row.$id)} />
410-
{/each}
411-
</Layout.Stack>
376+
<RelatedRowColumns
377+
{workStore}
378+
{columnsToRender}
379+
gap="m"
380+
onUpdateFormValues={handleFormUpdate(row.$id)} />
412381
{/if}
413382
</Accordion>
414383
{/each}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<script lang="ts">
2+
import { Layout } from '@appwrite.io/pink-svelte';
3+
import ColumnItem from './columns/columnItem.svelte';
4+
import { toRelationalField, type Field } from '$database/(entity)';
5+
import type { Writable } from 'svelte/store';
6+
import type { Models } from '@appwrite.io/console';
7+
8+
let {
9+
workStore,
10+
columnsToRender,
11+
onUpdateFormValues,
12+
gap = 'l'
13+
}: {
14+
workStore: Writable<Models.Row>;
15+
columnsToRender: Field[];
16+
onUpdateFormValues: (formValues: object) => void;
17+
gap?: 'l' | 'm';
18+
} = $props();
19+
</script>
20+
21+
<Layout.Stack direction="column" {gap}>
22+
{#each columnsToRender as column}
23+
{@const label = column.key}
24+
<ColumnItem
25+
{label}
26+
editing
27+
formValues={$workStore}
28+
column={toRelationalField(column)}
29+
{onUpdateFormValues} />
30+
{/each}
31+
</Layout.Stack>

0 commit comments

Comments
 (0)