From 53c86369775285e976f11de73036aed40142bcc3 Mon Sep 17 00:00:00 2001 From: singh-pk Date: Mon, 27 Apr 2026 12:58:08 +0530 Subject: [PATCH 1/2] fix(data-table): guard undefined defaultSort in hasActiveQuery `hasActiveQuery` crashed with "Cannot destructure property 'name' of 'undefined'" when consumers passed an undefined `defaultSort`. The TypeScript type marks it required, but runtime callers can still pass undefined, producing `[undefined]` and crashing `generateSortMap`. - Filter falsy entries inside `generateSortMap` before destructure. - Pass `[]` instead of `[undefined]` from `hasActiveQuery` when `defaultSort` is missing. Co-Authored-By: Claude Opus 4.7 (1M context) --- packages/raystack/components/data-table/utils/index.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/raystack/components/data-table/utils/index.tsx b/packages/raystack/components/data-table/utils/index.tsx index 05d3ef2c7..d81c8b39b 100644 --- a/packages/raystack/components/data-table/utils/index.tsx +++ b/packages/raystack/components/data-table/utils/index.tsx @@ -117,7 +117,7 @@ const generateFilterMap = ( }; const generateSortMap = (sort: DataTableSort[] = []): Map => { - return new Map(sort.map(({ name, order }) => [name, order])); + return new Map(sort.filter(Boolean).map(({ name, order }) => [name, order])); }; const isFilterChanged = ( @@ -173,7 +173,10 @@ export const hasActiveQuery = ( const hasSearch = Boolean( tableQuery?.search && tableQuery.search.trim() !== '' ); - const sortChanged = isSortChanged([defaultSort], tableQuery.sort || []); + const sortChanged = isSortChanged( + defaultSort ? [defaultSort] : [], + tableQuery.sort || [] + ); const groupChanged = isGroupChanged( [defaultGroupOption.id], tableQuery.group_by || [] From 401ea152f3ce7e93bfbfb903f3381cca7ae93db2 Mon Sep 17 00:00:00 2001 From: singh-pk Date: Mon, 27 Apr 2026 13:12:55 +0530 Subject: [PATCH 2/2] fix: defaultSort check in getDefaultTableQuery --- packages/raystack/components/data-table/data-table.types.tsx | 2 +- packages/raystack/components/data-table/utils/index.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/raystack/components/data-table/data-table.types.tsx b/packages/raystack/components/data-table/data-table.types.tsx index 3edf07fc9..94b655abe 100644 --- a/packages/raystack/components/data-table/data-table.types.tsx +++ b/packages/raystack/components/data-table/data-table.types.tsx @@ -110,7 +110,7 @@ export interface DataTableProps { totalRowCount?: number; loadingRowCount?: number; onTableQueryChange?: (query: DataTableQuery) => void; - defaultSort: DataTableSort; + defaultSort?: DataTableSort; onLoadMore?: () => Promise; onRowClick?: (row: TData) => void; onColumnVisibilityChange?: (columnVisibility: VisibilityState) => void; diff --git a/packages/raystack/components/data-table/utils/index.tsx b/packages/raystack/components/data-table/utils/index.tsx index d81c8b39b..9fd709cf6 100644 --- a/packages/raystack/components/data-table/utils/index.tsx +++ b/packages/raystack/components/data-table/utils/index.tsx @@ -349,7 +349,7 @@ export function getDefaultTableQuery( const internalQuery = dataTableQueryToInternal(oldQuery); return { - sort: [defaultSort], + sort: defaultSort ? [defaultSort] : [], group_by: [defaultGroupOption.id], ...internalQuery };