From 390d377ae12f181ab406b9defb118b4366bf4e68 Mon Sep 17 00:00:00 2001 From: johanrd Date: Mon, 25 Aug 2025 11:55:32 +0200 Subject: [PATCH 1/4] make sure generics are passed into helpers --- .../src/plugins/column-reordering/helpers.ts | 29 ++++++++++++------- table/src/plugins/column-reordering/plugin.ts | 7 +++-- table/src/plugins/column-resizing/helpers.ts | 6 ++-- table/src/plugins/column-resizing/plugin.ts | 4 +-- .../src/plugins/column-visibility/helpers.ts | 8 ++--- table/src/plugins/data-sorting/helpers.ts | 16 +++++----- table/src/plugins/data-sorting/plugin.ts | 6 ++-- 7 files changed, 43 insertions(+), 33 deletions(-) diff --git a/table/src/plugins/column-reordering/helpers.ts b/table/src/plugins/column-reordering/helpers.ts index 99fe53e4..1d5990c7 100644 --- a/table/src/plugins/column-reordering/helpers.ts +++ b/table/src/plugins/column-reordering/helpers.ts @@ -8,43 +8,50 @@ import type { Column, Table } from '../../index.ts'; * Move the column one position to the left. * If the column is first, nothing will happen. */ -export const moveLeft = (column: Column) => +export const moveLeft = (column: Column) => meta.forColumn(column, ColumnReordering).moveLeft(); /** * Move the column one position to the right. * If the column is last, nothing will happen. */ -export const moveRight = (column: Column) => +export const moveRight = (column: Column) => meta.forColumn(column, ColumnReordering).moveRight(); /** * Override all column positions at once. */ -export const setColumnOrder = (table: Table, order: ColumnOrder) => { - return meta.forTable(table, ColumnReordering).setOrder(order); -}; +export const setColumnOrder = ( + table: Table, + order: ColumnOrder, +) => meta.forTable(table, ColumnReordering).setOrder(order); /** * Ask if the column cannot move to the left */ -export const cannotMoveLeft = (column: Column) => +export const cannotMoveLeft = (column: Column) => meta.forColumn(column, ColumnReordering).cannotMoveLeft; /** * Ask if the column cannot move to the right */ -export const cannotMoveRight = (column: Column) => +export const cannotMoveRight = (column: Column) => meta.forColumn(column, ColumnReordering).cannotMoveRight; /** * Ask if the column can move to the left + * (If your plugin doesn't expose `canMoveLeft`, use `!cannotMoveLeft`.) */ -export const canMoveLeft = (column: Column) => - meta.forColumn(column, ColumnReordering).cannotMoveLeft; +export const canMoveLeft = (column: Column) => + // Prefer this if available: + // meta.forColumn(column, ColumnReordering).canMoveLeft + !meta.forColumn(column, ColumnReordering).cannotMoveLeft; /** * Ask if the column can move to the right + * (If your plugin doesn't expose `canMoveRight`, use `!cannotMoveRight`.) */ -export const canMoveRight = (column: Column) => - meta.forColumn(column, ColumnReordering).cannotMoveRight; +export const canMoveRight = (column: Column) => + // Prefer this if available: + // meta.forColumn(column, ColumnReordering).canMoveRight + !meta.forColumn(column, ColumnReordering).cannotMoveRight; diff --git a/table/src/plugins/column-reordering/plugin.ts b/table/src/plugins/column-reordering/plugin.ts index 446db9b1..3a32d4a2 100644 --- a/table/src/plugins/column-reordering/plugin.ts +++ b/table/src/plugins/column-reordering/plugin.ts @@ -122,7 +122,7 @@ export class TableMeta { * Get the curret order/position of a column */ @action - getPosition(column: Column) { + getPosition(column: Column) { return this.columnOrder.get(column.key); } @@ -130,7 +130,10 @@ export class TableMeta { * Swap the column with the column at `newPosition` */ @action - setPosition(column: Column, newPosition: number) { + setPosition( + column: Column, + newPosition: number, + ) { return this.columnOrder.swapWith(column.key, newPosition); } diff --git a/table/src/plugins/column-resizing/helpers.ts b/table/src/plugins/column-resizing/helpers.ts index d3b42144..09e0b93e 100644 --- a/table/src/plugins/column-resizing/helpers.ts +++ b/table/src/plugins/column-resizing/helpers.ts @@ -15,13 +15,13 @@ import type { Column } from '../../index.ts'; * be marked as isResizing, because this is a user-scoped question: * "Is the user directly resizing this column?" */ -export const isResizing = (column: Column) => +export const isResizing = (column: Column) => meta.forColumn(column, ColumnResizing).isResizing; /** * Does the column have room to shrink? */ -export const canShrink = (column: Column) => +export const canShrink = (column: Column) => meta.forColumn(column, ColumnResizing).canShrink; /** @@ -31,7 +31,7 @@ export const canShrink = (column: Column) => * - if resizing is enabled for the whole table * - or if we're asking about the first column (resize handles may only be "between" columns) */ -export const hasResizeHandle = (column: Column) => +export const hasResizeHandle = (column: Column) => meta.forColumn(column, ColumnResizing).hasResizeHandle; /** diff --git a/table/src/plugins/column-resizing/plugin.ts b/table/src/plugins/column-resizing/plugin.ts index b4945bcc..847e22fd 100644 --- a/table/src/plugins/column-resizing/plugin.ts +++ b/table/src/plugins/column-resizing/plugin.ts @@ -375,7 +375,7 @@ export class TableMeta { } @action - resizeColumn(column: Column, delta: number) { + resizeColumn(column: Column, delta: number) { if (delta === 0) return; /** @@ -397,7 +397,7 @@ export class TableMeta { const isDraggingRight = delta > 0; const position = this.options?.handlePosition ?? 'left'; - let growingColumn: Column | null | undefined; + let growingColumn: Column | null | undefined; if (position === 'right') { growingColumn = isDraggingRight ? columns.next(column) : column; diff --git a/table/src/plugins/column-visibility/helpers.ts b/table/src/plugins/column-visibility/helpers.ts index c90faf20..93c5c9aa 100644 --- a/table/src/plugins/column-visibility/helpers.ts +++ b/table/src/plugins/column-visibility/helpers.ts @@ -6,23 +6,23 @@ import type { Column } from '../../index.ts'; /** * Hide a column */ -export const hide = (column: Column) => +export const hide = (column: Column) => meta.forColumn(column, ColumnVisibility).hide(); /** * Show a column */ -export const show = (column: Column) => +export const show = (column: Column) => meta.forColumn(column, ColumnVisibility).show(); /** * Ask if a column is presently supposed to be visible */ -export const isVisible = (column: Column) => +export const isVisible = (column: Column) => meta.forColumn(column, ColumnVisibility).isVisible; /** * Ask if a column is presently supposed to be hidden */ -export const isHidden = (column: Column) => +export const isHidden = (column: Column) => meta.forColumn(column, ColumnVisibility).isHidden; diff --git a/table/src/plugins/data-sorting/helpers.ts b/table/src/plugins/data-sorting/helpers.ts index 9d77e2a8..7259be2c 100644 --- a/table/src/plugins/data-sorting/helpers.ts +++ b/table/src/plugins/data-sorting/helpers.ts @@ -6,31 +6,31 @@ import type { Column } from '../../index.ts'; /** * Query a specific column's current sort direction */ -export const sortDirection = (column: Column) => +export const sortDirection = (column: Column) => meta.forColumn(column, Sorting).sortDirection; /** * Ask if a column is sortable */ -export const isSortable = (column: Column) => +export const isSortable = (column: Column) => meta.forColumn(column, Sorting).isSortable; /** * Ask if a column is ascending */ -export const isAscending = (column: Column) => +export const isAscending = (column: Column) => meta.forColumn(column, Sorting).isAscending; /** * Ask if a column is sorted descending */ -export const isDescending = (column: Column) => +export const isDescending = (column: Column) => meta.forColumn(column, Sorting).isDescending; /** * Ask if a column is not sorted */ -export const isUnsorted = (column: Column) => +export const isUnsorted = (column: Column) => meta.forColumn(column, Sorting).isUnsorted; /** @@ -40,17 +40,17 @@ export const isUnsorted = (column: Column) => * Ascending => None => Descending * ⬑ ---------- <= ---------- ↲ */ -export const sort = (column: Column) => +export const sort = (column: Column) => meta.forTable(column.table, Sorting).handleSort(column); /** * Toggle a column between descending and not unsorted states */ -export const sortDescending = (column: Column) => +export const sortDescending = (column: Column) => meta.forTable(column.table, Sorting).toggleDescending(column); /** * Toggle a column between ascending and not unsorted states */ -export const sortAscending = (column: Column) => +export const sortAscending = (column: Column) => meta.forTable(column.table, Sorting).toggleAscending(column); diff --git a/table/src/plugins/data-sorting/plugin.ts b/table/src/plugins/data-sorting/plugin.ts index bdfdeada..fc78cbac 100644 --- a/table/src/plugins/data-sorting/plugin.ts +++ b/table/src/plugins/data-sorting/plugin.ts @@ -157,7 +157,7 @@ export class TableMeta { } @action - handleSort(column: Column) { + handleSort(column: Column) { const columnMeta = meta.forColumn(column, Sorting); if (!columnMeta.sortProperty) { @@ -184,7 +184,7 @@ export class TableMeta { } @action - toggleAscending(column: Column) { + toggleAscending(column: Column) { const columnMeta = meta.forColumn(column, Sorting); if (!columnMeta.sortProperty) { @@ -201,7 +201,7 @@ export class TableMeta { } @action - toggleDescending(column: Column) { + toggleDescending(column: Column) { const columnMeta = meta.forColumn(column, Sorting); if (!columnMeta.sortProperty) { From 4887fe36de1d6ffe723f85716ce5685fa07d18ab Mon Sep 17 00:00:00 2001 From: johanrd Date: Mon, 25 Aug 2025 11:57:55 +0200 Subject: [PATCH 2/4] consistency --- table/src/plugins/data-sorting/plugin.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/table/src/plugins/data-sorting/plugin.ts b/table/src/plugins/data-sorting/plugin.ts index fc78cbac..cad5b768 100644 --- a/table/src/plugins/data-sorting/plugin.ts +++ b/table/src/plugins/data-sorting/plugin.ts @@ -157,7 +157,7 @@ export class TableMeta { } @action - handleSort(column: Column) { + handleSort(column: Column) { const columnMeta = meta.forColumn(column, Sorting); if (!columnMeta.sortProperty) { @@ -184,7 +184,7 @@ export class TableMeta { } @action - toggleAscending(column: Column) { + toggleAscending(column: Column) { const columnMeta = meta.forColumn(column, Sorting); if (!columnMeta.sortProperty) { @@ -201,7 +201,7 @@ export class TableMeta { } @action - toggleDescending(column: Column) { + toggleDescending(column: Column) { const columnMeta = meta.forColumn(column, Sorting); if (!columnMeta.sortProperty) { From 9ae520aa4cf0e85054404f2ea95fec0301414c82 Mon Sep 17 00:00:00 2001 From: johanrd Date: Mon, 25 Aug 2025 12:35:36 +0200 Subject: [PATCH 3/4] pass through generics of resize handle --- table/src/plugins/column-resizing/handle.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/table/src/plugins/column-resizing/handle.ts b/table/src/plugins/column-resizing/handle.ts index 4e5b18de..baf334c9 100644 --- a/table/src/plugins/column-resizing/handle.ts +++ b/table/src/plugins/column-resizing/handle.ts @@ -24,9 +24,11 @@ const waiter = buildWaiter('ColumnResizing#ResizeHandle'); * */ -class ResizeHandle extends Modifier<{ Args: { Positional: [Column] } }> { +class ResizeHandle extends Modifier<{ + Args: { Positional: [Column] }; +}> { declare dragHandle: HTMLElement; - declare column: Column; + declare column: Column; declare meta: ColumnMeta; // Pointer @@ -45,7 +47,7 @@ class ResizeHandle extends Modifier<{ Args: { Positional: [Column] } }> { token?: unknown; isSetup = false; - modify(element: Element, [column]: [Column]) { + modify(element: Element, [column]: [Column]) { this.column = column; this.meta = meta.forColumn(column, ColumnResizing); this.dragHandle = element as HTMLElement; @@ -277,4 +279,4 @@ class ResizeHandle extends Modifier<{ Args: { Positional: [Column] } }> { * https://limber.glimdown.com/ * See: "resize-handle" on Limber's GitHub */ -export const resizeHandle = ResizeHandle; +export const resizeHandle: typeof ResizeHandle = ResizeHandle; From c9c53bdb2260a549eb32debc12050690c49e1fbd Mon Sep 17 00:00:00 2001 From: johanrd Date: Mon, 25 Aug 2025 14:00:25 +0200 Subject: [PATCH 4/4] remove unused @ts-expect-error --- test-app/tests/plugins/column-reordering/rendering-test.gts | 1 - 1 file changed, 1 deletion(-) diff --git a/test-app/tests/plugins/column-reordering/rendering-test.gts b/test-app/tests/plugins/column-reordering/rendering-test.gts index 15d023f3..aaa151c4 100644 --- a/test-app/tests/plugins/column-reordering/rendering-test.gts +++ b/test-app/tests/plugins/column-reordering/rendering-test.gts @@ -574,7 +574,6 @@ module("Plugins | columnReordering", function (hooks) { ]), }); - // @ts-expect-error setColumnOrder(ctx.table, order); assert.deepEqual(preferences, {