@deephaven/jsapi-components 1.7.2-beta.1 → 1.7.2-react-18-alpha.3

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 (59) hide show
  1. package/dist/ColumnNameError.js.map +1 -1
  2. package/dist/Constants.js.map +1 -1
  3. package/dist/HookTestUtils.js.map +1 -1
  4. package/dist/TableDisconnectError.js.map +1 -1
  5. package/dist/TableDropdown.js +3 -4
  6. package/dist/TableDropdown.js.map +1 -1
  7. package/dist/TableInput.d.ts +0 -7
  8. package/dist/TableInput.d.ts.map +1 -1
  9. package/dist/TableInput.js +6 -13
  10. package/dist/TableInput.js.map +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/spectrum/ComboBox.js +2 -2
  13. package/dist/spectrum/ComboBox.js.map +1 -1
  14. package/dist/spectrum/ListView.js.map +1 -1
  15. package/dist/spectrum/Picker.js.map +1 -1
  16. package/dist/spectrum/PickerProps.js.map +1 -1
  17. package/dist/spectrum/index.js.map +1 -1
  18. package/dist/spectrum/utils/index.js.map +1 -1
  19. package/dist/spectrum/utils/itemUtils.js.map +1 -1
  20. package/dist/spectrum/utils/useItemRowDeserializer.js.map +1 -1
  21. package/dist/spectrum/utils/usePickerProps.js +2 -2
  22. package/dist/spectrum/utils/usePickerProps.js.map +1 -1
  23. package/dist/useBroadcastChannel.js.map +1 -1
  24. package/dist/useBroadcastLoginListener.js +2 -2
  25. package/dist/useBroadcastLoginListener.js.map +1 -1
  26. package/dist/useCheckIfExistsValue.js.map +1 -1
  27. package/dist/useDebouncedViewportSearch.js.map +1 -1
  28. package/dist/useDebouncedViewportSelectionFilter.js.map +1 -1
  29. package/dist/useFilterConditionFactories.js.map +1 -1
  30. package/dist/useFilteredItemsWithDefaultValue.js.map +1 -1
  31. package/dist/useFormatter.js.map +1 -1
  32. package/dist/useGetItemIndexByValue.js +1 -1
  33. package/dist/useGetItemIndexByValue.js.map +1 -1
  34. package/dist/useGetItemPosition.js +1 -1
  35. package/dist/useGetItemPosition.js.map +1 -1
  36. package/dist/useInitializeViewportData.js.map +1 -1
  37. package/dist/useNotNullOrEmptyFilter.js.map +1 -1
  38. package/dist/usePickerWithSelectedValues.d.ts +1 -1
  39. package/dist/usePickerWithSelectedValues.d.ts.map +1 -1
  40. package/dist/usePickerWithSelectedValues.js.map +1 -1
  41. package/dist/useSearchableViewportData.js.map +1 -1
  42. package/dist/useSelectDistinctTable.js +2 -2
  43. package/dist/useSelectDistinctTable.js.map +1 -1
  44. package/dist/useSetPaddedViewportCallback.js +1 -1
  45. package/dist/useSetPaddedViewportCallback.js.map +1 -1
  46. package/dist/useShowOnlyEmptyFilter.js.map +1 -1
  47. package/dist/useTable.d.ts.map +1 -1
  48. package/dist/useTable.js.map +1 -1
  49. package/dist/useTableColumn.js.map +1 -1
  50. package/dist/useTableListener.js.map +1 -1
  51. package/dist/useTableSize.js.map +1 -1
  52. package/dist/useTableUtils.js.map +1 -1
  53. package/dist/useValueFilter.js.map +1 -1
  54. package/dist/useViewportData.js +1 -1
  55. package/dist/useViewportData.js.map +1 -1
  56. package/dist/useViewportFilter.js.map +1 -1
  57. package/dist/useWidgetClose.js +1 -1
  58. package/dist/useWidgetClose.js.map +1 -1
  59. package/package.json +11 -13
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnNameError.js","names":["ColumnNameError","Error","constructor","arguments","_defineProperty"],"sources":["../src/ColumnNameError.ts"],"sourcesContent":["class ColumnNameError extends Error {\n isColumnNameError = true;\n}\n\nexport default ColumnNameError;\n"],"mappings":";;;AAAA,MAAMA,eAAe,SAASC,KAAK,CAAC;EAAAC,YAAA;IAAA,SAAAC,SAAA;IAAAC,eAAA,4BACd,IAAI;EAAA;AAC1B;AAEA,eAAeJ,eAAe"}
1
+ {"version":3,"file":"ColumnNameError.js","names":["ColumnNameError","Error","constructor","arguments","_defineProperty"],"sources":["../src/ColumnNameError.ts"],"sourcesContent":["class ColumnNameError extends Error {\n isColumnNameError = true;\n}\n\nexport default ColumnNameError;\n"],"mappings":";;;AAAA,MAAMA,eAAe,SAASC,KAAK,CAAC;EAAAC,YAAA;IAAA,SAAAC,SAAA;IAAAC,eAAA,4BACd,IAAI;EAAA;AAC1B;AAEA,eAAeJ,eAAe","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Constants.js","names":["SCROLL_DEBOUNCE_MS","SEARCH_DEBOUNCE_MS","VIEWPORT_PADDING","VIEWPORT_SIZE"],"sources":["../src/Constants.ts"],"sourcesContent":["export const SCROLL_DEBOUNCE_MS = 150;\nexport const SEARCH_DEBOUNCE_MS = 200;\nexport const VIEWPORT_PADDING = 250;\nexport const VIEWPORT_SIZE = 500;\n"],"mappings":"AAAA,OAAO,IAAMA,kBAAkB,GAAG,GAAG;AACrC,OAAO,IAAMC,kBAAkB,GAAG,GAAG;AACrC,OAAO,IAAMC,gBAAgB,GAAG,GAAG;AACnC,OAAO,IAAMC,aAAa,GAAG,GAAG"}
1
+ {"version":3,"file":"Constants.js","names":["SCROLL_DEBOUNCE_MS","SEARCH_DEBOUNCE_MS","VIEWPORT_PADDING","VIEWPORT_SIZE"],"sources":["../src/Constants.ts"],"sourcesContent":["export const SCROLL_DEBOUNCE_MS = 150;\nexport const SEARCH_DEBOUNCE_MS = 200;\nexport const VIEWPORT_PADDING = 250;\nexport const VIEWPORT_SIZE = 500;\n"],"mappings":"AAAA,OAAO,IAAMA,kBAAkB,GAAG,GAAG;AACrC,OAAO,IAAMC,kBAAkB,GAAG,GAAG;AACrC,OAAO,IAAMC,gBAAgB,GAAG,GAAG;AACnC,OAAO,IAAMC,aAAa,GAAG,GAAG","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"HookTestUtils.js","names":["React","ApiContext","jsx","_jsx","makeApiContextWrapper","dh","ApiContextWrapper","_ref","children","Provider","value"],"sources":["../src/HookTestUtils.tsx"],"sourcesContent":["import React, { type ReactNode } from 'react';\nimport { ApiContext } from '@deephaven/jsapi-bootstrap';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\n\nexport function makeApiContextWrapper(dh: typeof DhType) {\n return function ApiContextWrapper({\n children,\n }: {\n children?: ReactNode;\n }): JSX.Element {\n return <ApiContext.Provider value={dh}>{children}</ApiContext.Provider>;\n };\n}\n\nexport default {\n makeApiContextWrapper,\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAA0B,OAAO;AAC7C,SAASC,UAAU,QAAQ,4BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGxD,OAAO,SAASC,qBAAqBA,CAACC,EAAiB,EAAE;EACvD,OAAO,SAASC,iBAAiBA,CAAAC,IAAA,EAIjB;IAAA,IAJkB;MAChCC;IAGF,CAAC,GAAAD,IAAA;IACC,oBAAOJ,IAAA,CAACF,UAAU,CAACQ,QAAQ;MAACC,KAAK,EAAEL,EAAG;MAAAG,QAAA,EAAEA;IAAQ,CAAsB,CAAC;EACzE,CAAC;AACH;AAEA,eAAe;EACbJ;AACF,CAAC"}
1
+ {"version":3,"file":"HookTestUtils.js","names":["React","ApiContext","jsx","_jsx","makeApiContextWrapper","dh","ApiContextWrapper","_ref","children","Provider","value"],"sources":["../src/HookTestUtils.tsx"],"sourcesContent":["import React, { type ReactNode } from 'react';\nimport { ApiContext } from '@deephaven/jsapi-bootstrap';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\n\nexport function makeApiContextWrapper(dh: typeof DhType) {\n return function ApiContextWrapper({\n children,\n }: {\n children?: ReactNode;\n }): JSX.Element {\n return <ApiContext.Provider value={dh}>{children}</ApiContext.Provider>;\n };\n}\n\nexport default {\n makeApiContextWrapper,\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAA0B,OAAO;AAC7C,SAASC,UAAU,QAAQ,4BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGxD,OAAO,SAASC,qBAAqBA,CAACC,EAAiB,EAAE;EACvD,OAAO,SAASC,iBAAiBA,CAAAC,IAAA,EAIjB;IAAA,IAJkB;MAChCC;IAGF,CAAC,GAAAD,IAAA;IACC,oBAAOJ,IAAA,CAACF,UAAU,CAACQ,QAAQ;MAACC,KAAK,EAAEL,EAAG;MAAAG,QAAA,EAAEA;IAAQ,CAAsB,CAAC;EACzE,CAAC;AACH;AAEA,eAAe;EACbJ;AACF,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"TableDisconnectError.js","names":["TableDisconnectError","Error","constructor","arguments","_defineProperty"],"sources":["../src/TableDisconnectError.ts"],"sourcesContent":["class TableDisconnectError extends Error {\n isTableDisconnectError = true;\n}\n\nexport default TableDisconnectError;\n"],"mappings":";;;AAAA,MAAMA,oBAAoB,SAASC,KAAK,CAAC;EAAAC,YAAA;IAAA,SAAAC,SAAA;IAAAC,eAAA,iCACd,IAAI;EAAA;AAC/B;AAEA,eAAeJ,oBAAoB"}
1
+ {"version":3,"file":"TableDisconnectError.js","names":["TableDisconnectError","Error","constructor","arguments","_defineProperty"],"sources":["../src/TableDisconnectError.ts"],"sourcesContent":["class TableDisconnectError extends Error {\n isTableDisconnectError = true;\n}\n\nexport default TableDisconnectError;\n"],"mappings":";;;AAAA,MAAMA,oBAAoB,SAASC,KAAK,CAAC;EAAAC,YAAA;IAAA,SAAAC,SAAA;IAAAC,eAAA,iCACd,IAAI;EAAA;AAC/B;AAEA,eAAeJ,oBAAoB","ignoreList":[]}
@@ -62,10 +62,9 @@ export function TableDropdown(_ref) {
62
62
  }, [selectedValue, values]);
63
63
 
64
64
  // Since values could be anything, not just strings, track the selected index based on the current data
65
- var selectedIndex = useMemo(
66
- // eslint-disable-next-line eqeqeq
67
- () => allValues.findIndex(value => value === selectedValue || isJavaObject(value) && value.equals(selectedValue)), [selectedValue, allValues]);
68
- var handleChange = useCallback(newSelectedIndex => {
65
+ var selectedIndex = useMemo(() => allValues.findIndex(value => value === selectedValue || isJavaObject(value) && value.equals(selectedValue)), [selectedValue, allValues]);
66
+ var handleChange = useCallback(newSelectedValue => {
67
+ var newSelectedIndex = parseInt(newSelectedValue, 10);
69
68
  onChange(allValues[newSelectedIndex]);
70
69
  }, [onChange, allValues]);
71
70
  return /*#__PURE__*/_jsx(Select, {
@@ -1 +1 @@
1
- {"version":3,"file":"TableDropdown.js","names":["React","useCallback","useEffect","useMemo","useState","Option","Select","useApi","EMPTY_ARRAY","jsx","_jsx","isJavaObject","value","equals","defaultFormatValue","concat","TableDropdown","_ref","column","table","filter","onChange","selectedValue","disabled","className","formatValue","maxSize","dh","values","setValues","undefined","tableColumn","columns","applyFilter","subscription","setViewport","addEventListener","Table","EVENT_UPDATED","event","detail","newValues","rows","map","row","_row$get","get","close","allValues","selectedIndex","findIndex","handleChange","newSelectedIndex","children","i"],"sources":["../src/TableDropdown.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Option, Select } from '@deephaven/components';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\n\ntype JavaObject = {\n equals: (other: unknown) => boolean;\n};\n\nfunction isJavaObject(value: unknown): value is JavaObject {\n return (\n typeof value === 'object' &&\n value != null &&\n 'equals' in value &&\n typeof value.equals === 'function'\n );\n}\n\nfunction defaultFormatValue(value: unknown): string {\n return `${value}`;\n}\n\nexport type TableDropdownProps = {\n /** Table to use as the source of data. Does not own the table, does not close it on unmount. */\n table?: DhType.Table;\n\n /** Column to read data from the table. Defaults to the first column in the table if it's not provided. */\n column?: DhType.Column;\n\n /** Triggered when the dropdown selection has changed */\n onChange: (value: unknown) => void;\n\n /** Filter to apply on the table */\n filter?: readonly DhType.FilterCondition[];\n\n /** The currently selected value */\n selectedValue?: unknown;\n\n /** Whether the control is disabled */\n disabled?: boolean;\n\n /** Class to apply to the select element */\n className?: string;\n\n /** Optional function to format the value for display */\n formatValue?: (value: unknown) => string;\n\n /** Maximum number of elements to load */\n maxSize?: number;\n};\n\n/**\n * Dropdown that displays the values of a column in a table.\n */\nexport function TableDropdown({\n column,\n table,\n filter = EMPTY_ARRAY,\n onChange,\n selectedValue,\n disabled,\n className,\n formatValue = defaultFormatValue,\n maxSize = 1000,\n}: TableDropdownProps): JSX.Element {\n const dh = useApi();\n const [values, setValues] = useState<unknown[]>([]);\n\n useEffect(() => {\n if (table == null) {\n setValues([]);\n return undefined;\n }\n\n const tableColumn = column ?? table.columns[0];\n // Need to set a viewport on the table and start listening to get the values to populate the dropdown\n table.applyFilter(filter as DhType.FilterCondition[]);\n const subscription = table.setViewport(0, maxSize, [tableColumn]);\n\n subscription.addEventListener(\n dh.Table.EVENT_UPDATED,\n (event: DhType.Event<DhType.ViewportData>) => {\n const { detail } = event;\n // Core JSAPI returns undefined for null table values,\n // coalesce with null to differentiate null from no selection in the dropdown\n // https://github.com/deephaven/deephaven-core/issues/5400\n const newValues = detail.rows.map(row => row.get(tableColumn) ?? null);\n setValues(newValues);\n }\n );\n\n return () => {\n subscription.close();\n };\n }, [column, dh, filter, maxSize, table]);\n\n // If the selected value is undefined, add a placeholder item\n const allValues = useMemo(() => {\n if (selectedValue === undefined) {\n return [undefined, ...values];\n }\n return values;\n }, [selectedValue, values]);\n\n // Since values could be anything, not just strings, track the selected index based on the current data\n const selectedIndex = useMemo(\n // eslint-disable-next-line eqeqeq\n () =>\n allValues.findIndex(\n value =>\n value === selectedValue ||\n (isJavaObject(value) && value.equals(selectedValue))\n ),\n [selectedValue, allValues]\n );\n\n const handleChange = useCallback(\n newSelectedIndex => {\n onChange(allValues[newSelectedIndex]);\n },\n [onChange, allValues]\n );\n\n return (\n <Select\n className={className}\n value={selectedIndex}\n onChange={handleChange}\n disabled={disabled}\n >\n {allValues.map((value, i) => (\n // eslint-disable-next-line react/no-array-index-key\n <Option key={`${i}`} value={i}>\n {formatValue(value)}\n </Option>\n ))}\n </Select>\n );\n}\n\nexport default TableDropdown;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableDropdown.js","names":["React","useCallback","useEffect","useMemo","useState","Option","Select","useApi","EMPTY_ARRAY","jsx","_jsx","isJavaObject","value","equals","defaultFormatValue","concat","TableDropdown","_ref","column","table","filter","onChange","selectedValue","disabled","className","formatValue","maxSize","dh","values","setValues","undefined","tableColumn","columns","applyFilter","subscription","setViewport","addEventListener","Table","EVENT_UPDATED","event","detail","newValues","rows","map","row","_row$get","get","close","allValues","selectedIndex","findIndex","handleChange","newSelectedValue","newSelectedIndex","parseInt","children","i"],"sources":["../src/TableDropdown.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Option, Select } from '@deephaven/components';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\n\ntype JavaObject = {\n equals: (other: unknown) => boolean;\n};\n\nfunction isJavaObject(value: unknown): value is JavaObject {\n return (\n typeof value === 'object' &&\n value != null &&\n 'equals' in value &&\n typeof value.equals === 'function'\n );\n}\n\nfunction defaultFormatValue(value: unknown): string {\n return `${value}`;\n}\n\nexport type TableDropdownProps = {\n /** Table to use as the source of data. Does not own the table, does not close it on unmount. */\n table?: DhType.Table;\n\n /** Column to read data from the table. Defaults to the first column in the table if it's not provided. */\n column?: DhType.Column;\n\n /** Triggered when the dropdown selection has changed */\n onChange: (value: unknown) => void;\n\n /** Filter to apply on the table */\n filter?: readonly DhType.FilterCondition[];\n\n /** The currently selected value */\n selectedValue?: unknown;\n\n /** Whether the control is disabled */\n disabled?: boolean;\n\n /** Class to apply to the select element */\n className?: string;\n\n /** Optional function to format the value for display */\n formatValue?: (value: unknown) => string;\n\n /** Maximum number of elements to load */\n maxSize?: number;\n};\n\n/**\n * Dropdown that displays the values of a column in a table.\n */\nexport function TableDropdown({\n column,\n table,\n filter = EMPTY_ARRAY,\n onChange,\n selectedValue,\n disabled,\n className,\n formatValue = defaultFormatValue,\n maxSize = 1000,\n}: TableDropdownProps): JSX.Element {\n const dh = useApi();\n const [values, setValues] = useState<unknown[]>([]);\n\n useEffect(() => {\n if (table == null) {\n setValues([]);\n return undefined;\n }\n\n const tableColumn = column ?? table.columns[0];\n // Need to set a viewport on the table and start listening to get the values to populate the dropdown\n table.applyFilter(filter as DhType.FilterCondition[]);\n const subscription = table.setViewport(0, maxSize, [tableColumn]);\n\n subscription.addEventListener(\n dh.Table.EVENT_UPDATED,\n (event: DhType.Event<DhType.ViewportData>) => {\n const { detail } = event;\n // Core JSAPI returns undefined for null table values,\n // coalesce with null to differentiate null from no selection in the dropdown\n // https://github.com/deephaven/deephaven-core/issues/5400\n const newValues = detail.rows.map(row => row.get(tableColumn) ?? null);\n setValues(newValues);\n }\n );\n\n return () => {\n subscription.close();\n };\n }, [column, dh, filter, maxSize, table]);\n\n // If the selected value is undefined, add a placeholder item\n const allValues = useMemo(() => {\n if (selectedValue === undefined) {\n return [undefined, ...values];\n }\n return values;\n }, [selectedValue, values]);\n\n // Since values could be anything, not just strings, track the selected index based on the current data\n const selectedIndex = useMemo(\n () =>\n allValues.findIndex(\n value =>\n value === selectedValue ||\n (isJavaObject(value) && value.equals(selectedValue))\n ),\n [selectedValue, allValues]\n );\n\n const handleChange = useCallback(\n (newSelectedValue: string) => {\n const newSelectedIndex = parseInt(newSelectedValue, 10);\n onChange(allValues[newSelectedIndex]);\n },\n [onChange, allValues]\n );\n\n return (\n <Select\n className={className}\n value={selectedIndex}\n onChange={handleChange}\n disabled={disabled}\n >\n {allValues.map((value, i) => (\n // eslint-disable-next-line react/no-array-index-key\n <Option key={`${i}`} value={i}>\n {formatValue(value)}\n </Option>\n ))}\n </Select>\n );\n}\n\nexport default TableDropdown;\n"],"mappings":"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","ignoreList":[]}
@@ -13,12 +13,5 @@ interface TableInputProps {
13
13
  onBlur?: () => void;
14
14
  }
15
15
  declare function TableInput(props: TableInputProps): JSX.Element;
16
- declare namespace TableInput {
17
- var displayName: string;
18
- var defaultProps: {
19
- isInvalid: boolean;
20
- className: undefined;
21
- };
22
- }
23
16
  export default TableInput;
24
17
  //# sourceMappingURL=TableInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableInput.d.ts","sourceRoot":"","sources":["../src/TableInput.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAGjD,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,wBAAwB,CAAC;AAIhC,OAAO,mBAAmB,CAAC;AAI3B,KAAK,KAAK,GAAG,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC;AAQrC,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,EAAE,CAAC,KAAK,CAAC,CAAC;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IACnC,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"}
1
+ {"version":3,"file":"TableInput.d.ts","sourceRoot":"","sources":["../src/TableInput.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAGjD,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,wBAAwB,CAAC;AAIhC,OAAO,mBAAmB,CAAC;AAI3B,KAAK,KAAK,GAAG,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC;AAQrC,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,EAAE,CAAC,KAAK,CAAC,CAAC;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAID,iBAAS,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAiQvD;AAED,eAAe,UAAU,CAAC"}
@@ -3,15 +3,13 @@ function _asyncToGenerator(n) { return function () { var t = this, e = arguments
3
3
  import React, { useCallback, useState, useRef, useEffect, useMemo } from 'react';
4
4
  import classNames from 'classnames';
5
5
  import { LoadingOverlay, SearchInput, SelectValueList } from '@deephaven/components';
6
- import { PromiseUtils } from '@deephaven/utils';
6
+ import { EMPTY_FUNCTION, PromiseUtils } from '@deephaven/utils';
7
7
  import Log from '@deephaven/log';
8
8
  import { Formatter, FormatterUtils } from '@deephaven/jsapi-utils';
9
9
  import { useApi } from '@deephaven/jsapi-bootstrap';
10
10
  import useTableColumn from "./useTableColumn.js";
11
11
  import "./TableInput.css";
12
- import { jsx as _jsx } from "react/jsx-runtime";
13
- import { Fragment as _Fragment } from "react/jsx-runtime";
14
- import { jsxs as _jsxs } from "react/jsx-runtime";
12
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
15
13
  var log = Log.module('TableInput');
16
14
  var SIZE_LIMIT = 250;
17
15
  function TableInput(props) {
@@ -22,8 +20,8 @@ function TableInput(props) {
22
20
  settings,
23
21
  defaultValue = [],
24
22
  isInvalid = false,
25
- onChange = () => false,
26
- onBlur = () => false,
23
+ onChange = EMPTY_FUNCTION,
24
+ onBlur = EMPTY_FUNCTION,
27
25
  table: tablePromise
28
26
  } = props;
29
27
  var parentRef = useRef(null);
@@ -83,7 +81,7 @@ function TableInput(props) {
83
81
  onChange(Array.from(updatedSelection));
84
82
  }
85
83
  }, [onChange, updatedSelection]);
86
- var initTable = useCallback( /*#__PURE__*/function () {
84
+ var initTable = useCallback(/*#__PURE__*/function () {
87
85
  var _ref = _asyncToGenerator(function* (promise) {
88
86
  try {
89
87
  var resolved = yield promise;
@@ -119,7 +117,7 @@ function TableInput(props) {
119
117
  if (index > -1) {
120
118
  var _listRef$current;
121
119
  log.debug2("Found ".concat(value, " at index ").concat(index));
122
- (_listRef$current = listRef.current) === null || _listRef$current === void 0 ? void 0 : _listRef$current.scrollIntoView(index);
120
+ (_listRef$current = listRef.current) === null || _listRef$current === void 0 || _listRef$current.scrollIntoView(index);
123
121
  } else {
124
122
  log.debug2("".concat(value, " not found"));
125
123
  }
@@ -221,10 +219,5 @@ function TableInput(props) {
221
219
  })]
222
220
  });
223
221
  }
224
- TableInput.displayName = 'TableInput';
225
- TableInput.defaultProps = {
226
- isInvalid: false,
227
- className: undefined
228
- };
229
222
  export default TableInput;
230
223
  //# sourceMappingURL=TableInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableInput.js","names":["React","useCallback","useState","useRef","useEffect","useMemo","classNames","LoadingOverlay","SearchInput","SelectValueList","PromiseUtils","Log","Formatter","FormatterUtils","useApi","useTableColumn","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","SIZE_LIMIT","TableInput","props","_table$size","_error$message","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","concat","items","updatedSelection","removedItems","result","forEach","v","isSelected","has","delete","push","displayValue","debug2","newSelection","Array","from","initTable","_ref","_asyncToGenerator","promise","resolved","debug","e","isCanceled","_x","apply","arguments","cancelablePromise","makeCancelable","cancel","handleSearchChange","target","index","findIndex","item","includes","_listRef$current","current","scrollIntoView","handleSelect","length","selectedValue","add","handleSelectAll","values","map","handleClearSelection","handleViewportChange","handleChildBlur","_parentRef$current","relatedTarget","HTMLElement","contains","isEmpty","ref","children","disabled","placeholder","offset","onSelect","onViewportChange","onClick","isLoaded","isLoading","errorMessage","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 { dh } from '@deephaven/jsapi-types';\nimport { PromiseUtils } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport {\n Formatter,\n FormatterUtils,\n type Settings,\n} 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 = dh.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<dh.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 =\n FormatterUtils.getDateTimeFormatterOptions(settings);\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<dh.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 data-testid=\"table-input-loading\"\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","EMPTY_FUNCTION","PromiseUtils","Log","Formatter","FormatterUtils","useApi","useTableColumn","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","SIZE_LIMIT","TableInput","props","_table$size","_error$message","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","concat","items","updatedSelection","removedItems","result","forEach","v","isSelected","has","delete","push","displayValue","debug2","newSelection","Array","from","initTable","_ref","_asyncToGenerator","promise","resolved","debug","e","isCanceled","_x","apply","arguments","cancelablePromise","makeCancelable","cancel","handleSearchChange","target","index","findIndex","item","includes","_listRef$current","current","scrollIntoView","handleSelect","length","selectedValue","add","handleSelectAll","values","map","handleClearSelection","handleViewportChange","handleChildBlur","_parentRef$current","relatedTarget","HTMLElement","contains","isEmpty","ref","children","disabled","placeholder","offset","onSelect","onViewportChange","onClick","isLoaded","isLoading","errorMessage","message"],"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 { dh } from '@deephaven/jsapi-types';\nimport { EMPTY_FUNCTION, PromiseUtils } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport {\n Formatter,\n FormatterUtils,\n type Settings,\n} 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 = dh.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<dh.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 = EMPTY_FUNCTION,\n onBlur = EMPTY_FUNCTION,\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 =\n FormatterUtils.getDateTimeFormatterOptions(settings);\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<dh.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: 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: Promise<dh.Table>) => {\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: React.ChangeEvent<HTMLInputElement>) => {\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: number) => {\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 data-testid=\"table-input-loading\"\n />\n </div>\n ))}\n </div>\n );\n}\n\nexport default TableInput;\n"],"mappings":"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","ignoreList":[]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","TableInput","useBroadcastChannel","useBroadcastLoginListener","useDebouncedViewportSearch","useInitializeViewportData","useSelectDistinctTable","useSetPaddedViewportCallback","useTable","useTableColumn","useTableListener","useWidgetClose","useTableClose","useTableSize","useTableUtils","useViewportData"],"sources":["../src/index.ts"],"sourcesContent":["export * from './HookTestUtils';\nexport { default as TableInput } from './TableInput';\nexport * from './spectrum';\nexport * from './TableDropdown';\nexport { default as useBroadcastChannel } from './useBroadcastChannel';\nexport { default as useBroadcastLoginListener } from './useBroadcastLoginListener';\nexport * from './useCheckIfExistsValue';\nexport { default as useDebouncedViewportSearch } from './useDebouncedViewportSearch';\nexport * from './useDebouncedViewportSelectionFilter';\nexport * from './useFilterConditionFactories';\nexport * from './useFilteredItemsWithDefaultValue';\nexport * from './useFormatter';\nexport * from './useGetItemIndexByValue';\nexport * from './useGetItemPosition';\nexport { default as useInitializeViewportData } from './useInitializeViewportData';\nexport * from './useSearchableViewportData';\nexport * from './useNotNullOrEmptyFilter';\nexport * from './usePickerWithSelectedValues';\nexport { default as useSelectDistinctTable } from './useSelectDistinctTable';\nexport { default as useSetPaddedViewportCallback } from './useSetPaddedViewportCallback';\nexport * from './useShowOnlyEmptyFilter';\nexport { default as useTable } from './useTable';\nexport { default as useTableColumn } from './useTableColumn';\nexport { default as useTableListener } from './useTableListener';\nexport { default as useWidgetClose, useTableClose } from './useWidgetClose';\nexport { default as useTableSize } from './useTableSize';\nexport { default as useTableUtils } from './useTableUtils';\nexport * from './useValueFilter';\nexport { default as useViewportData } from './useViewportData';\nexport type { UseSelectDistinctTableResult } from './useSelectDistinctTable';\nexport type { UseViewportDataResult } from './useViewportData';\nexport * from './useViewportFilter';\n"],"mappings":";SACSA,OAAO,IAAIC,UAAU;AAAA;AAAA;AAAA,SAGrBD,OAAO,IAAIE,mBAAmB;AAAA,SAC9BF,OAAO,IAAIG,yBAAyB;AAAA;AAAA,SAEpCH,OAAO,IAAII,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAOrCJ,OAAO,IAAIK,yBAAyB;AAAA;AAAA;AAAA;AAAA,SAIpCL,OAAO,IAAIM,sBAAsB;AAAA,SACjCN,OAAO,IAAIO,4BAA4B;AAAA;AAAA,SAEvCP,OAAO,IAAIQ,QAAQ;AAAA,SACnBR,OAAO,IAAIS,cAAc;AAAA,SACzBT,OAAO,IAAIU,gBAAgB;AAAA,SAC3BV,OAAO,IAAIW,cAAc,EAAEC,aAAa;AAAA,SACxCZ,OAAO,IAAIa,YAAY;AAAA,SACvBb,OAAO,IAAIc,aAAa;AAAA;AAAA,SAExBd,OAAO,IAAIe,eAAe;AAAA"}
1
+ {"version":3,"file":"index.js","names":["default","TableInput","useBroadcastChannel","useBroadcastLoginListener","useDebouncedViewportSearch","useInitializeViewportData","useSelectDistinctTable","useSetPaddedViewportCallback","useTable","useTableColumn","useTableListener","useWidgetClose","useTableClose","useTableSize","useTableUtils","useViewportData"],"sources":["../src/index.ts"],"sourcesContent":["export * from './HookTestUtils';\nexport { default as TableInput } from './TableInput';\nexport * from './spectrum';\nexport * from './TableDropdown';\nexport { default as useBroadcastChannel } from './useBroadcastChannel';\nexport { default as useBroadcastLoginListener } from './useBroadcastLoginListener';\nexport * from './useCheckIfExistsValue';\nexport { default as useDebouncedViewportSearch } from './useDebouncedViewportSearch';\nexport * from './useDebouncedViewportSelectionFilter';\nexport * from './useFilterConditionFactories';\nexport * from './useFilteredItemsWithDefaultValue';\nexport * from './useFormatter';\nexport * from './useGetItemIndexByValue';\nexport * from './useGetItemPosition';\nexport { default as useInitializeViewportData } from './useInitializeViewportData';\nexport * from './useSearchableViewportData';\nexport * from './useNotNullOrEmptyFilter';\nexport * from './usePickerWithSelectedValues';\nexport { default as useSelectDistinctTable } from './useSelectDistinctTable';\nexport { default as useSetPaddedViewportCallback } from './useSetPaddedViewportCallback';\nexport * from './useShowOnlyEmptyFilter';\nexport { default as useTable } from './useTable';\nexport { default as useTableColumn } from './useTableColumn';\nexport { default as useTableListener } from './useTableListener';\nexport { default as useWidgetClose, useTableClose } from './useWidgetClose';\nexport { default as useTableSize } from './useTableSize';\nexport { default as useTableUtils } from './useTableUtils';\nexport * from './useValueFilter';\nexport { default as useViewportData } from './useViewportData';\nexport type { UseSelectDistinctTableResult } from './useSelectDistinctTable';\nexport type { UseViewportDataResult } from './useViewportData';\nexport * from './useViewportFilter';\n"],"mappings":";SACSA,OAAO,IAAIC,UAAU;AAAA;AAAA;AAAA,SAGrBD,OAAO,IAAIE,mBAAmB;AAAA,SAC9BF,OAAO,IAAIG,yBAAyB;AAAA;AAAA,SAEpCH,OAAO,IAAII,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAOrCJ,OAAO,IAAIK,yBAAyB;AAAA;AAAA;AAAA;AAAA,SAIpCL,OAAO,IAAIM,sBAAsB;AAAA,SACjCN,OAAO,IAAIO,4BAA4B;AAAA;AAAA,SAEvCP,OAAO,IAAIQ,QAAQ;AAAA,SACnBR,OAAO,IAAIS,cAAc;AAAA,SACzBT,OAAO,IAAIU,gBAAgB;AAAA,SAC3BV,OAAO,IAAIW,cAAc,EAAEC,aAAa;AAAA,SACxCZ,OAAO,IAAIa,YAAY;AAAA,SACvBb,OAAO,IAAIc,aAAa;AAAA;AAAA,SAExBd,OAAO,IAAIe,eAAe;AAAA","ignoreList":[]}
@@ -20,7 +20,7 @@ export function ComboBox(props) {
20
20
  var isOpenRef = useRef(false);
21
21
  var inputValueRef = useRef('');
22
22
  var onInputChange = useCallback(value => {
23
- onInputChangeInternal === null || onInputChangeInternal === void 0 ? void 0 : onInputChangeInternal(value);
23
+ onInputChangeInternal === null || onInputChangeInternal === void 0 || onInputChangeInternal(value);
24
24
 
25
25
  // Only apply search text if ComboBox is open.
26
26
  if (isOpenRef.current) {
@@ -40,7 +40,7 @@ export function ComboBox(props) {
40
40
  }, [onInputChangeInternal, onSearchTextChange]);
41
41
  var onOpenChange = useCallback((isOpen, menuTrigger) => {
42
42
  var _pickerProps$onOpenCh;
43
- (_pickerProps$onOpenCh = pickerProps.onOpenChange) === null || _pickerProps$onOpenCh === void 0 ? void 0 : _pickerProps$onOpenCh.call(pickerProps, isOpen);
43
+ (_pickerProps$onOpenCh = pickerProps.onOpenChange) === null || _pickerProps$onOpenCh === void 0 || _pickerProps$onOpenCh.call(pickerProps, isOpen);
44
44
 
45
45
  // Reset the search text when the ComboBox is closed.
46
46
  if (!isOpen) {
@@ -1 +1 @@
1
- {"version":3,"file":"ComboBox.js","names":["ComboBoxNormalized","useCallback","useRef","usePickerProps","jsx","_jsx","ComboBox","props","_usePickerProps","onInputChange","onInputChangeInternal","onSearchTextChange","pickerProps","_objectWithoutProperties","_excluded","isOpenRef","inputValueRef","value","current","onOpenChange","isOpen","menuTrigger","_pickerProps$onOpenCh","call","_objectSpread"],"sources":["../../src/spectrum/ComboBox.tsx"],"sourcesContent":["import {\n ComboBoxNormalized,\n type MenuTriggerAction,\n type NormalizedItem,\n type SpectrumComboBoxProps,\n} from '@deephaven/components';\nimport { useCallback, useRef } from 'react';\nimport { type PickerWithTableProps } from './PickerProps';\nimport { usePickerProps } from './utils';\n\nexport type ComboBoxProps = PickerWithTableProps<\n SpectrumComboBoxProps<NormalizedItem>\n>;\n\nexport function ComboBox(props: ComboBoxProps): JSX.Element {\n const {\n onInputChange: onInputChangeInternal,\n onSearchTextChange,\n ...pickerProps\n } = usePickerProps<ComboBoxProps>(props);\n\n const isOpenRef = useRef(false);\n const inputValueRef = useRef('');\n\n const onInputChange = useCallback(\n (value: string) => {\n onInputChangeInternal?.(value);\n\n // Only apply search text if ComboBox is open.\n if (isOpenRef.current) {\n onSearchTextChange(value);\n }\n // When the ComboBox is closed, `onInputChange` may have been called as a\n // result of user search input, ComboBox selection, or by selected key\n // prop changes. We can't determine the source here, so we clear the search\n // text and store the search value so that the list is unfiltered the next\n // time the ComboBox is opened. We also store the search value so we can\n // re-apply it in `onOpenChange` if the ComboBox is opened by user search\n // input.\n else {\n onSearchTextChange('');\n inputValueRef.current = value;\n }\n },\n [onInputChangeInternal, onSearchTextChange]\n );\n\n const onOpenChange = useCallback(\n (isOpen: boolean, menuTrigger?: MenuTriggerAction) => {\n pickerProps.onOpenChange?.(isOpen);\n\n // Reset the search text when the ComboBox is closed.\n if (!isOpen) {\n onSearchTextChange('');\n }\n // Restore search text when ComboBox has been opened by user input.\n else if (menuTrigger === 'input') {\n onSearchTextChange(inputValueRef.current);\n }\n\n // Store the open state so that `onInputChange` has access to it.\n isOpenRef.current = isOpen;\n },\n [onSearchTextChange, pickerProps]\n );\n\n return (\n <ComboBoxNormalized\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...pickerProps}\n onInputChange={onInputChange}\n onOpenChange={onOpenChange}\n />\n );\n}\n\nexport default ComboBox;\n"],"mappings":";;;;;;;;AAAA,SACEA,kBAAkB,QAIb,uBAAuB;AAC9B,SAASC,WAAW,EAAEC,MAAM,QAAQ,OAAO;AAAC,SAEnCC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAMvB,OAAO,SAASC,QAAQA,CAACC,KAAoB,EAAe;EAC1D,IAAAC,eAAA,GAIIL,cAAc,CAAgBI,KAAK,CAAC;IAJlC;MACJE,aAAa,EAAEC,qBAAqB;MACpCC;IAEF,CAAC,GAAAH,eAAA;IADII,WAAW,GAAAC,wBAAA,CAAAL,eAAA,EAAAM,SAAA;EAGhB,IAAMC,SAAS,GAAGb,MAAM,CAAC,KAAK,CAAC;EAC/B,IAAMc,aAAa,GAAGd,MAAM,CAAC,EAAE,CAAC;EAEhC,IAAMO,aAAa,GAAGR,WAAW,CAC9BgB,KAAa,IAAK;IACjBP,qBAAqB,aAArBA,qBAAqB,uBAArBA,qBAAqB,CAAGO,KAAK,CAAC;;IAE9B;IACA,IAAIF,SAAS,CAACG,OAAO,EAAE;MACrBP,kBAAkB,CAACM,KAAK,CAAC;IAC3B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAAA,KACK;MACHN,kBAAkB,CAAC,EAAE,CAAC;MACtBK,aAAa,CAACE,OAAO,GAAGD,KAAK;IAC/B;EACF,CAAC,EACD,CAACP,qBAAqB,EAAEC,kBAAkB,CAC5C,CAAC;EAED,IAAMQ,YAAY,GAAGlB,WAAW,CAC9B,CAACmB,MAAe,EAAEC,WAA+B,KAAK;IAAA,IAAAC,qBAAA;IACpD,CAAAA,qBAAA,GAAAV,WAAW,CAACO,YAAY,cAAAG,qBAAA,uBAAxBA,qBAAA,CAAAC,IAAA,CAAAX,WAAW,EAAgBQ,MAAM,CAAC;;IAElC;IACA,IAAI,CAACA,MAAM,EAAE;MACXT,kBAAkB,CAAC,EAAE,CAAC;IACxB;IACA;IAAA,KACK,IAAIU,WAAW,KAAK,OAAO,EAAE;MAChCV,kBAAkB,CAACK,aAAa,CAACE,OAAO,CAAC;IAC3C;;IAEA;IACAH,SAAS,CAACG,OAAO,GAAGE,MAAM;EAC5B,CAAC,EACD,CAACT,kBAAkB,EAAEC,WAAW,CAClC,CAAC;EAED,oBACEP,IAAA,CAACL;EACC;EAAA,EAAAwB,aAAA,CAAAA,aAAA,KACIZ,WAAW;IACfH,aAAa,EAAEA,aAAc;IAC7BU,YAAY,EAAEA;EAAa,EAC5B,CAAC;AAEN;AAEA,eAAeb,QAAQ"}
1
+ {"version":3,"file":"ComboBox.js","names":["ComboBoxNormalized","useCallback","useRef","usePickerProps","jsx","_jsx","ComboBox","props","_usePickerProps","onInputChange","onInputChangeInternal","onSearchTextChange","pickerProps","_objectWithoutProperties","_excluded","isOpenRef","inputValueRef","value","current","onOpenChange","isOpen","menuTrigger","_pickerProps$onOpenCh","call","_objectSpread"],"sources":["../../src/spectrum/ComboBox.tsx"],"sourcesContent":["import {\n ComboBoxNormalized,\n type MenuTriggerAction,\n type NormalizedItem,\n type SpectrumComboBoxProps,\n} from '@deephaven/components';\nimport { useCallback, useRef } from 'react';\nimport { type PickerWithTableProps } from './PickerProps';\nimport { usePickerProps } from './utils';\n\nexport type ComboBoxProps = PickerWithTableProps<\n SpectrumComboBoxProps<NormalizedItem>\n>;\n\nexport function ComboBox(props: ComboBoxProps): JSX.Element {\n const {\n onInputChange: onInputChangeInternal,\n onSearchTextChange,\n ...pickerProps\n } = usePickerProps<ComboBoxProps>(props);\n\n const isOpenRef = useRef(false);\n const inputValueRef = useRef('');\n\n const onInputChange = useCallback(\n (value: string) => {\n onInputChangeInternal?.(value);\n\n // Only apply search text if ComboBox is open.\n if (isOpenRef.current) {\n onSearchTextChange(value);\n }\n // When the ComboBox is closed, `onInputChange` may have been called as a\n // result of user search input, ComboBox selection, or by selected key\n // prop changes. We can't determine the source here, so we clear the search\n // text and store the search value so that the list is unfiltered the next\n // time the ComboBox is opened. We also store the search value so we can\n // re-apply it in `onOpenChange` if the ComboBox is opened by user search\n // input.\n else {\n onSearchTextChange('');\n inputValueRef.current = value;\n }\n },\n [onInputChangeInternal, onSearchTextChange]\n );\n\n const onOpenChange = useCallback(\n (isOpen: boolean, menuTrigger?: MenuTriggerAction) => {\n pickerProps.onOpenChange?.(isOpen);\n\n // Reset the search text when the ComboBox is closed.\n if (!isOpen) {\n onSearchTextChange('');\n }\n // Restore search text when ComboBox has been opened by user input.\n else if (menuTrigger === 'input') {\n onSearchTextChange(inputValueRef.current);\n }\n\n // Store the open state so that `onInputChange` has access to it.\n isOpenRef.current = isOpen;\n },\n [onSearchTextChange, pickerProps]\n );\n\n return (\n <ComboBoxNormalized\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...pickerProps}\n onInputChange={onInputChange}\n onOpenChange={onOpenChange}\n />\n );\n}\n\nexport default ComboBox;\n"],"mappings":";;;;;;;;AAAA,SACEA,kBAAkB,QAIb,uBAAuB;AAC9B,SAASC,WAAW,EAAEC,MAAM,QAAQ,OAAO;AAAC,SAEnCC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAMvB,OAAO,SAASC,QAAQA,CAACC,KAAoB,EAAe;EAC1D,IAAAC,eAAA,GAIIL,cAAc,CAAgBI,KAAK,CAAC;IAJlC;MACJE,aAAa,EAAEC,qBAAqB;MACpCC;IAEF,CAAC,GAAAH,eAAA;IADII,WAAW,GAAAC,wBAAA,CAAAL,eAAA,EAAAM,SAAA;EAGhB,IAAMC,SAAS,GAAGb,MAAM,CAAC,KAAK,CAAC;EAC/B,IAAMc,aAAa,GAAGd,MAAM,CAAC,EAAE,CAAC;EAEhC,IAAMO,aAAa,GAAGR,WAAW,CAC9BgB,KAAa,IAAK;IACjBP,qBAAqB,aAArBA,qBAAqB,eAArBA,qBAAqB,CAAGO,KAAK,CAAC;;IAE9B;IACA,IAAIF,SAAS,CAACG,OAAO,EAAE;MACrBP,kBAAkB,CAACM,KAAK,CAAC;IAC3B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAAA,KACK;MACHN,kBAAkB,CAAC,EAAE,CAAC;MACtBK,aAAa,CAACE,OAAO,GAAGD,KAAK;IAC/B;EACF,CAAC,EACD,CAACP,qBAAqB,EAAEC,kBAAkB,CAC5C,CAAC;EAED,IAAMQ,YAAY,GAAGlB,WAAW,CAC9B,CAACmB,MAAe,EAAEC,WAA+B,KAAK;IAAA,IAAAC,qBAAA;IACpD,CAAAA,qBAAA,GAAAV,WAAW,CAACO,YAAY,cAAAG,qBAAA,eAAxBA,qBAAA,CAAAC,IAAA,CAAAX,WAAW,EAAgBQ,MAAM,CAAC;;IAElC;IACA,IAAI,CAACA,MAAM,EAAE;MACXT,kBAAkB,CAAC,EAAE,CAAC;IACxB;IACA;IAAA,KACK,IAAIU,WAAW,KAAK,OAAO,EAAE;MAChCV,kBAAkB,CAACK,aAAa,CAACE,OAAO,CAAC;IAC3C;;IAEA;IACAH,SAAS,CAACG,OAAO,GAAGE,MAAM;EAC5B,CAAC,EACD,CAACT,kBAAkB,EAAEC,WAAW,CAClC,CAAC;EAED,oBACEP,IAAA,CAACL;EACC;EAAA,EAAAwB,aAAA,CAAAA,aAAA,KACIZ,WAAW;IACfH,aAAa,EAAEA,aAAc;IAC7BU,YAAY,EAAEA;EAAa,EAC5B,CAAC;AAEN;AAEA,eAAeb,QAAQ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.js","names":["LIST_VIEW_ROW_HEIGHTS","ListViewNormalized","useSpectrumThemeProvider","useFormatter","useViewportData","useItemRowDeserializer","jsx","_jsx","ListView","_ref","_props$density","table","keyColumn","keyColumnName","labelColumn","labelColumnName","iconColumn","iconColumnName","settings","props","_objectWithoutProperties","_excluded","scale","itemHeight","density","getFormattedString","formatValue","deserializeRow","viewportData","onScroll","reuseItemsOnTableResize","_objectSpread","normalizedItems","items","showItemIcons"],"sources":["../../src/spectrum/ListView.tsx"],"sourcesContent":["import {\n LIST_VIEW_ROW_HEIGHTS,\n ListViewNormalized,\n type ListViewNormalizedProps,\n type NormalizedItemData,\n useSpectrumThemeProvider,\n} from '@deephaven/components';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport { type Settings } from '@deephaven/jsapi-utils';\nimport useFormatter from '../useFormatter';\nimport useViewportData from '../useViewportData';\nimport { useItemRowDeserializer } from './utils';\n\nexport interface ListViewProps\n extends Omit<ListViewNormalizedProps, 'normalizedItems' | 'showItemIcons'> {\n table: DhType.Table;\n /* The column of values to use as item keys. Defaults to the first column. */\n keyColumn?: string;\n /* The column of values to display as primary text. Defaults to the `keyColumn` value. */\n labelColumn?: string;\n\n /* The column of values to map to icons. */\n iconColumn?: string;\n\n settings?: Settings;\n}\n\nexport function ListView({\n table,\n keyColumn: keyColumnName,\n labelColumn: labelColumnName,\n iconColumn: iconColumnName,\n settings,\n ...props\n}: ListViewProps): JSX.Element {\n const { scale } = useSpectrumThemeProvider();\n const itemHeight = LIST_VIEW_ROW_HEIGHTS[props.density ?? 'regular'][scale];\n\n const { getFormattedString: formatValue } = useFormatter(settings);\n\n const deserializeRow = useItemRowDeserializer({\n table,\n iconColumnName,\n keyColumnName,\n labelColumnName,\n formatValue,\n });\n\n const { viewportData, onScroll } = useViewportData<\n NormalizedItemData,\n DhType.Table\n >({\n reuseItemsOnTableResize: true,\n table,\n itemHeight,\n deserializeRow,\n });\n\n return (\n <ListViewNormalized\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n normalizedItems={viewportData.items}\n showItemIcons={iconColumnName != null}\n onScroll={onScroll}\n />\n );\n}\n\nexport default ListView;\n"],"mappings":";;;;;;;;AAAA,SACEA,qBAAqB,EACrBC,kBAAkB,EAGlBC,wBAAwB,QACnB,uBAAuB;AAAC,OAGxBC,YAAY;AAAA,OACZC,eAAe;AAAA,SACbC,sBAAsB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAgB/B,OAAO,SAASC,QAAQA,CAAAC,IAAA,EAOO;EAAA,IAAAC,cAAA;EAAA,IAPN;MACvBC,KAAK;MACLC,SAAS,EAAEC,aAAa;MACxBC,WAAW,EAAEC,eAAe;MAC5BC,UAAU,EAAEC,cAAc;MAC1BC;IAEa,CAAC,GAAAT,IAAA;IADXU,KAAK,GAAAC,wBAAA,CAAAX,IAAA,EAAAY,SAAA;EAER,IAAM;IAAEC;EAAM,CAAC,GAAGpB,wBAAwB,CAAC,CAAC;EAC5C,IAAMqB,UAAU,GAAGvB,qBAAqB,EAAAU,cAAA,GAACS,KAAK,CAACK,OAAO,cAAAd,cAAA,cAAAA,cAAA,GAAI,SAAS,CAAC,CAACY,KAAK,CAAC;EAE3E,IAAM;IAAEG,kBAAkB,EAAEC;EAAY,CAAC,GAAGvB,YAAY,CAACe,QAAQ,CAAC;EAElE,IAAMS,cAAc,GAAGtB,sBAAsB,CAAC;IAC5CM,KAAK;IACLM,cAAc;IACdJ,aAAa;IACbE,eAAe;IACfW;EACF,CAAC,CAAC;EAEF,IAAM;IAAEE,YAAY;IAAEC;EAAS,CAAC,GAAGzB,eAAe,CAGhD;IACA0B,uBAAuB,EAAE,IAAI;IAC7BnB,KAAK;IACLY,UAAU;IACVI;EACF,CAAC,CAAC;EAEF,oBACEpB,IAAA,CAACN;EACC;EAAA,EAAA8B,aAAA,CAAAA,aAAA,KACIZ,KAAK;IACTa,eAAe,EAAEJ,YAAY,CAACK,KAAM;IACpCC,aAAa,EAAEjB,cAAc,IAAI,IAAK;IACtCY,QAAQ,EAAEA;EAAS,EACpB,CAAC;AAEN;AAEA,eAAerB,QAAQ"}
1
+ {"version":3,"file":"ListView.js","names":["LIST_VIEW_ROW_HEIGHTS","ListViewNormalized","useSpectrumThemeProvider","useFormatter","useViewportData","useItemRowDeserializer","jsx","_jsx","ListView","_ref","_props$density","table","keyColumn","keyColumnName","labelColumn","labelColumnName","iconColumn","iconColumnName","settings","props","_objectWithoutProperties","_excluded","scale","itemHeight","density","getFormattedString","formatValue","deserializeRow","viewportData","onScroll","reuseItemsOnTableResize","_objectSpread","normalizedItems","items","showItemIcons"],"sources":["../../src/spectrum/ListView.tsx"],"sourcesContent":["import {\n LIST_VIEW_ROW_HEIGHTS,\n ListViewNormalized,\n type ListViewNormalizedProps,\n type NormalizedItemData,\n useSpectrumThemeProvider,\n} from '@deephaven/components';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport { type Settings } from '@deephaven/jsapi-utils';\nimport useFormatter from '../useFormatter';\nimport useViewportData from '../useViewportData';\nimport { useItemRowDeserializer } from './utils';\n\nexport interface ListViewProps\n extends Omit<ListViewNormalizedProps, 'normalizedItems' | 'showItemIcons'> {\n table: DhType.Table;\n /* The column of values to use as item keys. Defaults to the first column. */\n keyColumn?: string;\n /* The column of values to display as primary text. Defaults to the `keyColumn` value. */\n labelColumn?: string;\n\n /* The column of values to map to icons. */\n iconColumn?: string;\n\n settings?: Settings;\n}\n\nexport function ListView({\n table,\n keyColumn: keyColumnName,\n labelColumn: labelColumnName,\n iconColumn: iconColumnName,\n settings,\n ...props\n}: ListViewProps): JSX.Element {\n const { scale } = useSpectrumThemeProvider();\n const itemHeight = LIST_VIEW_ROW_HEIGHTS[props.density ?? 'regular'][scale];\n\n const { getFormattedString: formatValue } = useFormatter(settings);\n\n const deserializeRow = useItemRowDeserializer({\n table,\n iconColumnName,\n keyColumnName,\n labelColumnName,\n formatValue,\n });\n\n const { viewportData, onScroll } = useViewportData<\n NormalizedItemData,\n DhType.Table\n >({\n reuseItemsOnTableResize: true,\n table,\n itemHeight,\n deserializeRow,\n });\n\n return (\n <ListViewNormalized\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n normalizedItems={viewportData.items}\n showItemIcons={iconColumnName != null}\n onScroll={onScroll}\n />\n );\n}\n\nexport default ListView;\n"],"mappings":";;;;;;;;AAAA,SACEA,qBAAqB,EACrBC,kBAAkB,EAGlBC,wBAAwB,QACnB,uBAAuB;AAAC,OAGxBC,YAAY;AAAA,OACZC,eAAe;AAAA,SACbC,sBAAsB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAgB/B,OAAO,SAASC,QAAQA,CAAAC,IAAA,EAOO;EAAA,IAAAC,cAAA;EAAA,IAPN;MACvBC,KAAK;MACLC,SAAS,EAAEC,aAAa;MACxBC,WAAW,EAAEC,eAAe;MAC5BC,UAAU,EAAEC,cAAc;MAC1BC;IAEa,CAAC,GAAAT,IAAA;IADXU,KAAK,GAAAC,wBAAA,CAAAX,IAAA,EAAAY,SAAA;EAER,IAAM;IAAEC;EAAM,CAAC,GAAGpB,wBAAwB,CAAC,CAAC;EAC5C,IAAMqB,UAAU,GAAGvB,qBAAqB,EAAAU,cAAA,GAACS,KAAK,CAACK,OAAO,cAAAd,cAAA,cAAAA,cAAA,GAAI,SAAS,CAAC,CAACY,KAAK,CAAC;EAE3E,IAAM;IAAEG,kBAAkB,EAAEC;EAAY,CAAC,GAAGvB,YAAY,CAACe,QAAQ,CAAC;EAElE,IAAMS,cAAc,GAAGtB,sBAAsB,CAAC;IAC5CM,KAAK;IACLM,cAAc;IACdJ,aAAa;IACbE,eAAe;IACfW;EACF,CAAC,CAAC;EAEF,IAAM;IAAEE,YAAY;IAAEC;EAAS,CAAC,GAAGzB,eAAe,CAGhD;IACA0B,uBAAuB,EAAE,IAAI;IAC7BnB,KAAK;IACLY,UAAU;IACVI;EACF,CAAC,CAAC;EAEF,oBACEpB,IAAA,CAACN;EACC;EAAA,EAAA8B,aAAA,CAAAA,aAAA,KACIZ,KAAK;IACTa,eAAe,EAAEJ,YAAY,CAACK,KAAM;IACpCC,aAAa,EAAEjB,cAAc,IAAI,IAAK;IACtCY,QAAQ,EAAEA;EAAS,EACpB,CAAC;AAEN;AAEA,eAAerB,QAAQ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Picker.js","names":["PickerNormalized","usePickerProps","jsx","_jsx","Picker","props","pickerProps","_objectSpread"],"sources":["../../src/spectrum/Picker.tsx"],"sourcesContent":["import { PickerNormalized } from '@deephaven/components';\nimport { type PickerProps } from './PickerProps';\nimport { usePickerProps } from './utils';\n\nexport function Picker(props: PickerProps): JSX.Element {\n const pickerProps = usePickerProps<PickerProps>(props);\n\n return (\n <PickerNormalized\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...pickerProps}\n />\n );\n}\n\nexport default Picker;\n"],"mappings":";;;;;AAAA,SAASA,gBAAgB,QAAQ,uBAAuB;AAAC,SAEhDC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAEvB,OAAO,SAASC,MAAMA,CAACC,KAAkB,EAAe;EACtD,IAAMC,WAAW,GAAGL,cAAc,CAAcI,KAAK,CAAC;EAEtD,oBACEF,IAAA,CAACH;EACC;EAAA,EAAAO,aAAA,KACID,WAAW,CAChB,CAAC;AAEN;AAEA,eAAeF,MAAM"}
1
+ {"version":3,"file":"Picker.js","names":["PickerNormalized","usePickerProps","jsx","_jsx","Picker","props","pickerProps","_objectSpread"],"sources":["../../src/spectrum/Picker.tsx"],"sourcesContent":["import { PickerNormalized } from '@deephaven/components';\nimport { type PickerProps } from './PickerProps';\nimport { usePickerProps } from './utils';\n\nexport function Picker(props: PickerProps): JSX.Element {\n const pickerProps = usePickerProps<PickerProps>(props);\n\n return (\n <PickerNormalized\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...pickerProps}\n />\n );\n}\n\nexport default Picker;\n"],"mappings":";;;;;AAAA,SAASA,gBAAgB,QAAQ,uBAAuB;AAAC,SAEhDC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAEvB,OAAO,SAASC,MAAMA,CAACC,KAAkB,EAAe;EACtD,IAAMC,WAAW,GAAGL,cAAc,CAAcI,KAAK,CAAC;EAEtD,oBACEF,IAAA,CAACH;EACC;EAAA,EAAAO,aAAA,KACID,WAAW,CAChB,CAAC;AAEN;AAEA,eAAeF,MAAM","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"PickerProps.js","names":[],"sources":["../../src/spectrum/PickerProps.ts"],"sourcesContent":["import {\n type NormalizedItem,\n type PickerPropsT,\n type SpectrumPickerProps,\n} from '@deephaven/components';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport { type Settings } from '@deephaven/jsapi-utils';\n\nexport type PickerWithTableProps<TProps> = Omit<\n PickerPropsT<TProps>,\n 'children'\n> & {\n table: DhType.Table;\n /* The column of values to use as item keys. Defaults to the first column. */\n keyColumn?: string;\n /* The column of values to display as primary text. Defaults to the `keyColumn` value. */\n labelColumn?: string;\n\n /* The column of values to map to icons. */\n iconColumn?: string;\n\n settings?: Settings;\n};\n\nexport type PickerProps = PickerWithTableProps<\n SpectrumPickerProps<NormalizedItem>\n>;\n"],"mappings":""}
1
+ {"version":3,"file":"PickerProps.js","names":[],"sources":["../../src/spectrum/PickerProps.ts"],"sourcesContent":["import {\n type NormalizedItem,\n type PickerPropsT,\n type SpectrumPickerProps,\n} from '@deephaven/components';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport { type Settings } from '@deephaven/jsapi-utils';\n\nexport type PickerWithTableProps<TProps> = Omit<\n PickerPropsT<TProps>,\n 'children'\n> & {\n table: DhType.Table;\n /* The column of values to use as item keys. Defaults to the first column. */\n keyColumn?: string;\n /* The column of values to display as primary text. Defaults to the `keyColumn` value. */\n labelColumn?: string;\n\n /* The column of values to map to icons. */\n iconColumn?: string;\n\n settings?: Settings;\n};\n\nexport type PickerProps = PickerWithTableProps<\n SpectrumPickerProps<NormalizedItem>\n>;\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/spectrum/index.ts"],"sourcesContent":["export * from './ComboBox';\nexport * from './ListView';\nexport * from './Picker';\nexport * from './PickerProps';\n"],"mappings":""}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/spectrum/index.ts"],"sourcesContent":["export * from './ComboBox';\nexport * from './ListView';\nexport * from './Picker';\nexport * from './PickerProps';\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/spectrum/utils/index.ts"],"sourcesContent":["export * from './itemUtils';\nexport * from './useItemRowDeserializer';\nexport * from './usePickerProps';\n"],"mappings":""}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/spectrum/utils/index.ts"],"sourcesContent":["export * from './itemUtils';\nexport * from './useItemRowDeserializer';\nexport * from './usePickerProps';\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"itemUtils.js","names":["getItemKeyColumn","table","keyColumnName","columns","findColumn","getItemLabelColumn","keyColumn","labelColumnName"],"sources":["../../../src/spectrum/utils/itemUtils.ts"],"sourcesContent":["import { type dh } from '@deephaven/jsapi-types';\n\n/**\n * Get the key column if column name is provided, otherwise use the first column.\n * @param table The table to get the key column from\n * @param keyColumnName The name of the column to use for key data\n * @returns DH Column containing the key values\n */\nexport function getItemKeyColumn(\n table: dh.Table,\n keyColumnName?: string\n): dh.Column {\n return keyColumnName == null\n ? table.columns[0]\n : table.findColumn(keyColumnName);\n}\n\n/**\n * Get the label column if column name is provided, otherwise use the key column.\n * @param table The table to get the label column from\n * @param keyColumn The key column to fallback to if the label column name is not provided\n * @param labelColumnName The name of the column to use for label data\n * @returns DH Column containing the label values\n */\nexport function getItemLabelColumn(\n table: dh.Table,\n keyColumn: dh.Column,\n labelColumnName?: string\n): dh.Column {\n return labelColumnName == null\n ? keyColumn\n : table.findColumn(labelColumnName);\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,gBAAgBA,CAC9BC,KAAe,EACfC,aAAsB,EACX;EACX,OAAOA,aAAa,IAAI,IAAI,GACxBD,KAAK,CAACE,OAAO,CAAC,CAAC,CAAC,GAChBF,KAAK,CAACG,UAAU,CAACF,aAAa,CAAC;AACrC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,kBAAkBA,CAChCJ,KAAe,EACfK,SAAoB,EACpBC,eAAwB,EACb;EACX,OAAOA,eAAe,IAAI,IAAI,GAC1BD,SAAS,GACTL,KAAK,CAACG,UAAU,CAACG,eAAe,CAAC;AACvC"}
1
+ {"version":3,"file":"itemUtils.js","names":["getItemKeyColumn","table","keyColumnName","columns","findColumn","getItemLabelColumn","keyColumn","labelColumnName"],"sources":["../../../src/spectrum/utils/itemUtils.ts"],"sourcesContent":["import { type dh } from '@deephaven/jsapi-types';\n\n/**\n * Get the key column if column name is provided, otherwise use the first column.\n * @param table The table to get the key column from\n * @param keyColumnName The name of the column to use for key data\n * @returns DH Column containing the key values\n */\nexport function getItemKeyColumn(\n table: dh.Table,\n keyColumnName?: string\n): dh.Column {\n return keyColumnName == null\n ? table.columns[0]\n : table.findColumn(keyColumnName);\n}\n\n/**\n * Get the label column if column name is provided, otherwise use the key column.\n * @param table The table to get the label column from\n * @param keyColumn The key column to fallback to if the label column name is not provided\n * @param labelColumnName The name of the column to use for label data\n * @returns DH Column containing the label values\n */\nexport function getItemLabelColumn(\n table: dh.Table,\n keyColumn: dh.Column,\n labelColumnName?: string\n): dh.Column {\n return labelColumnName == null\n ? keyColumn\n : table.findColumn(labelColumnName);\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,gBAAgBA,CAC9BC,KAAe,EACfC,aAAsB,EACX;EACX,OAAOA,aAAa,IAAI,IAAI,GACxBD,KAAK,CAACE,OAAO,CAAC,CAAC,CAAC,GAChBF,KAAK,CAACG,UAAU,CAACF,aAAa,CAAC;AACrC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,kBAAkBA,CAChCJ,KAAe,EACfK,SAAoB,EACpBC,eAAwB,EACb;EACX,OAAOA,eAAe,IAAI,IAAI,GAC1BD,SAAS,GACTL,KAAK,CAACG,UAAU,CAACG,eAAe,CAAC;AACvC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useItemRowDeserializer.js","names":["useCallback","useMemo","assertNotNull","getItemKeyColumn","getItemLabelColumn","defaultFormatKey","value","String","defaultFormatValue","_columnType","useItemRowDeserializer","_ref","table","descriptionColumnName","iconColumnName","keyColumnName","labelColumnName","formatValue","keyColumn","labelColumn","descriptionColumn","findColumn","iconColumn","deserializeRow","row","key","get","content","type","description","undefined","icon","textValue"],"sources":["../../../src/spectrum/utils/useItemRowDeserializer.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport { type NormalizedItemData } from '@deephaven/components';\nimport { type dh } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport { getItemKeyColumn, getItemLabelColumn } from './itemUtils';\n\nfunction defaultFormatKey(value: unknown): string | number | boolean {\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n\n return String(value);\n}\n\nfunction defaultFormatValue(value: unknown, _columnType: string): string {\n return String(value);\n}\n\n/**\n * Returns a function that deserializes a row into a normalized item data object.\n * @param table The table to get the key and label columns from\n * @param descriptionColumnName The name of the column to use for description data\n * @param iconColumnName The name of the column to use for icon data\n * @param keyColumnName The name of the column to use for key data\n * @param labelColumnName The name of the column to use for label data\n * @param formatValue Optional function to format the label value\n * @returns A function that deserializes a row into a normalized item data object\n */\nexport function useItemRowDeserializer({\n table,\n descriptionColumnName,\n iconColumnName,\n keyColumnName,\n labelColumnName,\n formatValue = defaultFormatValue,\n}: {\n table?: dh.Table | null;\n descriptionColumnName?: string;\n iconColumnName?: string;\n keyColumnName?: string;\n labelColumnName?: string;\n formatValue?: (value: unknown, columnType: string) => string;\n}): (row: dh.Row) => NormalizedItemData {\n const keyColumn = useMemo(\n () => (table == null ? null : getItemKeyColumn(table, keyColumnName)),\n [keyColumnName, table]\n );\n\n const labelColumn = useMemo(\n () =>\n table == null || keyColumn == null\n ? null\n : getItemLabelColumn(table, keyColumn, labelColumnName),\n [keyColumn, labelColumnName, table]\n );\n\n const descriptionColumn = useMemo(\n () =>\n table == null || descriptionColumnName == null\n ? null\n : table.findColumn(descriptionColumnName),\n [descriptionColumnName, table]\n );\n\n const iconColumn = useMemo(\n () =>\n table == null || iconColumnName == null\n ? null\n : table.findColumn(iconColumnName),\n [iconColumnName, table]\n );\n\n const deserializeRow = useCallback(\n (row: dh.Row): NormalizedItemData => {\n // `deserializeRow` can be created on a null `table` which results in null\n // `keyColumn` + `labelColumn`, but it should never actually be called.\n // The assumption is that the `table` will eventually be non-null,\n // `deserializeRow` will be recreated, and then applied to the non-null\n // table.\n assertNotNull(keyColumn, 'keyColumn cannot be null.');\n assertNotNull(labelColumn, 'labelColumn cannot be null.');\n\n const key = defaultFormatKey(row.get(keyColumn));\n const content = formatValue(row.get(labelColumn), labelColumn.type);\n\n const description =\n descriptionColumn == null\n ? undefined\n : formatValue(row.get(descriptionColumn), descriptionColumn.type);\n\n const icon = iconColumn == null ? undefined : row.get(iconColumn);\n\n return {\n key,\n content,\n textValue: content,\n description,\n icon,\n };\n },\n [descriptionColumn, formatValue, iconColumn, keyColumn, labelColumn]\n );\n\n return deserializeRow;\n}\n\nexport default useItemRowDeserializer;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAG5C,SAASC,aAAa,QAAQ,kBAAkB;AAAC,SACxCC,gBAAgB,EAAEC,kBAAkB;AAE7C,SAASC,gBAAgBA,CAACC,KAAc,EAA6B;EACnE,IACE,OAAOA,KAAK,KAAK,QAAQ,IACzB,OAAOA,KAAK,KAAK,QAAQ,IACzB,OAAOA,KAAK,KAAK,SAAS,EAC1B;IACA,OAAOA,KAAK;EACd;EAEA,OAAOC,MAAM,CAACD,KAAK,CAAC;AACtB;AAEA,SAASE,kBAAkBA,CAACF,KAAc,EAAEG,WAAmB,EAAU;EACvE,OAAOF,MAAM,CAACD,KAAK,CAAC;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,sBAAsBA,CAAAC,IAAA,EAcE;EAAA,IAdD;IACrCC,KAAK;IACLC,qBAAqB;IACrBC,cAAc;IACdC,aAAa;IACbC,eAAe;IACfC,WAAW,GAAGT;EAQhB,CAAC,GAAAG,IAAA;EACC,IAAMO,SAAS,GAAGjB,OAAO,CACvB,MAAOW,KAAK,IAAI,IAAI,GAAG,IAAI,GAAGT,gBAAgB,CAACS,KAAK,EAAEG,aAAa,CAAE,EACrE,CAACA,aAAa,EAAEH,KAAK,CACvB,CAAC;EAED,IAAMO,WAAW,GAAGlB,OAAO,CACzB,MACEW,KAAK,IAAI,IAAI,IAAIM,SAAS,IAAI,IAAI,GAC9B,IAAI,GACJd,kBAAkB,CAACQ,KAAK,EAAEM,SAAS,EAAEF,eAAe,CAAC,EAC3D,CAACE,SAAS,EAAEF,eAAe,EAAEJ,KAAK,CACpC,CAAC;EAED,IAAMQ,iBAAiB,GAAGnB,OAAO,CAC/B,MACEW,KAAK,IAAI,IAAI,IAAIC,qBAAqB,IAAI,IAAI,GAC1C,IAAI,GACJD,KAAK,CAACS,UAAU,CAACR,qBAAqB,CAAC,EAC7C,CAACA,qBAAqB,EAAED,KAAK,CAC/B,CAAC;EAED,IAAMU,UAAU,GAAGrB,OAAO,CACxB,MACEW,KAAK,IAAI,IAAI,IAAIE,cAAc,IAAI,IAAI,GACnC,IAAI,GACJF,KAAK,CAACS,UAAU,CAACP,cAAc,CAAC,EACtC,CAACA,cAAc,EAAEF,KAAK,CACxB,CAAC;EAED,IAAMW,cAAc,GAAGvB,WAAW,CAC/BwB,GAAW,IAAyB;IACnC;IACA;IACA;IACA;IACA;IACAtB,aAAa,CAACgB,SAAS,EAAE,2BAA2B,CAAC;IACrDhB,aAAa,CAACiB,WAAW,EAAE,6BAA6B,CAAC;IAEzD,IAAMM,GAAG,GAAGpB,gBAAgB,CAACmB,GAAG,CAACE,GAAG,CAACR,SAAS,CAAC,CAAC;IAChD,IAAMS,OAAO,GAAGV,WAAW,CAACO,GAAG,CAACE,GAAG,CAACP,WAAW,CAAC,EAAEA,WAAW,CAACS,IAAI,CAAC;IAEnE,IAAMC,WAAW,GACfT,iBAAiB,IAAI,IAAI,GACrBU,SAAS,GACTb,WAAW,CAACO,GAAG,CAACE,GAAG,CAACN,iBAAiB,CAAC,EAAEA,iBAAiB,CAACQ,IAAI,CAAC;IAErE,IAAMG,IAAI,GAAGT,UAAU,IAAI,IAAI,GAAGQ,SAAS,GAAGN,GAAG,CAACE,GAAG,CAACJ,UAAU,CAAC;IAEjE,OAAO;MACLG,GAAG;MACHE,OAAO;MACPK,SAAS,EAAEL,OAAO;MAClBE,WAAW;MACXE;IACF,CAAC;EACH,CAAC,EACD,CAACX,iBAAiB,EAAEH,WAAW,EAAEK,UAAU,EAAEJ,SAAS,EAAEC,WAAW,CACrE,CAAC;EAED,OAAOI,cAAc;AACvB;AAEA,eAAeb,sBAAsB"}
1
+ {"version":3,"file":"useItemRowDeserializer.js","names":["useCallback","useMemo","assertNotNull","getItemKeyColumn","getItemLabelColumn","defaultFormatKey","value","String","defaultFormatValue","_columnType","useItemRowDeserializer","_ref","table","descriptionColumnName","iconColumnName","keyColumnName","labelColumnName","formatValue","keyColumn","labelColumn","descriptionColumn","findColumn","iconColumn","deserializeRow","row","key","get","content","type","description","undefined","icon","textValue"],"sources":["../../../src/spectrum/utils/useItemRowDeserializer.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport { type NormalizedItemData } from '@deephaven/components';\nimport { type dh } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport { getItemKeyColumn, getItemLabelColumn } from './itemUtils';\n\nfunction defaultFormatKey(value: unknown): string | number | boolean {\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n\n return String(value);\n}\n\nfunction defaultFormatValue(value: unknown, _columnType: string): string {\n return String(value);\n}\n\n/**\n * Returns a function that deserializes a row into a normalized item data object.\n * @param table The table to get the key and label columns from\n * @param descriptionColumnName The name of the column to use for description data\n * @param iconColumnName The name of the column to use for icon data\n * @param keyColumnName The name of the column to use for key data\n * @param labelColumnName The name of the column to use for label data\n * @param formatValue Optional function to format the label value\n * @returns A function that deserializes a row into a normalized item data object\n */\nexport function useItemRowDeserializer({\n table,\n descriptionColumnName,\n iconColumnName,\n keyColumnName,\n labelColumnName,\n formatValue = defaultFormatValue,\n}: {\n table?: dh.Table | null;\n descriptionColumnName?: string;\n iconColumnName?: string;\n keyColumnName?: string;\n labelColumnName?: string;\n formatValue?: (value: unknown, columnType: string) => string;\n}): (row: dh.Row) => NormalizedItemData {\n const keyColumn = useMemo(\n () => (table == null ? null : getItemKeyColumn(table, keyColumnName)),\n [keyColumnName, table]\n );\n\n const labelColumn = useMemo(\n () =>\n table == null || keyColumn == null\n ? null\n : getItemLabelColumn(table, keyColumn, labelColumnName),\n [keyColumn, labelColumnName, table]\n );\n\n const descriptionColumn = useMemo(\n () =>\n table == null || descriptionColumnName == null\n ? null\n : table.findColumn(descriptionColumnName),\n [descriptionColumnName, table]\n );\n\n const iconColumn = useMemo(\n () =>\n table == null || iconColumnName == null\n ? null\n : table.findColumn(iconColumnName),\n [iconColumnName, table]\n );\n\n const deserializeRow = useCallback(\n (row: dh.Row): NormalizedItemData => {\n // `deserializeRow` can be created on a null `table` which results in null\n // `keyColumn` + `labelColumn`, but it should never actually be called.\n // The assumption is that the `table` will eventually be non-null,\n // `deserializeRow` will be recreated, and then applied to the non-null\n // table.\n assertNotNull(keyColumn, 'keyColumn cannot be null.');\n assertNotNull(labelColumn, 'labelColumn cannot be null.');\n\n const key = defaultFormatKey(row.get(keyColumn));\n const content = formatValue(row.get(labelColumn), labelColumn.type);\n\n const description =\n descriptionColumn == null\n ? undefined\n : formatValue(row.get(descriptionColumn), descriptionColumn.type);\n\n const icon = iconColumn == null ? undefined : row.get(iconColumn);\n\n return {\n key,\n content,\n textValue: content,\n description,\n icon,\n };\n },\n [descriptionColumn, formatValue, iconColumn, keyColumn, labelColumn]\n );\n\n return deserializeRow;\n}\n\nexport default useItemRowDeserializer;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAG5C,SAASC,aAAa,QAAQ,kBAAkB;AAAC,SACxCC,gBAAgB,EAAEC,kBAAkB;AAE7C,SAASC,gBAAgBA,CAACC,KAAc,EAA6B;EACnE,IACE,OAAOA,KAAK,KAAK,QAAQ,IACzB,OAAOA,KAAK,KAAK,QAAQ,IACzB,OAAOA,KAAK,KAAK,SAAS,EAC1B;IACA,OAAOA,KAAK;EACd;EAEA,OAAOC,MAAM,CAACD,KAAK,CAAC;AACtB;AAEA,SAASE,kBAAkBA,CAACF,KAAc,EAAEG,WAAmB,EAAU;EACvE,OAAOF,MAAM,CAACD,KAAK,CAAC;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,sBAAsBA,CAAAC,IAAA,EAcE;EAAA,IAdD;IACrCC,KAAK;IACLC,qBAAqB;IACrBC,cAAc;IACdC,aAAa;IACbC,eAAe;IACfC,WAAW,GAAGT;EAQhB,CAAC,GAAAG,IAAA;EACC,IAAMO,SAAS,GAAGjB,OAAO,CACvB,MAAOW,KAAK,IAAI,IAAI,GAAG,IAAI,GAAGT,gBAAgB,CAACS,KAAK,EAAEG,aAAa,CAAE,EACrE,CAACA,aAAa,EAAEH,KAAK,CACvB,CAAC;EAED,IAAMO,WAAW,GAAGlB,OAAO,CACzB,MACEW,KAAK,IAAI,IAAI,IAAIM,SAAS,IAAI,IAAI,GAC9B,IAAI,GACJd,kBAAkB,CAACQ,KAAK,EAAEM,SAAS,EAAEF,eAAe,CAAC,EAC3D,CAACE,SAAS,EAAEF,eAAe,EAAEJ,KAAK,CACpC,CAAC;EAED,IAAMQ,iBAAiB,GAAGnB,OAAO,CAC/B,MACEW,KAAK,IAAI,IAAI,IAAIC,qBAAqB,IAAI,IAAI,GAC1C,IAAI,GACJD,KAAK,CAACS,UAAU,CAACR,qBAAqB,CAAC,EAC7C,CAACA,qBAAqB,EAAED,KAAK,CAC/B,CAAC;EAED,IAAMU,UAAU,GAAGrB,OAAO,CACxB,MACEW,KAAK,IAAI,IAAI,IAAIE,cAAc,IAAI,IAAI,GACnC,IAAI,GACJF,KAAK,CAACS,UAAU,CAACP,cAAc,CAAC,EACtC,CAACA,cAAc,EAAEF,KAAK,CACxB,CAAC;EAED,IAAMW,cAAc,GAAGvB,WAAW,CAC/BwB,GAAW,IAAyB;IACnC;IACA;IACA;IACA;IACA;IACAtB,aAAa,CAACgB,SAAS,EAAE,2BAA2B,CAAC;IACrDhB,aAAa,CAACiB,WAAW,EAAE,6BAA6B,CAAC;IAEzD,IAAMM,GAAG,GAAGpB,gBAAgB,CAACmB,GAAG,CAACE,GAAG,CAACR,SAAS,CAAC,CAAC;IAChD,IAAMS,OAAO,GAAGV,WAAW,CAACO,GAAG,CAACE,GAAG,CAACP,WAAW,CAAC,EAAEA,WAAW,CAACS,IAAI,CAAC;IAEnE,IAAMC,WAAW,GACfT,iBAAiB,IAAI,IAAI,GACrBU,SAAS,GACTb,WAAW,CAACO,GAAG,CAACE,GAAG,CAACN,iBAAiB,CAAC,EAAEA,iBAAiB,CAACQ,IAAI,CAAC;IAErE,IAAMG,IAAI,GAAGT,UAAU,IAAI,IAAI,GAAGQ,SAAS,GAAGN,GAAG,CAACE,GAAG,CAACJ,UAAU,CAAC;IAEjE,OAAO;MACLG,GAAG;MACHE,OAAO;MACPK,SAAS,EAAEL,OAAO;MAClBE,WAAW;MACXE;IACF,CAAC;EACH,CAAC,EACD,CAACX,iBAAiB,EAAEH,WAAW,EAAEK,UAAU,EAAEJ,SAAS,EAAEC,WAAW,CACrE,CAAC;EAED,OAAOI,cAAc;AACvB;AAEA,eAAeb,sBAAsB","ignoreList":[]}
@@ -78,7 +78,7 @@ export function usePickerProps(_ref) {
78
78
  columnName: (_keyColumn$name = keyColumn === null || keyColumn === void 0 ? void 0 : keyColumn.name) !== null && _keyColumn$name !== void 0 ? _keyColumn$name : null,
79
79
  value: isUncontrolled ? uncontrolledSelectedKey : props.selectedKey
80
80
  });
81
- var getInitialScrollPosition = useCallback( /*#__PURE__*/_asyncToGenerator(function* () {
81
+ var getInitialScrollPosition = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {
82
82
  var index = yield getItemIndexByValue();
83
83
  if (index == null) {
84
84
  return null;
@@ -122,7 +122,7 @@ export function usePickerProps(_ref) {
122
122
  if (isUncontrolled) {
123
123
  setUncontrolledSelectedKey(key);
124
124
  }
125
- (_ref3 = onChange !== null && onChange !== void 0 ? onChange : onSelectionChange) === null || _ref3 === void 0 ? void 0 : _ref3(key);
125
+ (_ref3 = onChange !== null && onChange !== void 0 ? onChange : onSelectionChange) === null || _ref3 === void 0 || _ref3(key);
126
126
  }, [isUncontrolled, onChange, onSelectionChange]);
127
127
  return _objectSpread(_objectSpread({}, props), {}, {
128
128
  normalizedItems: viewportData.items,
@@ -1 +1 @@
1
- {"version":3,"file":"usePickerProps.js","names":["useCallback","useEffect","useMemo","useState","PICKER_TOP_OFFSET","usePickerItemScale","TableUtils","Log","usePromiseFactory","useFormatter","getItemKeyColumn","getItemLabelColumn","useItemRowDeserializer","useGetItemIndexByValue","useSearchableViewportData","useWidgetClose","log","module","usePickerProps","_ref","_keyColumn$name","table","tableSource","keyColumn","keyColumnName","labelColumn","labelColumnName","iconColumn","iconColumnName","settings","onChange","onSelectionChange","props","_objectWithoutProperties","_excluded","itemHeight","getFormattedString","formatValue","timeZone","isUncontrolled","selectedKey","undefined","uncontrolledSelectedKey","setUncontrolledSelectedKey","defaultSelectedKey","data","tableCopy","copyTableAndApplyFilters","searchColumnNames","name","deserializeRow","getItemIndexByValue","columnName","value","getInitialScrollPosition","_asyncToGenerator","index","onScroll","onSearchTextChange","setViewport","viewportData","reuseItemsOnTableResize","setViewportFromSelectedKey","isCanceled","then","catch","err","error","onSelectionChangeInternal","key","_ref3","_objectSpread","normalizedItems","items","showItemIcons"],"sources":["../../../src/spectrum/utils/usePickerProps.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n type ItemKey,\n type NormalizedItem,\n type NormalizedSection,\n PICKER_TOP_OFFSET,\n usePickerItemScale,\n} from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { usePromiseFactory } from '@deephaven/react-hooks';\nimport useFormatter from '../../useFormatter';\nimport type { PickerWithTableProps } from '../PickerProps';\nimport { getItemKeyColumn, getItemLabelColumn } from './itemUtils';\nimport { useItemRowDeserializer } from './useItemRowDeserializer';\nimport { useGetItemIndexByValue } from '../../useGetItemIndexByValue';\nimport useSearchableViewportData from '../../useSearchableViewportData';\nimport useWidgetClose from '../../useWidgetClose';\n\nconst log = Log.module('jsapi-components.usePickerProps');\n\n/** Props that are derived by `usePickerProps`. */\nexport type UsePickerDerivedProps = {\n normalizedItems: (NormalizedItem | NormalizedSection)[];\n showItemIcons: boolean;\n getInitialScrollPosition: () => Promise<number | null>;\n onChange: (key: ItemKey | null) => void;\n onScroll: (event: Event) => void;\n onSearchTextChange: (searchText: string) => void;\n};\n\n/** \n * Props that are passed through untouched. (should exclude all of the\n * destructured props passed into `usePickerProps` that are not in the spread\n * ...props)\n) */\nexport type UsePickerPassthroughProps<TProps> = Omit<\n PickerWithTableProps<TProps>,\n | 'table'\n | 'keyColumn'\n | 'labelColumn'\n | 'iconColumn'\n | 'settings'\n | 'onChange'\n | 'onSelectionChange'\n>;\n\n/** Props returned by `usePickerProps` hook. */\nexport type UsePickerProps<TProps> = UsePickerDerivedProps &\n UsePickerPassthroughProps<TProps>;\n\nexport function usePickerProps<TProps>({\n table: tableSource,\n keyColumn: keyColumnName,\n labelColumn: labelColumnName,\n iconColumn: iconColumnName,\n settings,\n onChange,\n onSelectionChange,\n ...props\n}: PickerWithTableProps<TProps>): UsePickerProps<TProps> {\n const { itemHeight } = usePickerItemScale();\n\n const { getFormattedString: formatValue, timeZone } = useFormatter(settings);\n\n // `null` is a valid value for `selectedKey` in controlled mode, so we check\n // for explicit `undefined` to identify uncontrolled mode.\n const isUncontrolled = props.selectedKey === undefined;\n const [uncontrolledSelectedKey, setUncontrolledSelectedKey] = useState<\n ItemKey | null | undefined\n >(props.defaultSelectedKey);\n\n // Copy table so we can apply filters without affecting the original table.\n // (Note that this call is not actually applying any filters. Filter will be\n // applied in `useSearchableViewportData`.)\n const { data: tableCopy } = usePromiseFactory(\n TableUtils.copyTableAndApplyFilters,\n [tableSource]\n );\n\n useWidgetClose(tableCopy);\n\n const keyColumn = useMemo(\n () =>\n tableCopy == null ? null : getItemKeyColumn(tableCopy, keyColumnName),\n [keyColumnName, tableCopy]\n );\n\n const labelColumn = useMemo(\n () =>\n tableCopy == null || keyColumn == null\n ? null\n : getItemLabelColumn(tableCopy, keyColumn, labelColumnName),\n [keyColumn, labelColumnName, tableCopy]\n );\n\n const searchColumnNames = useMemo(\n () => (labelColumn == null ? [] : [labelColumn.name]),\n [labelColumn]\n );\n\n const deserializeRow = useItemRowDeserializer({\n table: tableCopy,\n iconColumnName,\n keyColumnName,\n labelColumnName,\n formatValue,\n });\n\n const getItemIndexByValue = useGetItemIndexByValue({\n table: tableCopy,\n columnName: keyColumn?.name ?? null,\n value: isUncontrolled ? uncontrolledSelectedKey : props.selectedKey,\n });\n\n const getInitialScrollPosition = useCallback(async () => {\n const index = await getItemIndexByValue();\n\n if (index == null) {\n return null;\n }\n\n return index * itemHeight + PICKER_TOP_OFFSET;\n }, [getItemIndexByValue, itemHeight]);\n\n const { onScroll, onSearchTextChange, setViewport, viewportData } =\n useSearchableViewportData({\n reuseItemsOnTableResize: true,\n table: tableCopy,\n itemHeight,\n deserializeRow,\n searchColumnNames,\n timeZone,\n });\n\n useEffect(\n // Set viewport to include the selected item so that its data will load and\n // the real `key` will be available to show the selection in the UI.\n function setViewportFromSelectedKey() {\n let isCanceled = false;\n\n getItemIndexByValue()\n .then(index => {\n if (index == null || isCanceled) {\n return;\n }\n\n setViewport(index);\n })\n .catch(err => {\n log.error('Error setting viewport from selected key', err);\n });\n\n return () => {\n isCanceled = true;\n };\n },\n [getItemIndexByValue, settings, setViewport]\n );\n\n const onSelectionChangeInternal = useCallback(\n (key: ItemKey | null): void => {\n // If our component is uncontrolled, track the selected key internally\n // so that we can scroll to the selected item if the user re-opens\n if (isUncontrolled) {\n setUncontrolledSelectedKey(key);\n }\n\n (onChange ?? onSelectionChange)?.(key);\n },\n [isUncontrolled, onChange, onSelectionChange]\n );\n\n return {\n ...props,\n normalizedItems: viewportData.items,\n showItemIcons: iconColumnName != null,\n getInitialScrollPosition,\n onChange: onSelectionChangeInternal,\n onScroll,\n onSearchTextChange,\n };\n}\n\nexport default usePickerProps;\n"],"mappings":"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"}
1
+ {"version":3,"file":"usePickerProps.js","names":["useCallback","useEffect","useMemo","useState","PICKER_TOP_OFFSET","usePickerItemScale","TableUtils","Log","usePromiseFactory","useFormatter","getItemKeyColumn","getItemLabelColumn","useItemRowDeserializer","useGetItemIndexByValue","useSearchableViewportData","useWidgetClose","log","module","usePickerProps","_ref","_keyColumn$name","table","tableSource","keyColumn","keyColumnName","labelColumn","labelColumnName","iconColumn","iconColumnName","settings","onChange","onSelectionChange","props","_objectWithoutProperties","_excluded","itemHeight","getFormattedString","formatValue","timeZone","isUncontrolled","selectedKey","undefined","uncontrolledSelectedKey","setUncontrolledSelectedKey","defaultSelectedKey","data","tableCopy","copyTableAndApplyFilters","searchColumnNames","name","deserializeRow","getItemIndexByValue","columnName","value","getInitialScrollPosition","_asyncToGenerator","index","onScroll","onSearchTextChange","setViewport","viewportData","reuseItemsOnTableResize","setViewportFromSelectedKey","isCanceled","then","catch","err","error","onSelectionChangeInternal","key","_ref3","_objectSpread","normalizedItems","items","showItemIcons"],"sources":["../../../src/spectrum/utils/usePickerProps.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n type ItemKey,\n type NormalizedItem,\n type NormalizedSection,\n PICKER_TOP_OFFSET,\n usePickerItemScale,\n} from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { usePromiseFactory } from '@deephaven/react-hooks';\nimport useFormatter from '../../useFormatter';\nimport type { PickerWithTableProps } from '../PickerProps';\nimport { getItemKeyColumn, getItemLabelColumn } from './itemUtils';\nimport { useItemRowDeserializer } from './useItemRowDeserializer';\nimport { useGetItemIndexByValue } from '../../useGetItemIndexByValue';\nimport useSearchableViewportData from '../../useSearchableViewportData';\nimport useWidgetClose from '../../useWidgetClose';\n\nconst log = Log.module('jsapi-components.usePickerProps');\n\n/** Props that are derived by `usePickerProps`. */\nexport type UsePickerDerivedProps = {\n normalizedItems: (NormalizedItem | NormalizedSection)[];\n showItemIcons: boolean;\n getInitialScrollPosition: () => Promise<number | null>;\n onChange: (key: ItemKey | null) => void;\n onScroll: (event: Event) => void;\n onSearchTextChange: (searchText: string) => void;\n};\n\n/** \n * Props that are passed through untouched. (should exclude all of the\n * destructured props passed into `usePickerProps` that are not in the spread\n * ...props)\n) */\nexport type UsePickerPassthroughProps<TProps> = Omit<\n PickerWithTableProps<TProps>,\n | 'table'\n | 'keyColumn'\n | 'labelColumn'\n | 'iconColumn'\n | 'settings'\n | 'onChange'\n | 'onSelectionChange'\n>;\n\n/** Props returned by `usePickerProps` hook. */\nexport type UsePickerProps<TProps> = UsePickerDerivedProps &\n UsePickerPassthroughProps<TProps>;\n\nexport function usePickerProps<TProps>({\n table: tableSource,\n keyColumn: keyColumnName,\n labelColumn: labelColumnName,\n iconColumn: iconColumnName,\n settings,\n onChange,\n onSelectionChange,\n ...props\n}: PickerWithTableProps<TProps>): UsePickerProps<TProps> {\n const { itemHeight } = usePickerItemScale();\n\n const { getFormattedString: formatValue, timeZone } = useFormatter(settings);\n\n // `null` is a valid value for `selectedKey` in controlled mode, so we check\n // for explicit `undefined` to identify uncontrolled mode.\n const isUncontrolled = props.selectedKey === undefined;\n const [uncontrolledSelectedKey, setUncontrolledSelectedKey] = useState<\n ItemKey | null | undefined\n >(props.defaultSelectedKey);\n\n // Copy table so we can apply filters without affecting the original table.\n // (Note that this call is not actually applying any filters. Filter will be\n // applied in `useSearchableViewportData`.)\n const { data: tableCopy } = usePromiseFactory(\n TableUtils.copyTableAndApplyFilters,\n [tableSource]\n );\n\n useWidgetClose(tableCopy);\n\n const keyColumn = useMemo(\n () =>\n tableCopy == null ? null : getItemKeyColumn(tableCopy, keyColumnName),\n [keyColumnName, tableCopy]\n );\n\n const labelColumn = useMemo(\n () =>\n tableCopy == null || keyColumn == null\n ? null\n : getItemLabelColumn(tableCopy, keyColumn, labelColumnName),\n [keyColumn, labelColumnName, tableCopy]\n );\n\n const searchColumnNames = useMemo(\n () => (labelColumn == null ? [] : [labelColumn.name]),\n [labelColumn]\n );\n\n const deserializeRow = useItemRowDeserializer({\n table: tableCopy,\n iconColumnName,\n keyColumnName,\n labelColumnName,\n formatValue,\n });\n\n const getItemIndexByValue = useGetItemIndexByValue({\n table: tableCopy,\n columnName: keyColumn?.name ?? null,\n value: isUncontrolled ? uncontrolledSelectedKey : props.selectedKey,\n });\n\n const getInitialScrollPosition = useCallback(async () => {\n const index = await getItemIndexByValue();\n\n if (index == null) {\n return null;\n }\n\n return index * itemHeight + PICKER_TOP_OFFSET;\n }, [getItemIndexByValue, itemHeight]);\n\n const { onScroll, onSearchTextChange, setViewport, viewportData } =\n useSearchableViewportData({\n reuseItemsOnTableResize: true,\n table: tableCopy,\n itemHeight,\n deserializeRow,\n searchColumnNames,\n timeZone,\n });\n\n useEffect(\n // Set viewport to include the selected item so that its data will load and\n // the real `key` will be available to show the selection in the UI.\n function setViewportFromSelectedKey() {\n let isCanceled = false;\n\n getItemIndexByValue()\n .then(index => {\n if (index == null || isCanceled) {\n return;\n }\n\n setViewport(index);\n })\n .catch(err => {\n log.error('Error setting viewport from selected key', err);\n });\n\n return () => {\n isCanceled = true;\n };\n },\n [getItemIndexByValue, settings, setViewport]\n );\n\n const onSelectionChangeInternal = useCallback(\n (key: ItemKey | null): void => {\n // If our component is uncontrolled, track the selected key internally\n // so that we can scroll to the selected item if the user re-opens\n if (isUncontrolled) {\n setUncontrolledSelectedKey(key);\n }\n\n (onChange ?? onSelectionChange)?.(key);\n },\n [isUncontrolled, onChange, onSelectionChange]\n );\n\n return {\n ...props,\n normalizedItems: viewportData.items,\n showItemIcons: iconColumnName != null,\n getInitialScrollPosition,\n onChange: onSelectionChangeInternal,\n onScroll,\n onSearchTextChange,\n };\n}\n\nexport default usePickerProps;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useBroadcastChannel.js","names":["BROADCAST_CHANNEL_NAME","Log","EMPTY_FUNCTION","isMessage","useEffect","useMemo","log","module","useBroadcastChannel","onEvent","arguments","length","undefined","name","channel","BroadcastChannel","close","handleEvent","event","data","debug","addEventListener","removeEventListener"],"sources":["../src/useBroadcastChannel.ts"],"sourcesContent":["import { BROADCAST_CHANNEL_NAME } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { EMPTY_FUNCTION, isMessage, type PostMessage } from '@deephaven/utils';\nimport { useEffect, useMemo } from 'react';\n\nconst log = Log.module('useBroadcastChannel');\n\nexport function useBroadcastChannel(\n onEvent: (event: MessageEvent<PostMessage<unknown>>) => void = EMPTY_FUNCTION,\n name = BROADCAST_CHANNEL_NAME\n): BroadcastChannel {\n const channel = useMemo(() => new BroadcastChannel(name), [name]);\n useEffect(\n () => () => {\n channel.close();\n },\n [channel]\n );\n\n useEffect(() => {\n function handleEvent(event: MessageEvent): void {\n const { data } = event;\n if (!isMessage(data)) {\n log.debug('Ignoring non-deephaven message', data);\n return;\n }\n log.debug('event received', data);\n onEvent(event);\n }\n channel.addEventListener('message', handleEvent);\n return () => {\n channel.removeEventListener('message', handleEvent);\n };\n }, [channel, onEvent]);\n\n return channel;\n}\n\nexport default useBroadcastChannel;\n"],"mappings":"AAAA,SAASA,sBAAsB,QAAQ,wBAAwB;AAC/D,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,cAAc,EAAEC,SAAS,QAA0B,kBAAkB;AAC9E,SAASC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAE1C,IAAMC,GAAG,GAAGL,GAAG,CAACM,MAAM,CAAC,qBAAqB,CAAC;AAE7C,OAAO,SAASC,mBAAmBA,CAAA,EAGf;EAAA,IAFlBC,OAA4D,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGR,cAAc;EAAA,IAC7EW,IAAI,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGV,sBAAsB;EAE7B,IAAMc,OAAO,GAAGT,OAAO,CAAC,MAAM,IAAIU,gBAAgB,CAACF,IAAI,CAAC,EAAE,CAACA,IAAI,CAAC,CAAC;EACjET,SAAS,CACP,MAAM,MAAM;IACVU,OAAO,CAACE,KAAK,CAAC,CAAC;EACjB,CAAC,EACD,CAACF,OAAO,CACV,CAAC;EAEDV,SAAS,CAAC,MAAM;IACd,SAASa,WAAWA,CAACC,KAAmB,EAAQ;MAC9C,IAAM;QAAEC;MAAK,CAAC,GAAGD,KAAK;MACtB,IAAI,CAACf,SAAS,CAACgB,IAAI,CAAC,EAAE;QACpBb,GAAG,CAACc,KAAK,CAAC,gCAAgC,EAAED,IAAI,CAAC;QACjD;MACF;MACAb,GAAG,CAACc,KAAK,CAAC,gBAAgB,EAAED,IAAI,CAAC;MACjCV,OAAO,CAACS,KAAK,CAAC;IAChB;IACAJ,OAAO,CAACO,gBAAgB,CAAC,SAAS,EAAEJ,WAAW,CAAC;IAChD,OAAO,MAAM;MACXH,OAAO,CAACQ,mBAAmB,CAAC,SAAS,EAAEL,WAAW,CAAC;IACrD,CAAC;EACH,CAAC,EAAE,CAACH,OAAO,EAAEL,OAAO,CAAC,CAAC;EAEtB,OAAOK,OAAO;AAChB;AAEA,eAAeN,mBAAmB"}
1
+ {"version":3,"file":"useBroadcastChannel.js","names":["BROADCAST_CHANNEL_NAME","Log","EMPTY_FUNCTION","isMessage","useEffect","useMemo","log","module","useBroadcastChannel","onEvent","arguments","length","undefined","name","channel","BroadcastChannel","close","handleEvent","event","data","debug","addEventListener","removeEventListener"],"sources":["../src/useBroadcastChannel.ts"],"sourcesContent":["import { BROADCAST_CHANNEL_NAME } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { EMPTY_FUNCTION, isMessage, type PostMessage } from '@deephaven/utils';\nimport { useEffect, useMemo } from 'react';\n\nconst log = Log.module('useBroadcastChannel');\n\nexport function useBroadcastChannel(\n onEvent: (event: MessageEvent<PostMessage<unknown>>) => void = EMPTY_FUNCTION,\n name = BROADCAST_CHANNEL_NAME\n): BroadcastChannel {\n const channel = useMemo(() => new BroadcastChannel(name), [name]);\n useEffect(\n () => () => {\n channel.close();\n },\n [channel]\n );\n\n useEffect(() => {\n function handleEvent(event: MessageEvent): void {\n const { data } = event;\n if (!isMessage(data)) {\n log.debug('Ignoring non-deephaven message', data);\n return;\n }\n log.debug('event received', data);\n onEvent(event);\n }\n channel.addEventListener('message', handleEvent);\n return () => {\n channel.removeEventListener('message', handleEvent);\n };\n }, [channel, onEvent]);\n\n return channel;\n}\n\nexport default useBroadcastChannel;\n"],"mappings":"AAAA,SAASA,sBAAsB,QAAQ,wBAAwB;AAC/D,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,cAAc,EAAEC,SAAS,QAA0B,kBAAkB;AAC9E,SAASC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAE1C,IAAMC,GAAG,GAAGL,GAAG,CAACM,MAAM,CAAC,qBAAqB,CAAC;AAE7C,OAAO,SAASC,mBAAmBA,CAAA,EAGf;EAAA,IAFlBC,OAA4D,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGR,cAAc;EAAA,IAC7EW,IAAI,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGV,sBAAsB;EAE7B,IAAMc,OAAO,GAAGT,OAAO,CAAC,MAAM,IAAIU,gBAAgB,CAACF,IAAI,CAAC,EAAE,CAACA,IAAI,CAAC,CAAC;EACjET,SAAS,CACP,MAAM,MAAM;IACVU,OAAO,CAACE,KAAK,CAAC,CAAC;EACjB,CAAC,EACD,CAACF,OAAO,CACV,CAAC;EAEDV,SAAS,CAAC,MAAM;IACd,SAASa,WAAWA,CAACC,KAAmB,EAAQ;MAC9C,IAAM;QAAEC;MAAK,CAAC,GAAGD,KAAK;MACtB,IAAI,CAACf,SAAS,CAACgB,IAAI,CAAC,EAAE;QACpBb,GAAG,CAACc,KAAK,CAAC,gCAAgC,EAAED,IAAI,CAAC;QACjD;MACF;MACAb,GAAG,CAACc,KAAK,CAAC,gBAAgB,EAAED,IAAI,CAAC;MACjCV,OAAO,CAACS,KAAK,CAAC;IAChB;IACAJ,OAAO,CAACO,gBAAgB,CAAC,SAAS,EAAEJ,WAAW,CAAC;IAChD,OAAO,MAAM;MACXH,OAAO,CAACQ,mBAAmB,CAAC,SAAS,EAAEL,WAAW,CAAC;IACrD,CAAC;EACH,CAAC,EAAE,CAACH,OAAO,EAAEL,OAAO,CAAC,CAAC;EAEtB,OAAOK,OAAO;AAChB;AAEA,eAAeN,mBAAmB","ignoreList":[]}
@@ -4,9 +4,9 @@ import useBroadcastChannel from "./useBroadcastChannel.js";
4
4
  export function useBroadcastLoginListener(onLogin, onLogout) {
5
5
  var onMessage = useCallback(event => {
6
6
  if (isBroadcastLoginMessage(event.data)) {
7
- onLogin === null || onLogin === void 0 ? void 0 : onLogin(event.data);
7
+ onLogin === null || onLogin === void 0 || onLogin(event.data);
8
8
  } else if (isBroadcastLogoutMessage(event.data)) {
9
- onLogout === null || onLogout === void 0 ? void 0 : onLogout(event.data);
9
+ onLogout === null || onLogout === void 0 || onLogout(event.data);
10
10
  }
11
11
  }, [onLogin, onLogout]);
12
12
  useBroadcastChannel(onMessage);
@@ -1 +1 @@
1
- {"version":3,"file":"useBroadcastLoginListener.js","names":["isBroadcastLoginMessage","isBroadcastLogoutMessage","useCallback","useBroadcastChannel","useBroadcastLoginListener","onLogin","onLogout","onMessage","event","data"],"sources":["../src/useBroadcastLoginListener.ts"],"sourcesContent":["import {\n type BroadcastLoginMessage,\n type BroadcastLogoutMessage,\n isBroadcastLoginMessage,\n isBroadcastLogoutMessage,\n} from '@deephaven/jsapi-utils';\nimport type { PostMessage } from '@deephaven/utils';\nimport { useCallback } from 'react';\nimport useBroadcastChannel from './useBroadcastChannel';\n\nexport function useBroadcastLoginListener(\n onLogin?: (message: BroadcastLoginMessage) => void,\n onLogout?: (message: BroadcastLogoutMessage) => void\n): void {\n const onMessage = useCallback(\n (event: MessageEvent<PostMessage<unknown>>) => {\n if (isBroadcastLoginMessage(event.data)) {\n onLogin?.(event.data);\n } else if (isBroadcastLogoutMessage(event.data)) {\n onLogout?.(event.data);\n }\n },\n [onLogin, onLogout]\n );\n\n useBroadcastChannel(onMessage);\n}\n\nexport default useBroadcastLoginListener;\n"],"mappings":"AAAA,SAGEA,uBAAuB,EACvBC,wBAAwB,QACnB,wBAAwB;AAE/B,SAASC,WAAW,QAAQ,OAAO;AAAC,OAC7BC,mBAAmB;AAE1B,OAAO,SAASC,yBAAyBA,CACvCC,OAAkD,EAClDC,QAAoD,EAC9C;EACN,IAAMC,SAAS,GAAGL,WAAW,CAC1BM,KAAyC,IAAK;IAC7C,IAAIR,uBAAuB,CAACQ,KAAK,CAACC,IAAI,CAAC,EAAE;MACvCJ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAGG,KAAK,CAACC,IAAI,CAAC;IACvB,CAAC,MAAM,IAAIR,wBAAwB,CAACO,KAAK,CAACC,IAAI,CAAC,EAAE;MAC/CH,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGE,KAAK,CAACC,IAAI,CAAC;IACxB;EACF,CAAC,EACD,CAACJ,OAAO,EAAEC,QAAQ,CACpB,CAAC;EAEDH,mBAAmB,CAACI,SAAS,CAAC;AAChC;AAEA,eAAeH,yBAAyB"}
1
+ {"version":3,"file":"useBroadcastLoginListener.js","names":["isBroadcastLoginMessage","isBroadcastLogoutMessage","useCallback","useBroadcastChannel","useBroadcastLoginListener","onLogin","onLogout","onMessage","event","data"],"sources":["../src/useBroadcastLoginListener.ts"],"sourcesContent":["import {\n type BroadcastLoginMessage,\n type BroadcastLogoutMessage,\n isBroadcastLoginMessage,\n isBroadcastLogoutMessage,\n} from '@deephaven/jsapi-utils';\nimport type { PostMessage } from '@deephaven/utils';\nimport { useCallback } from 'react';\nimport useBroadcastChannel from './useBroadcastChannel';\n\nexport function useBroadcastLoginListener(\n onLogin?: (message: BroadcastLoginMessage) => void,\n onLogout?: (message: BroadcastLogoutMessage) => void\n): void {\n const onMessage = useCallback(\n (event: MessageEvent<PostMessage<unknown>>) => {\n if (isBroadcastLoginMessage(event.data)) {\n onLogin?.(event.data);\n } else if (isBroadcastLogoutMessage(event.data)) {\n onLogout?.(event.data);\n }\n },\n [onLogin, onLogout]\n );\n\n useBroadcastChannel(onMessage);\n}\n\nexport default useBroadcastLoginListener;\n"],"mappings":"AAAA,SAGEA,uBAAuB,EACvBC,wBAAwB,QACnB,wBAAwB;AAE/B,SAASC,WAAW,QAAQ,OAAO;AAAC,OAC7BC,mBAAmB;AAE1B,OAAO,SAASC,yBAAyBA,CACvCC,OAAkD,EAClDC,QAAoD,EAC9C;EACN,IAAMC,SAAS,GAAGL,WAAW,CAC1BM,KAAyC,IAAK;IAC7C,IAAIR,uBAAuB,CAACQ,KAAK,CAACC,IAAI,CAAC,EAAE;MACvCJ,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAGG,KAAK,CAACC,IAAI,CAAC;IACvB,CAAC,MAAM,IAAIR,wBAAwB,CAACO,KAAK,CAACC,IAAI,CAAC,EAAE;MAC/CH,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAGE,KAAK,CAACC,IAAI,CAAC;IACxB;EACF,CAAC,EACD,CAACJ,OAAO,EAAEC,QAAQ,CACpB,CAAC;EAEDH,mBAAmB,CAACI,SAAS,CAAC;AAChC;AAEA,eAAeH,yBAAyB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useCheckIfExistsValue.js","names":["useCallback","useState","useDebouncedValue","usePromiseFactory","useTableUtils","useCheckIfExistsValue","table","columnNames","debounceMs","isCaseSensitive","tableUtils","valueTrimmed","setValueTrimmed","value","valueTrimmedDebounced","trimAndUpdateValue","text","trim","data","valueExistsData","isLoading","valueExistsIsLoading","doesColumnValueExist","valueExists"],"sources":["../src/useCheckIfExistsValue.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { useDebouncedValue, usePromiseFactory } from '@deephaven/react-hooks';\nimport useTableUtils from './useTableUtils';\n\nexport interface CheckIfExistsValue {\n /** Current trimmed value */\n valueTrimmed: string;\n\n /** Debounced trimmed value */\n valueTrimmedDebounced: string;\n\n /**\n * Whether the value exists in the given table columns. Will be null whenever\n * the value changes until the next check is complete.\n */\n valueExists: boolean | null;\n\n /** Trims and updates the value */\n trimAndUpdateValue: (value: string) => void;\n}\n\n/**\n * Manage a trimmed text value and check if it exists in a list of table columns.\n * @param table The table to check for the value\n * @param columnNames The column names to check\n * @param debounceMs Debounce timer for re-checking the value\n * @param isCaseSensitive Whether the value check is case sensitive\n */\nexport function useCheckIfExistsValue(\n table: dh.Table | null | undefined,\n columnNames: string | string[],\n debounceMs: number,\n isCaseSensitive: boolean\n): CheckIfExistsValue {\n const tableUtils = useTableUtils();\n\n const [valueTrimmed, setValueTrimmed] = useState('');\n const { value: valueTrimmedDebounced } = useDebouncedValue(\n valueTrimmed,\n debounceMs\n );\n\n const trimAndUpdateValue = useCallback((text: string) => {\n setValueTrimmed(text.trim());\n }, []);\n\n const { data: valueExistsData, isLoading: valueExistsIsLoading } =\n usePromiseFactory(tableUtils.doesColumnValueExist, [\n table,\n columnNames,\n valueTrimmedDebounced,\n isCaseSensitive,\n ]);\n\n // If value check is loading or if debounce hasn't settled, set\n // `matchesExistingValue` to null since it is indeterminate\n const valueExists =\n valueExistsIsLoading || valueTrimmed !== valueTrimmedDebounced\n ? null\n : valueExistsData;\n\n return {\n valueTrimmed,\n valueTrimmedDebounced,\n valueExists,\n trimAndUpdateValue,\n };\n}\n\nexport default useCheckIfExistsValue;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AAE7C,SAASC,iBAAiB,EAAEC,iBAAiB,QAAQ,wBAAwB;AAAC,OACvEC,aAAa;AAmBpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CACnCC,KAAkC,EAClCC,WAA8B,EAC9BC,UAAkB,EAClBC,eAAwB,EACJ;EACpB,IAAMC,UAAU,GAAGN,aAAa,CAAC,CAAC;EAElC,IAAM,CAACO,YAAY,EAAEC,eAAe,CAAC,GAAGX,QAAQ,CAAC,EAAE,CAAC;EACpD,IAAM;IAAEY,KAAK,EAAEC;EAAsB,CAAC,GAAGZ,iBAAiB,CACxDS,YAAY,EACZH,UACF,CAAC;EAED,IAAMO,kBAAkB,GAAGf,WAAW,CAAEgB,IAAY,IAAK;IACvDJ,eAAe,CAACI,IAAI,CAACC,IAAI,CAAC,CAAC,CAAC;EAC9B,CAAC,EAAE,EAAE,CAAC;EAEN,IAAM;IAAEC,IAAI,EAAEC,eAAe;IAAEC,SAAS,EAAEC;EAAqB,CAAC,GAC9DlB,iBAAiB,CAACO,UAAU,CAACY,oBAAoB,EAAE,CACjDhB,KAAK,EACLC,WAAW,EACXO,qBAAqB,EACrBL,eAAe,CAChB,CAAC;;EAEJ;EACA;EACA,IAAMc,WAAW,GACfF,oBAAoB,IAAIV,YAAY,KAAKG,qBAAqB,GAC1D,IAAI,GACJK,eAAe;EAErB,OAAO;IACLR,YAAY;IACZG,qBAAqB;IACrBS,WAAW;IACXR;EACF,CAAC;AACH;AAEA,eAAeV,qBAAqB"}
1
+ {"version":3,"file":"useCheckIfExistsValue.js","names":["useCallback","useState","useDebouncedValue","usePromiseFactory","useTableUtils","useCheckIfExistsValue","table","columnNames","debounceMs","isCaseSensitive","tableUtils","valueTrimmed","setValueTrimmed","value","valueTrimmedDebounced","trimAndUpdateValue","text","trim","data","valueExistsData","isLoading","valueExistsIsLoading","doesColumnValueExist","valueExists"],"sources":["../src/useCheckIfExistsValue.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { useDebouncedValue, usePromiseFactory } from '@deephaven/react-hooks';\nimport useTableUtils from './useTableUtils';\n\nexport interface CheckIfExistsValue {\n /** Current trimmed value */\n valueTrimmed: string;\n\n /** Debounced trimmed value */\n valueTrimmedDebounced: string;\n\n /**\n * Whether the value exists in the given table columns. Will be null whenever\n * the value changes until the next check is complete.\n */\n valueExists: boolean | null;\n\n /** Trims and updates the value */\n trimAndUpdateValue: (value: string) => void;\n}\n\n/**\n * Manage a trimmed text value and check if it exists in a list of table columns.\n * @param table The table to check for the value\n * @param columnNames The column names to check\n * @param debounceMs Debounce timer for re-checking the value\n * @param isCaseSensitive Whether the value check is case sensitive\n */\nexport function useCheckIfExistsValue(\n table: dh.Table | null | undefined,\n columnNames: string | string[],\n debounceMs: number,\n isCaseSensitive: boolean\n): CheckIfExistsValue {\n const tableUtils = useTableUtils();\n\n const [valueTrimmed, setValueTrimmed] = useState('');\n const { value: valueTrimmedDebounced } = useDebouncedValue(\n valueTrimmed,\n debounceMs\n );\n\n const trimAndUpdateValue = useCallback((text: string) => {\n setValueTrimmed(text.trim());\n }, []);\n\n const { data: valueExistsData, isLoading: valueExistsIsLoading } =\n usePromiseFactory(tableUtils.doesColumnValueExist, [\n table,\n columnNames,\n valueTrimmedDebounced,\n isCaseSensitive,\n ]);\n\n // If value check is loading or if debounce hasn't settled, set\n // `matchesExistingValue` to null since it is indeterminate\n const valueExists =\n valueExistsIsLoading || valueTrimmed !== valueTrimmedDebounced\n ? null\n : valueExistsData;\n\n return {\n valueTrimmed,\n valueTrimmedDebounced,\n valueExists,\n trimAndUpdateValue,\n };\n}\n\nexport default useCheckIfExistsValue;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AAE7C,SAASC,iBAAiB,EAAEC,iBAAiB,QAAQ,wBAAwB;AAAC,OACvEC,aAAa;AAmBpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CACnCC,KAAkC,EAClCC,WAA8B,EAC9BC,UAAkB,EAClBC,eAAwB,EACJ;EACpB,IAAMC,UAAU,GAAGN,aAAa,CAAC,CAAC;EAElC,IAAM,CAACO,YAAY,EAAEC,eAAe,CAAC,GAAGX,QAAQ,CAAC,EAAE,CAAC;EACpD,IAAM;IAAEY,KAAK,EAAEC;EAAsB,CAAC,GAAGZ,iBAAiB,CACxDS,YAAY,EACZH,UACF,CAAC;EAED,IAAMO,kBAAkB,GAAGf,WAAW,CAAEgB,IAAY,IAAK;IACvDJ,eAAe,CAACI,IAAI,CAACC,IAAI,CAAC,CAAC,CAAC;EAC9B,CAAC,EAAE,EAAE,CAAC;EAEN,IAAM;IAAEC,IAAI,EAAEC,eAAe;IAAEC,SAAS,EAAEC;EAAqB,CAAC,GAC9DlB,iBAAiB,CAACO,UAAU,CAACY,oBAAoB,EAAE,CACjDhB,KAAK,EACLC,WAAW,EACXO,qBAAqB,EACrBL,eAAe,CAChB,CAAC;;EAEJ;EACA;EACA,IAAMc,WAAW,GACfF,oBAAoB,IAAIV,YAAY,KAAKG,qBAAqB,GAC1D,IAAI,GACJK,eAAe;EAErB,OAAO;IACLR,YAAY;IACZG,qBAAqB;IACrBS,WAAW;IACXR;EACF,CAAC;AACH;AAEA,eAAeV,qBAAqB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useDebouncedViewportSearch.js","names":["debounce","Log","useEffect","useMemo","useTableUtils","log","module","DEBOUNCE_VIEWPORT_SEARCH_MS","useDebouncedViewportSearch","viewportData","columnName","debounceMs","arguments","length","undefined","tableUtils","table","applyFiltersAndRefresh","debouncedSearch","searchText","debug","concat","searchTextTrimmed","trim","column","findColumn","value","makeFilterValue","type","filter","contains","cancel"],"sources":["../src/useDebouncedViewportSearch.ts"],"sourcesContent":["import debounce from 'lodash.debounce';\nimport type { dh } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { useEffect, useMemo } from 'react';\nimport { type UseViewportDataResult } from './useViewportData';\nimport useTableUtils from './useTableUtils';\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 function useDebouncedViewportSearch<\n I,\n T extends dh.Table | dh.TreeTable,\n>(\n viewportData: UseViewportDataResult<I, T>,\n columnName: string,\n debounceMs = DEBOUNCE_VIEWPORT_SEARCH_MS\n): (searchText: string) => void {\n const tableUtils = useTableUtils();\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\nexport default useDebouncedViewportSearch;\n"],"mappings":"AAAA,OAAOA,QAAQ,MAAM,iBAAiB;AAEtC,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAAC,OAEpCC,aAAa;AAEpB,IAAMC,GAAG,GAAGJ,GAAG,CAACK,MAAM,CAAC,4BAA4B,CAAC;AAEpD,OAAO,IAAMC,2BAA2B,GAAG,GAAG;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,0BAA0BA,CAIxCC,YAAyC,EACzCC,UAAkB,EAEY;EAAA,IAD9BC,UAAU,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGL,2BAA2B;EAExC,IAAMQ,UAAU,GAAGX,aAAa,CAAC,CAAC;EAClC,IAAM;IAAEY,KAAK;IAAEC;EAAuB,CAAC,GAAGR,YAAY;EAEtD,IAAMS,eAAe,GAAGf,OAAO,CAC7B,MACEH,QAAQ,CAAEmB,UAAkB,IAAK;IAC/Bd,GAAG,CAACe,KAAK,mCAAAC,MAAA,CAAmCF,UAAU,MAAG,CAAC;IAE1D,IAAIH,KAAK,IAAI,IAAI,EAAE;MACjB;IACF;IAEA,IAAMM,iBAAiB,GAAGH,UAAU,CAACI,IAAI,CAAC,CAAC;IAE3C,IAAID,iBAAiB,KAAK,EAAE,EAAE;MAC5BL,sBAAsB,CAAC,EAAE,CAAC;MAC1B;IACF;IAEA,IAAMO,MAAM,GAAGR,KAAK,CAACS,UAAU,CAACf,UAAU,CAAC;IAC3C,IAAMgB,KAAK,GAAGX,UAAU,CAACY,eAAe,CACtCH,MAAM,CAACI,IAAI,EACXN,iBACF,CAAC;IACD,IAAMO,MAAM,GAAG,CAACL,MAAM,CAACK,MAAM,CAAC,CAAC,CAACC,QAAQ,CAACJ,KAAK,CAAC,CAAC;IAEhDT,sBAAsB,CAACY,MAAM,CAAC;EAChC,CAAC,EAAElB,UAAU,CAAC,EAChB,CAACM,sBAAsB,EAAEP,UAAU,EAAEC,UAAU,EAAEK,KAAK,EAAED,UAAU,CACpE,CAAC;EAEDb,SAAS,CACP,MAAM,MAAM;IACVG,GAAG,CAACe,KAAK,CAAC,sCAAsC,CAAC;IACjDF,eAAe,CAACa,MAAM,CAAC,CAAC;EAC1B,CAAC,EACD,CAACb,eAAe,CAClB,CAAC;EAED,OAAOA,eAAe;AACxB;AAEA,eAAeV,0BAA0B"}
1
+ {"version":3,"file":"useDebouncedViewportSearch.js","names":["debounce","Log","useEffect","useMemo","useTableUtils","log","module","DEBOUNCE_VIEWPORT_SEARCH_MS","useDebouncedViewportSearch","viewportData","columnName","debounceMs","arguments","length","undefined","tableUtils","table","applyFiltersAndRefresh","debouncedSearch","searchText","debug","concat","searchTextTrimmed","trim","column","findColumn","value","makeFilterValue","type","filter","contains","cancel"],"sources":["../src/useDebouncedViewportSearch.ts"],"sourcesContent":["import debounce from 'lodash.debounce';\nimport type { dh } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { useEffect, useMemo } from 'react';\nimport { type UseViewportDataResult } from './useViewportData';\nimport useTableUtils from './useTableUtils';\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 function useDebouncedViewportSearch<\n I,\n T extends dh.Table | dh.TreeTable,\n>(\n viewportData: UseViewportDataResult<I, T>,\n columnName: string,\n debounceMs = DEBOUNCE_VIEWPORT_SEARCH_MS\n): (searchText: string) => void {\n const tableUtils = useTableUtils();\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\nexport default useDebouncedViewportSearch;\n"],"mappings":"AAAA,OAAOA,QAAQ,MAAM,iBAAiB;AAEtC,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAAC,OAEpCC,aAAa;AAEpB,IAAMC,GAAG,GAAGJ,GAAG,CAACK,MAAM,CAAC,4BAA4B,CAAC;AAEpD,OAAO,IAAMC,2BAA2B,GAAG,GAAG;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,0BAA0BA,CAIxCC,YAAyC,EACzCC,UAAkB,EAEY;EAAA,IAD9BC,UAAU,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGL,2BAA2B;EAExC,IAAMQ,UAAU,GAAGX,aAAa,CAAC,CAAC;EAClC,IAAM;IAAEY,KAAK;IAAEC;EAAuB,CAAC,GAAGR,YAAY;EAEtD,IAAMS,eAAe,GAAGf,OAAO,CAC7B,MACEH,QAAQ,CAAEmB,UAAkB,IAAK;IAC/Bd,GAAG,CAACe,KAAK,mCAAAC,MAAA,CAAmCF,UAAU,MAAG,CAAC;IAE1D,IAAIH,KAAK,IAAI,IAAI,EAAE;MACjB;IACF;IAEA,IAAMM,iBAAiB,GAAGH,UAAU,CAACI,IAAI,CAAC,CAAC;IAE3C,IAAID,iBAAiB,KAAK,EAAE,EAAE;MAC5BL,sBAAsB,CAAC,EAAE,CAAC;MAC1B;IACF;IAEA,IAAMO,MAAM,GAAGR,KAAK,CAACS,UAAU,CAACf,UAAU,CAAC;IAC3C,IAAMgB,KAAK,GAAGX,UAAU,CAACY,eAAe,CACtCH,MAAM,CAACI,IAAI,EACXN,iBACF,CAAC;IACD,IAAMO,MAAM,GAAG,CAACL,MAAM,CAACK,MAAM,CAAC,CAAC,CAACC,QAAQ,CAACJ,KAAK,CAAC,CAAC;IAEhDT,sBAAsB,CAACY,MAAM,CAAC;EAChC,CAAC,EAAElB,UAAU,CAAC,EAChB,CAACM,sBAAsB,EAAEP,UAAU,EAAEC,UAAU,EAAEK,KAAK,EAAED,UAAU,CACpE,CAAC;EAEDb,SAAS,CACP,MAAM,MAAM;IACVG,GAAG,CAACe,KAAK,CAAC,sCAAsC,CAAC;IACjDF,eAAe,CAACa,MAAM,CAAC,CAAC;EAC1B,CAAC,EACD,CAACb,eAAe,CAClB,CAAC;EAED,OAAOA,eAAe;AACxB;AAEA,eAAeV,0BAA0B","ignoreList":[]}