@deephaven/jsapi-components 0.38.0 → 0.38.1-beta.11

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.
Files changed (52) hide show
  1. package/dist/HookTestUtils.d.ts +10 -0
  2. package/dist/HookTestUtils.d.ts.map +1 -0
  3. package/dist/HookTestUtils.js +16 -0
  4. package/dist/HookTestUtils.js.map +1 -0
  5. package/dist/TableInput.d.ts.map +1 -1
  6. package/dist/TableInput.js +4 -2
  7. package/dist/TableInput.js.map +1 -1
  8. package/dist/index.d.ts +6 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +4 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/useDebouncedViewportSearch.d.ts +13 -0
  13. package/dist/useDebouncedViewportSearch.d.ts.map +1 -0
  14. package/dist/useDebouncedViewportSearch.js +46 -0
  15. package/dist/useDebouncedViewportSearch.js.map +1 -0
  16. package/dist/useInitializeViewportData.d.ts +3 -2
  17. package/dist/useInitializeViewportData.d.ts.map +1 -1
  18. package/dist/useInitializeViewportData.js +29 -9
  19. package/dist/useInitializeViewportData.js.map +1 -1
  20. package/dist/useSelectDistinctTable.d.ts +11 -7
  21. package/dist/useSelectDistinctTable.d.ts.map +1 -1
  22. package/dist/useSelectDistinctTable.js +4 -0
  23. package/dist/useSelectDistinctTable.js.map +1 -1
  24. package/dist/useSetPaddedViewportCallback.d.ts +1 -1
  25. package/dist/useSetPaddedViewportCallback.d.ts.map +1 -1
  26. package/dist/useSetPaddedViewportCallback.js.map +1 -1
  27. package/dist/useTable.d.ts +1 -1
  28. package/dist/useTable.d.ts.map +1 -1
  29. package/dist/useTable.js.map +1 -1
  30. package/dist/useTableClose.d.ts +8 -0
  31. package/dist/useTableClose.d.ts.map +1 -0
  32. package/dist/useTableClose.js +19 -0
  33. package/dist/useTableClose.js.map +1 -0
  34. package/dist/useTableColumn.d.ts +1 -1
  35. package/dist/useTableColumn.d.ts.map +1 -1
  36. package/dist/useTableColumn.js.map +1 -1
  37. package/dist/useTableListener.d.ts +1 -1
  38. package/dist/useTableListener.d.ts.map +1 -1
  39. package/dist/useTableListener.js.map +1 -1
  40. package/dist/useTableSize.d.ts +10 -0
  41. package/dist/useTableSize.d.ts.map +1 -0
  42. package/dist/useTableSize.js +20 -0
  43. package/dist/useTableSize.js.map +1 -0
  44. package/dist/useTableUtils.d.ts +6 -0
  45. package/dist/useTableUtils.d.ts.map +1 -0
  46. package/dist/useTableUtils.js +12 -0
  47. package/dist/useTableUtils.js.map +1 -0
  48. package/dist/useViewportData.d.ts +14 -8
  49. package/dist/useViewportData.d.ts.map +1 -1
  50. package/dist/useViewportData.js +19 -6
  51. package/dist/useViewportData.js.map +1 -1
  52. package/package.json +12 -12
@@ -0,0 +1,10 @@
1
+ import { ReactNode } from 'react';
2
+ import type { dh as DhType } from '@deephaven/jsapi-types';
3
+ export declare function makeApiContextWrapper(dh: DhType): ({ children }: {
4
+ children?: ReactNode;
5
+ }) => JSX.Element;
6
+ declare const _default: {
7
+ makeApiContextWrapper: typeof makeApiContextWrapper;
8
+ };
9
+ export default _default;
10
+ //# sourceMappingURL=HookTestUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HookTestUtils.d.ts","sourceRoot":"","sources":["../src/HookTestUtils.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM;eACe,SAAS;kBAGvE;;;;AAED,wBAEE"}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { ApiContext } from '@deephaven/jsapi-bootstrap';
3
+ export function makeApiContextWrapper(dh) {
4
+ return function ApiContextWrapper(_ref) {
5
+ var {
6
+ children
7
+ } = _ref;
8
+ return /*#__PURE__*/React.createElement(ApiContext.Provider, {
9
+ value: dh
10
+ }, children);
11
+ };
12
+ }
13
+ export default {
14
+ makeApiContextWrapper
15
+ };
16
+ //# sourceMappingURL=HookTestUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HookTestUtils.js","names":["React","ApiContext","makeApiContextWrapper","dh","ApiContextWrapper","children"],"sources":["../src/HookTestUtils.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport { ApiContext } from '@deephaven/jsapi-bootstrap';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\n\nexport function makeApiContextWrapper(dh: DhType) {\n return function ApiContextWrapper({ children }: { children?: ReactNode }) {\n return <ApiContext.Provider value={dh}>{children}</ApiContext.Provider>;\n };\n}\n\nexport default {\n makeApiContextWrapper,\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAqB,OAAO;AACxC,SAASC,UAAU,QAAQ,4BAA4B;AAGvD,OAAO,SAASC,qBAAqB,CAACC,EAAU,EAAE;EAChD,OAAO,SAASC,iBAAiB,OAAyC;IAAA,IAAxC;MAAEC;IAAmC,CAAC;IACtE,oBAAO,oBAAC,UAAU,CAAC,QAAQ;MAAC,KAAK,EAAEF;IAAG,GAAEE,QAAQ,CAAuB;EACzE,CAAC;AACH;AAEA,eAAe;EACbH;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableInput.d.ts","sourceRoot":"","sources":["../src/TableInput.tsx"],"names":[],"mappings":";AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAGjE,OAAO,EAA6B,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAG7E,OAAO,mBAAmB,CAAC;AAI3B,KAAK,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC;AAQlC,UAAU,eAAe;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,KAAK,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAID,iBAAS,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CA+PvD;kBA/PQ,UAAU;;;;;;;AAwQnB,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"TableInput.d.ts","sourceRoot":"","sources":["../src/TableInput.tsx"],"names":[],"mappings":";AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAGjE,OAAO,EAA6B,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAI7E,OAAO,mBAAmB,CAAC;AAI3B,KAAK,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC;AAQlC,UAAU,eAAe;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,KAAK,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAID,iBAAS,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAiQvD;kBAjQQ,UAAU;;;;;;;AA0QnB,eAAe,UAAU,CAAC"}
@@ -6,6 +6,7 @@ import { LoadingOverlay, SearchInput, SelectValueList } from '@deephaven/compone
6
6
  import { PromiseUtils } from '@deephaven/utils';
7
7
  import Log from '@deephaven/log';
8
8
  import { Formatter, FormatterUtils } from '@deephaven/jsapi-utils';
9
+ import { useApi } from '@deephaven/jsapi-bootstrap';
9
10
  import useTableColumn from "./useTableColumn.js";
10
11
  import "./TableInput.css";
11
12
  var log = Log.module('TableInput');
@@ -23,6 +24,7 @@ function TableInput(props) {
23
24
  table: tablePromise
24
25
  } = props;
25
26
  var parentRef = useRef(null);
27
+ var dh = useApi();
26
28
  var formatter = useMemo(() => {
27
29
  var columnFormats = FormatterUtils.getColumnFormats(settings);
28
30
  var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);
@@ -30,8 +32,8 @@ function TableInput(props) {
30
32
  defaultDecimalFormatOptions = {},
31
33
  defaultIntegerFormatOptions = {}
32
34
  } = settings;
33
- return new Formatter(columnFormats, dateTimeFormatterOptions, defaultDecimalFormatOptions, defaultIntegerFormatOptions);
34
- }, [settings]);
35
+ return new Formatter(dh, columnFormats, dateTimeFormatterOptions, defaultDecimalFormatOptions, defaultIntegerFormatOptions);
36
+ }, [dh, settings]);
35
37
  var [searchValue, setSearchValue] = useState('');
36
38
  var [selection, setSelection] = useState(new Set(defaultValue));
37
39
  var [table, setTable] = useState();
