From 39c2aba5f14a430754b33fed9d867d4069123172 Mon Sep 17 00:00:00 2001 From: Ethan Alvizo Date: Wed, 21 Jan 2026 09:14:29 -0500 Subject: [PATCH 1/6] readonly type changes --- packages/components/src/navigation/DashboardList.tsx | 2 +- packages/jsapi-utils/src/TableUtils.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/components/src/navigation/DashboardList.tsx b/packages/components/src/navigation/DashboardList.tsx index e62faddfe5..4dc1c38771 100644 --- a/packages/components/src/navigation/DashboardList.tsx +++ b/packages/components/src/navigation/DashboardList.tsx @@ -17,7 +17,7 @@ import { GLOBAL_SHORTCUTS } from '../shortcuts'; export interface DashboardListProps { onSelect: (tab: NavTabItem) => void; - tabs?: NavTabItem[]; + tabs?: readonly NavTabItem[]; } /** diff --git a/packages/jsapi-utils/src/TableUtils.ts b/packages/jsapi-utils/src/TableUtils.ts index 562137d622..a7bfbd82c6 100644 --- a/packages/jsapi-utils/src/TableUtils.ts +++ b/packages/jsapi-utils/src/TableUtils.ts @@ -1852,7 +1852,7 @@ export class TableUtils { */ async applyFilter( table: T | null | undefined, - filters: DhType.FilterCondition[], + filters: readonly DhType.FilterCondition[], timeout = TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS ): Promise { const { dh } = this; @@ -1875,7 +1875,7 @@ export class TableUtils { */ async applySort( table: T | null | undefined, - sorts: DhType.Sort[], + sorts: readonly DhType.Sort[], timeout = TableUtils.APPLY_TABLE_CHANGE_TIMEOUT_MS ): Promise { const { dh } = this; From c1bb4c6c536058c84375c9845aa45d8c725d00ce Mon Sep 17 00:00:00 2001 From: Ethan Alvizo Date: Wed, 21 Jan 2026 22:24:26 -0500 Subject: [PATCH 2/6] cast type --- packages/jsapi-utils/src/TableUtils.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/jsapi-utils/src/TableUtils.ts b/packages/jsapi-utils/src/TableUtils.ts index a7bfbd82c6..f3ca7bf01d 100644 --- a/packages/jsapi-utils/src/TableUtils.ts +++ b/packages/jsapi-utils/src/TableUtils.ts @@ -1857,7 +1857,8 @@ export class TableUtils { ): Promise { const { dh } = this; return TableUtils.executeAndWaitForEvent( - t => t?.applyFilter(filters), + // TODO: Update JS API to accept readonly arrays + t => t?.applyFilter(filters as DhType.FilterCondition[]), table, dh.Table.EVENT_FILTERCHANGED, timeout @@ -1880,7 +1881,8 @@ export class TableUtils { ): Promise { const { dh } = this; return TableUtils.executeAndWaitForEvent( - t => t?.applySort(sorts), + // TODO: Update JS API to accept readonly arrays + t => t?.applySort(sorts as DhType.Sort[]), table, dh.Table.EVENT_SORTCHANGED, timeout From dd1f38eeab685d3448583b07ff4f2c09ef20e41f Mon Sep 17 00:00:00 2001 From: Ethan Alvizo Date: Thu, 22 Jan 2026 00:13:35 -0500 Subject: [PATCH 3/6] add ticket number --- packages/jsapi-utils/src/TableUtils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/jsapi-utils/src/TableUtils.ts b/packages/jsapi-utils/src/TableUtils.ts index f3ca7bf01d..b0da30e29a 100644 --- a/packages/jsapi-utils/src/TableUtils.ts +++ b/packages/jsapi-utils/src/TableUtils.ts @@ -1857,7 +1857,7 @@ export class TableUtils { ): Promise { const { dh } = this; return TableUtils.executeAndWaitForEvent( - // TODO: Update JS API to accept readonly arrays + // TODO: #21450 Update JS API to accept readonly arrays t => t?.applyFilter(filters as DhType.FilterCondition[]), table, dh.Table.EVENT_FILTERCHANGED, @@ -1881,7 +1881,7 @@ export class TableUtils { ): Promise { const { dh } = this; return TableUtils.executeAndWaitForEvent( - // TODO: Update JS API to accept readonly arrays + // TODO: #21450 Update JS API to accept readonly arrays t => t?.applySort(sorts as DhType.Sort[]), table, dh.Table.EVENT_SORTCHANGED, From e7c7e3a50dcb35536630ca00d7d1aa549873fa89 Mon Sep 17 00:00:00 2001 From: Ethan Alvizo Date: Thu, 9 Apr 2026 14:41:18 -0400 Subject: [PATCH 4/6] more type changes --- packages/iris-grid/src/IrisGridCacheUtils.test.ts | 2 +- packages/iris-grid/src/IrisGridCacheUtils.ts | 10 ++++------ packages/iris-grid/src/IrisGridUtils.test.ts | 2 +- packages/iris-grid/src/IrisGridUtils.ts | 6 ++++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/iris-grid/src/IrisGridCacheUtils.test.ts b/packages/iris-grid/src/IrisGridCacheUtils.test.ts index 4fc045c7f6..cb20f1eff7 100644 --- a/packages/iris-grid/src/IrisGridCacheUtils.test.ts +++ b/packages/iris-grid/src/IrisGridCacheUtils.test.ts @@ -51,7 +51,7 @@ const irisGridState = { metrics: { userColumnWidths: new Map(), userRowHeights: new Map(), - } as GridMetrics, + } as Partial, } satisfies HydratedIrisGridState; describe('makeMemoizedGridStateDehydrator', () => { diff --git a/packages/iris-grid/src/IrisGridCacheUtils.ts b/packages/iris-grid/src/IrisGridCacheUtils.ts index c03589dab9..295c388da6 100644 --- a/packages/iris-grid/src/IrisGridCacheUtils.ts +++ b/packages/iris-grid/src/IrisGridCacheUtils.ts @@ -69,12 +69,10 @@ function areIrisGridStatesEqual( return ( irisGridStateA === irisGridStateB || - (irisGridStateA.metrics != null && - irisGridStateB.metrics != null && - irisGridStateA.metrics.userColumnWidths === - irisGridStateB.metrics.userColumnWidths && - irisGridStateA.metrics.userRowHeights === - irisGridStateB.metrics.userRowHeights && + (irisGridStateA.metrics?.userColumnWidths === + irisGridStateB.metrics?.userColumnWidths && + irisGridStateA.metrics?.userRowHeights === + irisGridStateB.metrics?.userRowHeights && compareStateKeys.every( key => irisGridStateA[key] === irisGridStateB[key] )) diff --git a/packages/iris-grid/src/IrisGridUtils.test.ts b/packages/iris-grid/src/IrisGridUtils.test.ts index b8fe7782a4..8ca16ebcb2 100644 --- a/packages/iris-grid/src/IrisGridUtils.test.ts +++ b/packages/iris-grid/src/IrisGridUtils.test.ts @@ -719,7 +719,7 @@ describe('dehydration methods', () => { metrics: { userColumnWidths: new Map(), userRowHeights: new Map(), - } as GridMetrics, + } as Partial, }), ], ])('%s should be serializable', (_label, result) => { diff --git a/packages/iris-grid/src/IrisGridUtils.ts b/packages/iris-grid/src/IrisGridUtils.ts index ed325ec339..20ecd35356 100644 --- a/packages/iris-grid/src/IrisGridUtils.ts +++ b/packages/iris-grid/src/IrisGridUtils.ts @@ -1,4 +1,5 @@ import { + type GridMetrics, type GridRange, type GridState, GridUtils, @@ -76,8 +77,9 @@ export type HydratedIrisGridState = Pick< | 'conditionalFormats' | 'columnHeaderGroups' | 'partitionConfig' - | 'metrics' ->; +> & { + metrics?: Partial; +}; export type DehydratedPendingDataMap = [number, { data: [string, T][] }][]; From 0d425c2aea2c71332e6e5abb649e59fc42fd1fa4 Mon Sep 17 00:00:00 2001 From: Ethan Alvizo Date: Thu, 9 Apr 2026 14:52:30 -0400 Subject: [PATCH 5/6] build error fixes --- packages/iris-grid/src/IrisGridUtils.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/iris-grid/src/IrisGridUtils.ts b/packages/iris-grid/src/IrisGridUtils.ts index 20ecd35356..0296283c70 100644 --- a/packages/iris-grid/src/IrisGridUtils.ts +++ b/packages/iris-grid/src/IrisGridUtils.ts @@ -1194,10 +1194,10 @@ class IrisGridUtils { customColumnFormatMap, columnAlignmentMap = EMPTY_MAP, isFilterBarShown, - metrics: { userColumnWidths, userRowHeights } = { - userColumnWidths: EMPTY_MAP, - userRowHeights: EMPTY_MAP, - }, + metrics: { + userColumnWidths = new Map(), + userRowHeights = new Map(), + } = {}, quickFilters, customColumns, conditionalFormats = EMPTY_ARRAY, From 3b8d81ed1399e1659ba5c5231b9dd503795e6dd9 Mon Sep 17 00:00:00 2001 From: Ethan Alvizo Date: Wed, 29 Apr 2026 23:32:03 -0400 Subject: [PATCH 6/6] revert unnecessary changes --- packages/iris-grid/src/IrisGridCacheUtils.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/iris-grid/src/IrisGridCacheUtils.ts b/packages/iris-grid/src/IrisGridCacheUtils.ts index 295c388da6..c03589dab9 100644 --- a/packages/iris-grid/src/IrisGridCacheUtils.ts +++ b/packages/iris-grid/src/IrisGridCacheUtils.ts @@ -69,10 +69,12 @@ function areIrisGridStatesEqual( return ( irisGridStateA === irisGridStateB || - (irisGridStateA.metrics?.userColumnWidths === - irisGridStateB.metrics?.userColumnWidths && - irisGridStateA.metrics?.userRowHeights === - irisGridStateB.metrics?.userRowHeights && + (irisGridStateA.metrics != null && + irisGridStateB.metrics != null && + irisGridStateA.metrics.userColumnWidths === + irisGridStateB.metrics.userColumnWidths && + irisGridStateA.metrics.userRowHeights === + irisGridStateB.metrics.userRowHeights && compareStateKeys.every( key => irisGridStateA[key] === irisGridStateB[key] ))