From 26bea0dd51edb2220e6fbbd14ae2ef79a9e6d67a Mon Sep 17 00:00:00 2001 From: Mark Fayngersh Date: Mon, 15 Jul 2024 11:06:18 -0400 Subject: [PATCH] filterState, sortState, and object assignment --- .changeset/violet-donkeys-train.md | 5 +++++ src/lib/DataTable.svelte.ts | 28 +++++++++++++++++----------- 2 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 .changeset/violet-donkeys-train.md diff --git a/.changeset/violet-donkeys-train.md b/.changeset/violet-donkeys-train.md new file mode 100644 index 0000000..bc491bf --- /dev/null +++ b/.changeset/violet-donkeys-train.md @@ -0,0 +1,5 @@ +--- +'@careswitch/svelte-data-table': minor +--- + +Rename `filters` to `filterState`; introduce `sortState`, refactor filter mutators to reassign object diff --git a/src/lib/DataTable.svelte.ts b/src/lib/DataTable.svelte.ts index ed15f7f..deb2300 100644 --- a/src/lib/DataTable.svelte.ts +++ b/src/lib/DataTable.svelte.ts @@ -180,10 +180,18 @@ export class DataTable { * The current filter state for all columns. * @returns {{ [K in keyof T]: Set }} An object representing the filter state that maps column keys to filter values. */ - get filters() { + get filterState() { return this.#filterState; } + /** + * The current sort state for the table. + * @returns {{ column: keyof T | null; direction: SortDirection }} An object representing the sort state with a column key and direction. + */ + get sortState() { + return this.#sortState; + } + /** * The total number of pages based on the current filters and page size. * @returns {number} The total number of pages. @@ -293,7 +301,7 @@ export class DataTable { */ setFilter = (column: K, values: any[]) => { this.#isFilterDirty = true; - this.#filterState[column] = new Set(values); + this.#filterState = { ...this.#filterState, [column]: new Set(values) }; this.#currentPage = 1; }; @@ -303,7 +311,7 @@ export class DataTable { */ clearFilter = (column: keyof T) => { this.#isFilterDirty = true; - this.#filterState[column] = new Set(); + this.#filterState = { ...this.#filterState, [column]: new Set() }; this.#currentPage = 1; }; @@ -315,15 +323,13 @@ export class DataTable { */ toggleFilter = (column: K, value: any) => { this.#isFilterDirty = true; - const currentFilter = this.#filterState[column]; - - if (currentFilter.has(value)) { - currentFilter.delete(value); - } else { - currentFilter.add(value); - } + this.#filterState = { + ...this.#filterState, + [column]: this.isFilterActive(column, value) + ? new Set([...this.#filterState[column]].filter((v) => v !== value)) + : new Set([...this.#filterState[column], value]) + }; - this.#filterState[column] = new Set(currentFilter); this.#currentPage = 1; };