From 94de9d988080c98f4524b00e2a3d8e169772ac12 Mon Sep 17 00:00:00 2001 From: Darshan Date: Thu, 3 Jul 2025 17:04:34 +0530 Subject: [PATCH] fix: display names on relationship component. --- src/lib/components/columnSelector.svelte | 17 +--- .../attributes/relationship.svelte | 21 ++++- .../relationshipsModal.svelte | 6 +- .../settings/displayName.svelte | 82 ++++++++++++------- 4 files changed, 76 insertions(+), 50 deletions(-) diff --git a/src/lib/components/columnSelector.svelte b/src/lib/components/columnSelector.svelte index 4da7f09ff..0813e624e 100644 --- a/src/lib/components/columnSelector.svelte +++ b/src/lib/components/columnSelector.svelte @@ -46,8 +46,8 @@ if (isCustomCollection) { const shownColumns = preferences.getCustomCollectionColumns(collectionId); - columns.set( - $columns.map((column) => { + columns.update((n) => + n.map((column) => { column.hide = shownColumns?.includes(column.id) ?? false; return column; }) @@ -56,8 +56,8 @@ const prefs = preferences.get(page.route); if (prefs?.columns) { - columns.set( - $columns.map((column) => { + columns.update((n) => + n.map((column) => { column.hide = prefs.columns?.includes(column.id) ?? false; return column; }) @@ -65,15 +65,6 @@ } } - columns.subscribe((ctx) => { - const columns = ctx.filter((n) => n.hide === true).map((n) => n.id); - if (isCustomCollection) { - preferences.setCustomCollectionColumns(collectionId, columns); - } else { - preferences.setColumns(columns); - } - }); - calcMaxHeight(); }); diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/relationship.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/relationship.svelte index e63977b1b..b68882015 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/relationship.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/attributes/relationship.svelte @@ -116,9 +116,24 @@ $: totalCount = relatedList?.length ?? 0; $: options = - documentList?.documents?.map((n) => { - const data = displayNames.filter((name) => name !== '$id').map((name) => n?.[name]); - return { value: n.$id, label: n.$id, data }; + documentList?.documents?.map((document) => { + const names = displayNames.filter((name) => name !== '$id'); + const values = names + .map((name) => document?.[name]) + // always supposed to be a string but just being a bit safe here + .filter((value) => value != null && typeof value === 'string' && value !== ''); + + const label = !values.length + ? document.$id + : // values are in `$id (a | b)` format + // previously used to have a `$id a | b`. + `${document.$id} (${values.join(' | ')})`; + + return { + label, + value: document.$id, + data: names.map((name) => document?.[name]) + }; }) ?? []; $: hasItems = totalCount > 0; diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/relationshipsModal.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/relationshipsModal.svelte index aa90532f7..843644ccb 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/relationshipsModal.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/relationshipsModal.svelte @@ -22,15 +22,15 @@ data = null; selectedRelationship = null; } + + $: tableColumns = [{ id: '$id', width: 200 }, ...args.map((id) => ({ id }))]; {#if data?.length} {#snippet children(paginatedItems: typeof data)} - ({ id }))]}> + Document ID {#if args?.length} diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/settings/displayName.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/settings/displayName.svelte index fa36903b7..a7ecfcd57 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/settings/displayName.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/settings/displayName.svelte @@ -15,7 +15,11 @@ import { organization } from '$lib/stores/organization'; const collectionId = page.params.collection; - let names: string[] = [...(preferences.getDisplayNames()?.[collectionId] ?? [])]; + + let names: string[] = $state( + // edge case with `$id`? probably got saved during local tests... + [...(preferences.getDisplayNames()?.[collectionId] ?? [])].filter((name) => name !== '$id') + ); async function updateDisplayName() { try { @@ -36,23 +40,32 @@ } } - $: options = ($attributes as Models.AttributeString[]) - .filter( - (attr) => - attr.type === 'string' && !attr?.array && !names?.some((name) => name === attr.key) - ) - .map((attr) => { - return { + function getValidAttributes() { + return ($attributes as Models.AttributeString[]).filter( + (attr) => attr.type === 'string' && !attr?.array + ); + } + + function getOptions(index: number) { + const current = names?.[index]; + return getValidAttributes() + .filter((attr) => !names?.includes(attr.key) || attr.key === current) + .map((attr) => ({ value: attr.key, label: attr.key - }; - }); + })); + } - $: addAttributeDisabled = names?.length >= 5 || (names?.length && !names[names?.length - 1]); + const addAttributeDisabled = $derived( + names?.length >= 5 || (names?.length && !names[names?.length - 1]) + ); - $: updateBtnDisabled = + const updateBtnDisabled = $derived( !symmetricDifference(names, preferences.getDisplayNames()?.[collectionId] ?? [])?.length || - (names?.length && !last(names)); + (names?.length && !last(names)) + ); + + const hasExhaustedOptions = $derived(getValidAttributes().length === names?.length);
@@ -72,19 +85,22 @@ {#if names?.length} - {#each names as name, i} + {#each names as name, index} + {@const options = getOptions(index)} + {@const disabled = + (!!names[index] && names.length > index + 1) || hasExhaustedOptions} i + 1} - {options} /> + {options} + {disabled} + bind:value={names[index]} + placeholder="Select attribute" /> - + + + {#if !hasExhaustedOptions} +
+ +
+ {/if}