@@ -1 +1 @@
1
- {"version":3,"file":"TableInput.js","names":["React","useCallback","useState","useRef","useEffect","useMemo","classNames","LoadingOverlay","SearchInput","SelectValueList","PromiseUtils","Log","Formatter","FormatterUtils","useTableColumn","log","module","SIZE_LIMIT","TableInput","props","className","undefined","columnName","settings","defaultValue","isInvalid","onChange","onBlur","table","tablePromise","parentRef","formatter","columnFormats","getColumnFormats","dateTimeFormatterOptions","getDateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","searchValue","setSearchValue","selection","setSelection","Set","setTable","listRef","itemCount","Math","min","size","column","data","error","formatValue","value","getFormattedString","type","name","items","updatedSelection","removedItems","result","forEach","v","isSelected","has","delete","push","displayValue","debug2","newSelection","Array","from","initTable","promise","resolved","debug","e","isCanceled","cancelablePromise","makeCancelable","cancel","handleSearchChange","target","index","findIndex","item","includes","current","scrollIntoView","handleSelect","length","selectedValue","add","handleSelectAll","values","map","handleClearSelection","handleViewportChange","handleChildBlur","relatedTarget","HTMLElement","contains","isEmpty","message","displayName","defaultProps"],"sources":["../src/TableInput.tsx"],"sourcesContent":["import React, {\n useCallback,\n useState,\n useRef,\n useEffect,\n useMemo,\n} from 'react';\nimport classNames from 'classnames';\nimport {\n LoadingOverlay,\n SearchInput,\n SelectValueList,\n} from '@deephaven/components';\nimport type { LongWrapper, Table } from '@deephaven/jsapi-types';\nimport { PromiseUtils } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { Formatter, FormatterUtils, Settings } from '@deephaven/jsapi-utils';\nimport useTableColumn from './useTableColumn';\n\nimport './TableInput.scss';\n\nconst log = Log.module('TableInput');\n\ntype Value = LongWrapper | string;\n\ninterface SelectValueItem {\n displayValue: string;\n value: Value;\n isSelected: boolean;\n}\n\ninterface TableInputProps {\n className?: string;\n columnName: string;\n settings: Settings;\n defaultValue: Value[];\n isInvalid?: boolean;\n table: Promise<Table>;\n onChange(items: Value[]): void;\n onBlur?: () => void;\n}\n\nconst SIZE_LIMIT = 250;\n\nfunction TableInput(props: TableInputProps): JSX.Element {\n const {\n className = undefined,\n columnName,\n settings,\n defaultValue = [],\n isInvalid = false,\n onChange = () => false,\n onBlur = () => false,\n table: tablePromise,\n } = props;\n const parentRef = useRef<HTMLDivElement>(null);\n const formatter = useMemo(() => {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(\n settings\n );\n const {\n defaultDecimalFormatOptions = {},\n defaultIntegerFormatOptions = {},\n } = settings;\n return new Formatter(\n columnFormats,\n dateTimeFormatterOptions,\n defaultDecimalFormatOptions,\n defaultIntegerFormatOptions\n );\n }, [settings]);\n const [searchValue, setSearchValue] = useState('');\n const [selection, setSelection] = useState(new Set(defaultValue));\n const [table, setTable] = useState<Table | undefined>();\n const listRef = useRef<SelectValueList<Value>>(null);\n\n const itemCount = Math.min(table?.size ?? 0, SIZE_LIMIT);\n\n const { column, data, error } = useTableColumn(\n table,\n 0,\n SIZE_LIMIT - 1,\n columnName\n );\n\n const formatValue = useCallback(\n value =>\n column\n ? formatter.getFormattedString(value, column.type, column.name)\n : `${value}`,\n [column, formatter]\n );\n\n const [items, updatedSelection] = useMemo(() => {\n const removedItems = new Set(selection);\n const result: SelectValueItem[] = [];\n if (data == null) {\n // Viewport not initialized\n return [result, null];\n }\n (data as Value[]).forEach(v => {\n const value = `${v}`;\n const isSelected = selection.has(value);\n if (isSelected) {\n removedItems.delete(value);\n }\n result.push({\n value,\n displayValue: formatValue(v),\n isSelected,\n });\n });\n\n if (removedItems.size > 0) {\n log.debug2('Selection has items that are missing from the viewport');\n const newSelection = new Set(selection);\n Array.from(removedItems).forEach(value => {\n newSelection.delete(value);\n });\n return [result, newSelection];\n }\n return [result, null];\n }, [data, selection, formatValue]);\n\n useEffect(() => {\n if (updatedSelection !== null) {\n setSelection(updatedSelection);\n onChange(Array.from(updatedSelection));\n }\n }, [onChange, updatedSelection]);\n\n const initTable = useCallback(async promise => {\n try {\n const resolved = await promise;\n log.debug('Table resolved', resolved);\n setTable(resolved);\n } catch (e) {\n if (PromiseUtils.isCanceled(e)) {\n return;\n }\n log.error(e);\n }\n }, []);\n\n useEffect(() => {\n const cancelablePromise = PromiseUtils.makeCancelable(tablePromise);\n initTable(cancelablePromise);\n return () => {\n log.debug2('Cancel table promise');\n cancelablePromise.cancel();\n };\n }, [tablePromise, initTable]);\n\n // Scroll the item matching the input into view\n const handleSearchChange = useCallback(\n e => {\n const { value } = e.target;\n setSearchValue(value);\n const index = items.findIndex(item => item.displayValue.includes(value));\n if (index > -1) {\n log.debug2(`Found ${value} at index ${index}`);\n listRef.current?.scrollIntoView(index);\n } else {\n log.debug2(`${value} not found`);\n }\n },\n [items, listRef]\n );\n\n const handleSelect = useCallback(\n index => {\n log.debug('handleSelect', index);\n if (index >= items.length) {\n log.error('Invalid index', index);\n return;\n }\n const selectedValue = items[index].value;\n const newSelection = new Set(selection);\n if (items[index].isSelected) {\n newSelection.delete(selectedValue);\n } else {\n newSelection.add(selectedValue);\n }\n setSelection(newSelection);\n onChange(Array.from(newSelection));\n },\n [onChange, items, selection]\n );\n\n const handleSelectAll = useCallback(() => {\n const values = items.map(item => item.value);\n const newSelection = new Set(values);\n setSelection(newSelection);\n onChange(values);\n }, [items, onChange]);\n\n const handleClearSelection = useCallback(() => {\n setSelection(new Set());\n onChange([]);\n }, [onChange]);\n\n const handleViewportChange = useCallback(() => {\n // no-op\n }, []);\n\n const handleChildBlur = useCallback(\n (e: React.FocusEvent<Element>) => {\n const { relatedTarget } = e;\n log.debug(\n 'handleChildBlur',\n relatedTarget,\n relatedTarget instanceof HTMLElement,\n parentRef.current,\n parentRef.current?.contains(relatedTarget)\n );\n if (\n !relatedTarget ||\n (parentRef.current &&\n relatedTarget instanceof HTMLElement &&\n !parentRef.current.contains(relatedTarget))\n ) {\n onBlur();\n }\n },\n [onBlur]\n );\n\n const isEmpty = items.length === 0;\n\n return (\n <div\n ref={parentRef}\n className={classNames(\n 'table-input-container d-flex flex-column position-relative',\n className\n )}\n >\n <SearchInput\n disabled={!!error || isEmpty}\n value={searchValue}\n placeholder=\"Search\"\n onChange={handleSearchChange}\n className=\"mb-2 d-flex\"\n onBlur={handleChildBlur}\n />\n <SelectValueList\n className=\"table-input-list\"\n disabled={table === undefined || isEmpty}\n isInvalid={isInvalid}\n items={isEmpty ? [{ value: 'Empty', isSelected: false }] : items}\n itemCount={itemCount}\n offset={0}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n ref={listRef}\n onBlur={handleChildBlur}\n />\n\n {table && (\n <div className=\"meta-row\">\n <div className=\"d-flex align-items-center text-muted small\">\n {table != null && table.size > itemCount && (\n <>Table is too large, showing the first {SIZE_LIMIT} items.</>\n )}\n </div>\n <div>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onBlur={handleChildBlur}\n onClick={handleSelectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link mr-a\"\n onBlur={handleChildBlur}\n onClick={handleClearSelection}\n >\n Clear\n </button>\n </div>\n </div>\n )}\n\n {table == null ||\n (error && (\n <div className=\"h-100 w-100 position-absolute\">\n <LoadingOverlay\n isLoaded={table != null}\n isLoading={table == null && error == null}\n errorMessage={error?.message ?? null}\n />\n </div>\n ))}\n </div>\n );\n}\n\nTableInput.displayName = 'TableInput';\n\nTableInput.defaultProps = {\n isInvalid: false,\n className: undefined,\n};\n\nexport default TableInput;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableInput.js","names":["React","useCallback","useState","useRef","useEffect","useMemo","classNames","LoadingOverlay","SearchInput","SelectValueList","PromiseUtils","Log","Formatter","FormatterUtils","useApi","useTableColumn","log","module","SIZE_LIMIT","TableInput","props","className","undefined","columnName","settings","defaultValue","isInvalid","onChange","onBlur","table","tablePromise","parentRef","dh","formatter","columnFormats","getColumnFormats","dateTimeFormatterOptions","getDateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","searchValue","setSearchValue","selection","setSelection","Set","setTable","listRef","itemCount","Math","min","size","column","data","error","formatValue","value","getFormattedString","type","name","items","updatedSelection","removedItems","result","forEach","v","isSelected","has","delete","push","displayValue","debug2","newSelection","Array","from","initTable","promise","resolved","debug","e","isCanceled","cancelablePromise","makeCancelable","cancel","handleSearchChange","target","index","findIndex","item","includes","current","scrollIntoView","handleSelect","length","selectedValue","add","handleSelectAll","values","map","handleClearSelection","handleViewportChange","handleChildBlur","relatedTarget","HTMLElement","contains","isEmpty","message","displayName","defaultProps"],"sources":["../src/TableInput.tsx"],"sourcesContent":["import React, {\n useCallback,\n useState,\n useRef,\n useEffect,\n useMemo,\n} from 'react';\nimport classNames from 'classnames';\nimport {\n LoadingOverlay,\n SearchInput,\n SelectValueList,\n} from '@deephaven/components';\nimport type { LongWrapper, Table } from '@deephaven/jsapi-types';\nimport { PromiseUtils } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { Formatter, FormatterUtils, Settings } from '@deephaven/jsapi-utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport useTableColumn from './useTableColumn';\n\nimport './TableInput.scss';\n\nconst log = Log.module('TableInput');\n\ntype Value = LongWrapper | string;\n\ninterface SelectValueItem {\n displayValue: string;\n value: Value;\n isSelected: boolean;\n}\n\ninterface TableInputProps {\n className?: string;\n columnName: string;\n settings: Settings;\n defaultValue: Value[];\n isInvalid?: boolean;\n table: Promise<Table>;\n onChange(items: Value[]): void;\n onBlur?: () => void;\n}\n\nconst SIZE_LIMIT = 250;\n\nfunction TableInput(props: TableInputProps): JSX.Element {\n const {\n className = undefined,\n columnName,\n settings,\n defaultValue = [],\n isInvalid = false,\n onChange = () => false,\n onBlur = () => false,\n table: tablePromise,\n } = props;\n const parentRef = useRef<HTMLDivElement>(null);\n const dh = useApi();\n const formatter = useMemo(() => {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(\n settings\n );\n const {\n defaultDecimalFormatOptions = {},\n defaultIntegerFormatOptions = {},\n } = settings;\n return new Formatter(\n dh,\n columnFormats,\n dateTimeFormatterOptions,\n defaultDecimalFormatOptions,\n defaultIntegerFormatOptions\n );\n }, [dh, settings]);\n const [searchValue, setSearchValue] = useState('');\n const [selection, setSelection] = useState(new Set(defaultValue));\n const [table, setTable] = useState<Table | undefined>();\n const listRef = useRef<SelectValueList<Value>>(null);\n\n const itemCount = Math.min(table?.size ?? 0, SIZE_LIMIT);\n\n const { column, data, error } = useTableColumn(\n table,\n 0,\n SIZE_LIMIT - 1,\n columnName\n );\n\n const formatValue = useCallback(\n value =>\n column\n ? formatter.getFormattedString(value, column.type, column.name)\n : `${value}`,\n [column, formatter]\n );\n\n const [items, updatedSelection] = useMemo(() => {\n const removedItems = new Set(selection);\n const result: SelectValueItem[] = [];\n if (data == null) {\n // Viewport not initialized\n return [result, null];\n }\n (data as Value[]).forEach(v => {\n const value = `${v}`;\n const isSelected = selection.has(value);\n if (isSelected) {\n removedItems.delete(value);\n }\n result.push({\n value,\n displayValue: formatValue(v),\n isSelected,\n });\n });\n\n if (removedItems.size > 0) {\n log.debug2('Selection has items that are missing from the viewport');\n const newSelection = new Set(selection);\n Array.from(removedItems).forEach(value => {\n newSelection.delete(value);\n });\n return [result, newSelection];\n }\n return [result, null];\n }, [data, selection, formatValue]);\n\n useEffect(() => {\n if (updatedSelection !== null) {\n setSelection(updatedSelection);\n onChange(Array.from(updatedSelection));\n }\n }, [onChange, updatedSelection]);\n\n const initTable = useCallback(async promise => {\n try {\n const resolved = await promise;\n log.debug('Table resolved', resolved);\n setTable(resolved);\n } catch (e) {\n if (PromiseUtils.isCanceled(e)) {\n return;\n }\n log.error(e);\n }\n }, []);\n\n useEffect(() => {\n const cancelablePromise = PromiseUtils.makeCancelable(tablePromise);\n initTable(cancelablePromise);\n return () => {\n log.debug2('Cancel table promise');\n cancelablePromise.cancel();\n };\n }, [tablePromise, initTable]);\n\n // Scroll the item matching the input into view\n const handleSearchChange = useCallback(\n e => {\n const { value } = e.target;\n setSearchValue(value);\n const index = items.findIndex(item => item.displayValue.includes(value));\n if (index > -1) {\n log.debug2(`Found ${value} at index ${index}`);\n listRef.current?.scrollIntoView(index);\n } else {\n log.debug2(`${value} not found`);\n }\n },\n [items, listRef]\n );\n\n const handleSelect = useCallback(\n index => {\n log.debug('handleSelect', index);\n if (index >= items.length) {\n log.error('Invalid index', index);\n return;\n }\n const selectedValue = items[index].value;\n const newSelection = new Set(selection);\n if (items[index].isSelected) {\n newSelection.delete(selectedValue);\n } else {\n newSelection.add(selectedValue);\n }\n setSelection(newSelection);\n onChange(Array.from(newSelection));\n },\n [onChange, items, selection]\n );\n\n const handleSelectAll = useCallback(() => {\n const values = items.map(item => item.value);\n const newSelection = new Set(values);\n setSelection(newSelection);\n onChange(values);\n }, [items, onChange]);\n\n const handleClearSelection = useCallback(() => {\n setSelection(new Set());\n onChange([]);\n }, [onChange]);\n\n const handleViewportChange = useCallback(() => {\n // no-op\n }, []);\n\n const handleChildBlur = useCallback(\n (e: React.FocusEvent<Element>) => {\n const { relatedTarget } = e;\n log.debug(\n 'handleChildBlur',\n relatedTarget,\n relatedTarget instanceof HTMLElement,\n parentRef.current,\n parentRef.current?.contains(relatedTarget)\n );\n if (\n !relatedTarget ||\n (parentRef.current &&\n relatedTarget instanceof HTMLElement &&\n !parentRef.current.contains(relatedTarget))\n ) {\n onBlur();\n }\n },\n [onBlur]\n );\n\n const isEmpty = items.length === 0;\n\n return (\n <div\n ref={parentRef}\n className={classNames(\n 'table-input-container d-flex flex-column position-relative',\n className\n )}\n >\n <SearchInput\n disabled={!!error || isEmpty}\n value={searchValue}\n placeholder=\"Search\"\n onChange={handleSearchChange}\n className=\"mb-2 d-flex\"\n onBlur={handleChildBlur}\n />\n <SelectValueList\n className=\"table-input-list\"\n disabled={table === undefined || isEmpty}\n isInvalid={isInvalid}\n items={isEmpty ? [{ value: 'Empty', isSelected: false }] : items}\n itemCount={itemCount}\n offset={0}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n ref={listRef}\n onBlur={handleChildBlur}\n />\n\n {table && (\n <div className=\"meta-row\">\n <div className=\"d-flex align-items-center text-muted small\">\n {table != null && table.size > itemCount && (\n <>Table is too large, showing the first {SIZE_LIMIT} items.</>\n )}\n </div>\n <div>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onBlur={handleChildBlur}\n onClick={handleSelectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link mr-a\"\n onBlur={handleChildBlur}\n onClick={handleClearSelection}\n >\n Clear\n </button>\n </div>\n </div>\n )}\n\n {table == null ||\n (error && (\n <div className=\"h-100 w-100 position-absolute\">\n <LoadingOverlay\n isLoaded={table != null}\n isLoading={table == null && error == null}\n errorMessage={error?.message ?? null}\n />\n </div>\n ))}\n </div>\n );\n}\n\nTableInput.displayName = 'TableInput';\n\nTableInput.defaultProps = {\n isInvalid: false,\n className: undefined,\n};\n\nexport default TableInput;\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,19 @@
1
+ export * from './HookTestUtils';
1
2
  export { default as TableInput } from './TableInput';
2
3
  export * from './RefreshTokenBootstrap';
3
4
  export * from './RefreshTokenUtils';
4
5
  export { default as useBroadcastChannel } from './useBroadcastChannel';
5
6
  export { default as useBroadcastLoginListener } from './useBroadcastLoginListener';
7
+ export { default as useDebouncedViewportSearch } from './useDebouncedViewportSearch';
6
8
  export { default as useInitializeViewportData } from './useInitializeViewportData';
7
9
  export { default as useTable } from './useTable';
8
10
  export { default as useTableColumn } from './useTableColumn';
9
11
  export { default as useTableListener } from './useTableListener';
10
12
  export { default as useSelectDistinctTable } from './useSelectDistinctTable';
11
13
  export { default as useSetPaddedViewportCallback } from './useSetPaddedViewportCallback';
14
+ export { default as useTableClose } from './useTableClose';
15
+ export { default as useTableSize } from './useTableSize';
12
16
  export { default as useViewportData } from './useViewportData';
17
+ export type { UseSelectDistinctTableResult } from './useSelectDistinctTable';
18
+ export type { UseViewportDataResult } from './useViewportData';
13
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC7E,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,13 +1,17 @@
1
+ export * from "./HookTestUtils.js";
1
2
  export { default as TableInput } from "./TableInput.js";
2
3
  export * from "./RefreshTokenBootstrap.js";
3
4
  export * from "./RefreshTokenUtils.js";
4
5
  export { default as useBroadcastChannel } from "./useBroadcastChannel.js";
5
6
  export { default as useBroadcastLoginListener } from "./useBroadcastLoginListener.js";
7
+ export { default as useDebouncedViewportSearch } from "./useDebouncedViewportSearch.js";
6
8
  export { default as useInitializeViewportData } from "./useInitializeViewportData.js";
7
9
  export { default as useTable } from "./useTable.js";
8
10
  export { default as useTableColumn } from "./useTableColumn.js";
9
11
  export { default as useTableListener } from "./useTableListener.js";
10
12
  export { default as useSelectDistinctTable } from "./useSelectDistinctTable.js";
11
13
  export { default as useSetPaddedViewportCallback } from "./useSetPaddedViewportCallback.js";
14
+ export { default as useTableClose } from "./useTableClose.js";
15
+ export { default as useTableSize } from "./useTableSize.js";
12
16
  export { default as useViewportData } from "./useViewportData.js";
13
17
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","TableInput","useBroadcastChannel","useBroadcastLoginListener","useInitializeViewportData","useTable","useTableColumn","useTableListener","useSelectDistinctTable","useSetPaddedViewportCallback","useViewportData"],"sources":["../src/index.ts"],"sourcesContent":["export { default as TableInput } from './TableInput';\nexport * from './RefreshTokenBootstrap';\nexport * from './RefreshTokenUtils';\nexport { default as useBroadcastChannel } from './useBroadcastChannel';\nexport { default as useBroadcastLoginListener } from './useBroadcastLoginListener';\nexport { default as useInitializeViewportData } from './useInitializeViewportData';\nexport { default as useTable } from './useTable';\nexport { default as useTableColumn } from './useTableColumn';\nexport { default as useTableListener } from './useTableListener';\nexport { default as useSelectDistinctTable } from './useSelectDistinctTable';\nexport { default as useSetPaddedViewportCallback } from './useSetPaddedViewportCallback';\nexport { default as useViewportData } from './useViewportData';\n"],"mappings":"SAASA,OAAO,IAAIC,UAAU;AAAA;AAAA;AAAA,SAGrBD,OAAO,IAAIE,mBAAmB;AAAA,SAC9BF,OAAO,IAAIG,yBAAyB;AAAA,SACpCH,OAAO,IAAII,yBAAyB;AAAA,SACpCJ,OAAO,IAAIK,QAAQ;AAAA,SACnBL,OAAO,IAAIM,cAAc;AAAA,SACzBN,OAAO,IAAIO,gBAAgB;AAAA,SAC3BP,OAAO,IAAIQ,sBAAsB;AAAA,SACjCR,OAAO,IAAIS,4BAA4B;AAAA,SACvCT,OAAO,IAAIU,eAAe"}
1
+ {"version":3,"file":"index.js","names":["default","TableInput","useBroadcastChannel","useBroadcastLoginListener","useDebouncedViewportSearch","useInitializeViewportData","useTable","useTableColumn","useTableListener","useSelectDistinctTable","useSetPaddedViewportCallback","useTableClose","useTableSize","useViewportData"],"sources":["../src/index.ts"],"sourcesContent":["export * from './HookTestUtils';\nexport { default as TableInput } from './TableInput';\nexport * from './RefreshTokenBootstrap';\nexport * from './RefreshTokenUtils';\nexport { default as useBroadcastChannel } from './useBroadcastChannel';\nexport { default as useBroadcastLoginListener } from './useBroadcastLoginListener';\nexport { default as useDebouncedViewportSearch } from './useDebouncedViewportSearch';\nexport { default as useInitializeViewportData } from './useInitializeViewportData';\nexport { default as useTable } from './useTable';\nexport { default as useTableColumn } from './useTableColumn';\nexport { default as useTableListener } from './useTableListener';\nexport { default as useSelectDistinctTable } from './useSelectDistinctTable';\nexport { default as useSetPaddedViewportCallback } from './useSetPaddedViewportCallback';\nexport { default as useTableClose } from './useTableClose';\nexport { default as useTableSize } from './useTableSize';\nexport { default as useViewportData } from './useViewportData';\nexport type { UseSelectDistinctTableResult } from './useSelectDistinctTable';\nexport type { UseViewportDataResult } from './useViewportData';\n"],"mappings":";SACSA,OAAO,IAAIC,UAAU;AAAA;AAAA;AAAA,SAGrBD,OAAO,IAAIE,mBAAmB;AAAA,SAC9BF,OAAO,IAAIG,yBAAyB;AAAA,SACpCH,OAAO,IAAII,0BAA0B;AAAA,SACrCJ,OAAO,IAAIK,yBAAyB;AAAA,SACpCL,OAAO,IAAIM,QAAQ;AAAA,SACnBN,OAAO,IAAIO,cAAc;AAAA,SACzBP,OAAO,IAAIQ,gBAAgB;AAAA,SAC3BR,OAAO,IAAIS,sBAAsB;AAAA,SACjCT,OAAO,IAAIU,4BAA4B;AAAA,SACvCV,OAAO,IAAIW,aAAa;AAAA,SACxBX,OAAO,IAAIY,YAAY;AAAA,SACvBZ,OAAO,IAAIa,eAAe"}
@@ -0,0 +1,13 @@
1
+ import type { Table, TreeTable } from '@deephaven/jsapi-types';
2
+ import { UseViewportDataResult } from './useViewportData';
3
+ export declare const DEBOUNCE_VIEWPORT_SEARCH_MS = 200;
4
+ /**
5
+ * React hook that returns a debounced search callback for filtering a table
6
+ * viewport.
7
+ * @param viewportData Table viewport to filter
8
+ * @param columnName Column name to filter by
9
+ * @param debounceMs Millisecond value to debounce
10
+ * @returns A debounced search function
11
+ */
12
+ export default function useDebouncedViewportSearch<I, T extends Table | TreeTable>(viewportData: UseViewportDataResult<I, T>, columnName: string, debounceMs?: number): (searchText: string) => void;
13
+ //# sourceMappingURL=useDebouncedViewportSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebouncedViewportSearch.d.ts","sourceRoot":"","sources":["../src/useDebouncedViewportSearch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAK/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAI1D,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAChD,CAAC,EACD,CAAC,SAAS,KAAK,GAAG,SAAS,EAE3B,YAAY,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EACzC,UAAU,EAAE,MAAM,EAClB,UAAU,SAA8B,GACvC,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CA0C9B"}
@@ -0,0 +1,46 @@
1
+ import debounce from 'lodash.debounce';
2
+ import { TableUtils } from '@deephaven/jsapi-utils';
3
+ import { useApi } from '@deephaven/jsapi-bootstrap';
4
+ import Log from '@deephaven/log';
5
+ import { useEffect, useMemo } from 'react';
6
+ var log = Log.module('useDebouncedViewportSearch');
7
+ export var DEBOUNCE_VIEWPORT_SEARCH_MS = 200;
8
+
9
+ /**
10
+ * React hook that returns a debounced search callback for filtering a table
11
+ * viewport.
12
+ * @param viewportData Table viewport to filter
13
+ * @param columnName Column name to filter by
14
+ * @param debounceMs Millisecond value to debounce
15
+ * @returns A debounced search function
16
+ */
17
+ export default function useDebouncedViewportSearch(viewportData, columnName) {
18
+ var debounceMs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEBOUNCE_VIEWPORT_SEARCH_MS;
19
+ var dh = useApi();
20
+ var tableUtils = useMemo(() => new TableUtils(dh), [dh]);
21
+ var {
22
+ table,
23
+ applyFiltersAndRefresh
24
+ } = viewportData;
25
+ var debouncedSearch = useMemo(() => debounce(searchText => {
26
+ log.debug("Applying debounced searchText '".concat(searchText, "'"));
27
+ if (table == null) {
28
+ return;
29
+ }
30
+ var searchTextTrimmed = searchText.trim();
31
+ if (searchTextTrimmed === '') {
32
+ applyFiltersAndRefresh([]);
33
+ return;
34
+ }
35
+ var column = table.findColumn(columnName);
36
+ var value = tableUtils.makeFilterValue(column.type, searchTextTrimmed);
37
+ var filter = [column.filter().contains(value)];
38
+ applyFiltersAndRefresh(filter);
39
+ }, debounceMs), [applyFiltersAndRefresh, columnName, debounceMs, table, tableUtils]);
40
+ useEffect(() => () => {
41
+ log.debug('Cancelling debounced search function');
42
+ debouncedSearch.cancel();
43
+ }, [debouncedSearch]);
44
+ return debouncedSearch;
45
+ }
46
+ //# sourceMappingURL=useDebouncedViewportSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebouncedViewportSearch.js","names":["debounce","TableUtils","useApi","Log","useEffect","useMemo","log","module","DEBOUNCE_VIEWPORT_SEARCH_MS","useDebouncedViewportSearch","viewportData","columnName","debounceMs","dh","tableUtils","table","applyFiltersAndRefresh","debouncedSearch","searchText","debug","searchTextTrimmed","trim","column","findColumn","value","makeFilterValue","type","filter","contains","cancel"],"sources":["../src/useDebouncedViewportSearch.ts"],"sourcesContent":["import debounce from 'lodash.debounce';\nimport type { Table, TreeTable } from '@deephaven/jsapi-types';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport Log from '@deephaven/log';\nimport { useEffect, useMemo } from 'react';\nimport { UseViewportDataResult } from './useViewportData';\n\nconst log = Log.module('useDebouncedViewportSearch');\n\nexport const DEBOUNCE_VIEWPORT_SEARCH_MS = 200;\n\n/**\n * React hook that returns a debounced search callback for filtering a table\n * viewport.\n * @param viewportData Table viewport to filter\n * @param columnName Column name to filter by\n * @param debounceMs Millisecond value to debounce\n * @returns A debounced search function\n */\nexport default function useDebouncedViewportSearch<\n I,\n T extends Table | TreeTable\n>(\n viewportData: UseViewportDataResult<I, T>,\n columnName: string,\n debounceMs = DEBOUNCE_VIEWPORT_SEARCH_MS\n): (searchText: string) => void {\n const dh = useApi();\n const tableUtils = useMemo(() => new TableUtils(dh), [dh]);\n const { table, applyFiltersAndRefresh } = viewportData;\n\n const debouncedSearch = useMemo(\n () =>\n debounce((searchText: string) => {\n log.debug(`Applying debounced searchText '${searchText}'`);\n\n if (table == null) {\n return;\n }\n\n const searchTextTrimmed = searchText.trim();\n\n if (searchTextTrimmed === '') {\n applyFiltersAndRefresh([]);\n return;\n }\n\n const column = table.findColumn(columnName);\n const value = tableUtils.makeFilterValue(\n column.type,\n searchTextTrimmed\n );\n const filter = [column.filter().contains(value)];\n\n applyFiltersAndRefresh(filter);\n }, debounceMs),\n [applyFiltersAndRefresh, columnName, debounceMs, table, tableUtils]\n );\n\n useEffect(\n () => () => {\n log.debug('Cancelling debounced search function');\n debouncedSearch.cancel();\n },\n [debouncedSearch]\n );\n\n return debouncedSearch;\n}\n"],"mappings":"AAAA,OAAOA,QAAQ,MAAM,iBAAiB;AAEtC,SAASC,UAAU,QAAQ,wBAAwB;AACnD,SAASC,MAAM,QAAQ,4BAA4B;AACnD,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAG1C,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAM,CAAC,4BAA4B,CAAC;AAEpD,OAAO,IAAMC,2BAA2B,GAAG,GAAG;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,0BAA0B,CAIhDC,YAAyC,EACzCC,UAAkB,EAEY;EAAA,IAD9BC,UAAU,uEAAGJ,2BAA2B;EAExC,IAAMK,EAAE,GAAGX,MAAM,EAAE;EACnB,IAAMY,UAAU,GAAGT,OAAO,CAAC,MAAM,IAAIJ,UAAU,CAACY,EAAE,CAAC,EAAE,CAACA,EAAE,CAAC,CAAC;EAC1D,IAAM;IAAEE,KAAK;IAAEC;EAAuB,CAAC,GAAGN,YAAY;EAEtD,IAAMO,eAAe,GAAGZ,OAAO,CAC7B,MACEL,QAAQ,CAAEkB,UAAkB,IAAK;IAC/BZ,GAAG,CAACa,KAAK,0CAAmCD,UAAU,OAAI;IAE1D,IAAIH,KAAK,IAAI,IAAI,EAAE;MACjB;IACF;IAEA,IAAMK,iBAAiB,GAAGF,UAAU,CAACG,IAAI,EAAE;IAE3C,IAAID,iBAAiB,KAAK,EAAE,EAAE;MAC5BJ,sBAAsB,CAAC,EAAE,CAAC;MAC1B;IACF;IAEA,IAAMM,MAAM,GAAGP,KAAK,CAACQ,UAAU,CAACZ,UAAU,CAAC;IAC3C,IAAMa,KAAK,GAAGV,UAAU,CAACW,eAAe,CACtCH,MAAM,CAACI,IAAI,EACXN,iBAAiB,CAClB;IACD,IAAMO,MAAM,GAAG,CAACL,MAAM,CAACK,MAAM,EAAE,CAACC,QAAQ,CAACJ,KAAK,CAAC,CAAC;IAEhDR,sBAAsB,CAACW,MAAM,CAAC;EAChC,CAAC,EAAEf,UAAU,CAAC,EAChB,CAACI,sBAAsB,EAAEL,UAAU,EAAEC,UAAU,EAAEG,KAAK,EAAED,UAAU,CAAC,CACpE;EAEDV,SAAS,CACP,MAAM,MAAM;IACVE,GAAG,CAACa,KAAK,CAAC,sCAAsC,CAAC;IACjDF,eAAe,CAACY,MAAM,EAAE;EAC1B,CAAC,EACD,CAACZ,eAAe,CAAC,CAClB;EAED,OAAOA,eAAe;AACxB"}
@@ -1,5 +1,5 @@
1
1
  import { ListData } from '@react-stately/data';
2
- import { Table, TreeTable } from '@deephaven/jsapi-types';
2
+ import type { Table, TreeTable } from '@deephaven/jsapi-types';
3
3
  import { KeyedItem } from '@deephaven/jsapi-utils';
4
4
  /**
5
5
  * Initializes a ListData instance that can be used for windowed views of a
@@ -11,7 +11,8 @@ import { KeyedItem } from '@deephaven/jsapi-utils';
11
11
  * source table. This is intended for "human" sized tables such as those used in
12
12
  * admin panels. This is not suitable for "machine" scale with millions+ rows.
13
13
  * @param table The table that will be used to determine the list size.
14
- * @returns
14
+ * @returns a React Stately ListData object. Note that this object is recreated
15
+ * by React Stately on every render.
15
16
  */
16
17
  export default function useInitializeViewportData<T>(table: Table | TreeTable | null): ListData<KeyedItem<T>>;
17
18
  //# sourceMappingURL=useInitializeViewportData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useInitializeViewportData.d.ts","sourceRoot":"","sources":["../src/useInitializeViewportData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAe,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,SAAS,EAGV,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,CAAC,EACjD,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,GAC9B,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAsBxB"}
1
+ {"version":3,"file":"useInitializeViewportData.d.ts","sourceRoot":"","sources":["../src/useInitializeViewportData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAe,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAA2B,MAAM,wBAAwB,CAAC;AAI5E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,CAAC,EACjD,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,GAC9B,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAuCxB"}
@@ -1,7 +1,8 @@
1
1
  import { useEffect } from 'react';
2
2
  import { useListData } from '@react-stately/data';
3
- import { generateEmptyKeyedItems, getSize } from '@deephaven/jsapi-utils';
4
-
3
+ import { generateEmptyKeyedItems } from '@deephaven/jsapi-utils';
4
+ import { usePrevious } from '@deephaven/react-hooks';
5
+ import useTableSize from "./useTableSize.js";
5
6
  /**
6
7
  * Initializes a ListData instance that can be used for windowed views of a
7
8
  * Table. The list must always contain a KeyedItem for every record in the table,
@@ -12,31 +13,50 @@ import { generateEmptyKeyedItems, getSize } from '@deephaven/jsapi-utils';
12
13
  * source table. This is intended for "human" sized tables such as those used in
13
14
  * admin panels. This is not suitable for "machine" scale with millions+ rows.
14
15
  * @param table The table that will be used to determine the list size.
15
- * @returns
16
+ * @returns a React Stately ListData object. Note that this object is recreated
17
+ * by React Stately on every render.
16
18
  */
17
19
  export default function useInitializeViewportData(table) {
18
20
  var viewportData = useListData({});
21
+ var prevTable = usePrevious(table);
22
+
23
+ // If the table changes size, we need to re-initialize it.
24
+ var size = Math.max(0, useTableSize(table));
19
25
 
20
26
  // We only want this to fire 1x once the table exists. Note that `useListData`
21
27
  // has no way to respond to a reference change of the `table` instance so we
22
28
  // have to manually delete any previous keyed items from the list.
23
29
  useEffect(() => {
24
- if (!table) {
25
- return;
26
- }
27
- if (viewportData.items.length) {
30
+ var currentSize = viewportData.items.length;
31
+
32
+ // If our table instance has changed, we want to clear all items from state
33
+ if (table !== prevTable && currentSize) {
28
34
  viewportData.remove(...viewportData.items.map(_ref => {
29
35
  var {
30
36
  key
31
37
  } = _ref;
32
38
  return key;
33
39
  }));
40
+ currentSize = 0;
41
+ }
42
+ if (!table) {
43
+ return;
44
+ }
45
+ if (size > currentSize) {
46
+ viewportData.insert(currentSize, ...generateEmptyKeyedItems(currentSize, size - 1));
47
+ } else if (size < currentSize) {
48
+ var keys = viewportData.items.slice(size).map(_ref2 => {
49
+ var {
50
+ key
51
+ } = _ref2;
52
+ return key;
53
+ });
54
+ viewportData.remove(...keys);
34
55
  }
35
- viewportData.insert(0, ...generateEmptyKeyedItems(getSize(table)));
36
56
 
37
57
  // Intentionally excluding viewportData since it changes on every render.
38
58
  // eslint-disable-next-line react-hooks/exhaustive-deps
39
- }, [table]);
59
+ }, [size, table]);
40
60
  return viewportData;
41
61
  }
42
62
  //# sourceMappingURL=useInitializeViewportData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useInitializeViewportData.js","names":["useEffect","useListData","generateEmptyKeyedItems","getSize","useInitializeViewportData","table","viewportData","items","length","remove","map","key","insert"],"sources":["../src/useInitializeViewportData.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { ListData, useListData } from '@react-stately/data';\nimport { Table, TreeTable } from '@deephaven/jsapi-types';\nimport {\n KeyedItem,\n generateEmptyKeyedItems,\n getSize,\n} from '@deephaven/jsapi-utils';\n\n/**\n * Initializes a ListData instance that can be used for windowed views of a\n * Table. The list must always contain a KeyedItem for every record in the table,\n * so it is pre-populated with empty items that can be updated with real data as\n * the window changes.\n *\n * IMPORTANT: this will create an empty KeyedItem object for every row in the\n * source table. This is intended for \"human\" sized tables such as those used in\n * admin panels. This is not suitable for \"machine\" scale with millions+ rows.\n * @param table The table that will be used to determine the list size.\n * @returns\n */\nexport default function useInitializeViewportData<T>(\n table: Table | TreeTable | null\n): ListData<KeyedItem<T>> {\n const viewportData = useListData<KeyedItem<T>>({});\n\n // We only want this to fire 1x once the table exists. Note that `useListData`\n // has no way to respond to a reference change of the `table` instance so we\n // have to manually delete any previous keyed items from the list.\n useEffect(() => {\n if (!table) {\n return;\n }\n\n if (viewportData.items.length) {\n viewportData.remove(...viewportData.items.map(({ key }) => key));\n }\n\n viewportData.insert(0, ...generateEmptyKeyedItems<T>(getSize(table)));\n\n // Intentionally excluding viewportData since it changes on every render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [table]);\n\n return viewportData;\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAAmBC,WAAW,QAAQ,qBAAqB;AAE3D,SAEEC,uBAAuB,EACvBC,OAAO,QACF,wBAAwB;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,yBAAyB,CAC/CC,KAA+B,EACP;EACxB,IAAMC,YAAY,GAAGL,WAAW,CAAe,CAAC,CAAC,CAAC;;EAElD;EACA;EACA;EACAD,SAAS,CAAC,MAAM;IACd,IAAI,CAACK,KAAK,EAAE;MACV;IACF;IAEA,IAAIC,YAAY,CAACC,KAAK,CAACC,MAAM,EAAE;MAC7BF,YAAY,CAACG,MAAM,CAAC,GAAGH,YAAY,CAACC,KAAK,CAACG,GAAG,CAAC;QAAA,IAAC;UAAEC;QAAI,CAAC;QAAA,OAAKA,GAAG;MAAA,EAAC,CAAC;IAClE;IAEAL,YAAY,CAACM,MAAM,CAAC,CAAC,EAAE,GAAGV,uBAAuB,CAAIC,OAAO,CAACE,KAAK,CAAC,CAAC,CAAC;;IAErE;IACA;EACF,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,OAAOC,YAAY;AACrB"}
1
+ {"version":3,"file":"useInitializeViewportData.js","names":["useEffect","useListData","generateEmptyKeyedItems","usePrevious","useTableSize","useInitializeViewportData","table","viewportData","prevTable","size","Math","max","currentSize","items","length","remove","map","key","insert","keys","slice"],"sources":["../src/useInitializeViewportData.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { ListData, useListData } from '@react-stately/data';\nimport type { Table, TreeTable } from '@deephaven/jsapi-types';\nimport { KeyedItem, generateEmptyKeyedItems } from '@deephaven/jsapi-utils';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport useTableSize from './useTableSize';\n\n/**\n * Initializes a ListData instance that can be used for windowed views of a\n * Table. The list must always contain a KeyedItem for every record in the table,\n * so it is pre-populated with empty items that can be updated with real data as\n * the window changes.\n *\n * IMPORTANT: this will create an empty KeyedItem object for every row in the\n * source table. This is intended for \"human\" sized tables such as those used in\n * admin panels. This is not suitable for \"machine\" scale with millions+ rows.\n * @param table The table that will be used to determine the list size.\n * @returns a React Stately ListData object. Note that this object is recreated\n * by React Stately on every render.\n */\nexport default function useInitializeViewportData<T>(\n table: Table | TreeTable | null\n): ListData<KeyedItem<T>> {\n const viewportData = useListData<KeyedItem<T>>({});\n\n const prevTable = usePrevious(table);\n\n // If the table changes size, we need to re-initialize it.\n const size = Math.max(0, useTableSize(table));\n\n // We only want this to fire 1x once the table exists. Note that `useListData`\n // has no way to respond to a reference change of the `table` instance so we\n // have to manually delete any previous keyed items from the list.\n useEffect(() => {\n let currentSize = viewportData.items.length;\n\n // If our table instance has changed, we want to clear all items from state\n if (table !== prevTable && currentSize) {\n viewportData.remove(...viewportData.items.map(({ key }) => key));\n currentSize = 0;\n }\n\n if (!table) {\n return;\n }\n\n if (size > currentSize) {\n viewportData.insert(\n currentSize,\n ...generateEmptyKeyedItems<T>(currentSize, size - 1)\n );\n } else if (size < currentSize) {\n const keys = viewportData.items.slice(size).map(({ key }) => key);\n viewportData.remove(...keys);\n }\n\n // Intentionally excluding viewportData since it changes on every render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [size, table]);\n\n return viewportData;\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAAmBC,WAAW,QAAQ,qBAAqB;AAE3D,SAAoBC,uBAAuB,QAAQ,wBAAwB;AAC3E,SAASC,WAAW,QAAQ,wBAAwB;AAAC,OAC9CC,YAAY;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,yBAAyB,CAC/CC,KAA+B,EACP;EACxB,IAAMC,YAAY,GAAGN,WAAW,CAAe,CAAC,CAAC,CAAC;EAElD,IAAMO,SAAS,GAAGL,WAAW,CAACG,KAAK,CAAC;;EAEpC;EACA,IAAMG,IAAI,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEP,YAAY,CAACE,KAAK,CAAC,CAAC;;EAE7C;EACA;EACA;EACAN,SAAS,CAAC,MAAM;IACd,IAAIY,WAAW,GAAGL,YAAY,CAACM,KAAK,CAACC,MAAM;;IAE3C;IACA,IAAIR,KAAK,KAAKE,SAAS,IAAII,WAAW,EAAE;MACtCL,YAAY,CAACQ,MAAM,CAAC,GAAGR,YAAY,CAACM,KAAK,CAACG,GAAG,CAAC;QAAA,IAAC;UAAEC;QAAI,CAAC;QAAA,OAAKA,GAAG;MAAA,EAAC,CAAC;MAChEL,WAAW,GAAG,CAAC;IACjB;IAEA,IAAI,CAACN,KAAK,EAAE;MACV;IACF;IAEA,IAAIG,IAAI,GAAGG,WAAW,EAAE;MACtBL,YAAY,CAACW,MAAM,CACjBN,WAAW,EACX,GAAGV,uBAAuB,CAAIU,WAAW,EAAEH,IAAI,GAAG,CAAC,CAAC,CACrD;IACH,CAAC,MAAM,IAAIA,IAAI,GAAGG,WAAW,EAAE;MAC7B,IAAMO,IAAI,GAAGZ,YAAY,CAACM,KAAK,CAACO,KAAK,CAACX,IAAI,CAAC,CAACO,GAAG,CAAC;QAAA,IAAC;UAAEC;QAAI,CAAC;QAAA,OAAKA,GAAG;MAAA,EAAC;MACjEV,YAAY,CAACQ,MAAM,CAAC,GAAGI,IAAI,CAAC;IAC9B;;IAEA;IACA;EACF,CAAC,EAAE,CAACV,IAAI,EAAEH,KAAK,CAAC,CAAC;EAEjB,OAAOC,YAAY;AACrB"}
@@ -1,14 +1,18 @@
1
- import { Table, TreeTable } from '@deephaven/jsapi-types';
1
+ import type { Table, TreeTable } from '@deephaven/jsapi-types';
2
2
  /**
3
- * Creates and subscribes to a `selectDistinct` derived table and unsubscribes
4
- * on unmount.
5
- * @param table The table to call `selectDistinct` on.
6
- * @param columnNames The list of column names to pass to `selectDistinct`.
3
+ * Return type of `useSelectDistinctTable` hook.
7
4
  */
8
- export default function useSelectDistinctTable(table: Table | TreeTable | null, ...columnNames: string[]): {
5
+ export interface UseSelectDistinctTableResult {
9
6
  distinctTable: Table | null;
10
7
  error: string | Error | null;
11
8
  isError: boolean;
12
9
  isLoading: boolean;
13
- };
10
+ }
11
+ /**
12
+ * Creates and subscribes to a `selectDistinct` derived table and unsubscribes
13
+ * on unmount.
14
+ * @param table The table to call `selectDistinct` on.
15
+ * @param columnNames The list of column names to pass to `selectDistinct`.
16
+ */
17
+ export default function useSelectDistinctTable(table: Table | TreeTable | null, ...columnNames: string[]): UseSelectDistinctTableResult;
14
18
  //# sourceMappingURL=useSelectDistinctTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSelectDistinctTable.d.ts","sourceRoot":"","sources":["../src/useSelectDistinctTable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAG1D;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,EAC/B,GAAG,WAAW,EAAE,MAAM,EAAE;;;;;EAsBzB"}
1
+ {"version":3,"file":"useSelectDistinctTable.d.ts","sourceRoot":"","sources":["../src/useSelectDistinctTable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,aAAa,EAAE,KAAK,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,EAC/B,GAAG,WAAW,EAAE,MAAM,EAAE,GACvB,4BAA4B,CAqB9B"}
@@ -3,6 +3,10 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar
3
3
  import { useCallback, useEffect } from 'react';
4
4
  import { usePromiseFactory } from '@deephaven/react-hooks';
5
5
 
6
+ /**
7
+ * Return type of `useSelectDistinctTable` hook.
8
+ */
9
+
6
10
  /**
7
11
  * Creates and subscribes to a `selectDistinct` derived table and unsubscribes
8
12
  * on unmount.
@@ -1 +1 @@
1
- {"version":3,"file":"useSelectDistinctTable.js","names":["useCallback","useEffect","usePromiseFactory","useSelectDistinctTable","table","columnNames","selectDistinct","findColumns","data","distinctTable","error","isError","isLoading","close"],"sources":["../src/useSelectDistinctTable.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport { Table, TreeTable } from '@deephaven/jsapi-types';\nimport { usePromiseFactory } from '@deephaven/react-hooks';\n\n/**\n * Creates and subscribes to a `selectDistinct` derived table and unsubscribes\n * on unmount.\n * @param table The table to call `selectDistinct` on.\n * @param columnNames The list of column names to pass to `selectDistinct`.\n */\nexport default function useSelectDistinctTable(\n table: Table | TreeTable | null,\n ...columnNames: string[]\n) {\n const selectDistinct = useCallback(\n async () => table?.selectDistinct(table.findColumns(columnNames)) ?? null,\n // Disabling the exhaustive checks due to the spreading of `columnNames`\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [table, ...columnNames]\n );\n\n const { data: distinctTable, error, isError, isLoading } = usePromiseFactory(\n selectDistinct,\n []\n );\n\n useEffect(\n () => () => {\n distinctTable?.close();\n },\n [distinctTable]\n );\n\n return { distinctTable, error, isError, isLoading };\n}\n"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,QAAQ,OAAO;AAE9C,SAASC,iBAAiB,QAAQ,wBAAwB;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,sBAAsB,CAC5CC,KAA+B,EAE/B;EAAA,kCADGC,WAAW;IAAXA,WAAW;EAAA;EAEd,IAAMC,cAAc,GAAGN,WAAW,iCAChC;IAAA;IAAA,gCAAYI,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEE,cAAc,CAACF,KAAK,CAACG,WAAW,CAACF,WAAW,CAAC,CAAC,yEAAI,IAAI;EAAA;EACzE;EACA;EACA,CAACD,KAAK,EAAE,GAAGC,WAAW,CAAC,CACxB;EAED,IAAM;IAAEG,IAAI,EAAEC,aAAa;IAAEC,KAAK;IAAEC,OAAO;IAAEC;EAAU,CAAC,GAAGV,iBAAiB,CAC1EI,cAAc,EACd,EAAE,CACH;EAEDL,SAAS,CACP,MAAM,MAAM;IACVQ,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEI,KAAK,EAAE;EACxB,CAAC,EACD,CAACJ,aAAa,CAAC,CAChB;EAED,OAAO;IAAEA,aAAa;IAAEC,KAAK;IAAEC,OAAO;IAAEC;EAAU,CAAC;AACrD"}
1
+ {"version":3,"file":"useSelectDistinctTable.js","names":["useCallback","useEffect","usePromiseFactory","useSelectDistinctTable","table","columnNames","selectDistinct","findColumns","data","distinctTable","error","isError","isLoading","close"],"sources":["../src/useSelectDistinctTable.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport type { Table, TreeTable } from '@deephaven/jsapi-types';\nimport { usePromiseFactory } from '@deephaven/react-hooks';\n\n/**\n * Return type of `useSelectDistinctTable` hook.\n */\nexport interface UseSelectDistinctTableResult {\n distinctTable: Table | null;\n error: string | Error | null;\n isError: boolean;\n isLoading: boolean;\n}\n\n/**\n * Creates and subscribes to a `selectDistinct` derived table and unsubscribes\n * on unmount.\n * @param table The table to call `selectDistinct` on.\n * @param columnNames The list of column names to pass to `selectDistinct`.\n */\nexport default function useSelectDistinctTable(\n table: Table | TreeTable | null,\n ...columnNames: string[]\n): UseSelectDistinctTableResult {\n const selectDistinct = useCallback(\n async () => table?.selectDistinct(table.findColumns(columnNames)) ?? null,\n // Disabling the exhaustive checks due to the spreading of `columnNames`\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [table, ...columnNames]\n );\n\n const { data: distinctTable, error, isError, isLoading } = usePromiseFactory(\n selectDistinct,\n []\n );\n\n useEffect(\n () => () => {\n distinctTable?.close();\n },\n [distinctTable]\n );\n\n return { distinctTable, error, isError, isLoading };\n}\n"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,QAAQ,OAAO;AAE9C,SAASC,iBAAiB,QAAQ,wBAAwB;;AAE1D;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,sBAAsB,CAC5CC,KAA+B,EAED;EAAA,kCAD3BC,WAAW;IAAXA,WAAW;EAAA;EAEd,IAAMC,cAAc,GAAGN,WAAW,iCAChC;IAAA;IAAA,gCAAYI,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEE,cAAc,CAACF,KAAK,CAACG,WAAW,CAACF,WAAW,CAAC,CAAC,yEAAI,IAAI;EAAA;EACzE;EACA;EACA,CAACD,KAAK,EAAE,GAAGC,WAAW,CAAC,CACxB;EAED,IAAM;IAAEG,IAAI,EAAEC,aAAa;IAAEC,KAAK;IAAEC,OAAO;IAAEC;EAAU,CAAC,GAAGV,iBAAiB,CAC1EI,cAAc,EACd,EAAE,CACH;EAEDL,SAAS,CACP,MAAM,MAAM;IACVQ,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEI,KAAK,EAAE;EACxB,CAAC,EACD,CAACJ,aAAa,CAAC,CAChB;EAED,OAAO;IAAEA,aAAa;IAAEC,KAAK;IAAEC,OAAO;IAAEC;EAAU,CAAC;AACrD"}
@@ -1,4 +1,4 @@
1
- import { Table, TreeTable } from '@deephaven/jsapi-types';
1
+ import type { Table, TreeTable } from '@deephaven/jsapi-types';
2
2
  /**
3
3
  * Creates a callback function that will set a Table viewport. The callback has
4
4
  * a closure over the Table, a desired viewport size, and additional padding.
@@ -1 +1 @@
1
- {"version":3,"file":"useSetPaddedViewportCallback.d.ts","sourceRoot":"","sources":["../src/useSetPaddedViewportCallback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAG1D;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,4BAA4B,CAClD,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,EAC/B,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,cAGgB,MAAM,UAW9C"}
1
+ {"version":3,"file":"useSetPaddedViewportCallback.d.ts","sourceRoot":"","sources":["../src/useSetPaddedViewportCallback.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,4BAA4B,CAClD,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,EAC/B,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,cAGgB,MAAM,UAY9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSetPaddedViewportCallback.js","names":["useCallback","getSize","padFirstAndLastRow","useSetPaddedViewportCallback","table","viewportSize","viewportPadding","setPaddedViewport","firstRow","first","last","setViewport"],"sources":["../src/useSetPaddedViewportCallback.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { Table, TreeTable } from '@deephaven/jsapi-types';\nimport { getSize, padFirstAndLastRow } from '@deephaven/jsapi-utils';\n\n/**\n * Creates a callback function that will set a Table viewport. The callback has\n * a closure over the Table, a desired viewport size, and additional padding.\n * These will be combined with a first row index passed to the callback to\n * calculate the final viewport.\n * @param table Table to call `setViewport` on.\n * @param viewportSize The desired viewport size.\n * @param viewportPadding Padding to add before and after the viewport.\n * @returns A callback function for setting the viewport.\n */\nexport default function useSetPaddedViewportCallback(\n table: Table | TreeTable | null,\n viewportSize: number,\n viewportPadding: number\n) {\n return useCallback(\n function setPaddedViewport(firstRow: number) {\n const [first, last] = padFirstAndLastRow(\n firstRow,\n viewportSize,\n viewportPadding,\n getSize(table)\n );\n table?.setViewport(first, last);\n },\n [table, viewportPadding, viewportSize]\n );\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AAEnC,SAASC,OAAO,EAAEC,kBAAkB,QAAQ,wBAAwB;;AAEpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,4BAA4B,CAClDC,KAA+B,EAC/BC,YAAoB,EACpBC,eAAuB,EACvB;EACA,OAAON,WAAW,CAChB,SAASO,iBAAiB,CAACC,QAAgB,EAAE;IAC3C,IAAM,CAACC,KAAK,EAAEC,IAAI,CAAC,GAAGR,kBAAkB,CACtCM,QAAQ,EACRH,YAAY,EACZC,eAAe,EACfL,OAAO,CAACG,KAAK,CAAC,CACf;IACDA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEO,WAAW,CAACF,KAAK,EAAEC,IAAI,CAAC;EACjC,CAAC,EACD,CAACN,KAAK,EAAEE,eAAe,EAAED,YAAY,CAAC,CACvC;AACH"}
1
+ {"version":3,"file":"useSetPaddedViewportCallback.js","names":["useCallback","getSize","padFirstAndLastRow","useSetPaddedViewportCallback","table","viewportSize","viewportPadding","setPaddedViewport","firstRow","first","last","setViewport"],"sources":["../src/useSetPaddedViewportCallback.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport type { Table, TreeTable } from '@deephaven/jsapi-types';\nimport { getSize, padFirstAndLastRow } from '@deephaven/jsapi-utils';\n\n/**\n * Creates a callback function that will set a Table viewport. The callback has\n * a closure over the Table, a desired viewport size, and additional padding.\n * These will be combined with a first row index passed to the callback to\n * calculate the final viewport.\n * @param table Table to call `setViewport` on.\n * @param viewportSize The desired viewport size.\n * @param viewportPadding Padding to add before and after the viewport.\n * @returns A callback function for setting the viewport.\n */\nexport default function useSetPaddedViewportCallback(\n table: Table | TreeTable | null,\n viewportSize: number,\n viewportPadding: number\n) {\n return useCallback(\n function setPaddedViewport(firstRow: number) {\n const [first, last] = padFirstAndLastRow(\n firstRow,\n viewportSize,\n viewportPadding,\n getSize(table)\n );\n\n table?.setViewport(first, last);\n },\n [table, viewportPadding, viewportSize]\n );\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AAEnC,SAASC,OAAO,EAAEC,kBAAkB,QAAQ,wBAAwB;;AAEpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,4BAA4B,CAClDC,KAA+B,EAC/BC,YAAoB,EACpBC,eAAuB,EACvB;EACA,OAAON,WAAW,CAChB,SAASO,iBAAiB,CAACC,QAAgB,EAAE;IAC3C,IAAM,CAACC,KAAK,EAAEC,IAAI,CAAC,GAAGR,kBAAkB,CACtCM,QAAQ,EACRH,YAAY,EACZC,eAAe,EACfL,OAAO,CAACG,KAAK,CAAC,CACf;IAEDA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEO,WAAW,CAACF,KAAK,EAAEC,IAAI,CAAC;EACjC,CAAC,EACD,CAACN,KAAK,EAAEE,eAAe,EAAED,YAAY,CAAC,CACvC;AACH"}
@@ -1,4 +1,4 @@
1
- import { Column, Table } from '@deephaven/jsapi-types';
1
+ import type { Column, Table } from '@deephaven/jsapi-types';
2
2
  declare const useTable: (table: Table | undefined, firstRow: number, lastRow: number, columnNames?: string[]) => {
3
3
  columns: Column[] | undefined;
4
4
  data: unknown[][];
@@ -1 +1 @@
1
- {"version":3,"file":"useTable.d.ts","sourceRoot":"","sources":["../src/useTable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAO,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAQ5D,QAAA,MAAM,QAAQ,UACL,KAAK,GAAG,SAAS,YACd,MAAM,WACP,MAAM,gBACD,MAAM,EAAE;aAEb,MAAM,EAAE,GAAG,SAAS;UACvB,OAAO,EAAE,EAAE;WACV,KAAK,GAAG,IAAI;CA2DpB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"useTable.d.ts","sourceRoot":"","sources":["../src/useTable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAO,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAQjE,QAAA,MAAM,QAAQ,UACL,KAAK,GAAG,SAAS,YACd,MAAM,WACP,MAAM,gBACD,MAAM,EAAE;aAEb,MAAM,EAAE,GAAG,SAAS;UACvB,OAAO,EAAE,EAAE;WACV,KAAK,GAAG,IAAI;CA2DpB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTable.js","names":["useCallback","useEffect","useState","useApi","Log","useTableListener","ColumnNameError","TableDisconnectError","log","module","useTable","table","firstRow","lastRow","columnNames","dh","columns","setColumns","undefined","data","setData","columnError","setColumnError","tableError","setTableError","findColumns","e","error","debug2","setViewport","handleUpdate","detail","viewportData","map","column","rows","r","get","handleDisconnect","handleReconnect","Table","EVENT_UPDATED","EVENT_DISCONNECT","EVENT_RECONNECT"],"sources":["../src/useTable.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { Column, Row, Table } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport useTableListener from './useTableListener';\nimport ColumnNameError from './ColumnNameError';\nimport TableDisconnectError from './TableDisconnectError';\n\nconst log = Log.module('useTable');\n\nconst useTable = (\n table: Table | undefined,\n firstRow: number,\n lastRow: number,\n columnNames?: string[]\n): {\n columns: Column[] | undefined;\n data: unknown[][];\n error: Error | null;\n} => {\n const dh = useApi();\n const [columns, setColumns] = useState<Column[] | undefined>(undefined);\n const [data, setData] = useState<unknown[][]>([]);\n const [columnError, setColumnError] = useState<Error | null>(null);\n const [tableError, setTableError] = useState<Error | null>(null);\n\n useEffect(() => {\n if (columnNames === undefined) {\n setColumns(table?.columns);\n setColumnError(null);\n return;\n }\n try {\n setColumns(table?.findColumns(columnNames));\n setColumnError(null);\n } catch (e) {\n log.error(`Column not found`, e, columnNames);\n setColumnError(new ColumnNameError('Invalid columnNames argument'));\n }\n }, [table, columnNames]);\n\n useEffect(() => {\n if (!columns || !table) {\n log.debug2('Table or column not initialized, skip viewport update.');\n return;\n }\n log.debug2('Setting viewport', firstRow, lastRow);\n table.setViewport(firstRow, lastRow, columns);\n }, [columns, table, firstRow, lastRow]);\n\n const handleUpdate = useCallback(\n ({ detail }) => {\n if (!columns) {\n log.error('Columns not initialized.');\n return;\n }\n const viewportData = columns.map(column =>\n (detail.rows as Row[]).map(r => r.get(column))\n );\n setData(viewportData);\n },\n [columns]\n );\n\n const handleDisconnect = useCallback(() => {\n setTableError(new TableDisconnectError('Table disconnected'));\n }, []);\n\n const handleReconnect = useCallback(() => {\n setTableError(null);\n }, []);\n\n useTableListener(table, dh.Table.EVENT_UPDATED, handleUpdate);\n useTableListener(table, dh.Table.EVENT_DISCONNECT, handleDisconnect);\n useTableListener(table, dh.Table.EVENT_RECONNECT, handleReconnect);\n\n return { columns, data, error: tableError ?? columnError };\n};\n\nexport default useTable;\n"],"mappings":"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"}
1
+ {"version":3,"file":"useTable.js","names":["useCallback","useEffect","useState","useApi","Log","useTableListener","ColumnNameError","TableDisconnectError","log","module","useTable","table","firstRow","lastRow","columnNames","dh","columns","setColumns","undefined","data","setData","columnError","setColumnError","tableError","setTableError","findColumns","e","error","debug2","setViewport","handleUpdate","detail","viewportData","map","column","rows","r","get","handleDisconnect","handleReconnect","Table","EVENT_UPDATED","EVENT_DISCONNECT","EVENT_RECONNECT"],"sources":["../src/useTable.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport type { Column, Row, Table } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport useTableListener from './useTableListener';\nimport ColumnNameError from './ColumnNameError';\nimport TableDisconnectError from './TableDisconnectError';\n\nconst log = Log.module('useTable');\n\nconst useTable = (\n table: Table | undefined,\n firstRow: number,\n lastRow: number,\n columnNames?: string[]\n): {\n columns: Column[] | undefined;\n data: unknown[][];\n error: Error | null;\n} => {\n const dh = useApi();\n const [columns, setColumns] = useState<Column[] | undefined>(undefined);\n const [data, setData] = useState<unknown[][]>([]);\n const [columnError, setColumnError] = useState<Error | null>(null);\n const [tableError, setTableError] = useState<Error | null>(null);\n\n useEffect(() => {\n if (columnNames === undefined) {\n setColumns(table?.columns);\n setColumnError(null);\n return;\n }\n try {\n setColumns(table?.findColumns(columnNames));\n setColumnError(null);\n } catch (e) {\n log.error(`Column not found`, e, columnNames);\n setColumnError(new ColumnNameError('Invalid columnNames argument'));\n }\n }, [table, columnNames]);\n\n useEffect(() => {\n if (!columns || !table) {\n log.debug2('Table or column not initialized, skip viewport update.');\n return;\n }\n log.debug2('Setting viewport', firstRow, lastRow);\n table.setViewport(firstRow, lastRow, columns);\n }, [columns, table, firstRow, lastRow]);\n\n const handleUpdate = useCallback(\n ({ detail }) => {\n if (!columns) {\n log.error('Columns not initialized.');\n return;\n }\n const viewportData = columns.map(column =>\n (detail.rows as Row[]).map(r => r.get(column))\n );\n setData(viewportData);\n },\n [columns]\n );\n\n const handleDisconnect = useCallback(() => {\n setTableError(new TableDisconnectError('Table disconnected'));\n }, []);\n\n const handleReconnect = useCallback(() => {\n setTableError(null);\n }, []);\n\n useTableListener(table, dh.Table.EVENT_UPDATED, handleUpdate);\n useTableListener(table, dh.Table.EVENT_DISCONNECT, handleDisconnect);\n useTableListener(table, dh.Table.EVENT_RECONNECT, handleReconnect);\n\n return { columns, data, error: tableError ?? columnError };\n};\n\nexport default useTable;\n"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Table, TreeTable } from '@deephaven/jsapi-types';
2
+ /**
3
+ * React hook that closes a given table when the reference changes or when the
4
+ * component unmounts.
5
+ * @param table
6
+ */
7
+ export default function useTableClose(table: Table | TreeTable | null | undefined): void;
8
+ //# sourceMappingURL=useTableClose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableClose.d.ts","sourceRoot":"","sources":["../src/useTableClose.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAC1C,IAAI,CAaN"}
@@ -0,0 +1,19 @@
1
+ import { useEffect } from 'react';
2
+ import { isClosed } from '@deephaven/jsapi-utils';
3
+
4
+ /**
5
+ * React hook that closes a given table when the reference changes or when the
6
+ * component unmounts.
7
+ * @param table
8
+ */
9
+ export default function useTableClose(table) {
10
+ useEffect(() => () => {
11
+ if (table == null) {
12
+ return;
13
+ }
14
+ if (!isClosed(table)) {
15
+ table.close();
16
+ }
17
+ }, [table]);
18
+ }
19
+ //# sourceMappingURL=useTableClose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableClose.js","names":["useEffect","isClosed","useTableClose","table","close"],"sources":["../src/useTableClose.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type { Table, TreeTable } from '@deephaven/jsapi-types';\nimport { isClosed } from '@deephaven/jsapi-utils';\n\n/**\n * React hook that closes a given table when the reference changes or when the\n * component unmounts.\n * @param table\n */\nexport default function useTableClose(\n table: Table | TreeTable | null | undefined\n): void {\n useEffect(\n () => () => {\n if (table == null) {\n return;\n }\n\n if (!isClosed(table)) {\n table.close();\n }\n },\n [table]\n );\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AAEjC,SAASC,QAAQ,QAAQ,wBAAwB;;AAEjD;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,aAAa,CACnCC,KAA2C,EACrC;EACNH,SAAS,CACP,MAAM,MAAM;IACV,IAAIG,KAAK,IAAI,IAAI,EAAE;MACjB;IACF;IAEA,IAAI,CAACF,QAAQ,CAACE,KAAK,CAAC,EAAE;MACpBA,KAAK,CAACC,KAAK,EAAE;IACf;EACF,CAAC,EACD,CAACD,KAAK,CAAC,CACR;AACH"}
@@ -1,4 +1,4 @@
1
- import { Column, Table } from '@deephaven/jsapi-types';
1
+ import type { Column, Table } from '@deephaven/jsapi-types';
2
2
  /**
3
3
  * Subscribe to viewport updates on a single table column
4
4
  * @param table Table to get the data from
@@ -1 +1 @@
1
- {"version":3,"file":"useTableColumn.d.ts","sourceRoot":"","sources":["../src/useTableColumn.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAGvD;;;;;;;GAOG;AACH,QAAA,MAAM,cAAc,UACX,KAAK,GAAG,SAAS,YACd,MAAM,WACP,MAAM,cACH,MAAM;YAEV,MAAM,GAAG,SAAS;UACpB,OAAO,EAAE;WACR,KAAK,GAAG,IAAI;CAcpB,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"useTableColumn.d.ts","sourceRoot":"","sources":["../src/useTableColumn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAG5D;;;;;;;GAOG;AACH,QAAA,MAAM,cAAc,UACX,KAAK,GAAG,SAAS,YACd,MAAM,WACP,MAAM,cACH,MAAM;YAEV,MAAM,GAAG,SAAS;UACpB,OAAO,EAAE;WACR,KAAK,GAAG,IAAI;CAcpB,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTableColumn.js","names":["useMemo","useTable","useTableColumn","table","firstRow","lastRow","columnName","columnNames","columns","data","error","column"],"sources":["../src/useTableColumn.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { Column, Table } from '@deephaven/jsapi-types';\nimport useTable from './useTable';\n\n/**\n * Subscribe to viewport updates on a single table column\n * @param table Table to get the data from\n * @param firstRow First viewport row\n * @param lastRow Last viewport row\n * @param columnName Column to get the data from\n * @returns Column object, data array for the column, error, setViewport method\n */\nconst useTableColumn = (\n table: Table | undefined,\n firstRow: number,\n lastRow: number,\n columnName: string\n): {\n column: Column | undefined;\n data: unknown[];\n error: Error | null;\n} => {\n const columnNames = useMemo(() => [columnName], [columnName]);\n const { columns = [], data = [], error } = useTable(\n table,\n firstRow,\n lastRow,\n columnNames\n );\n return {\n column: columns[0],\n data: data[0],\n error,\n };\n};\n\nexport default useTableColumn;\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAAC,OAEzBC,QAAQ;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,cAAc,GAAG,CACrBC,KAAwB,EACxBC,QAAgB,EAChBC,OAAe,EACfC,UAAkB,KAKf;EACH,IAAMC,WAAW,GAAGP,OAAO,CAAC,MAAM,CAACM,UAAU,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;EAC7D,IAAM;IAAEE,OAAO,GAAG,EAAE;IAAEC,IAAI,GAAG,EAAE;IAAEC;EAAM,CAAC,GAAGT,QAAQ,CACjDE,KAAK,EACLC,QAAQ,EACRC,OAAO,EACPE,WAAW,CACZ;EACD,OAAO;IACLI,MAAM,EAAEH,OAAO,CAAC,CAAC,CAAC;IAClBC,IAAI,EAAEA,IAAI,CAAC,CAAC,CAAC;IACbC;EACF,CAAC;AACH,CAAC;AAED,eAAeR,cAAc"}
1
+ {"version":3,"file":"useTableColumn.js","names":["useMemo","useTable","useTableColumn","table","firstRow","lastRow","columnName","columnNames","columns","data","error","column"],"sources":["../src/useTableColumn.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport type { Column, Table } from '@deephaven/jsapi-types';\nimport useTable from './useTable';\n\n/**\n * Subscribe to viewport updates on a single table column\n * @param table Table to get the data from\n * @param firstRow First viewport row\n * @param lastRow Last viewport row\n * @param columnName Column to get the data from\n * @returns Column object, data array for the column, error, setViewport method\n */\nconst useTableColumn = (\n table: Table | undefined,\n firstRow: number,\n lastRow: number,\n columnName: string\n): {\n column: Column | undefined;\n data: unknown[];\n error: Error | null;\n} => {\n const columnNames = useMemo(() => [columnName], [columnName]);\n const { columns = [], data = [], error } = useTable(\n table,\n firstRow,\n lastRow,\n columnNames\n );\n return {\n column: columns[0],\n data: data[0],\n error,\n };\n};\n\nexport default useTableColumn;\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAAC,OAEzBC,QAAQ;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,cAAc,GAAG,CACrBC,KAAwB,EACxBC,QAAgB,EAChBC,OAAe,EACfC,UAAkB,KAKf;EACH,IAAMC,WAAW,GAAGP,OAAO,CAAC,MAAM,CAACM,UAAU,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;EAC7D,IAAM;IAAEE,OAAO,GAAG,EAAE;IAAEC,IAAI,GAAG,EAAE;IAAEC;EAAM,CAAC,GAAGT,QAAQ,CACjDE,KAAK,EACLC,QAAQ,EACRC,OAAO,EACPE,WAAW,CACZ;EACD,OAAO;IACLI,MAAM,EAAEH,OAAO,CAAC,CAAC,CAAC;IAClBC,IAAI,EAAEA,IAAI,CAAC,CAAC,CAAC;IACbC;EACF,CAAC;AACH,CAAC;AAED,eAAeR,cAAc"}
@@ -1,4 +1,4 @@
1
- import { Evented, EventListener } from '@deephaven/jsapi-types';
1
+ import type { Evented, EventListener } from '@deephaven/jsapi-types';
2
2
  export declare const useTableListener: (eventEmitter: Evented | undefined | null, eventName: string, callback: EventListener) => void;
3
3
  export default useTableListener;
4
4
  //# sourceMappingURL=useTableListener.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTableListener.d.ts","sourceRoot":"","sources":["../src/useTableListener.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKhE,eAAO,MAAM,gBAAgB,iBACb,OAAO,GAAG,SAAS,GAAG,IAAI,aAC7B,MAAM,YACP,aAAa,KACtB,IAWA,CAAC;AAEJ,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"useTableListener.d.ts","sourceRoot":"","sources":["../src/useTableListener.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKrE,eAAO,MAAM,gBAAgB,iBACb,OAAO,GAAG,SAAS,GAAG,IAAI,aAC7B,MAAM,YACP,aAAa,KACtB,IAWA,CAAC;AAEJ,eAAe,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTableListener.js","names":["useEffect","Log","log","module","useTableListener","eventEmitter","eventName","callback","initEventEmitter","debug2","addEventListener"],"sources":["../src/useTableListener.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { Evented, EventListener } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('useTableListener');\n\nexport const useTableListener = (\n eventEmitter: Evented | undefined | null,\n eventName: string,\n callback: EventListener\n): void =>\n useEffect(\n function initEventEmitter() {\n if (eventEmitter == null) {\n log.debug2('Emitter undefined, skipping addEventListener', eventName);\n return;\n }\n log.debug2('Adding listener', eventName);\n return eventEmitter.addEventListener(eventName, callback);\n },\n [eventEmitter, eventName, callback]\n );\n\nexport default useTableListener;\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AAEjC,OAAOC,GAAG,MAAM,gBAAgB;AAEhC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,kBAAkB,CAAC;AAE1C,OAAO,IAAMC,gBAAgB,GAAG,CAC9BC,YAAwC,EACxCC,SAAiB,EACjBC,QAAuB,KAEvBP,SAAS,CACP,SAASQ,gBAAgB,GAAG;EAC1B,IAAIH,YAAY,IAAI,IAAI,EAAE;IACxBH,GAAG,CAACO,MAAM,CAAC,8CAA8C,EAAEH,SAAS,CAAC;IACrE;EACF;EACAJ,GAAG,CAACO,MAAM,CAAC,iBAAiB,EAAEH,SAAS,CAAC;EACxC,OAAOD,YAAY,CAACK,gBAAgB,CAACJ,SAAS,EAAEC,QAAQ,CAAC;AAC3D,CAAC,EACD,CAACF,YAAY,EAAEC,SAAS,EAAEC,QAAQ,CAAC,CACpC;AAEH,eAAeH,gBAAgB"}
1
+ {"version":3,"file":"useTableListener.js","names":["useEffect","Log","log","module","useTableListener","eventEmitter","eventName","callback","initEventEmitter","debug2","addEventListener"],"sources":["../src/useTableListener.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type { Evented, EventListener } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('useTableListener');\n\nexport const useTableListener = (\n eventEmitter: Evented | undefined | null,\n eventName: string,\n callback: EventListener\n): void =>\n useEffect(\n function initEventEmitter() {\n if (eventEmitter == null) {\n log.debug2('Emitter undefined, skipping addEventListener', eventName);\n return;\n }\n log.debug2('Adding listener', eventName);\n return eventEmitter.addEventListener(eventName, callback);\n },\n [eventEmitter, eventName, callback]\n );\n\nexport default useTableListener;\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AAEjC,OAAOC,GAAG,MAAM,gBAAgB;AAEhC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,kBAAkB,CAAC;AAE1C,OAAO,IAAMC,gBAAgB,GAAG,CAC9BC,YAAwC,EACxCC,SAAiB,EACjBC,QAAuB,KAEvBP,SAAS,CACP,SAASQ,gBAAgB,GAAG;EAC1B,IAAIH,YAAY,IAAI,IAAI,EAAE;IACxBH,GAAG,CAACO,MAAM,CAAC,8CAA8C,EAAEH,SAAS,CAAC;IACrE;EACF;EACAJ,GAAG,CAACO,MAAM,CAAC,iBAAiB,EAAEH,SAAS,CAAC;EACxC,OAAOD,YAAY,CAACK,gBAAgB,CAACJ,SAAS,EAAEC,QAAQ,CAAC;AAC3D,CAAC,EACD,CAACF,YAAY,EAAEC,SAAS,EAAEC,QAAQ,CAAC,CACpC;AAEH,eAAeH,gBAAgB"}
@@ -0,0 +1,10 @@
1
+ import type { Table, TreeTable } from '@deephaven/jsapi-types';
2
+ /**
3
+ * React hook that returns the size of a given table or zero if table is null or
4
+ * undefined. The hook subscribes to the dh.Table.EVENT_SIZECHANGED event and
5
+ * triggers a re-render if any events are received to ensure we have the current
6
+ * size.
7
+ * @param table The table to check the size on.
8
+ */
9
+ export default function useTableSize(table: Table | TreeTable | null | undefined): number;
10
+ //# sourceMappingURL=useTableSize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableSize.d.ts","sourceRoot":"","sources":["../src/useTableSize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAI/D;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAC1C,MAAM,CAUR"}
@@ -0,0 +1,20 @@
1
+ import { useState } from 'react';
2
+ import { useApi } from '@deephaven/jsapi-bootstrap';
3
+ import { getSize } from '@deephaven/jsapi-utils';
4
+ import useTableListener from "./useTableListener.js";
5
+ /**
6
+ * React hook that returns the size of a given table or zero if table is null or
7
+ * undefined. The hook subscribes to the dh.Table.EVENT_SIZECHANGED event and
8
+ * triggers a re-render if any events are received to ensure we have the current
9
+ * size.
10
+ * @param table The table to check the size on.
11
+ */
12
+ export default function useTableSize(table) {
13
+ var [, forceRerender] = useState(0);
14
+ var dh = useApi();
15
+ useTableListener(table, dh.Table.EVENT_SIZECHANGED, () => {
16
+ forceRerender(i => i + 1);
17
+ });
18
+ return getSize(table);
19
+ }
20
+ //# sourceMappingURL=useTableSize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableSize.js","names":["useState","useApi","getSize","useTableListener","useTableSize","table","forceRerender","dh","Table","EVENT_SIZECHANGED","i"],"sources":["../src/useTableSize.ts"],"sourcesContent":["import { useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport type { Table, TreeTable } from '@deephaven/jsapi-types';\nimport { getSize } from '@deephaven/jsapi-utils';\nimport useTableListener from './useTableListener';\n\n/**\n * React hook that returns the size of a given table or zero if table is null or\n * undefined. The hook subscribes to the dh.Table.EVENT_SIZECHANGED event and\n * triggers a re-render if any events are received to ensure we have the current\n * size.\n * @param table The table to check the size on.\n */\nexport default function useTableSize(\n table: Table | TreeTable | null | undefined\n): number {\n const [, forceRerender] = useState(0);\n\n const dh = useApi();\n\n useTableListener(table, dh.Table.EVENT_SIZECHANGED, () => {\n forceRerender(i => i + 1);\n });\n\n return getSize(table);\n}\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,MAAM,QAAQ,4BAA4B;AAEnD,SAASC,OAAO,QAAQ,wBAAwB;AAAC,OAC1CC,gBAAgB;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,YAAY,CAClCC,KAA2C,EACnC;EACR,IAAM,GAAGC,aAAa,CAAC,GAAGN,QAAQ,CAAC,CAAC,CAAC;EAErC,IAAMO,EAAE,GAAGN,MAAM,EAAE;EAEnBE,gBAAgB,CAACE,KAAK,EAAEE,EAAE,CAACC,KAAK,CAACC,iBAAiB,EAAE,MAAM;IACxDH,aAAa,CAACI,CAAC,IAAIA,CAAC,GAAG,CAAC,CAAC;EAC3B,CAAC,CAAC;EAEF,OAAOR,OAAO,CAACG,KAAK,CAAC;AACvB"}
@@ -0,0 +1,6 @@
1
+ import { TableUtils } from '@deephaven/jsapi-utils';
2
+ /**
3
+ * Get a `TableUtils` instance using `dh` api from the current context.
4
+ */
5
+ export default function useTableUtils(): TableUtils;
6
+ //# sourceMappingURL=useTableUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableUtils.d.ts","sourceRoot":"","sources":["../src/useTableUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,IAAI,UAAU,CAGlD"}
@@ -0,0 +1,12 @@
1
+ import { useMemo } from 'react';
2
+ import { useApi } from '@deephaven/jsapi-bootstrap';
3
+ import { TableUtils } from '@deephaven/jsapi-utils';
4
+
5
+ /**
6
+ * Get a `TableUtils` instance using `dh` api from the current context.
7
+ */
8
+ export default function useTableUtils() {
9
+ var dh = useApi();
10
+ return useMemo(() => new TableUtils(dh), [dh]);
11
+ }
12
+ //# sourceMappingURL=useTableUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableUtils.js","names":["useMemo","useApi","TableUtils","useTableUtils","dh"],"sources":["../src/useTableUtils.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { TableUtils } from '@deephaven/jsapi-utils';\n\n/**\n * Get a `TableUtils` instance using `dh` api from the current context.\n */\nexport default function useTableUtils(): TableUtils {\n const dh = useApi();\n return useMemo(() => new TableUtils(dh), [dh]);\n}\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,MAAM,QAAQ,4BAA4B;AACnD,SAASC,UAAU,QAAQ,wBAAwB;;AAEnD;AACA;AACA;AACA,eAAe,SAASC,aAAa,GAAe;EAClD,IAAMC,EAAE,GAAGH,MAAM,EAAE;EACnB,OAAOD,OAAO,CAAC,MAAM,IAAIE,UAAU,CAACE,EAAE,CAAC,EAAE,CAACA,EAAE,CAAC,CAAC;AAChD"}
@@ -1,17 +1,20 @@
1
1
  import { ListData } from '@react-stately/data';
2
- import { Table, TreeTable } from '@deephaven/jsapi-types';
2
+ import type { FilterCondition, Table, TreeTable } from '@deephaven/jsapi-types';
3
3
  import { KeyedItem, RowDeserializer } from '@deephaven/jsapi-utils';
4
- export interface UseViewportDataProps<T> {
5
- table: Table | TreeTable | null;
4
+ export interface UseViewportDataProps<TItem, TTable extends Table | TreeTable> {
5
+ table: TTable | null;
6
6
  viewportSize?: number;
7
7
  viewportPadding?: number;
8
- deserializeRow?: RowDeserializer<T>;
8
+ deserializeRow?: RowDeserializer<TItem>;
9
9
  }
10
- export interface UseViewportDataResult<T> {
10
+ export interface UseViewportDataResult<TItem, TTable extends Table | TreeTable> {
11
11
  /** Manages deserialized row items associated with a DH Table */
12
- viewportData: ListData<KeyedItem<T>>;
12
+ viewportData: ListData<KeyedItem<TItem>>;
13
13
  /** Size of the underlying Table */
14
14
  size: number;
15
+ table: TTable | null;
16
+ /** Apply filters and refresh viewport. */
17
+ applyFiltersAndRefresh: (filters: FilterCondition[]) => void;
15
18
  /** Set the viewport of the Table */
16
19
  setViewport: (firstRow: number) => void;
17
20
  }
@@ -26,7 +29,10 @@ export interface UseViewportDataResult<T> {
26
29
  * @param table
27
30
  * @param viewportSize
28
31
  * @param viewportPadding
29
- * @returns An object for managing Table viewport state.
32
+ * @returns An object for managing Table viewport state. Note that the returned
33
+ * object changes on every render due to the `viewportData` not being memoized.
34
+ * This is due to the underlying React Stately `useListData` implementation that
35
+ * also changes its returned object on every render.
30
36
  */
31
- export default function useViewportData<T>({ table, viewportSize, viewportPadding, deserializeRow, }: UseViewportDataProps<T>): UseViewportDataResult<T>;
37
+ export default function useViewportData<TItem, TTable extends Table | TreeTable>({ table, viewportSize, viewportPadding, deserializeRow, }: UseViewportDataProps<TItem, TTable>): UseViewportDataResult<TItem, TTable>;
32
38
  //# sourceMappingURL=useViewportData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useViewportData.d.ts","sourceRoot":"","sources":["../src/useViewportData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,SAAS,EACT,eAAe,EAKhB,MAAM,wBAAwB,CAAC;AAKhC,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,gEAAgE;IAChE,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,CAAC,EAAE,EACzC,KAAK,EACL,YAAiB,EACjB,eAAoB,EACpB,cAAuC,GACxC,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CA4BpD"}
1
+ {"version":3,"file":"useViewportData.d.ts","sourceRoot":"","sources":["../src/useViewportData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EACL,SAAS,EACT,eAAe,EAIhB,MAAM,wBAAwB,CAAC;AAOhC,MAAM,WAAW,oBAAoB,CAAC,KAAK,EAAE,MAAM,SAAS,KAAK,GAAG,SAAS;IAC3E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,qBAAqB,CACpC,KAAK,EACL,MAAM,SAAS,KAAK,GAAG,SAAS;IAEhC,gEAAgE;IAChE,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IAEb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,0CAA0C;IAC1C,sBAAsB,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC7D,oCAAoC;IACpC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,KAAK,EACL,MAAM,SAAS,KAAK,GAAG,SAAS,EAChC,EACA,KAAK,EACL,YAAiB,EACjB,eAAoB,EACpB,cAAuC,GACxC,EAAE,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CA0C5E"}
@@ -1,8 +1,10 @@
1
- import { useEffect } from 'react';
2
- import { createOnTableUpdatedHandler, defaultRowDeserializer, getSize, isClosed } from '@deephaven/jsapi-utils';
1
+ import { useCallback, useEffect } from 'react';
2
+ import { createOnTableUpdatedHandler, defaultRowDeserializer, isClosed } from '@deephaven/jsapi-utils';
3
+ import { useApi } from '@deephaven/jsapi-bootstrap';
3
4
  import useInitializeViewportData from "./useInitializeViewportData.js";
4
5
  import useSetPaddedViewportCallback from "./useSetPaddedViewportCallback.js";
5
6
  import useTableListener from "./useTableListener.js";
7
+ import useTableSize from "./useTableSize.js";
6
8
  /**
7
9
  * Sets up state management for windowed Table viewports. Returns a ListData
8
10
  * instance for managing items associated with the Table + a `setViewport`
@@ -14,7 +16,10 @@ import useTableListener from "./useTableListener.js";
14
16
  * @param table
15
17
  * @param viewportSize
16
18
  * @param viewportPadding
17
- * @returns An object for managing Table viewport state.
19
+ * @returns An object for managing Table viewport state. Note that the returned
20
+ * object changes on every render due to the `viewportData` not being memoized.
21
+ * This is due to the underlying React Stately `useListData` implementation that
22
+ * also changes its returned object on every render.
18
23
  */
19
24
  export default function useViewportData(_ref) {
20
25
  var {
@@ -25,17 +30,25 @@ export default function useViewportData(_ref) {
25
30
  } = _ref;
26
31
  var viewportData = useInitializeViewportData(table);
27
32
  var setViewport = useSetPaddedViewportCallback(table, viewportSize, viewportPadding);
28
- useTableListener(table, dh.Table.EVENT_UPDATED, createOnTableUpdatedHandler(table, viewportData, deserializeRow));
33
+ var applyFiltersAndRefresh = useCallback(filters => {
34
+ table === null || table === void 0 ? void 0 : table.applyFilter(filters);
35
+ setViewport(0);
36
+ }, [setViewport, table]);
37
+ var dh = useApi();
38
+ useTableListener(table, dh.Table.EVENT_UPDATED, createOnTableUpdatedHandler(viewportData, deserializeRow));
39
+ var size = useTableSize(table);
29
40
  useEffect(() => {
30
41
  if (table && !isClosed(table)) {
31
42
  // Hydrate the viewport with real data. This will fetch data from index
32
43
  // 0 to the end of the viewport + padding.
33
44
  setViewport(0);
34
45
  }
35
- }, [table, setViewport]);
46
+ }, [table, setViewport, size]);
36
47
  return {
37
48
  viewportData,
38
- size: getSize(table),
49
+ size,
50
+ table,
51
+ applyFiltersAndRefresh,
39
52
  setViewport
40
53
  };
41
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useViewportData.js","names":["useEffect","createOnTableUpdatedHandler","defaultRowDeserializer","getSize","isClosed","useInitializeViewportData","useSetPaddedViewportCallback","useTableListener","useViewportData","table","viewportSize","viewportPadding","deserializeRow","viewportData","setViewport","dh","Table","EVENT_UPDATED","size"],"sources":["../src/useViewportData.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { ListData } from '@react-stately/data';\nimport { Table, TreeTable } from '@deephaven/jsapi-types';\nimport {\n KeyedItem,\n RowDeserializer,\n createOnTableUpdatedHandler,\n defaultRowDeserializer,\n getSize,\n isClosed,\n} from '@deephaven/jsapi-utils';\nimport useInitializeViewportData from './useInitializeViewportData';\nimport useSetPaddedViewportCallback from './useSetPaddedViewportCallback';\nimport useTableListener from './useTableListener';\n\nexport interface UseViewportDataProps<T> {\n table: Table | TreeTable | null;\n viewportSize?: number;\n viewportPadding?: number;\n deserializeRow?: RowDeserializer<T>;\n}\n\nexport interface UseViewportDataResult<T> {\n /** Manages deserialized row items associated with a DH Table */\n viewportData: ListData<KeyedItem<T>>;\n /** Size of the underlying Table */\n size: number;\n /** Set the viewport of the Table */\n setViewport: (firstRow: number) => void;\n}\n\n/**\n * Sets up state management for windowed Table viewports. Returns a ListData\n * instance for managing items associated with the Table + a `setViewport`\n * callback for changing the current viewport.\n *\n * IMPORTANT: this will create an empty KeyedItem object for every row in the\n * source table. This is intended for \"human\" sized tables such as those used in\n * admin panels. This is not suitable for \"machine\" scale with millions+ rows.\n * @param table\n * @param viewportSize\n * @param viewportPadding\n * @returns An object for managing Table viewport state.\n */\nexport default function useViewportData<T>({\n table,\n viewportSize = 10,\n viewportPadding = 50,\n deserializeRow = defaultRowDeserializer,\n}: UseViewportDataProps<T>): UseViewportDataResult<T> {\n const viewportData = useInitializeViewportData<T>(table);\n\n const setViewport = useSetPaddedViewportCallback(\n table,\n viewportSize,\n viewportPadding\n );\n\n useTableListener(\n table,\n dh.Table.EVENT_UPDATED,\n createOnTableUpdatedHandler(table, viewportData, deserializeRow)\n );\n\n useEffect(() => {\n if (table && !isClosed(table)) {\n // Hydrate the viewport with real data. This will fetch data from index\n // 0 to the end of the viewport + padding.\n setViewport(0);\n }\n }, [table, setViewport]);\n\n return {\n viewportData,\n size: getSize(table),\n setViewport,\n };\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AAGjC,SAGEC,2BAA2B,EAC3BC,sBAAsB,EACtBC,OAAO,EACPC,QAAQ,QACH,wBAAwB;AAAC,OACzBC,yBAAyB;AAAA,OACzBC,4BAA4B;AAAA,OAC5BC,gBAAgB;AAkBvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,eAAe,OAKe;EAAA,IALX;IACzCC,KAAK;IACLC,YAAY,GAAG,EAAE;IACjBC,eAAe,GAAG,EAAE;IACpBC,cAAc,GAAGV;EACM,CAAC;EACxB,IAAMW,YAAY,GAAGR,yBAAyB,CAAII,KAAK,CAAC;EAExD,IAAMK,WAAW,GAAGR,4BAA4B,CAC9CG,KAAK,EACLC,YAAY,EACZC,eAAe,CAChB;EAEDJ,gBAAgB,CACdE,KAAK,EACLM,EAAE,CAACC,KAAK,CAACC,aAAa,EACtBhB,2BAA2B,CAACQ,KAAK,EAAEI,YAAY,EAAED,cAAc,CAAC,CACjE;EAEDZ,SAAS,CAAC,MAAM;IACd,IAAIS,KAAK,IAAI,CAACL,QAAQ,CAACK,KAAK,CAAC,EAAE;MAC7B;MACA;MACAK,WAAW,CAAC,CAAC,CAAC;IAChB;EACF,CAAC,EAAE,CAACL,KAAK,EAAEK,WAAW,CAAC,CAAC;EAExB,OAAO;IACLD,YAAY;IACZK,IAAI,EAAEf,OAAO,CAACM,KAAK,CAAC;IACpBK;EACF,CAAC;AACH"}
1
+ {"version":3,"file":"useViewportData.js","names":["useCallback","useEffect","createOnTableUpdatedHandler","defaultRowDeserializer","isClosed","useApi","useInitializeViewportData","useSetPaddedViewportCallback","useTableListener","useTableSize","useViewportData","table","viewportSize","viewportPadding","deserializeRow","viewportData","setViewport","applyFiltersAndRefresh","filters","applyFilter","dh","Table","EVENT_UPDATED","size"],"sources":["../src/useViewportData.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport { ListData } from '@react-stately/data';\nimport type { FilterCondition, Table, TreeTable } from '@deephaven/jsapi-types';\nimport {\n KeyedItem,\n RowDeserializer,\n createOnTableUpdatedHandler,\n defaultRowDeserializer,\n isClosed,\n} from '@deephaven/jsapi-utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport useInitializeViewportData from './useInitializeViewportData';\nimport useSetPaddedViewportCallback from './useSetPaddedViewportCallback';\nimport useTableListener from './useTableListener';\nimport useTableSize from './useTableSize';\n\nexport interface UseViewportDataProps<TItem, TTable extends Table | TreeTable> {\n table: TTable | null;\n viewportSize?: number;\n viewportPadding?: number;\n deserializeRow?: RowDeserializer<TItem>;\n}\n\nexport interface UseViewportDataResult<\n TItem,\n TTable extends Table | TreeTable\n> {\n /** Manages deserialized row items associated with a DH Table */\n viewportData: ListData<KeyedItem<TItem>>;\n /** Size of the underlying Table */\n size: number;\n\n table: TTable | null;\n /** Apply filters and refresh viewport. */\n applyFiltersAndRefresh: (filters: FilterCondition[]) => void;\n /** Set the viewport of the Table */\n setViewport: (firstRow: number) => void;\n}\n\n/**\n * Sets up state management for windowed Table viewports. Returns a ListData\n * instance for managing items associated with the Table + a `setViewport`\n * callback for changing the current viewport.\n *\n * IMPORTANT: this will create an empty KeyedItem object for every row in the\n * source table. This is intended for \"human\" sized tables such as those used in\n * admin panels. This is not suitable for \"machine\" scale with millions+ rows.\n * @param table\n * @param viewportSize\n * @param viewportPadding\n * @returns An object for managing Table viewport state. Note that the returned\n * object changes on every render due to the `viewportData` not being memoized.\n * This is due to the underlying React Stately `useListData` implementation that\n * also changes its returned object on every render.\n */\nexport default function useViewportData<\n TItem,\n TTable extends Table | TreeTable\n>({\n table,\n viewportSize = 10,\n viewportPadding = 50,\n deserializeRow = defaultRowDeserializer,\n}: UseViewportDataProps<TItem, TTable>): UseViewportDataResult<TItem, TTable> {\n const viewportData = useInitializeViewportData<TItem>(table);\n\n const setViewport = useSetPaddedViewportCallback(\n table,\n viewportSize,\n viewportPadding\n );\n\n const applyFiltersAndRefresh = useCallback(\n (filters: FilterCondition[]) => {\n table?.applyFilter(filters);\n setViewport(0);\n },\n [setViewport, table]\n );\n\n const dh = useApi();\n\n useTableListener(\n table,\n dh.Table.EVENT_UPDATED,\n createOnTableUpdatedHandler(viewportData, deserializeRow)\n );\n\n const size = useTableSize(table);\n\n useEffect(() => {\n if (table && !isClosed(table)) {\n // Hydrate the viewport with real data. This will fetch data from index\n // 0 to the end of the viewport + padding.\n setViewport(0);\n }\n }, [table, setViewport, size]);\n\n return {\n viewportData,\n size,\n table,\n applyFiltersAndRefresh,\n setViewport,\n };\n}\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,QAAQ,OAAO;AAG9C,SAGEC,2BAA2B,EAC3BC,sBAAsB,EACtBC,QAAQ,QACH,wBAAwB;AAC/B,SAASC,MAAM,QAAQ,4BAA4B;AAAC,OAC7CC,yBAAyB;AAAA,OACzBC,4BAA4B;AAAA,OAC5BC,gBAAgB;AAAA,OAChBC,YAAY;AAyBnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,eAAe,OAQuC;EAAA,IAL5E;IACAC,KAAK;IACLC,YAAY,GAAG,EAAE;IACjBC,eAAe,GAAG,EAAE;IACpBC,cAAc,GAAGX;EACkB,CAAC;EACpC,IAAMY,YAAY,GAAGT,yBAAyB,CAAQK,KAAK,CAAC;EAE5D,IAAMK,WAAW,GAAGT,4BAA4B,CAC9CI,KAAK,EACLC,YAAY,EACZC,eAAe,CAChB;EAED,IAAMI,sBAAsB,GAAGjB,WAAW,CACvCkB,OAA0B,IAAK;IAC9BP,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEQ,WAAW,CAACD,OAAO,CAAC;IAC3BF,WAAW,CAAC,CAAC,CAAC;EAChB,CAAC,EACD,CAACA,WAAW,EAAEL,KAAK,CAAC,CACrB;EAED,IAAMS,EAAE,GAAGf,MAAM,EAAE;EAEnBG,gBAAgB,CACdG,KAAK,EACLS,EAAE,CAACC,KAAK,CAACC,aAAa,EACtBpB,2BAA2B,CAACa,YAAY,EAAED,cAAc,CAAC,CAC1D;EAED,IAAMS,IAAI,GAAGd,YAAY,CAACE,KAAK,CAAC;EAEhCV,SAAS,CAAC,MAAM;IACd,IAAIU,KAAK,IAAI,CAACP,QAAQ,CAACO,KAAK,CAAC,EAAE;MAC7B;MACA;MACAK,WAAW,CAAC,CAAC,CAAC;IAChB;EACF,CAAC,EAAE,CAACL,KAAK,EAAEK,WAAW,EAAEO,IAAI,CAAC,CAAC;EAE9B,OAAO;IACLR,YAAY;IACZQ,IAAI;IACJZ,KAAK;IACLM,sBAAsB;IACtBD;EACF,CAAC;AACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/jsapi-components",
3
- "version": "0.38.0",
3
+ "version": "0.38.1-beta.11+02215b63",
4
4
  "description": "Deephaven JSAPI Components",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,23 +22,23 @@
22
22
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
23
23
  },
24
24
  "dependencies": {
25
- "@deephaven/components": "^0.38.0",
26
- "@deephaven/jsapi-bootstrap": "^0.38.0",
27
- "@deephaven/jsapi-types": "^0.38.0",
28
- "@deephaven/jsapi-utils": "^0.38.0",
29
- "@deephaven/log": "^0.38.0",
30
- "@deephaven/react-hooks": "^0.38.0",
31
- "@deephaven/utils": "^0.38.0",
25
+ "@deephaven/components": "^0.38.1-beta.11+02215b63",
26
+ "@deephaven/jsapi-bootstrap": "^0.38.1-beta.11+02215b63",
27
+ "@deephaven/jsapi-types": "^0.38.1-beta.11+02215b63",
28
+ "@deephaven/jsapi-utils": "^0.38.1-beta.11+02215b63",
29
+ "@deephaven/log": "^0.38.1-beta.11+02215b63",
30
+ "@deephaven/react-hooks": "^0.38.1-beta.11+02215b63",
31
+ "@deephaven/utils": "^0.38.1-beta.11+02215b63",
32
32
  "@react-stately/data": "^3.9.1",
33
33
  "@types/js-cookie": "^3.0.3",
34
34
  "classnames": "^2.3.2",
35
35
  "js-cookie": "^3.0.5",
36
+ "lodash.debounce": "^4.0.8",
36
37
  "prop-types": "^15.8.1"
37
38
  },
38
39
  "devDependencies": {
39
- "@deephaven/jsapi-shim": "^0.38.0",
40
- "@deephaven/tsconfig": "^0.38.0",
41
- "@testing-library/react-hooks": "^8.0.1",
40
+ "@deephaven/jsapi-shim": "^0.38.1-beta.11+02215b63",
41
+ "@deephaven/tsconfig": "^0.38.1-beta.11+02215b63",
42
42
  "react-test-renderer": "^17.0.2"
43
43
  },
44
44
  "peerDependencies": {
@@ -53,5 +53,5 @@
53
53
  "publishConfig": {
54
54
  "access": "public"
55
55
  },
56
- "gitHead": "e334848a2fd464c9c4b7a0d898ee6a9dc3dff9ac"
56
+ "gitHead": "02215b6323c58678ae37578ea9d0e0dda68ff880"
57
57
  }