@deephaven/jsapi-utils 0.48.0 → 0.48.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/MessageUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageUtils.js","names":["shortid","Log","TimeoutError","log","module","LOGIN_OPTIONS_REQUEST","SESSION_DETAILS_REQUEST","BROADCAST_CHANNEL_NAME","BROADCAST_LOGIN_MESSAGE","BROADCAST_LOGOUT_MESSAGE","isMessage","obj","message","id","isBroadcastLoginMessage","isBroadcastLogoutMessage","isResponse","response","makeMessage","payload","makeResponse","messageId","getWindowParent","window","opener","parent","requestParentResponse","request","timeout","Error","Promise","resolve","reject","timeoutId","listener","event","data","debug","clearTimeout","removeEventListener","addEventListener","setTimeout","postMessage"],"sources":["../src/MessageUtils.ts"],"sourcesContent":["import shortid from 'shortid';\nimport Log from '@deephaven/log';\nimport { TimeoutError } from '@deephaven/utils';\n\nconst log = Log.module('MessageUtils');\n\nexport const LOGIN_OPTIONS_REQUEST =\n 'io.deephaven.message.LoginOptions.request';\n\nexport const SESSION_DETAILS_REQUEST =\n 'io.deephaven.message.SessionDetails.request';\n\n/**\n * Use a BroadcastChannel for sending messages between tabs, such as when the user logs out.\n */\nexport const BROADCAST_CHANNEL_NAME = 'io.deephaven.broadcast';\n\n/**\n * Event emitted when the user has logged in successfully\n */\nexport const BROADCAST_LOGIN_MESSAGE = 'io.deephaven.broadcast.Login';\n\n/**\n * Event emitted when the user has logged out\n */\nexport const BROADCAST_LOGOUT_MESSAGE = 'io.deephaven.broadcast.Logout';\n\nexport interface Message<T = unknown> {\n id: string;\n message: string;\n payload?: T;\n}\n\nexport interface BroadcastLoginMessage extends Message<void> {\n message: typeof BROADCAST_LOGIN_MESSAGE;\n}\n\nexport interface BroadcastLogoutMessage extends Message<void> {\n message: typeof BROADCAST_LOGOUT_MESSAGE;\n}\n\nexport interface Response<T = unknown> {\n id: string;\n payload: T;\n}\n\nexport function isMessage(obj: unknown): obj is Message {\n const message = obj as Message;\n return (\n message != null &&\n typeof message.id === 'string' &&\n typeof message.message === 'string'\n );\n}\n\nexport function isBroadcastLoginMessage(\n obj: unknown\n): obj is BroadcastLoginMessage {\n return isMessage(obj) && obj.message === BROADCAST_LOGIN_MESSAGE;\n}\n\nexport function isBroadcastLogoutMessage(\n obj: unknown\n): obj is BroadcastLogoutMessage {\n return isMessage(obj) && obj.message === BROADCAST_LOGOUT_MESSAGE;\n}\n\nexport function isResponse(obj: unknown): obj is Response {\n const response = obj as Response;\n return response != null && typeof response.id === 'string';\n}\n\n/**\n * Make message object with optional payload\n * @param message Message string\n * @param id Unique message id\n * @param payload Payload to send\n * @returns Message\n */\nexport function makeMessage<T>(\n message: string,\n id = shortid(),\n payload?: T\n): Message<T> {\n return { message, id, payload };\n}\n\n/**\n * Make response object for given message id\n * @param messageId Id of the request message to respond to\n * @param payload Payload to respond with\n * @returns Response\n */\nexport function makeResponse<T>(messageId: string, payload: T): Response<T> {\n return { id: messageId, payload };\n}\n\nexport function getWindowParent(): Window | null {\n if (window.opener != null) {\n return window.opener;\n }\n if (window.parent != null && window.parent !== window) {\n return window.parent;\n }\n return null;\n}\n\n/**\n * Request data from the parent window and wait for response\n * @param request Request message to send to the parent window\n * @param timeout Timeout in ms\n * @returns Payload of the given type, or undefined\n */\nexport async function requestParentResponse(\n request: string,\n timeout = 30000\n): Promise<unknown> {\n const parent = getWindowParent();\n if (parent == null) {\n throw new Error('window parent is null, unable to send request.');\n }\n return new Promise((resolve, reject) => {\n let timeoutId: number;\n const id = shortid();\n const listener = (event: MessageEvent) => {\n const { data } = event;\n if (!isResponse(data)) {\n log.debug('Ignoring non-deephaven response', data);\n return;\n }\n log.debug('Received message', data);\n if (data?.id !== id) {\n log.debug(\"Ignore message, id doesn't match\", data);\n return;\n }\n window.clearTimeout(timeoutId);\n window.removeEventListener('message', listener);\n resolve(data.payload);\n };\n window.addEventListener('message', listener);\n timeoutId = window.setTimeout(() => {\n window.removeEventListener('message', listener);\n reject(new TimeoutError('Request timed out'));\n }, timeout);\n parent.postMessage(makeMessage(request, id), '*');\n });\n}\n"],"mappings":";;AAAA,OAAOA,OAAO,MAAM,SAAS;AAC7B,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,YAAY,QAAQ,kBAAkB;AAE/C,IAAMC,GAAG,GAAGF,GAAG,CAACG,MAAM,CAAC,cAAc,CAAC;AAEtC,OAAO,IAAMC,qBAAqB,GAChC,2CAA2C;AAE7C,OAAO,IAAMC,uBAAuB,GAClC,6CAA6C;;AAE/C;AACA;AACA;AACA,OAAO,IAAMC,sBAAsB,GAAG,wBAAwB;;AAE9D;AACA;AACA;AACA,OAAO,IAAMC,uBAAuB,GAAG,8BAA8B;;AAErE;AACA;AACA;AACA,OAAO,IAAMC,wBAAwB,GAAG,+BAA+B;AAqBvE,OAAO,SAASC,SAAS,CAACC,GAAY,EAAkB;EACtD,IAAMC,OAAO,GAAGD,GAAc;EAC9B,OACEC,OAAO,IAAI,IAAI,IACf,OAAOA,OAAO,CAACC,EAAE,KAAK,QAAQ,IAC9B,OAAOD,OAAO,CAACA,OAAO,KAAK,QAAQ;AAEvC;AAEA,OAAO,SAASE,uBAAuB,CACrCH,GAAY,EACkB;EAC9B,OAAOD,SAAS,CAACC,GAAG,CAAC,IAAIA,GAAG,CAACC,OAAO,KAAKJ,uBAAuB;AAClE;AAEA,OAAO,SAASO,wBAAwB,CACtCJ,GAAY,EACmB;EAC/B,OAAOD,SAAS,CAACC,GAAG,CAAC,IAAIA,GAAG,CAACC,OAAO,KAAKH,wBAAwB;AACnE;AAEA,OAAO,SAASO,UAAU,CAACL,GAAY,EAAmB;EACxD,IAAMM,QAAQ,GAAGN,GAAe;EAChC,OAAOM,QAAQ,IAAI,IAAI,IAAI,OAAOA,QAAQ,CAACJ,EAAE,KAAK,QAAQ;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASK,WAAW,CACzBN,OAAe,EAGH;EAAA,IAFZC,EAAE,uEAAGb,OAAO,EAAE;EAAA,IACdmB,OAAW;EAEX,OAAO;IAAEP,OAAO;IAAEC,EAAE;IAAEM;EAAQ,CAAC;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAY,CAAIC,SAAiB,EAAEF,OAAU,EAAe;EAC1E,OAAO;IAAEN,EAAE,EAAEQ,SAAS;IAAEF;EAAQ,CAAC;AACnC;AAEA,OAAO,SAASG,eAAe,GAAkB;EAC/C,IAAIC,MAAM,CAACC,MAAM,IAAI,IAAI,EAAE;IACzB,OAAOD,MAAM,CAACC,MAAM;EACtB;EACA,IAAID,MAAM,CAACE,MAAM,IAAI,IAAI,IAAIF,MAAM,CAACE,MAAM,KAAKF,MAAM,EAAE;IACrD,OAAOA,MAAM,CAACE,MAAM;EACtB;EACA,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAsBC,qBAAqB;EAAA;AAAA;AAiC1C;EAAA,2CAjCM,WACLC,OAAe,EAEG;IAAA,IADlBC,OAAO,uEAAG,KAAK;IAEf,IAAMH,MAAM,GAAGH,eAAe,EAAE;IAChC,IAAIG,MAAM,IAAI,IAAI,EAAE;MAClB,MAAM,IAAII,KAAK,CAAC,gDAAgD,CAAC;IACnE;IACA,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtC,IAAIC,SAAiB;MACrB,IAAMpB,EAAE,GAAGb,OAAO,EAAE;MACpB,IAAMkC,QAAQ,GAAIC,KAAmB,
|
|
1
|
+
{"version":3,"file":"MessageUtils.js","names":["shortid","Log","TimeoutError","log","module","LOGIN_OPTIONS_REQUEST","SESSION_DETAILS_REQUEST","BROADCAST_CHANNEL_NAME","BROADCAST_LOGIN_MESSAGE","BROADCAST_LOGOUT_MESSAGE","isMessage","obj","message","id","isBroadcastLoginMessage","isBroadcastLogoutMessage","isResponse","response","makeMessage","payload","makeResponse","messageId","getWindowParent","window","opener","parent","requestParentResponse","request","timeout","Error","Promise","resolve","reject","timeoutId","listener","event","data","debug","clearTimeout","removeEventListener","addEventListener","setTimeout","postMessage"],"sources":["../src/MessageUtils.ts"],"sourcesContent":["import shortid from 'shortid';\nimport Log from '@deephaven/log';\nimport { TimeoutError } from '@deephaven/utils';\n\nconst log = Log.module('MessageUtils');\n\nexport const LOGIN_OPTIONS_REQUEST =\n 'io.deephaven.message.LoginOptions.request';\n\nexport const SESSION_DETAILS_REQUEST =\n 'io.deephaven.message.SessionDetails.request';\n\n/**\n * Use a BroadcastChannel for sending messages between tabs, such as when the user logs out.\n */\nexport const BROADCAST_CHANNEL_NAME = 'io.deephaven.broadcast';\n\n/**\n * Event emitted when the user has logged in successfully\n */\nexport const BROADCAST_LOGIN_MESSAGE = 'io.deephaven.broadcast.Login';\n\n/**\n * Event emitted when the user has logged out\n */\nexport const BROADCAST_LOGOUT_MESSAGE = 'io.deephaven.broadcast.Logout';\n\nexport interface Message<T = unknown> {\n id: string;\n message: string;\n payload?: T;\n}\n\nexport interface BroadcastLoginMessage extends Message<void> {\n message: typeof BROADCAST_LOGIN_MESSAGE;\n}\n\nexport interface BroadcastLogoutMessage extends Message<void> {\n message: typeof BROADCAST_LOGOUT_MESSAGE;\n}\n\nexport interface Response<T = unknown> {\n id: string;\n payload: T;\n}\n\nexport function isMessage(obj: unknown): obj is Message {\n const message = obj as Message;\n return (\n message != null &&\n typeof message.id === 'string' &&\n typeof message.message === 'string'\n );\n}\n\nexport function isBroadcastLoginMessage(\n obj: unknown\n): obj is BroadcastLoginMessage {\n return isMessage(obj) && obj.message === BROADCAST_LOGIN_MESSAGE;\n}\n\nexport function isBroadcastLogoutMessage(\n obj: unknown\n): obj is BroadcastLogoutMessage {\n return isMessage(obj) && obj.message === BROADCAST_LOGOUT_MESSAGE;\n}\n\nexport function isResponse(obj: unknown): obj is Response {\n const response = obj as Response;\n return response != null && typeof response.id === 'string';\n}\n\n/**\n * Make message object with optional payload\n * @param message Message string\n * @param id Unique message id\n * @param payload Payload to send\n * @returns Message\n */\nexport function makeMessage<T>(\n message: string,\n id = shortid(),\n payload?: T\n): Message<T> {\n return { message, id, payload };\n}\n\n/**\n * Make response object for given message id\n * @param messageId Id of the request message to respond to\n * @param payload Payload to respond with\n * @returns Response\n */\nexport function makeResponse<T>(messageId: string, payload: T): Response<T> {\n return { id: messageId, payload };\n}\n\nexport function getWindowParent(): Window | null {\n if (window.opener != null) {\n return window.opener;\n }\n if (window.parent != null && window.parent !== window) {\n return window.parent;\n }\n return null;\n}\n\n/**\n * Request data from the parent window and wait for response\n * @param request Request message to send to the parent window\n * @param timeout Timeout in ms\n * @returns Payload of the given type, or undefined\n */\nexport async function requestParentResponse(\n request: string,\n timeout = 30000\n): Promise<unknown> {\n const parent = getWindowParent();\n if (parent == null) {\n throw new Error('window parent is null, unable to send request.');\n }\n return new Promise((resolve, reject) => {\n let timeoutId: number;\n const id = shortid();\n const listener = (event: MessageEvent): void => {\n const { data } = event;\n if (!isResponse(data)) {\n log.debug('Ignoring non-deephaven response', data);\n return;\n }\n log.debug('Received message', data);\n if (data?.id !== id) {\n log.debug(\"Ignore message, id doesn't match\", data);\n return;\n }\n window.clearTimeout(timeoutId);\n window.removeEventListener('message', listener);\n resolve(data.payload);\n };\n window.addEventListener('message', listener);\n timeoutId = window.setTimeout(() => {\n window.removeEventListener('message', listener);\n reject(new TimeoutError('Request timed out'));\n }, timeout);\n parent.postMessage(makeMessage(request, id), '*');\n });\n}\n"],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ export type ViewportRow = Row & {
|
|
|
16
16
|
* (row.offsetInSnapshot) + the offset of the snapshot.
|
|
17
17
|
* @param row Row from a Table update event.
|
|
18
18
|
* @param offset Offset of the current viewport.
|
|
19
|
-
* @returns Unique string key for the
|
|
19
|
+
* @returns Unique string key for the ordinal position of the given row.
|
|
20
20
|
*/
|
|
21
21
|
export declare function createKeyFromOffsetRow(row: ViewportRow, offset: number): string;
|
|
22
22
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewportDataUtils.d.ts","sourceRoot":"","sources":["../src/ViewportDataUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAE5E,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC;AAI7D;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"ViewportDataUtils.d.ts","sourceRoot":"","sources":["../src/ViewportDataUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAE5E,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC;AAI7D;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,CAER;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;CAAE,EACzE,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,GACjC,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAqBtC;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,MAAM,EAAE,GAChB,CAAC,CAMH;AAED;;;;;;;GAOG;AACH,wBAAiB,uBAAuB,CAAC,CAAC,EACxC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAKxC;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAM1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,CAAC,MAAM,EAAE,MAAM,CAAC,CAQlB"}
|
|
@@ -8,7 +8,7 @@ var log = Log.module('ViewportDataUtils');
|
|
|
8
8
|
* (row.offsetInSnapshot) + the offset of the snapshot.
|
|
9
9
|
* @param row Row from a Table update event.
|
|
10
10
|
* @param offset Offset of the current viewport.
|
|
11
|
-
* @returns Unique string key for the
|
|
11
|
+
* @returns Unique string key for the ordinal position of the given row.
|
|
12
12
|
*/
|
|
13
13
|
export function createKeyFromOffsetRow(row, offset) {
|
|
14
14
|
return String(row.offsetInSnapshot + offset);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewportDataUtils.js","names":["clamp","Log","log","module","createKeyFromOffsetRow","row","offset","String","offsetInSnapshot","createOnTableUpdatedHandler","deserializeRow","bulkUpdate","onTableUpdated","event","columns","rows","detail","debug","updateKeyMap","Map","forEach","item","key","set","defaultRowDeserializer","reduce","result","col","name","get","generateEmptyKeyedItems","start","end","i","getSize","table","isClosed","size","padFirstAndLastRow","firstRow","viewportSize","padding","tableSize","lastRow","min","max","first","last"],"sources":["../src/ViewportDataUtils.ts"],"sourcesContent":["import type { Key } from 'react';\nimport clamp from 'lodash.clamp';\nimport type { Column, Row, Table, TreeTable } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport type { KeyedItem } from '@deephaven/utils';\n\nexport type OnTableUpdatedEvent = CustomEvent<{\n offset: number;\n columns: Column[];\n rows: ViewportRow[];\n}>;\n\nexport type RowDeserializer<T> = (row: ViewportRow, columns: Column[]) => T;\n\nexport type ViewportRow = Row & { offsetInSnapshot: number };\n\nconst log = Log.module('ViewportDataUtils');\n\n/**\n * Create a unique string key for a row based on its ordinal position in its\n * source table. This is calculated based on it's offset in the viewport\n * (row.offsetInSnapshot) + the offset of the snapshot.\n * @param row Row from a Table update event.\n * @param offset Offset of the current viewport.\n * @returns Unique string key for the
|
|
1
|
+
{"version":3,"file":"ViewportDataUtils.js","names":["clamp","Log","log","module","createKeyFromOffsetRow","row","offset","String","offsetInSnapshot","createOnTableUpdatedHandler","deserializeRow","bulkUpdate","onTableUpdated","event","columns","rows","detail","debug","updateKeyMap","Map","forEach","item","key","set","defaultRowDeserializer","reduce","result","col","name","get","generateEmptyKeyedItems","start","end","i","getSize","table","isClosed","size","padFirstAndLastRow","firstRow","viewportSize","padding","tableSize","lastRow","min","max","first","last"],"sources":["../src/ViewportDataUtils.ts"],"sourcesContent":["import type { Key } from 'react';\nimport clamp from 'lodash.clamp';\nimport type { Column, Row, Table, TreeTable } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport type { KeyedItem } from '@deephaven/utils';\n\nexport type OnTableUpdatedEvent = CustomEvent<{\n offset: number;\n columns: Column[];\n rows: ViewportRow[];\n}>;\n\nexport type RowDeserializer<T> = (row: ViewportRow, columns: Column[]) => T;\n\nexport type ViewportRow = Row & { offsetInSnapshot: number };\n\nconst log = Log.module('ViewportDataUtils');\n\n/**\n * Create a unique string key for a row based on its ordinal position in its\n * source table. This is calculated based on it's offset in the viewport\n * (row.offsetInSnapshot) + the offset of the snapshot.\n * @param row Row from a Table update event.\n * @param offset Offset of the current viewport.\n * @returns Unique string key for the ordinal position of the given row.\n */\nexport function createKeyFromOffsetRow(\n row: ViewportRow,\n offset: number\n): string {\n return String(row.offsetInSnapshot + offset);\n}\n\n/**\n * Creates a handler function for a `dh.Table.EVENT_UPDATED` event. Rows that\n * get passed to the handler will be bulk updated in the given `viewportData`\n * object based on their derived item keys.\n * @param viewportData State object for managing a list of KeyedItem data.\n * @param deserializeRow Converts a DH Row to an item object.\n * @returns Handler function for a `dh.Table.EVENT_UPDATED` event.\n */\nexport function createOnTableUpdatedHandler<T>(\n { bulkUpdate }: { bulkUpdate: (itemMap: Map<Key, KeyedItem<T>>) => void },\n deserializeRow: RowDeserializer<T>\n): (event: OnTableUpdatedEvent) => void {\n /**\n * Handler for a `dh.Table.EVENT_UPDATED` event.\n */\n return function onTableUpdated(event: OnTableUpdatedEvent) {\n const { columns, offset, rows } = event.detail;\n\n log.debug('table updated', event.detail);\n\n const updateKeyMap = new Map<Key, KeyedItem<T>>();\n\n rows.forEach(row => {\n const item = deserializeRow(row, columns);\n const key = createKeyFromOffsetRow(row, offset);\n updateKeyMap.set(key, { key, item });\n });\n\n log.debug('update keys', updateKeyMap);\n\n bulkUpdate(updateKeyMap);\n };\n}\n\n/**\n * Maps a Row to a key / value object. Keys are mapped ver batim from column\n * names.\n * @param row Row to map to an item.\n * @param columns Columns to map.\n * @returns A key / value object for the row.\n */\nexport function defaultRowDeserializer<T>(\n row: ViewportRow,\n columns: Column[]\n): T {\n return columns.reduce((result, col) => {\n // eslint-disable-next-line no-param-reassign\n result[col.name as keyof T] = row.get(col);\n return result;\n }, {} as T);\n}\n\n/**\n * For windowing to work, the underlying list needs to maintain a KeyedItem for\n * each row in the backing table (even if these rows haven't been loaded yet).\n * This is needed internally by react-spectrum so it can calculate the content\n * area size. This generator can create a range of empty `KeyedItem` objects.\n * @param start The starting index to generate\n * @param end The ending index to generate\n */\nexport function* generateEmptyKeyedItems<T>(\n start: number,\n end: number\n): Generator<KeyedItem<T>, void, unknown> {\n // eslint-disable-next-line no-plusplus\n for (let i = start; i <= end; ++i) {\n yield { key: String(i) };\n }\n}\n\n/**\n * Check a Table to see if it is closed before checking its size property. This\n * is important because calling Table.size on a closed table throws an error. If\n * the table is null or closed, return zero. Otherwise, return the current size.\n * @param table The table to check for its size.\n * @returns The size of the table or zero if the table is null or closed.\n */\nexport function getSize(table?: Table | TreeTable | null): number {\n return table == null || isClosed(table) ? 0 : table.size;\n}\n\n/**\n * Check if a given table is closed. Tree tables don't have an `isClosed` prop,\n * so will always return false.\n * @param table The table to check if it is closed.\n */\nexport function isClosed(table: Table | TreeTable): boolean {\n if ('isClosed' in table) {\n return table.isClosed;\n }\n\n return false;\n}\n\n/**\n * Determine the first and last row index for a viewport + extra leading and\n * trailing padding. Values will be \"clamped\" to stay within the table size.\n * @param firstRow Starting row index for the viewport.\n * @param viewportSize Size of the viewport.\n * @param padding Extra rows to add to the viewport. Will be used for leading\n * and trailing rows.\n * @param tableSize Total table size.\n * @returns Tuple containing indices for the first and last row.\n */\nexport function padFirstAndLastRow(\n firstRow: number,\n viewportSize: number,\n padding: number,\n tableSize: number\n): [number, number] {\n const lastRow = firstRow + viewportSize - 1;\n const [min, max] = [0, tableSize - 1];\n\n const first = clamp(firstRow - padding, min, max);\n const last = clamp(lastRow + padding, min, max);\n\n return [first, last];\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/jsapi-utils",
|
|
3
|
-
"version": "0.48.
|
|
3
|
+
"version": "0.48.1-beta.1+32e6d208",
|
|
4
4
|
"description": "Deephaven JSAPI Utils",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -21,15 +21,15 @@
|
|
|
21
21
|
"build:babel": "babel ./src --out-dir ./dist --extensions \".ts,.tsx,.js,.jsx\" --source-maps --root-mode upward"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@deephaven/filters": "^0.48.
|
|
25
|
-
"@deephaven/jsapi-types": "^0.48.
|
|
26
|
-
"@deephaven/log": "^0.48.
|
|
27
|
-
"@deephaven/utils": "^0.48.
|
|
24
|
+
"@deephaven/filters": "^0.48.1-beta.1+32e6d208",
|
|
25
|
+
"@deephaven/jsapi-types": "^0.48.1-beta.1+32e6d208",
|
|
26
|
+
"@deephaven/log": "^0.48.1-beta.1+32e6d208",
|
|
27
|
+
"@deephaven/utils": "^0.48.1-beta.1+32e6d208",
|
|
28
28
|
"lodash.clamp": "^4.0.3",
|
|
29
29
|
"shortid": "^2.2.16"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@deephaven/jsapi-shim": "^0.48.
|
|
32
|
+
"@deephaven/jsapi-shim": "^0.48.1-beta.1+32e6d208"
|
|
33
33
|
},
|
|
34
34
|
"files": [
|
|
35
35
|
"dist"
|
|
@@ -38,5 +38,5 @@
|
|
|
38
38
|
"publishConfig": {
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "32e6d208d0977092f315caa122b8ab23f0fc110a"
|
|
42
42
|
}
|