|
9 | 9 | import { Dependencies } from '$lib/constants'; |
10 | 10 | import { invalidate } from '$app/navigation'; |
11 | 11 | import { type Columns, PROHIBITED_ROW_KEYS } from '../store'; |
12 | | - import ColumnItem from './columns/columnItem.svelte'; |
| 12 | + import RelatedRowColumns from './relatedRowColumns.svelte'; |
13 | 13 | import { buildWildcardColumnsQuery, isRelationship, isRelationshipToMany } from './store'; |
14 | 14 | import { Accordion, Layout, Skeleton } from '@appwrite.io/pink-svelte'; |
15 | 15 | import { deepClone } from '$lib/helpers/object'; |
16 | 16 | 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)'; |
23 | 18 | import { onMount } from 'svelte'; |
24 | 19 |
|
25 | 20 | const databaseId = page.params.database; |
|
63 | 58 |
|
64 | 59 | try { |
65 | 60 | if (isSingleStore()) { |
| 61 | + // Load schema first so relationship wildcard selects are correct. |
| 62 | + relatedTable = await databaseSdk.getEntity({ |
| 63 | + databaseId, |
| 64 | + entityId: tableId |
| 65 | + }); |
| 66 | +
|
66 | 67 | const fetchedRow = await sdk |
67 | 68 | .forProject(page.params.region, page.params.project) |
68 | 69 | .tablesDB.getRow({ |
|
72 | 73 | queries: buildWildcardColumnsQuery(relatedTable) |
73 | 74 | }); |
74 | 75 |
|
75 | | - // cannot use page.data.entities! |
76 | | - relatedTable = await databaseSdk.getEntity({ |
77 | | - databaseId, |
78 | | - entityId: tableId |
79 | | - }); |
80 | | -
|
81 | 76 | fetchedRows = [fetchedRow]; |
82 | 77 | } else { |
83 | 78 | let fetchedTables = []; |
|
314 | 309 | firstInput?.focus({ preventScroll: true }); |
315 | 310 | } |
316 | 311 |
|
317 | | - function getStore(id: string) { |
318 | | - const rowInstance = workData.get(id); |
319 | | - return get(rowInstance); |
320 | | - } |
321 | | -
|
322 | 312 | function handleFormUpdate(rowId: string) { |
323 | 313 | return (updatedFormValues: object) => { |
324 | 314 | const workStore = workData.get(rowId); |
|
343 | 333 | return `${values.join(' | ')} (...${row.$id.slice(-5)})`; |
344 | 334 | } |
345 | 335 |
|
346 | | - $effect(() => { |
347 | | - if (rows && tableId) { |
348 | | - loadRelatedRow().then(() => { |
349 | | - focusFirstInput(); |
350 | | - }); |
351 | | - } |
352 | | - }); |
353 | | -
|
354 | 336 | $effect(() => { |
355 | 337 | disabledState = calculateAndCompareDisabledState(); |
356 | 338 | }); |
|
375 | 357 |
|
376 | 358 | <div bind:this={columnFormWrapper}> |
377 | 359 | {#if fetchedRows.length === 1} |
378 | | - {@const workStore = getStore(fetchedRows[0].$id)} |
| 360 | + {@const workStore = workData.get(fetchedRows[0].$id)} |
379 | 361 | {#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)} /> |
391 | 366 | {/if} |
392 | 367 | {:else} |
393 | 368 | <Layout.Stack direction="column" gap="m" class="column-item-stack"> |
394 | 369 | <Layout.Stack direction="column" gap="xs" class="column-item-stack"> |
395 | 370 | {#each fetchedRows as row, index (row.$id)} |
396 | | - {@const workStore = getStore(row.$id)} |
| 371 | + {@const workStore = workData.get(row.$id)} |
397 | 372 | <Accordion |
398 | 373 | title={getAccordionTitle(row)} |
399 | 374 | hideDivider={index >= fetchedRows.length - 1}> |
400 | 375 | {#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)} /> |
412 | 381 | {/if} |
413 | 382 | </Accordion> |
414 | 383 | {/each} |
|
0 commit comments