From e72a154524d0a8583717f58617984b1ea46f187b Mon Sep 17 00:00:00 2001 From: Sean Lynch Date: Wed, 20 Mar 2024 08:00:58 -0400 Subject: [PATCH] Simplify Table ordering by passing instance of `tableOrderStore` instead of `orderBy`, `orderDirection`, and handling `on:headerClick`. Also fixes display of clickable headers when order is not used, and improves sort arrow size. --- .changeset/few-brooms-reflect.md | 29 +++++++++++++++++++ packages/svelte-ux/src/lib/actions/table.ts | 3 +- .../svelte-ux/src/lib/components/Table.svelte | 15 +++++----- .../src/lib/components/TableOrderIcon.svelte | 20 +++++++------ .../routes/docs/components/Table/+page.svelte | 8 ++--- 5 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 .changeset/few-brooms-reflect.md diff --git a/.changeset/few-brooms-reflect.md b/.changeset/few-brooms-reflect.md new file mode 100644 index 000000000..78392d1f7 --- /dev/null +++ b/.changeset/few-brooms-reflect.md @@ -0,0 +1,29 @@ +--- +"svelte-ux": minor +--- + +Breaking change: Simplify Table ordering by passing instance of `tableOrderStore` instead of `orderBy`, `orderDirection`, and handling `on:headerClick`. Also fixes display of clickable headers when order is not used, and improves sort arrow size. + +## Before + +```svelte + + + +``` + +## After + +```svelte + + +
+``` \ No newline at end of file diff --git a/packages/svelte-ux/src/lib/actions/table.ts b/packages/svelte-ux/src/lib/actions/table.ts index 38f7c70a4..4a822d38e 100644 --- a/packages/svelte-ux/src/lib/actions/table.ts +++ b/packages/svelte-ux/src/lib/actions/table.ts @@ -33,7 +33,8 @@ export const tableCell: Action = (node, options) tracker.reset(); if (node.nodeName === 'TH') { - if (column.orderBy !== false) { + // Order by + if (order && column.orderBy !== false) { tracker.addClass('cursor-pointer'); if (order) { diff --git a/packages/svelte-ux/src/lib/components/Table.svelte b/packages/svelte-ux/src/lib/components/Table.svelte index 08ba14f0f..ba27e5c9a 100644 --- a/packages/svelte-ux/src/lib/components/Table.svelte +++ b/packages/svelte-ux/src/lib/components/Table.svelte @@ -10,6 +10,7 @@ import TableOrderIcon from './TableOrderIcon.svelte'; import { getComponentClasses } from './theme.js'; import { getSettings } from './settings.js'; + import type { tableOrderStore } from '$lib/index.js'; const dispatch = createEventDispatcher<{ headerClick: { column: ColumnDef }; @@ -18,8 +19,8 @@ export let columns: ColumnDef[] = []; export let data: any[] | null = []; - export let orderBy: string | undefined = undefined; - export let orderDirection: 'asc' | 'desc' | undefined = undefined; + + export let order: ReturnType | undefined = undefined; export let classes: { container?: string; @@ -46,8 +47,6 @@ td?: string; } = {}; - $: order = { by: orderBy, direction: orderDirection }; - $: headers = getHeaders(columns).map((headerRow) => { return headerRow.map((column) => { return { @@ -106,14 +105,16 @@ {#each headerRow ?? [] as column} {/each} diff --git a/packages/svelte-ux/src/lib/components/TableOrderIcon.svelte b/packages/svelte-ux/src/lib/components/TableOrderIcon.svelte index 619c63437..4764fe693 100644 --- a/packages/svelte-ux/src/lib/components/TableOrderIcon.svelte +++ b/packages/svelte-ux/src/lib/components/TableOrderIcon.svelte @@ -1,19 +1,21 @@ -{#if order.by && (order.by === column.value || order.by === column.name || order.by === column.orderBy)} -
- -
+{#if $order.by && ($order.by === column.value || $order.by === column.name || $order.by === column.orderBy)} + + + {/if} diff --git a/packages/svelte-ux/src/routes/docs/components/Table/+page.svelte b/packages/svelte-ux/src/routes/docs/components/Table/+page.svelte index 3b12aa4a0..fc2274a09 100644 --- a/packages/svelte-ux/src/routes/docs/components/Table/+page.svelte +++ b/packages/svelte-ux/src/routes/docs/components/Table/+page.svelte @@ -154,9 +154,7 @@ format: 'integer', }, ]} - orderBy={$order.by} - orderDirection={$order.direction} - on:headerClick={order.onHeaderClick} + {order} /> @@ -192,12 +190,10 @@ format: 'integer', }, ]} - orderBy={$order.by} - orderDirection={$order.direction} + {order} on:headerClick={(e) => { //Switch back to page 1 when sorting pagination.setPage(1); - order.onHeaderClick(e); }} />
dispatch('headerClick', { column })} > {getCellHeader(column)} - + {#if order} + + {/if}