Improve sorting

This commit is contained in:
Andrew Kingston 2023-04-14 08:16:35 +01:00
parent dd24d7d9ee
commit 6f20c3dff8
4 changed files with 26 additions and 9 deletions

View File

@ -163,8 +163,20 @@
> >
Use as display column Use as display column
</MenuItem> </MenuItem>
<MenuItem icon="SortOrderUp" on:click={sortAscending}>Sort A-Z</MenuItem> <MenuItem
<MenuItem icon="SortOrderDown" on:click={sortDescending}>Sort Z-A</MenuItem> icon="SortOrderUp"
on:click={sortAscending}
disabled={column.name === $sort.column && $sort.order === "ascending"}
>
Sort A-Z
</MenuItem>
<MenuItem
icon="SortOrderDown"
on:click={sortDescending}
disabled={column.name === $sort.column && $sort.order === "descending"}
>
Sort Z-A
</MenuItem>
<MenuItem <MenuItem
disabled={!canMoveLeft} disabled={!canMoveLeft}
icon="ChevronDoubleLeft" icon="ChevronDoubleLeft"

View File

@ -76,7 +76,7 @@
<Popover bind:open {anchor} align="left"> <Popover bind:open {anchor} align="left">
<div class="content"> <div class="content">
<Select <Select
placeholder="Default" placeholder={null}
value={$sort.column} value={$sort.column}
options={columnOptions} options={columnOptions}
autoWidth autoWidth

View File

@ -192,7 +192,7 @@
border-bottom: 2px solid var(--spectrum-global-color-gray-200); border-bottom: 2px solid var(--spectrum-global-color-gray-200);
padding: var(--cell-padding); padding: var(--cell-padding);
gap: var(--cell-spacing); gap: var(--cell-spacing);
background: var(--spectrum-global-color-gray-100); background: var(--background);
} }
.controls-left, .controls-left,
.controls-right { .controls-right {

View File

@ -88,7 +88,6 @@ export const deriveStores = context => {
instanceLoaded.set(false) instanceLoaded.set(false)
// Reset state // Reset state
sort.set(initialSortState)
filter.set([]) filter.set([])
// Create new fetch model // Create new fetch model
@ -110,19 +109,25 @@ export const deriveStores = context => {
// Subscribe to changes of this fetch model // Subscribe to changes of this fetch model
unsubscribe = newFetch.subscribe($fetch => { unsubscribe = newFetch.subscribe($fetch => {
if ($fetch.loaded && !$fetch.loading) { if ($fetch.loaded && !$fetch.loading) {
const $instanceLoaded = get(instanceLoaded)
const resetRows = $fetch.resetKey !== lastResetKey const resetRows = $fetch.resetKey !== lastResetKey
lastResetKey = $fetch.resetKey lastResetKey = $fetch.resetKey
// Reset scroll state when data changes // Reset state properties when dataset changes
if (!get(instanceLoaded)) { if (!$instanceLoaded || resetRows) {
table.set($fetch.definition) table.set($fetch.definition)
sort.set({
column: $fetch.sortColumn,
order: $fetch.sortOrder,
})
}
// Reset scroll state when data changes
if (!$instanceLoaded) {
// Reset both top and left for a new table ID // Reset both top and left for a new table ID
instanceLoaded.set(true) instanceLoaded.set(true)
scroll.set({ top: 0, left: 0 }) scroll.set({ top: 0, left: 0 })
} else if (resetRows) { } else if (resetRows) {
table.set($fetch.definition)
// Only reset top scroll position when resetting rows // Only reset top scroll position when resetting rows
scroll.update(state => ({ ...state, top: 0 })) scroll.update(state => ({ ...state, top: 0 }))
} }