From ab4f399033ebc3adddaad42700de63b9a2bc812e Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 25 Sep 2023 12:23:17 +0200 Subject: [PATCH] Handle sorting --- .../app/forms/RelationshipField.svelte | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/client/src/components/app/forms/RelationshipField.svelte b/packages/client/src/components/app/forms/RelationshipField.svelte index 7104e90493..345a4845cd 100644 --- a/packages/client/src/components/app/forms/RelationshipField.svelte +++ b/packages/client/src/components/app/forms/RelationshipField.svelte @@ -22,6 +22,7 @@ let fieldSchema let tableDefinition let searchTerm + let open $: multiselect = fieldSchema?.relationshipType !== "one-to-many" $: linkedTableId = fieldSchema?.tableId @@ -70,6 +71,26 @@ }, {}), } + $: options = Object.values(optionsObj) + $: { + // We don't want to reorder while the dropdown is open, to avoid UX jumps + if (!open) { + options = options.sort((a, b) => { + const selectedValues = flatten(fieldState?.value) || [] + + const aIsSelected = selectedValues.find(v => v === a._id) + const bIsSelected = selectedValues.find(v => v === b._id) + if (aIsSelected && !bIsSelected) { + return -1 + } else if (!aIsSelected && bIsSelected) { + return 1 + } + + return a[primaryDisplay] > b[primaryDisplay] + }) + } + } + $: fetchRows(searchTerm, primaryDisplay) const fetchRows = (searchTerm, primaryDisplay) => { @@ -145,7 +166,7 @@ {#if fieldState} option._id} {placeholder} - sort bind:searchTerm loading={$fetch.loading} + bind:open /> {/if}