diff --git a/packages/jsapi-components/src/useViewportData.test.tsx b/packages/jsapi-components/src/useViewportData.test.tsx index 2072f4436..7cd93cde0 100644 --- a/packages/jsapi-components/src/useViewportData.test.tsx +++ b/packages/jsapi-components/src/useViewportData.test.tsx @@ -3,7 +3,6 @@ import type { dh as DhType } from '@deephaven/jsapi-types'; import dh from '@deephaven/jsapi-shim'; import { OnTableUpdatedEvent, - ViewportRow, generateEmptyKeyedItems, isClosed, ITEM_KEY_PREFIX, @@ -23,13 +22,9 @@ jest.mock('@deephaven/react-hooks', () => ({ jest.mock('./useSetPaddedViewportCallback'); jest.mock('./useTableSize'); -function mockViewportRow(offsetInSnapshot: number): ViewportRow { - return { offsetInSnapshot } as ViewportRow; -} - function mockUpdateEvent( offset: number, - rows: ViewportRow[] + rows: DhType.Row[] ): OnTableUpdatedEvent { return { detail: { @@ -213,14 +208,14 @@ it('should update state on dh.Table.EVENT_UPDATED event', () => { ); const offset = 3; - const row = mockViewportRow(5); + const row = TestUtils.createMockProxy(); const event = mockUpdateEvent(offset, [row]); act(() => { updateEventHandler?.(event); }); - const expectedKeyIndex = offset + row.offsetInSnapshot; + const expectedKeyIndex = offset; const expectedInitialItems = [...generateEmptyKeyedItems(0, table.size - 1)]; const expectedItems = [ ...expectedInitialItems.slice(0, expectedKeyIndex), diff --git a/packages/jsapi-utils/src/ViewportDataUtils.test.ts b/packages/jsapi-utils/src/ViewportDataUtils.test.ts index 0bdc658b9..ba5f3b62e 100644 --- a/packages/jsapi-utils/src/ViewportDataUtils.test.ts +++ b/packages/jsapi-utils/src/ViewportDataUtils.test.ts @@ -5,8 +5,6 @@ import { ITEM_KEY_PREFIX, OnTableUpdatedEvent, RowDeserializer, - ViewportRow, - createKeyFromOffsetRow, createOnTableUpdatedHandler, defaultRowDeserializer, generateEmptyKeyedItems, @@ -18,10 +16,6 @@ import { const { asMock, createMockProxy } = TestUtils; -function mockViewportRow(offsetInSnapshot: number): ViewportRow { - return { offsetInSnapshot } as ViewportRow; -} - function mockColumn(name: string) { return { name, @@ -44,28 +38,15 @@ describe('createdKeyedItemKey', () => { }); }); -describe('createKeyFromOffsetRow', () => { - it.each([ - [{ offsetInSnapshot: 4 } as ViewportRow, 5, `${ITEM_KEY_PREFIX}_9`], - [{ offsetInSnapshot: 27 } as ViewportRow, 99, `${ITEM_KEY_PREFIX}_126`], - ] as const)( - 'should create a string key based on the actual row offset: %o', - (row, offset, expected) => { - const actual = createKeyFromOffsetRow(row, offset); - expect(actual).toEqual(expected); - } - ); -}); - describe('createOnTableUpdatedHandler', () => { const mock = { deserializeRow: jest.fn() as RowDeserializer, rows: [ - createMockProxy({ offsetInSnapshot: 0 }), - createMockProxy({ offsetInSnapshot: 1 }), - createMockProxy({ offsetInSnapshot: 2 }), + createMockProxy(), + createMockProxy(), + createMockProxy(), ], - updateEvent: (offset: number, rows: ViewportRow[], columns: dh.Column[]) => + updateEvent: (offset: number, rows: dh.Row[], columns: dh.Column[]) => createMockProxy({ detail: { offset, @@ -107,10 +88,11 @@ describe('createOnTableUpdatedHandler', () => { describe('defaultRowDeserializer', () => { it('should map all columns with original names', () => { - const row = mockViewportRow(10); - // mock our get function by mapping capital column name to lowercase value - // e.g. A: 'a' - row.get = jest.fn(({ name }: { name: string }) => name.toLowerCase()); + const row = createMockProxy({ + // mock our get function by mapping capital column name to lowercase value + // e.g. A: 'a' + get: jest.fn(({ name }: { name: string }) => name.toLowerCase()), + }); const actual = defaultRowDeserializer(row, [ mockColumn('A'), diff --git a/packages/jsapi-utils/src/ViewportDataUtils.ts b/packages/jsapi-utils/src/ViewportDataUtils.ts index e3d4a9b92..db833005e 100644 --- a/packages/jsapi-utils/src/ViewportDataUtils.ts +++ b/packages/jsapi-utils/src/ViewportDataUtils.ts @@ -9,12 +9,10 @@ export const ITEM_KEY_PREFIX = 'DH_ITEM_KEY'; export type OnTableUpdatedEvent = CustomEvent<{ offset: number; columns: dh.Column[]; - rows: ViewportRow[]; + rows: dh.Row[]; }>; -export type RowDeserializer = (row: ViewportRow, columns: dh.Column[]) => T; - -export type ViewportRow = dh.Row & { offsetInSnapshot: number }; +export type RowDeserializer = (row: dh.Row, columns: dh.Column[]) => T; const log = Log.module('ViewportDataUtils'); @@ -29,21 +27,6 @@ export function createKeyedItemKey(index: number): string { return `${ITEM_KEY_PREFIX}_${index}`; } -/** - * Create a unique string key for a row based on its ordinal position in its - * source table. This is calculated based on it's offset in the viewport - * (row.offsetInSnapshot) + the offset of the snapshot. - * @param row Row from a Table update event. - * @param offset Offset of the current viewport. - * @returns Unique string key for the ordinal position of the given row. - */ -export function createKeyFromOffsetRow( - row: ViewportRow, - offset: number -): string { - return createKeyedItemKey(row.offsetInSnapshot + offset); -} - /** * Creates a handler function for a `dh.Table.EVENT_UPDATED` event. Rows that * get passed to the handler will be bulk updated in the given `viewportData` @@ -66,9 +49,9 @@ export function createOnTableUpdatedHandler( const updateKeyMap = new Map>(); - rows.forEach(row => { + rows.forEach((row, offsetInSnapshot) => { const item = deserializeRow(row, columns); - const key = createKeyFromOffsetRow(row, offset); + const key = createKeyedItemKey(offset + offsetInSnapshot); updateKeyMap.set(key, { key, item }); }); @@ -86,7 +69,7 @@ export function createOnTableUpdatedHandler( * @returns A key / value object for the row. */ export function defaultRowDeserializer( - row: ViewportRow, + row: dh.Row, columns: dh.Column[] ): T { return columns.reduce((result, col) => {