@deephaven/jsapi-components 0.67.0 → 0.67.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/HookTestUtils.d.ts +1 -1
- package/dist/HookTestUtils.d.ts.map +1 -1
- package/dist/HookTestUtils.js.map +1 -1
- package/dist/TableDropdown.d.ts +4 -4
- package/dist/TableDropdown.d.ts.map +1 -1
- package/dist/TableDropdown.js.map +1 -1
- package/dist/TableInput.d.ts +3 -3
- package/dist/TableInput.d.ts.map +1 -1
- package/dist/TableInput.js.map +1 -1
- package/dist/useCheckIfExistsValue.d.ts +2 -2
- package/dist/useCheckIfExistsValue.d.ts.map +1 -1
- package/dist/useCheckIfExistsValue.js.map +1 -1
- package/dist/useDebouncedViewportSearch.d.ts +2 -2
- package/dist/useDebouncedViewportSearch.d.ts.map +1 -1
- package/dist/useDebouncedViewportSearch.js.map +1 -1
- package/dist/useFilterConditionFactories.d.ts +2 -2
- package/dist/useFilterConditionFactories.d.ts.map +1 -1
- package/dist/useFilterConditionFactories.js.map +1 -1
- package/dist/useGetItemPosition.d.ts +2 -2
- package/dist/useGetItemPosition.d.ts.map +1 -1
- package/dist/useGetItemPosition.js.map +1 -1
- package/dist/useInitializeViewportData.d.ts +2 -2
- package/dist/useInitializeViewportData.d.ts.map +1 -1
- package/dist/useInitializeViewportData.js.map +1 -1
- package/dist/usePickerWithSelectedValues.d.ts +3 -3
- package/dist/usePickerWithSelectedValues.d.ts.map +1 -1
- package/dist/usePickerWithSelectedValues.js.map +1 -1
- package/dist/useSearchableViewportData.d.ts +3 -3
- package/dist/useSearchableViewportData.d.ts.map +1 -1
- package/dist/useSearchableViewportData.js.map +1 -1
- package/dist/useSelectDistinctTable.d.ts +3 -3
- package/dist/useSelectDistinctTable.d.ts.map +1 -1
- package/dist/useSelectDistinctTable.js.map +1 -1
- package/dist/useSetPaddedViewportCallback.d.ts +2 -2
- package/dist/useSetPaddedViewportCallback.d.ts.map +1 -1
- package/dist/useSetPaddedViewportCallback.js.map +1 -1
- package/dist/useTable.d.ts +3 -3
- package/dist/useTable.d.ts.map +1 -1
- package/dist/useTable.js.map +1 -1
- package/dist/useTableClose.d.ts +2 -2
- package/dist/useTableClose.d.ts.map +1 -1
- package/dist/useTableClose.js.map +1 -1
- package/dist/useTableColumn.d.ts +3 -3
- package/dist/useTableColumn.d.ts.map +1 -1
- package/dist/useTableColumn.js.map +1 -1
- package/dist/useTableListener.d.ts +2 -2
- package/dist/useTableListener.d.ts.map +1 -1
- package/dist/useTableListener.js.map +1 -1
- package/dist/useTableSize.d.ts +2 -2
- package/dist/useTableSize.d.ts.map +1 -1
- package/dist/useTableSize.js.map +1 -1
- package/dist/useViewportData.d.ts +5 -5
- package/dist/useViewportData.d.ts.map +1 -1
- package/dist/useViewportData.js.map +1 -1
- package/dist/useViewportFilter.d.ts +2 -2
- package/dist/useViewportFilter.d.ts.map +1 -1
- package/dist/useViewportFilter.js.map +1 -1
- package/package.json +10 -10
package/dist/HookTestUtils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import type { dh as DhType } from '@deephaven/jsapi-types';
|
|
3
|
-
export declare function makeApiContextWrapper(dh: DhType): ({ children, }: {
|
|
3
|
+
export declare function makeApiContextWrapper(dh: typeof DhType): ({ children, }: {
|
|
4
4
|
children?: ReactNode;
|
|
5
5
|
}) => JSX.Element;
|
|
6
6
|
declare const _default: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HookTestUtils.d.ts","sourceRoot":"","sources":["../src/HookTestUtils.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"HookTestUtils.d.ts","sourceRoot":"","sources":["../src/HookTestUtils.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,OAAO,MAAM;eAIxC,SAAS;MAClB,WAAW,CAGhB;;;;AAED,wBAEE"}
|
|
@@ -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, { ReactNode } from 'react';\nimport { ApiContext } from '@deephaven/jsapi-bootstrap';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\n\nexport function makeApiContextWrapper(dh: DhType) {\n return function ApiContextWrapper({\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,MAAqB,OAAO;AACxC,SAASC,UAAU,QAAQ,4BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGxD,OAAO,SAASC,qBAAqBA,CAACC,
|
|
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, { 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,MAAqB,OAAO;AACxC,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"}
|
package/dist/TableDropdown.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import {
|
|
2
|
+
import { dh as DhType } from '@deephaven/jsapi-types';
|
|
3
3
|
export type TableDropdownProps = {
|
|
4
4
|
/** Table to use as the source of data. Does not own the table, does not close it on unmount. */
|
|
5
|
-
table?: Table;
|
|
5
|
+
table?: DhType.Table;
|
|
6
6
|
/** Column to read data from the table. Defaults to the first column in the table if it's not provided. */
|
|
7
|
-
column?: Column;
|
|
7
|
+
column?: DhType.Column;
|
|
8
8
|
/** Triggered when the dropdown selection has changed */
|
|
9
9
|
onChange: (value: unknown) => void;
|
|
10
10
|
/** Filter to apply on the table */
|
|
11
|
-
filter?: readonly FilterCondition[];
|
|
11
|
+
filter?: readonly DhType.FilterCondition[];
|
|
12
12
|
/** The currently selected value */
|
|
13
13
|
selectedValue?: unknown;
|
|
14
14
|
/** Whether the control is disabled */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableDropdown.d.ts","sourceRoot":"","sources":["../src/TableDropdown.tsx"],"names":[],"mappings":";AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"TableDropdown.d.ts","sourceRoot":"","sources":["../src/TableDropdown.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAoBtD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gGAAgG;IAChG,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;IAErB,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;IAEvB,wDAAwD;IACxD,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnC,mCAAmC;IACnC,MAAM,CAAC,EAAE,SAAS,MAAM,CAAC,eAAe,EAAE,CAAC;IAE3C,mCAAmC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,wDAAwD;IACxD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IAEzC,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,KAAK,EACL,MAAoB,EACpB,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,SAAS,EACT,WAAgC,EAChC,OAAc,GACf,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAuElC;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -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","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 {
|
|
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","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 { 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: CustomEvent<DhType.ViewportData>) => {\n const { detail } = event;\n const newValues = detail.rows.map(row => row.get(tableColumn));\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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"}
|
package/dist/TableInput.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type {
|
|
2
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
3
3
|
import { Settings } from '@deephaven/jsapi-utils';
|
|
4
4
|
import './TableInput.scss';
|
|
5
|
-
type Value = LongWrapper | string;
|
|
5
|
+
type Value = dh.LongWrapper | string;
|
|
6
6
|
interface TableInputProps {
|
|
7
7
|
className?: string;
|
|
8
8
|
columnName: string;
|
|
9
9
|
settings: Settings;
|
|
10
10
|
defaultValue: Value[];
|
|
11
11
|
isInvalid?: boolean;
|
|
12
|
-
table: Promise<Table>;
|
|
12
|
+
table: Promise<dh.Table>;
|
|
13
13
|
onChange: (items: Value[]) => void;
|
|
14
14
|
onBlur?: () => void;
|
|
15
15
|
}
|
package/dist/TableInput.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableInput.d.ts","sourceRoot":"","sources":["../src/TableInput.tsx"],"names":[],"mappings":";AAaA,OAAO,KAAK,EAAE,
|
|
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,EAA6B,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAI7E,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,CAgQvD;kBAhQQ,UAAU;;;;;;;AAyQnB,eAAe,UAAU,CAAC"}
|
package/dist/TableInput.js.map
CHANGED
|
@@ -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 { LongWrapper, Table } from '@deephaven/jsapi-types';\nimport { PromiseUtils } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { Formatter, FormatterUtils, Settings } from '@deephaven/jsapi-utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport useTableColumn from './useTableColumn';\n\nimport './TableInput.scss';\n\nconst log = Log.module('TableInput');\n\ntype Value = LongWrapper | string;\n\ninterface SelectValueItem {\n displayValue: string;\n value: Value;\n isSelected: boolean;\n}\n\ninterface TableInputProps {\n className?: string;\n columnName: string;\n settings: Settings;\n defaultValue: Value[];\n isInvalid?: boolean;\n table: Promise<Table>;\n onChange: (items: Value[]) => void;\n onBlur?: () => void;\n}\n\nconst SIZE_LIMIT = 250;\n\nfunction TableInput(props: TableInputProps): JSX.Element {\n const {\n className = undefined,\n columnName,\n settings,\n defaultValue = [],\n isInvalid = false,\n onChange = () => false,\n onBlur = () => false,\n table: tablePromise,\n } = props;\n const parentRef = useRef<HTMLDivElement>(null);\n const dh = useApi();\n const formatter = useMemo(() => {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions =\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<Table | undefined>();\n const listRef = useRef<SelectValueList<Value>>(null);\n\n const itemCount = Math.min(table?.size ?? 0, SIZE_LIMIT);\n\n const { column, data, error } = useTableColumn(\n table,\n 0,\n SIZE_LIMIT - 1,\n columnName\n );\n\n const formatValue = useCallback(\n value =>\n column\n ? formatter.getFormattedString(value, column.type, column.name)\n : `${value}`,\n [column, formatter]\n );\n\n const [items, updatedSelection] = useMemo(() => {\n const removedItems = new Set(selection);\n const result: SelectValueItem[] = [];\n if (data == null) {\n // Viewport not initialized\n return [result, null];\n }\n (data as Value[]).forEach(v => {\n const value = `${v}`;\n const isSelected = selection.has(value);\n if (isSelected) {\n removedItems.delete(value);\n }\n result.push({\n value,\n displayValue: formatValue(v),\n isSelected,\n });\n });\n\n if (removedItems.size > 0) {\n log.debug2('Selection has items that are missing from the viewport');\n const newSelection = new Set(selection);\n Array.from(removedItems).forEach(value => {\n newSelection.delete(value);\n });\n return [result, newSelection];\n }\n return [result, null];\n }, [data, selection, formatValue]);\n\n useEffect(() => {\n if (updatedSelection !== null) {\n setSelection(updatedSelection);\n onChange(Array.from(updatedSelection));\n }\n }, [onChange, updatedSelection]);\n\n const initTable = useCallback(async promise => {\n try {\n const resolved = await promise;\n log.debug('Table resolved', resolved);\n setTable(resolved);\n } catch (e) {\n if (PromiseUtils.isCanceled(e)) {\n return;\n }\n log.error(e);\n }\n }, []);\n\n useEffect(() => {\n const cancelablePromise = PromiseUtils.makeCancelable(tablePromise);\n initTable(cancelablePromise);\n return () => {\n log.debug2('Cancel table promise');\n cancelablePromise.cancel();\n };\n }, [tablePromise, initTable]);\n\n // Scroll the item matching the input into view\n const handleSearchChange = useCallback(\n e => {\n const { value } = e.target;\n setSearchValue(value);\n const index = items.findIndex(item => item.displayValue.includes(value));\n if (index > -1) {\n log.debug2(`Found ${value} at index ${index}`);\n listRef.current?.scrollIntoView(index);\n } else {\n log.debug2(`${value} not found`);\n }\n },\n [items, listRef]\n );\n\n const handleSelect = useCallback(\n index => {\n log.debug('handleSelect', index);\n if (index >= items.length) {\n log.error('Invalid index', index);\n return;\n }\n const selectedValue = items[index].value;\n const newSelection = new Set(selection);\n if (items[index].isSelected) {\n newSelection.delete(selectedValue);\n } else {\n newSelection.add(selectedValue);\n }\n setSelection(newSelection);\n onChange(Array.from(newSelection));\n },\n [onChange, items, selection]\n );\n\n const handleSelectAll = useCallback(() => {\n const values = items.map(item => item.value);\n const newSelection = new Set(values);\n setSelection(newSelection);\n onChange(values);\n }, [items, onChange]);\n\n const handleClearSelection = useCallback(() => {\n setSelection(new Set());\n onChange([]);\n }, [onChange]);\n\n const handleViewportChange = useCallback(() => {\n // no-op\n }, []);\n\n const handleChildBlur = useCallback(\n (e: React.FocusEvent<Element>) => {\n const { relatedTarget } = e;\n log.debug(\n 'handleChildBlur',\n relatedTarget,\n relatedTarget instanceof HTMLElement,\n parentRef.current,\n parentRef.current?.contains(relatedTarget)\n );\n if (\n !relatedTarget ||\n (parentRef.current &&\n relatedTarget instanceof HTMLElement &&\n !parentRef.current.contains(relatedTarget))\n ) {\n onBlur();\n }\n },\n [onBlur]\n );\n\n const isEmpty = items.length === 0;\n\n return (\n <div\n ref={parentRef}\n className={classNames(\n 'table-input-container d-flex flex-column position-relative',\n className\n )}\n >\n <SearchInput\n disabled={!!error || isEmpty}\n value={searchValue}\n placeholder=\"Search\"\n onChange={handleSearchChange}\n className=\"mb-2 d-flex\"\n onBlur={handleChildBlur}\n />\n <SelectValueList\n className=\"table-input-list\"\n disabled={table === undefined || isEmpty}\n isInvalid={isInvalid}\n items={isEmpty ? [{ value: 'Empty', isSelected: false }] : items}\n itemCount={itemCount}\n offset={0}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n ref={listRef}\n onBlur={handleChildBlur}\n />\n\n {table && (\n <div className=\"meta-row\">\n <div className=\"d-flex align-items-center text-muted small\">\n {table != null && table.size > itemCount && (\n <>Table is too large, showing the first {SIZE_LIMIT} items.</>\n )}\n </div>\n <div>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onBlur={handleChildBlur}\n onClick={handleSelectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link mr-a\"\n onBlur={handleChildBlur}\n onClick={handleClearSelection}\n >\n Clear\n </button>\n </div>\n </div>\n )}\n\n {table == null ||\n (error && (\n <div className=\"h-100 w-100 position-absolute\">\n <LoadingOverlay\n isLoaded={table != null}\n isLoading={table == null && error == null}\n errorMessage={error?.message ?? null}\n />\n </div>\n ))}\n </div>\n );\n}\n\nTableInput.displayName = 'TableInput';\n\nTableInput.defaultProps = {\n isInvalid: false,\n className: undefined,\n};\n\nexport default TableInput;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableInput.js","names":["React","useCallback","useState","useRef","useEffect","useMemo","classNames","LoadingOverlay","SearchInput","SelectValueList","PromiseUtils","Log","Formatter","FormatterUtils","useApi","useTableColumn","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 { Formatter, FormatterUtils, Settings } from '@deephaven/jsapi-utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport useTableColumn from './useTableColumn';\n\nimport './TableInput.scss';\n\nconst log = Log.module('TableInput');\n\ntype Value = 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 />\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,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
export interface CheckIfExistsValue {
|
|
3
3
|
/** Current trimmed value */
|
|
4
4
|
valueTrimmed: string;
|
|
@@ -19,6 +19,6 @@ export interface CheckIfExistsValue {
|
|
|
19
19
|
* @param debounceMs Debounce timer for re-checking the value
|
|
20
20
|
* @param isCaseSensitive Whether the value check is case sensitive
|
|
21
21
|
*/
|
|
22
|
-
export declare function useCheckIfExistsValue(table: Table | null | undefined, columnNames: string | string[], debounceMs: number, isCaseSensitive: boolean): CheckIfExistsValue;
|
|
22
|
+
export declare function useCheckIfExistsValue(table: dh.Table | null | undefined, columnNames: string | string[], debounceMs: number, isCaseSensitive: boolean): CheckIfExistsValue;
|
|
23
23
|
export default useCheckIfExistsValue;
|
|
24
24
|
//# sourceMappingURL=useCheckIfExistsValue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCheckIfExistsValue.d.ts","sourceRoot":"","sources":["../src/useCheckIfExistsValue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useCheckIfExistsValue.d.ts","sourceRoot":"","sources":["../src/useCheckIfExistsValue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAIjD,MAAM,WAAW,kBAAkB;IACjC,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IAErB,8BAA8B;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAE9B;;;OAGG;IACH,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IAE5B,kCAAkC;IAClC,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,GAAG,SAAS,EAClC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAC9B,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,OAAO,GACvB,kBAAkB,CAkCpB;AAED,eAAe,qBAAqB,CAAC"}
|
|
@@ -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 {
|
|
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,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
import { UseViewportDataResult } from './useViewportData';
|
|
3
3
|
export declare const DEBOUNCE_VIEWPORT_SEARCH_MS = 200;
|
|
4
4
|
/**
|
|
@@ -9,6 +9,6 @@ export declare const DEBOUNCE_VIEWPORT_SEARCH_MS = 200;
|
|
|
9
9
|
* @param debounceMs Millisecond value to debounce
|
|
10
10
|
* @returns A debounced search function
|
|
11
11
|
*/
|
|
12
|
-
export declare function useDebouncedViewportSearch<I, T extends Table | TreeTable>(viewportData: UseViewportDataResult<I, T>, columnName: string, debounceMs?: number): (searchText: string) => void;
|
|
12
|
+
export declare function useDebouncedViewportSearch<I, T extends dh.Table | dh.TreeTable>(viewportData: UseViewportDataResult<I, T>, columnName: string, debounceMs?: number): (searchText: string) => void;
|
|
13
13
|
export default useDebouncedViewportSearch;
|
|
14
14
|
//# sourceMappingURL=useDebouncedViewportSearch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDebouncedViewportSearch.d.ts","sourceRoot":"","sources":["../src/useDebouncedViewportSearch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useDebouncedViewportSearch.d.ts","sourceRoot":"","sources":["../src/useDebouncedViewportSearch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAGjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,CAAC,EACD,CAAC,SAAS,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,EAEjC,YAAY,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EACzC,UAAU,EAAE,MAAM,EAClB,UAAU,SAA8B,GACvC,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAyC9B;AAED,eAAe,0BAA0B,CAAC"}
|
|
@@ -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 {
|
|
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 { 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,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
import type { FilterConditionFactory } from '@deephaven/jsapi-utils';
|
|
3
|
-
export declare function useFilterConditionFactories(maybeTable: Table | TreeTable | null | undefined, ...filterConditionFactories: FilterConditionFactory[]): FilterCondition[];
|
|
3
|
+
export declare function useFilterConditionFactories(maybeTable: dh.Table | dh.TreeTable | null | undefined, ...filterConditionFactories: FilterConditionFactory[]): dh.FilterCondition[];
|
|
4
4
|
export default useFilterConditionFactories;
|
|
5
5
|
//# sourceMappingURL=useFilterConditionFactories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFilterConditionFactories.d.ts","sourceRoot":"","sources":["../src/useFilterConditionFactories.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useFilterConditionFactories.d.ts","sourceRoot":"","sources":["../src/useFilterConditionFactories.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGrE,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,GAAG,SAAS,EACtD,GAAG,wBAAwB,EAAE,sBAAsB,EAAE,GACpD,EAAE,CAAC,eAAe,EAAE,CAWtB;AAED,eAAe,2BAA2B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFilterConditionFactories.js","names":["useMemo","removeNullAndUndefined","useFilterConditionFactories","maybeTable","_len","arguments","length","filterConditionFactories","Array","_key","map","f"],"sources":["../src/useFilterConditionFactories.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport type {
|
|
1
|
+
{"version":3,"file":"useFilterConditionFactories.js","names":["useMemo","removeNullAndUndefined","useFilterConditionFactories","maybeTable","_len","arguments","length","filterConditionFactories","Array","_key","map","f"],"sources":["../src/useFilterConditionFactories.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport type { FilterConditionFactory } from '@deephaven/jsapi-utils';\nimport { removeNullAndUndefined } from '@deephaven/utils';\n\nexport function useFilterConditionFactories(\n maybeTable: dh.Table | dh.TreeTable | null | undefined,\n ...filterConditionFactories: FilterConditionFactory[]\n): dh.FilterCondition[] {\n return useMemo(\n () =>\n removeNullAndUndefined(\n ...filterConditionFactories.map(f => f(maybeTable))\n ),\n // Intentionally disabling hooks check so we can spread\n // the array items as dependencies.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [maybeTable, ...filterConditionFactories]\n );\n}\n\nexport default useFilterConditionFactories;\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAG/B,SAASC,sBAAsB,QAAQ,kBAAkB;AAEzD,OAAO,SAASC,2BAA2BA,CACzCC,UAAsD,EAEhC;EAAA,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EADnBC,wBAAwB,OAAAC,KAAA,CAAAJ,IAAA,OAAAA,IAAA,WAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;IAAxBF,wBAAwB,CAAAE,IAAA,QAAAJ,SAAA,CAAAI,IAAA;EAAA;EAE3B,OAAOT,OAAO,CACZ,MACEC,sBAAsB,CACpB,GAAGM,wBAAwB,CAACG,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACR,UAAU,CAAC,CACpD,CAAC;EACH;EACA;EACA;EACA,CAACA,UAAU,EAAE,GAAGI,wBAAwB,CAC1C,CAAC;AACH;AAEA,eAAeL,2BAA2B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
export interface UseGetItemPositionOptions {
|
|
3
|
-
table?: Table | null;
|
|
3
|
+
table?: dh.Table | null;
|
|
4
4
|
columnName: string;
|
|
5
5
|
defaultValue?: string | null;
|
|
6
6
|
itemHeight: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetItemPosition.d.ts","sourceRoot":"","sources":["../src/useGetItemPosition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useGetItemPosition.d.ts","sourceRoot":"","sources":["../src/useGetItemPosition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAEjD,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,SAAa,EACb,KAAK,GACN,EAAE,yBAAyB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAcnD;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetItemPosition.js","names":["useCallback","useGetItemPosition","_ref","table","columnName","defaultValue","itemHeight","topOffset","value","_asyncToGenerator","column","findColumn","rowIndex","seekRow","defaultItemOffset"],"sources":["../src/useGetItemPosition.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport type {
|
|
1
|
+
{"version":3,"file":"useGetItemPosition.js","names":["useCallback","useGetItemPosition","_ref","table","columnName","defaultValue","itemHeight","topOffset","value","_asyncToGenerator","column","findColumn","rowIndex","seekRow","defaultItemOffset"],"sources":["../src/useGetItemPosition.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\n\nexport interface UseGetItemPositionOptions {\n table?: dh.Table | null;\n columnName: string;\n defaultValue?: string | null;\n itemHeight: number;\n topOffset?: number;\n value: string;\n}\n\n/**\n * Gets an item's position in a list of items based on its row index in a table.\n * @param table Table to search for the item in\n * @param columnName Column name to search for the item in\n * @param defaultValue Optional default value. This would be the first item in\n * the list and not expected to be in the Table.\n * @param itemHeight Height of each item in the list\n * @param topOffset Optional pixel offset from the top of the list\n * @param value Value to search for in the column\n */\nexport function useGetItemPosition({\n table,\n columnName,\n defaultValue,\n itemHeight,\n topOffset = 0,\n value,\n}: UseGetItemPositionOptions): () => Promise<number> {\n return useCallback(async () => {\n if (table == null || value === '' || value === defaultValue) {\n return topOffset;\n }\n\n const column = table.findColumn(columnName);\n const rowIndex = await table.seekRow(0, column, 'String', value);\n\n // If a default item exists at the top of the list, offset the item index by 1\n const defaultItemOffset = defaultValue == null ? 0 : 1;\n\n return (rowIndex + defaultItemOffset) * itemHeight + topOffset;\n }, [columnName, defaultValue, itemHeight, table, topOffset, value]);\n}\n\nexport default useGetItemPosition;\n"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;AAYnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAAC,IAAA,EAOmB;EAAA,IAPlB;IACjCC,KAAK;IACLC,UAAU;IACVC,YAAY;IACZC,UAAU;IACVC,SAAS,GAAG,CAAC;IACbC;EACyB,CAAC,GAAAN,IAAA;EAC1B,OAAOF,WAAW,eAAAS,iBAAA,CAAC,aAAY;IAC7B,IAAIN,KAAK,IAAI,IAAI,IAAIK,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAKH,YAAY,EAAE;MAC3D,OAAOE,SAAS;IAClB;IAEA,IAAMG,MAAM,GAAGP,KAAK,CAACQ,UAAU,CAACP,UAAU,CAAC;IAC3C,IAAMQ,QAAQ,SAAST,KAAK,CAACU,OAAO,CAAC,CAAC,EAAEH,MAAM,EAAE,QAAQ,EAAEF,KAAK,CAAC;;IAEhE;IACA,IAAMM,iBAAiB,GAAGT,YAAY,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC;IAEtD,OAAO,CAACO,QAAQ,GAAGE,iBAAiB,IAAIR,UAAU,GAAGC,SAAS;EAChE,CAAC,GAAE,CAACH,UAAU,EAAEC,YAAY,EAAEC,UAAU,EAAEH,KAAK,EAAEI,SAAS,EAAEC,KAAK,CAAC,CAAC;AACrE;AAEA,eAAeP,kBAAkB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
import { WindowedListData } from '@deephaven/react-hooks';
|
|
3
3
|
import { KeyedItem } from '@deephaven/utils';
|
|
4
4
|
/**
|
|
@@ -13,6 +13,6 @@ import { KeyedItem } from '@deephaven/utils';
|
|
|
13
13
|
* @param table The table that will be used to determine the list size.
|
|
14
14
|
* @returns a WindowedListData object.
|
|
15
15
|
*/
|
|
16
|
-
export declare function useInitializeViewportData<T>(table: Table | TreeTable | null): WindowedListData<KeyedItem<T>>;
|
|
16
|
+
export declare function useInitializeViewportData<T>(table: dh.Table | dh.TreeTable | null): WindowedListData<KeyedItem<T>>;
|
|
17
17
|
export default useInitializeViewportData;
|
|
18
18
|
//# sourceMappingURL=useInitializeViewportData.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInitializeViewportData.d.ts","sourceRoot":"","sources":["../src/useInitializeViewportData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useInitializeViewportData.d.ts","sourceRoot":"","sources":["../src/useInitializeViewportData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAuB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAM7C;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,GACpC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAwBhC;AAED,eAAe,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInitializeViewportData.js","names":["useEffect","generateEmptyKeyedItems","useWindowedListData","Log","useTableSize","log","module","useInitializeViewportData","table","viewportData","targetSize","Math","max","currentSize","items","length","debug","setItems","Array","from"],"sources":["../src/useInitializeViewportData.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type {
|
|
1
|
+
{"version":3,"file":"useInitializeViewportData.js","names":["useEffect","generateEmptyKeyedItems","useWindowedListData","Log","useTableSize","log","module","useInitializeViewportData","table","viewportData","targetSize","Math","max","currentSize","items","length","debug","setItems","Array","from"],"sources":["../src/useInitializeViewportData.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { generateEmptyKeyedItems } from '@deephaven/jsapi-utils';\nimport { useWindowedListData, WindowedListData } from '@deephaven/react-hooks';\nimport { KeyedItem } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport useTableSize from './useTableSize';\n\nconst log = Log.module('useInitializeViewportData');\n\n/**\n * Initializes a ListData instance that can be used for windowed views of a\n * Table. The list must always contain a KeyedItem for every record in the table,\n * so it is pre-populated with empty items that can be updated with real data as\n * the window changes.\n *\n * IMPORTANT: this will create an empty KeyedItem object for every row in the\n * source table. This is intended for \"human\" sized tables such as those used in\n * admin panels. This is not suitable for \"machine\" scale with millions+ rows.\n * @param table The table that will be used to determine the list size.\n * @returns a WindowedListData object.\n */\nexport function useInitializeViewportData<T>(\n table: dh.Table | dh.TreeTable | null\n): WindowedListData<KeyedItem<T>> {\n const viewportData = useWindowedListData<KeyedItem<T>>({});\n\n // If the table changes size, we need to re-initialize it.\n const targetSize = Math.max(0, useTableSize(table));\n\n // Whenever the table reference or size changes, replace the list with empty\n // items. This is preferred over updating items in place to avoid the user\n // seeing items shift around multiple times.\n useEffect(() => {\n const currentSize = viewportData.items.length;\n\n if (targetSize !== currentSize) {\n log.debug('size changed:', { currentSize, targetSize });\n viewportData.setItems(\n Array.from(generateEmptyKeyedItems<T>(0, targetSize - 1))\n );\n }\n\n // Intentionally excluding viewportData since it changes on every render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [targetSize, table]);\n\n return viewportData;\n}\n\nexport default useInitializeViewportData;\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AAEjC,SAASC,uBAAuB,QAAQ,wBAAwB;AAChE,SAASC,mBAAmB,QAA0B,wBAAwB;AAE9E,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAC1BC,YAAY;AAEnB,IAAMC,GAAG,GAAGF,GAAG,CAACG,MAAM,CAAC,2BAA2B,CAAC;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,yBAAyBA,CACvCC,KAAqC,EACL;EAChC,IAAMC,YAAY,GAAGP,mBAAmB,CAAe,CAAC,CAAC,CAAC;;EAE1D;EACA,IAAMQ,UAAU,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAER,YAAY,CAACI,KAAK,CAAC,CAAC;;EAEnD;EACA;EACA;EACAR,SAAS,CAAC,MAAM;IACd,IAAMa,WAAW,GAAGJ,YAAY,CAACK,KAAK,CAACC,MAAM;IAE7C,IAAIL,UAAU,KAAKG,WAAW,EAAE;MAC9BR,GAAG,CAACW,KAAK,CAAC,eAAe,EAAE;QAAEH,WAAW;QAAEH;MAAW,CAAC,CAAC;MACvDD,YAAY,CAACQ,QAAQ,CACnBC,KAAK,CAACC,IAAI,CAAClB,uBAAuB,CAAI,CAAC,EAAES,UAAU,GAAG,CAAC,CAAC,CAC1D,CAAC;IACH;;IAEA;IACA;EACF,CAAC,EAAE,CAACA,UAAU,EAAEF,KAAK,CAAC,CAAC;EAEvB,OAAOC,YAAY;AACrB;AAEA,eAAeF,yBAAyB"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Key } from 'react';
|
|
2
|
-
import type {
|
|
2
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
3
3
|
import { FilterConditionFactory } from '@deephaven/jsapi-utils';
|
|
4
4
|
import { KeyedItem, SelectionT } from '@deephaven/utils';
|
|
5
5
|
import { UseViewportDataResult } from './useViewportData';
|
|
6
6
|
export interface UsePickerWithSelectedValuesResult<TItem, TValue> {
|
|
7
|
-
list: UseViewportDataResult<TItem, Table>;
|
|
7
|
+
list: UseViewportDataResult<TItem, dh.Table>;
|
|
8
8
|
hasSearchTextWithZeroResults: boolean;
|
|
9
9
|
searchText: string;
|
|
10
10
|
searchTextExists: boolean | null;
|
|
@@ -30,7 +30,7 @@ export interface UsePickerWithSelectedValuesResult<TItem, TValue> {
|
|
|
30
30
|
* @param trimSearchText Whether to trim the search text before filtering. Defaults to false
|
|
31
31
|
*/
|
|
32
32
|
export declare function usePickerWithSelectedValues<TItem, TValue>({ maybeTable, columnName, mapItemToValue, filterConditionFactories, trimSearchText, }: {
|
|
33
|
-
maybeTable: Table | null;
|
|
33
|
+
maybeTable: dh.Table | null;
|
|
34
34
|
columnName: string;
|
|
35
35
|
mapItemToValue: (item: KeyedItem<TItem>) => TValue;
|
|
36
36
|
filterConditionFactories?: FilterConditionFactory[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePickerWithSelectedValues.d.ts","sourceRoot":"","sources":["../src/usePickerWithSelectedValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAkC,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"usePickerWithSelectedValues.d.ts","sourceRoot":"","sources":["../src/usePickerWithSelectedValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAkC,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAGL,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EAEL,SAAS,EAET,UAAU,EAGX,MAAM,kBAAkB,CAAC;AAE1B,OAAwB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAK3E,MAAM,WAAW,iCAAiC,CAAC,KAAK,EAAE,MAAM;IAC9D,IAAI,EAAE,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC7C,4BAA4B,EAAE,OAAO,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,4BAA4B,EAAE,OAAO,CAAC;IACtC,WAAW,EAAE,GAAG,GAAG,IAAI,CAAC;IACxB,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,KAAK,IAAI,CAAC;IACvC,WAAW,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IACnD,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;CACtD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,EACzD,UAAU,EACV,UAAU,EACV,cAAc,EACd,wBAA6B,EAC7B,cAAsB,GACvB,EAAE;IACD,UAAU,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC;IACnD,wBAAwB,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACpD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,iCAAiC,CAAC,KAAK,EAAE,MAAM,CAAC,CAwNnD;AAED,eAAe,2BAA2B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePickerWithSelectedValues.js","names":["useCallback","useMemo","useState","createSearchTextFilter","createSelectedValuesFilter","useDebouncedCallback","useDebouncedValue","usePromiseFactory","COMBO_BOX_ITEM_HEIGHT","SEARCH_DEBOUNCE_MS","VIEWPORT_PADDING","VIEWPORT_SIZE","useFilterConditionFactories","useViewportData","useViewportFilter","useTableUtils","useTableClose","usePickerWithSelectedValues","_ref","maybeTable","columnName","mapItemToValue","filterConditionFactories","trimSearchText","tableUtils","searchText","setSearchText","appliedSearchText","setAppliedSearchText","applySearchText","text","trim","searchTextMaybeTrimmed","selectedKey","setSelectedKey","selectedValueMap","setSelectedValueMap","Map","data","valueExists","isLoading","valueExistsIsLoading","doesColumnValueExist","isDebouncing","isApplyingFilter","searchTextExists","searchTextFilter","excludeSelectedValuesFilter","Set","keys","listTable","createDistinctSortedColumnTable","list","table","itemHeight","viewportSize","viewportPadding","hasSearchTextWithZeroResults","length","size","searchTextIsInSelectedValues","has","onDebouncedSearchTextChange","onSearchTextChange","setSelectedKeyOnNextFrame","onSelectKey","key","item","viewportData","findItem","value","prev","next","set","onAddValues","values","onRemoveValues","delete","filter"],"sources":["../src/usePickerWithSelectedValues.ts"],"sourcesContent":["import { Key, useCallback, useMemo, useState } from 'react';\nimport type { Table } from '@deephaven/jsapi-types';\nimport {\n createSearchTextFilter,\n createSelectedValuesFilter,\n FilterConditionFactory,\n} from '@deephaven/jsapi-utils';\nimport {\n useDebouncedCallback,\n useDebouncedValue,\n usePromiseFactory,\n} from '@deephaven/react-hooks';\nimport {\n COMBO_BOX_ITEM_HEIGHT,\n KeyedItem,\n SEARCH_DEBOUNCE_MS,\n SelectionT,\n VIEWPORT_PADDING,\n VIEWPORT_SIZE,\n} from '@deephaven/utils';\nimport useFilterConditionFactories from './useFilterConditionFactories';\nimport useViewportData, { UseViewportDataResult } from './useViewportData';\nimport useViewportFilter from './useViewportFilter';\nimport useTableUtils from './useTableUtils';\nimport useTableClose from './useTableClose';\n\nexport interface UsePickerWithSelectedValuesResult<TItem, TValue> {\n list: UseViewportDataResult<TItem, Table>;\n hasSearchTextWithZeroResults: boolean;\n searchText: string;\n searchTextExists: boolean | null;\n searchTextIsInSelectedValues: boolean;\n selectedKey: Key | null;\n selectedValueMap: ReadonlyMap<TValue, { value: TValue }>;\n onSearchTextChange: (searchText: string) => void;\n onSelectKey: (key: Key | null) => void;\n onAddValues: (values: ReadonlySet<TValue>) => void;\n onRemoveValues: (values: SelectionT<TValue>) => void;\n}\n\n/**\n * Manages a list of available items that can be searched and selected. Selected\n * items are removed from the list and managed in a selectedValueMap data\n * structure. Useful for components that contain a picker but show selected\n * values in a separate component.\n * @param maybeTable The table to get the list of items from\n * @param columnName The column name to get the list of items from\n * @param mapItemToValue A function to map an item to a value\n * @param filterConditionFactories Optional filter condition factories to apply to the list\n * @param trimSearchText Whether to trim the search text before filtering. Defaults to false\n */\nexport function usePickerWithSelectedValues<TItem, TValue>({\n maybeTable,\n columnName,\n mapItemToValue,\n filterConditionFactories = [],\n trimSearchText = false,\n}: {\n maybeTable: Table | null;\n columnName: string;\n mapItemToValue: (item: KeyedItem<TItem>) => TValue;\n filterConditionFactories?: FilterConditionFactory[];\n trimSearchText?: boolean;\n}): UsePickerWithSelectedValuesResult<TItem, TValue> {\n const tableUtils = useTableUtils();\n\n // `searchText` should always be up to date for controlled search input.\n // `appliedSearchText` will get updated after a delay to avoid updating\n // filters on every key stroke. It will also be trimmed of leading / trailing\n // spaces if `trimSearchText` is true.\n const [searchText, setSearchText] = useState('');\n const [appliedSearchText, setAppliedSearchText] = useState('');\n\n const applySearchText = useCallback(\n (text: string) => {\n setAppliedSearchText(trimSearchText ? text.trim() : text);\n },\n [trimSearchText]\n );\n\n const searchTextMaybeTrimmed = useMemo(\n () => (trimSearchText ? searchText.trim() : searchText),\n [searchText, trimSearchText]\n );\n\n const [selectedKey, setSelectedKey] = useState<Key | null>(null);\n const [selectedValueMap, setSelectedValueMap] = useState<\n Map<TValue, { value: TValue }>\n >(() => new Map());\n\n const { data: valueExists, isLoading: valueExistsIsLoading } =\n usePromiseFactory(tableUtils.doesColumnValueExist, [\n maybeTable,\n columnName,\n appliedSearchText,\n false /* isCaseSensitive */,\n ]);\n\n // The `searchTextFilter` starts getting applied to the list whenever\n // `appliedSearchText` changes, after which there is a small delay before the\n // items are in sync. Use a debounce timer to allow a little extra time\n // before calculating `searchTextExists` below. Note that there are 2 debounce\n // timers at play here:\n // 1. `onDebouncedSearchTextChange` applies the search text after user stops typing\n // 2. `useDebouncedValue` debounces whenever the result of the first debounce\n // changes, and `isApplyingFilter` will be true while this 2nd timer is active.\n const { isDebouncing: isApplyingFilter } = useDebouncedValue(\n appliedSearchText,\n SEARCH_DEBOUNCE_MS\n );\n\n // If value exists check is still loading or if debounce hasn't completed, set\n // `searchTextExists` to null since it is indeterminate.\n const searchTextExists =\n isApplyingFilter || valueExistsIsLoading ? null : valueExists;\n\n const searchTextFilter = useMemo(\n () => createSearchTextFilter(tableUtils, columnName, appliedSearchText),\n [appliedSearchText, columnName, tableUtils]\n );\n\n // Filter out selected values from the picker\n const excludeSelectedValuesFilter = useMemo(\n () =>\n createSelectedValuesFilter(\n tableUtils,\n columnName,\n new Set(selectedValueMap.keys()),\n false,\n true\n ),\n [columnName, selectedValueMap, tableUtils]\n );\n\n const { data: listTable } = usePromiseFactory(\n tableUtils.createDistinctSortedColumnTable,\n [maybeTable, columnName, 'asc', ...filterConditionFactories]\n );\n\n useTableClose(listTable);\n\n const list = useViewportData<TItem, Table>({\n table: listTable,\n itemHeight: COMBO_BOX_ITEM_HEIGHT,\n viewportSize: VIEWPORT_SIZE,\n viewportPadding: VIEWPORT_PADDING,\n });\n\n const hasSearchTextWithZeroResults =\n searchTextMaybeTrimmed.length > 0 && list.size === 0;\n const searchTextIsInSelectedValues = selectedValueMap.has(\n searchTextMaybeTrimmed as TValue\n );\n\n const onDebouncedSearchTextChange = useDebouncedCallback(\n applySearchText,\n SEARCH_DEBOUNCE_MS\n );\n\n const onSearchTextChange = useCallback(\n (text: string) => {\n setSearchText(text);\n onDebouncedSearchTextChange(text);\n },\n [onDebouncedSearchTextChange]\n );\n\n const setSelectedKeyOnNextFrame = useDebouncedCallback(setSelectedKey, 0);\n\n const onSelectKey = useCallback(\n (key: Key | null) => {\n setSearchText('');\n applySearchText('');\n\n // Set the selection temporarily to avoid the picker staying open\n setSelectedKey(key);\n\n // Clear the selection on next frame since selected items get removed from\n // the list and added to `selectedValues` Map\n setSelectedKeyOnNextFrame(null);\n\n // key will be null in scenarios where search text doesn't match an item\n // and user clicks outside of picker\n if (key == null) {\n return;\n }\n\n const item = list.viewportData.findItem(key);\n\n if (item == null) {\n return;\n }\n\n const value = mapItemToValue(item);\n\n setSelectedValueMap(prev => {\n const next = new Map(prev);\n next.set(value, { value });\n return next;\n });\n },\n [\n applySearchText,\n setSelectedKeyOnNextFrame,\n list.viewportData,\n mapItemToValue,\n ]\n );\n\n const onAddValues = useCallback((values: ReadonlySet<TValue>) => {\n setSelectedValueMap(prev => {\n if (values.size === 0) {\n return prev;\n }\n\n const next = new Map(prev);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const value of values) {\n next.set(value, { value });\n }\n\n return next;\n });\n }, []);\n\n const onRemoveValues = useCallback((values: SelectionT<TValue>) => {\n setSelectedValueMap(prev => {\n if (values === 'all') {\n return new Map();\n }\n\n const next = new Map(prev);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const value of values) {\n next.delete(value);\n }\n\n return next;\n });\n }, []);\n\n const filter = useFilterConditionFactories(\n list.table,\n searchTextFilter,\n excludeSelectedValuesFilter\n );\n\n useViewportFilter(list, filter);\n\n return useMemo(\n () => ({\n list,\n hasSearchTextWithZeroResults,\n searchText,\n searchTextExists,\n searchTextIsInSelectedValues,\n selectedKey,\n selectedValueMap,\n onSearchTextChange,\n onSelectKey,\n onAddValues,\n onRemoveValues,\n }),\n [\n hasSearchTextWithZeroResults,\n list,\n onAddValues,\n onRemoveValues,\n onSearchTextChange,\n onSelectKey,\n searchText,\n searchTextExists,\n searchTextIsInSelectedValues,\n selectedKey,\n selectedValueMap,\n ]\n );\n}\n\nexport default usePickerWithSelectedValues;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"usePickerWithSelectedValues.js","names":["useCallback","useMemo","useState","createSearchTextFilter","createSelectedValuesFilter","useDebouncedCallback","useDebouncedValue","usePromiseFactory","COMBO_BOX_ITEM_HEIGHT","SEARCH_DEBOUNCE_MS","VIEWPORT_PADDING","VIEWPORT_SIZE","useFilterConditionFactories","useViewportData","useViewportFilter","useTableUtils","useTableClose","usePickerWithSelectedValues","_ref","maybeTable","columnName","mapItemToValue","filterConditionFactories","trimSearchText","tableUtils","searchText","setSearchText","appliedSearchText","setAppliedSearchText","applySearchText","text","trim","searchTextMaybeTrimmed","selectedKey","setSelectedKey","selectedValueMap","setSelectedValueMap","Map","data","valueExists","isLoading","valueExistsIsLoading","doesColumnValueExist","isDebouncing","isApplyingFilter","searchTextExists","searchTextFilter","excludeSelectedValuesFilter","Set","keys","listTable","createDistinctSortedColumnTable","list","table","itemHeight","viewportSize","viewportPadding","hasSearchTextWithZeroResults","length","size","searchTextIsInSelectedValues","has","onDebouncedSearchTextChange","onSearchTextChange","setSelectedKeyOnNextFrame","onSelectKey","key","item","viewportData","findItem","value","prev","next","set","onAddValues","values","onRemoveValues","delete","filter"],"sources":["../src/usePickerWithSelectedValues.ts"],"sourcesContent":["import { Key, useCallback, useMemo, useState } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport {\n createSearchTextFilter,\n createSelectedValuesFilter,\n FilterConditionFactory,\n} from '@deephaven/jsapi-utils';\nimport {\n useDebouncedCallback,\n useDebouncedValue,\n usePromiseFactory,\n} from '@deephaven/react-hooks';\nimport {\n COMBO_BOX_ITEM_HEIGHT,\n KeyedItem,\n SEARCH_DEBOUNCE_MS,\n SelectionT,\n VIEWPORT_PADDING,\n VIEWPORT_SIZE,\n} from '@deephaven/utils';\nimport useFilterConditionFactories from './useFilterConditionFactories';\nimport useViewportData, { UseViewportDataResult } from './useViewportData';\nimport useViewportFilter from './useViewportFilter';\nimport useTableUtils from './useTableUtils';\nimport useTableClose from './useTableClose';\n\nexport interface UsePickerWithSelectedValuesResult<TItem, TValue> {\n list: UseViewportDataResult<TItem, dh.Table>;\n hasSearchTextWithZeroResults: boolean;\n searchText: string;\n searchTextExists: boolean | null;\n searchTextIsInSelectedValues: boolean;\n selectedKey: Key | null;\n selectedValueMap: ReadonlyMap<TValue, { value: TValue }>;\n onSearchTextChange: (searchText: string) => void;\n onSelectKey: (key: Key | null) => void;\n onAddValues: (values: ReadonlySet<TValue>) => void;\n onRemoveValues: (values: SelectionT<TValue>) => void;\n}\n\n/**\n * Manages a list of available items that can be searched and selected. Selected\n * items are removed from the list and managed in a selectedValueMap data\n * structure. Useful for components that contain a picker but show selected\n * values in a separate component.\n * @param maybeTable The table to get the list of items from\n * @param columnName The column name to get the list of items from\n * @param mapItemToValue A function to map an item to a value\n * @param filterConditionFactories Optional filter condition factories to apply to the list\n * @param trimSearchText Whether to trim the search text before filtering. Defaults to false\n */\nexport function usePickerWithSelectedValues<TItem, TValue>({\n maybeTable,\n columnName,\n mapItemToValue,\n filterConditionFactories = [],\n trimSearchText = false,\n}: {\n maybeTable: dh.Table | null;\n columnName: string;\n mapItemToValue: (item: KeyedItem<TItem>) => TValue;\n filterConditionFactories?: FilterConditionFactory[];\n trimSearchText?: boolean;\n}): UsePickerWithSelectedValuesResult<TItem, TValue> {\n const tableUtils = useTableUtils();\n\n // `searchText` should always be up to date for controlled search input.\n // `appliedSearchText` will get updated after a delay to avoid updating\n // filters on every key stroke. It will also be trimmed of leading / trailing\n // spaces if `trimSearchText` is true.\n const [searchText, setSearchText] = useState('');\n const [appliedSearchText, setAppliedSearchText] = useState('');\n\n const applySearchText = useCallback(\n (text: string) => {\n setAppliedSearchText(trimSearchText ? text.trim() : text);\n },\n [trimSearchText]\n );\n\n const searchTextMaybeTrimmed = useMemo(\n () => (trimSearchText ? searchText.trim() : searchText),\n [searchText, trimSearchText]\n );\n\n const [selectedKey, setSelectedKey] = useState<Key | null>(null);\n const [selectedValueMap, setSelectedValueMap] = useState<\n Map<TValue, { value: TValue }>\n >(() => new Map());\n\n const { data: valueExists, isLoading: valueExistsIsLoading } =\n usePromiseFactory(tableUtils.doesColumnValueExist, [\n maybeTable,\n columnName,\n appliedSearchText,\n false /* isCaseSensitive */,\n ]);\n\n // The `searchTextFilter` starts getting applied to the list whenever\n // `appliedSearchText` changes, after which there is a small delay before the\n // items are in sync. Use a debounce timer to allow a little extra time\n // before calculating `searchTextExists` below. Note that there are 2 debounce\n // timers at play here:\n // 1. `onDebouncedSearchTextChange` applies the search text after user stops typing\n // 2. `useDebouncedValue` debounces whenever the result of the first debounce\n // changes, and `isApplyingFilter` will be true while this 2nd timer is active.\n const { isDebouncing: isApplyingFilter } = useDebouncedValue(\n appliedSearchText,\n SEARCH_DEBOUNCE_MS\n );\n\n // If value exists check is still loading or if debounce hasn't completed, set\n // `searchTextExists` to null since it is indeterminate.\n const searchTextExists =\n isApplyingFilter || valueExistsIsLoading ? null : valueExists;\n\n const searchTextFilter = useMemo(\n () => createSearchTextFilter(tableUtils, columnName, appliedSearchText),\n [appliedSearchText, columnName, tableUtils]\n );\n\n // Filter out selected values from the picker\n const excludeSelectedValuesFilter = useMemo(\n () =>\n createSelectedValuesFilter(\n tableUtils,\n columnName,\n new Set(selectedValueMap.keys()),\n false,\n true\n ),\n [columnName, selectedValueMap, tableUtils]\n );\n\n const { data: listTable } = usePromiseFactory(\n tableUtils.createDistinctSortedColumnTable,\n [maybeTable, columnName, 'asc', ...filterConditionFactories]\n );\n\n useTableClose(listTable);\n\n const list = useViewportData<TItem, dh.Table>({\n table: listTable,\n itemHeight: COMBO_BOX_ITEM_HEIGHT,\n viewportSize: VIEWPORT_SIZE,\n viewportPadding: VIEWPORT_PADDING,\n });\n\n const hasSearchTextWithZeroResults =\n searchTextMaybeTrimmed.length > 0 && list.size === 0;\n const searchTextIsInSelectedValues = selectedValueMap.has(\n searchTextMaybeTrimmed as TValue\n );\n\n const onDebouncedSearchTextChange = useDebouncedCallback(\n applySearchText,\n SEARCH_DEBOUNCE_MS\n );\n\n const onSearchTextChange = useCallback(\n (text: string) => {\n setSearchText(text);\n onDebouncedSearchTextChange(text);\n },\n [onDebouncedSearchTextChange]\n );\n\n const setSelectedKeyOnNextFrame = useDebouncedCallback(setSelectedKey, 0);\n\n const onSelectKey = useCallback(\n (key: Key | null) => {\n setSearchText('');\n applySearchText('');\n\n // Set the selection temporarily to avoid the picker staying open\n setSelectedKey(key);\n\n // Clear the selection on next frame since selected items get removed from\n // the list and added to `selectedValues` Map\n setSelectedKeyOnNextFrame(null);\n\n // key will be null in scenarios where search text doesn't match an item\n // and user clicks outside of picker\n if (key == null) {\n return;\n }\n\n const item = list.viewportData.findItem(key);\n\n if (item == null) {\n return;\n }\n\n const value = mapItemToValue(item);\n\n setSelectedValueMap(prev => {\n const next = new Map(prev);\n next.set(value, { value });\n return next;\n });\n },\n [\n applySearchText,\n setSelectedKeyOnNextFrame,\n list.viewportData,\n mapItemToValue,\n ]\n );\n\n const onAddValues = useCallback((values: ReadonlySet<TValue>) => {\n setSelectedValueMap(prev => {\n if (values.size === 0) {\n return prev;\n }\n\n const next = new Map(prev);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const value of values) {\n next.set(value, { value });\n }\n\n return next;\n });\n }, []);\n\n const onRemoveValues = useCallback((values: SelectionT<TValue>) => {\n setSelectedValueMap(prev => {\n if (values === 'all') {\n return new Map();\n }\n\n const next = new Map(prev);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const value of values) {\n next.delete(value);\n }\n\n return next;\n });\n }, []);\n\n const filter = useFilterConditionFactories(\n list.table,\n searchTextFilter,\n excludeSelectedValuesFilter\n );\n\n useViewportFilter(list, filter);\n\n return useMemo(\n () => ({\n list,\n hasSearchTextWithZeroResults,\n searchText,\n searchTextExists,\n searchTextIsInSelectedValues,\n selectedKey,\n selectedValueMap,\n onSearchTextChange,\n onSelectKey,\n onAddValues,\n onRemoveValues,\n }),\n [\n hasSearchTextWithZeroResults,\n list,\n onAddValues,\n onRemoveValues,\n onSearchTextChange,\n onSelectKey,\n searchText,\n searchTextExists,\n searchTextIsInSelectedValues,\n selectedKey,\n selectedValueMap,\n ]\n );\n}\n\nexport default usePickerWithSelectedValues;\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
import { FilterConditionFactory } from '@deephaven/jsapi-utils';
|
|
3
3
|
import { UseViewportDataResult } from './useViewportData';
|
|
4
4
|
export interface SearchableViewportData<TData> {
|
|
5
|
-
list: UseViewportDataResult<TData, Table>;
|
|
5
|
+
list: UseViewportDataResult<TData, dh.Table>;
|
|
6
6
|
onSearchTextChange: (searchText: string) => void;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
@@ -11,6 +11,6 @@ export interface SearchableViewportData<TData> {
|
|
|
11
11
|
* @param searchColumnNames The column names to search
|
|
12
12
|
* @param additionalFilterConditionFactories Additional filter condition factories
|
|
13
13
|
*/
|
|
14
|
-
export declare function useSearchableViewportData<TData>(maybeTable: Table | null, searchColumnNames: string | string[], ...additionalFilterConditionFactories: FilterConditionFactory[]): SearchableViewportData<TData>;
|
|
14
|
+
export declare function useSearchableViewportData<TData>(maybeTable: dh.Table | null, searchColumnNames: string | string[], ...additionalFilterConditionFactories: FilterConditionFactory[]): SearchableViewportData<TData>;
|
|
15
15
|
export default useSearchableViewportData;
|
|
16
16
|
//# sourceMappingURL=useSearchableViewportData.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSearchableViewportData.d.ts","sourceRoot":"","sources":["../src/useSearchableViewportData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useSearchableViewportData.d.ts","sourceRoot":"","sources":["../src/useSearchableViewportData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAEL,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAShC,OAAwB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAI3E,MAAM,WAAW,sBAAsB,CAAC,KAAK;IAC3C,IAAI,EAAE,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC7C,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAC7C,UAAU,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,EAC3B,iBAAiB,EAAE,MAAM,GAAG,MAAM,EAAE,EACpC,GAAG,kCAAkC,EAAE,sBAAsB,EAAE,GAC9D,sBAAsB,CAAC,KAAK,CAAC,CAkC/B;AAED,eAAe,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSearchableViewportData.js","names":["useMemo","useState","createSearchTextFilter","SEARCH_DEBOUNCE_MS","TABLE_ROW_HEIGHT","VIEWPORT_PADDING","VIEWPORT_SIZE","useDebouncedCallback","useTableUtils","useViewportData","useFilterConditionFactories","useViewportFilter","useSearchableViewportData","maybeTable","searchColumnNames","tableUtils","searchText","setSearchText","searchTextFilter","onSearchTextChange","list","table","itemHeight","viewportSize","viewportPadding","_len","arguments","length","additionalFilterConditionFactories","Array","_key","filter"],"sources":["../src/useSearchableViewportData.ts"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport type {
|
|
1
|
+
{"version":3,"file":"useSearchableViewportData.js","names":["useMemo","useState","createSearchTextFilter","SEARCH_DEBOUNCE_MS","TABLE_ROW_HEIGHT","VIEWPORT_PADDING","VIEWPORT_SIZE","useDebouncedCallback","useTableUtils","useViewportData","useFilterConditionFactories","useViewportFilter","useSearchableViewportData","maybeTable","searchColumnNames","tableUtils","searchText","setSearchText","searchTextFilter","onSearchTextChange","list","table","itemHeight","viewportSize","viewportPadding","_len","arguments","length","additionalFilterConditionFactories","Array","_key","filter"],"sources":["../src/useSearchableViewportData.ts"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport {\n createSearchTextFilter,\n FilterConditionFactory,\n} from '@deephaven/jsapi-utils';\nimport {\n SEARCH_DEBOUNCE_MS,\n TABLE_ROW_HEIGHT,\n VIEWPORT_PADDING,\n VIEWPORT_SIZE,\n} from '@deephaven/utils';\nimport { useDebouncedCallback } from '@deephaven/react-hooks';\nimport { useTableUtils } from './useTableUtils';\nimport useViewportData, { UseViewportDataResult } from './useViewportData';\nimport useFilterConditionFactories from './useFilterConditionFactories';\nimport useViewportFilter from './useViewportFilter';\n\nexport interface SearchableViewportData<TData> {\n list: UseViewportDataResult<TData, dh.Table>;\n onSearchTextChange: (searchText: string) => void;\n}\n\n/**\n * Use a viewport data list with a search text filter. Supports additional filters.\n * @param maybeTable The table to use\n * @param searchColumnNames The column names to search\n * @param additionalFilterConditionFactories Additional filter condition factories\n */\nexport function useSearchableViewportData<TData>(\n maybeTable: dh.Table | null,\n searchColumnNames: string | string[],\n ...additionalFilterConditionFactories: FilterConditionFactory[]\n): SearchableViewportData<TData> {\n const tableUtils = useTableUtils();\n\n const [searchText, setSearchText] = useState<string>('');\n\n const searchTextFilter = useMemo(\n () => createSearchTextFilter(tableUtils, searchColumnNames, searchText),\n [searchColumnNames, searchText, tableUtils]\n );\n\n const onSearchTextChange = useDebouncedCallback(\n setSearchText,\n SEARCH_DEBOUNCE_MS\n );\n\n const list = useViewportData<TData, dh.Table>({\n table: maybeTable,\n itemHeight: TABLE_ROW_HEIGHT,\n viewportSize: VIEWPORT_SIZE,\n viewportPadding: VIEWPORT_PADDING,\n });\n\n const filter = useFilterConditionFactories(\n list.table,\n searchTextFilter,\n ...additionalFilterConditionFactories\n );\n\n useViewportFilter(list, filter);\n\n return {\n list,\n onSearchTextChange,\n };\n}\n\nexport default useSearchableViewportData;\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAEzC,SACEC,sBAAsB,QAEjB,wBAAwB;AAC/B,SACEC,kBAAkB,EAClBC,gBAAgB,EAChBC,gBAAgB,EAChBC,aAAa,QACR,kBAAkB;AACzB,SAASC,oBAAoB,QAAQ,wBAAwB;AAAC,SACrDC,aAAa;AAAA,OACfC,eAAe;AAAA,OACfC,2BAA2B;AAAA,OAC3BC,iBAAiB;AAOxB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,yBAAyBA,CACvCC,UAA2B,EAC3BC,iBAAoC,EAEL;EAC/B,IAAMC,UAAU,GAAGP,aAAa,CAAC,CAAC;EAElC,IAAM,CAACQ,UAAU,EAAEC,aAAa,CAAC,GAAGhB,QAAQ,CAAS,EAAE,CAAC;EAExD,IAAMiB,gBAAgB,GAAGlB,OAAO,CAC9B,MAAME,sBAAsB,CAACa,UAAU,EAAED,iBAAiB,EAAEE,UAAU,CAAC,EACvE,CAACF,iBAAiB,EAAEE,UAAU,EAAED,UAAU,CAC5C,CAAC;EAED,IAAMI,kBAAkB,GAAGZ,oBAAoB,CAC7CU,aAAa,EACbd,kBACF,CAAC;EAED,IAAMiB,IAAI,GAAGX,eAAe,CAAkB;IAC5CY,KAAK,EAAER,UAAU;IACjBS,UAAU,EAAElB,gBAAgB;IAC5BmB,YAAY,EAAEjB,aAAa;IAC3BkB,eAAe,EAAEnB;EACnB,CAAC,CAAC;EAAC,SAAAoB,IAAA,GAAAC,SAAA,CAAAC,MAAA,EArBAC,kCAAkC,OAAAC,KAAA,CAAAJ,IAAA,OAAAA,IAAA,WAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;IAAlCF,kCAAkC,CAAAE,IAAA,QAAAJ,SAAA,CAAAI,IAAA;EAAA;EAuBrC,IAAMC,MAAM,GAAGrB,2BAA2B,CACxCU,IAAI,CAACC,KAAK,EACVH,gBAAgB,EAChB,GAAGU,kCACL,CAAC;EAEDjB,iBAAiB,CAACS,IAAI,EAAEW,MAAM,CAAC;EAE/B,OAAO;IACLX,IAAI;IACJD;EACF,CAAC;AACH;AAEA,eAAeP,yBAAyB"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
/**
|
|
3
3
|
* Return type of `useSelectDistinctTable` hook.
|
|
4
4
|
*/
|
|
5
5
|
export interface UseSelectDistinctTableResult {
|
|
6
|
-
distinctTable: Table | null;
|
|
6
|
+
distinctTable: dh.Table | null;
|
|
7
7
|
error: string | Error | null;
|
|
8
8
|
isError: boolean;
|
|
9
9
|
isLoading: boolean;
|
|
@@ -14,5 +14,5 @@ export interface UseSelectDistinctTableResult {
|
|
|
14
14
|
* @param table The table to call `selectDistinct` on.
|
|
15
15
|
* @param columnNames The list of column names to pass to `selectDistinct`.
|
|
16
16
|
*/
|
|
17
|
-
export default function useSelectDistinctTable(table: Table | TreeTable | null, ...columnNames: string[]): UseSelectDistinctTableResult;
|
|
17
|
+
export default function useSelectDistinctTable(table: dh.Table | dh.TreeTable | null, ...columnNames: string[]): UseSelectDistinctTableResult;
|
|
18
18
|
//# sourceMappingURL=useSelectDistinctTable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSelectDistinctTable.d.ts","sourceRoot":"","sources":["../src/useSelectDistinctTable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useSelectDistinctTable.d.ts","sourceRoot":"","sources":["../src/useSelectDistinctTable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAGjD;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,aAAa,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,EACrC,GAAG,WAAW,EAAE,MAAM,EAAE,GACvB,4BAA4B,CAuB9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSelectDistinctTable.js","names":["useCallback","useEffect","usePromiseFactory","useSelectDistinctTable","table","_len","arguments","length","columnNames","Array","_key","selectDistinct","_asyncToGenerator","_table$selectDistinct","findColumns","data","distinctTable","error","isError","isLoading","close"],"sources":["../src/useSelectDistinctTable.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport type {
|
|
1
|
+
{"version":3,"file":"useSelectDistinctTable.js","names":["useCallback","useEffect","usePromiseFactory","useSelectDistinctTable","table","_len","arguments","length","columnNames","Array","_key","selectDistinct","_asyncToGenerator","_table$selectDistinct","findColumns","data","distinctTable","error","isError","isLoading","close"],"sources":["../src/useSelectDistinctTable.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { usePromiseFactory } from '@deephaven/react-hooks';\n\n/**\n * Return type of `useSelectDistinctTable` hook.\n */\nexport interface UseSelectDistinctTableResult {\n distinctTable: dh.Table | null;\n error: string | Error | null;\n isError: boolean;\n isLoading: boolean;\n}\n\n/**\n * Creates and subscribes to a `selectDistinct` derived table and unsubscribes\n * on unmount.\n * @param table The table to call `selectDistinct` on.\n * @param columnNames The list of column names to pass to `selectDistinct`.\n */\nexport default function useSelectDistinctTable(\n table: dh.Table | dh.TreeTable | null,\n ...columnNames: string[]\n): UseSelectDistinctTableResult {\n const selectDistinct = useCallback(\n async () => table?.selectDistinct(table.findColumns(columnNames)) ?? null,\n // Disabling the exhaustive checks due to the spreading of `columnNames`\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [table, ...columnNames]\n );\n\n const {\n data: distinctTable,\n error,\n isError,\n isLoading,\n } = usePromiseFactory(selectDistinct, []);\n\n useEffect(\n () => () => {\n distinctTable?.close();\n },\n [distinctTable]\n );\n\n return { distinctTable, error, isError, isLoading };\n}\n"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,QAAQ,OAAO;AAE9C,SAASC,iBAAiB,QAAQ,wBAAwB;;AAE1D;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,sBAAsBA,CAC5CC,KAAqC,EAEP;EAAA,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAD3BC,WAAW,OAAAC,KAAA,CAAAJ,IAAA,OAAAA,IAAA,WAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;IAAXF,WAAW,CAAAE,IAAA,QAAAJ,SAAA,CAAAI,IAAA;EAAA;EAEd,IAAMC,cAAc,GAAGX,WAAW,eAAAY,iBAAA,CAChC;IAAA,IAAAC,qBAAA;IAAA,QAAAA,qBAAA,GAAYT,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEO,cAAc,CAACP,KAAK,CAACU,WAAW,CAACN,WAAW,CAAC,CAAC,cAAAK,qBAAA,cAAAA,qBAAA,GAAI,IAAI;EAAA;EACzE;EACA;EACA,CAACT,KAAK,EAAE,GAAGI,WAAW,CACxB,CAAC;EAED,IAAM;IACJO,IAAI,EAAEC,aAAa;IACnBC,KAAK;IACLC,OAAO;IACPC;EACF,CAAC,GAAGjB,iBAAiB,CAACS,cAAc,EAAE,EAAE,CAAC;EAEzCV,SAAS,CACP,MAAM,MAAM;IACVe,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEI,KAAK,CAAC,CAAC;EACxB,CAAC,EACD,CAACJ,aAAa,CAChB,CAAC;EAED,OAAO;IAAEA,aAAa;IAAEC,KAAK;IAAEC,OAAO;IAAEC;EAAU,CAAC;AACrD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
/**
|
|
3
3
|
* Creates a callback function that will set a Table viewport. The callback has
|
|
4
4
|
* a closure over the Table, a desired viewport size, and additional padding.
|
|
@@ -9,6 +9,6 @@ import type { Table, TreeTable } from '@deephaven/jsapi-types';
|
|
|
9
9
|
* @param viewportPadding Padding to add before and after the viewport.
|
|
10
10
|
* @returns A callback function for setting the viewport.
|
|
11
11
|
*/
|
|
12
|
-
export declare function useSetPaddedViewportCallback(table: Table | TreeTable | null, viewportSize: number, viewportPadding: number): (firstRow: number) => void;
|
|
12
|
+
export declare function useSetPaddedViewportCallback(table: dh.Table | dh.TreeTable | null, viewportSize: number, viewportPadding: number): (firstRow: number) => void;
|
|
13
13
|
export default useSetPaddedViewportCallback;
|
|
14
14
|
//# sourceMappingURL=useSetPaddedViewportCallback.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSetPaddedViewportCallback.d.ts","sourceRoot":"","sources":["../src/useSetPaddedViewportCallback.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useSetPaddedViewportCallback.d.ts","sourceRoot":"","sources":["../src/useSetPaddedViewportCallback.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAGjD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,EACrC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAc5B;AAED,eAAe,4BAA4B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSetPaddedViewportCallback.js","names":["useCallback","getSize","padFirstAndLastRow","useSetPaddedViewportCallback","table","viewportSize","viewportPadding","setPaddedViewport","firstRow","first","last","setViewport"],"sources":["../src/useSetPaddedViewportCallback.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport type {
|
|
1
|
+
{"version":3,"file":"useSetPaddedViewportCallback.js","names":["useCallback","getSize","padFirstAndLastRow","useSetPaddedViewportCallback","table","viewportSize","viewportPadding","setPaddedViewport","firstRow","first","last","setViewport"],"sources":["../src/useSetPaddedViewportCallback.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { getSize, padFirstAndLastRow } from '@deephaven/jsapi-utils';\n\n/**\n * Creates a callback function that will set a Table viewport. The callback has\n * a closure over the Table, a desired viewport size, and additional padding.\n * These will be combined with a first row index passed to the callback to\n * calculate the final viewport.\n * @param table Table to call `setViewport` on.\n * @param viewportSize The desired viewport size.\n * @param viewportPadding Padding to add before and after the viewport.\n * @returns A callback function for setting the viewport.\n */\nexport function useSetPaddedViewportCallback(\n table: dh.Table | dh.TreeTable | null,\n viewportSize: number,\n viewportPadding: number\n): (firstRow: number) => void {\n return useCallback(\n function setPaddedViewport(firstRow: number) {\n const [first, last] = padFirstAndLastRow(\n firstRow,\n viewportSize,\n viewportPadding,\n getSize(table)\n );\n\n table?.setViewport(first, last);\n },\n [table, viewportPadding, viewportSize]\n );\n}\n\nexport default useSetPaddedViewportCallback;\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AAEnC,SAASC,OAAO,EAAEC,kBAAkB,QAAQ,wBAAwB;;AAEpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,4BAA4BA,CAC1CC,KAAqC,EACrCC,YAAoB,EACpBC,eAAuB,EACK;EAC5B,OAAON,WAAW,CAChB,SAASO,iBAAiBA,CAACC,QAAgB,EAAE;IAC3C,IAAM,CAACC,KAAK,EAAEC,IAAI,CAAC,GAAGR,kBAAkB,CACtCM,QAAQ,EACRH,YAAY,EACZC,eAAe,EACfL,OAAO,CAACG,KAAK,CACf,CAAC;IAEDA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEO,WAAW,CAACF,KAAK,EAAEC,IAAI,CAAC;EACjC,CAAC,EACD,CAACN,KAAK,EAAEE,eAAe,EAAED,YAAY,CACvC,CAAC;AACH;AAEA,eAAeF,4BAA4B"}
|
package/dist/useTable.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
declare const useTable: (table: Table | undefined, firstRow: number, lastRow: number, columnNames?: string[]) => {
|
|
3
|
-
columns: Column[] | undefined;
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
|
+
declare const useTable: (table: dh.Table | undefined, firstRow: number, lastRow: number, columnNames?: string[]) => {
|
|
3
|
+
columns: dh.Column[] | undefined;
|
|
4
4
|
data: unknown[][];
|
|
5
5
|
error: Error | null;
|
|
6
6
|
};
|
package/dist/useTable.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTable.d.ts","sourceRoot":"","sources":["../src/useTable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useTable.d.ts","sourceRoot":"","sources":["../src/useTable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAQjD,QAAA,MAAM,QAAQ,UACL,GAAG,KAAK,GAAG,SAAS,YACjB,MAAM,WACP,MAAM,gBACD,MAAM,EAAE;;UAGhB,OAAO,EAAE,EAAE;WACV,KAAK,GAAG,IAAI;CA2DpB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
package/dist/useTable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTable.js","names":["useCallback","useEffect","useState","useApi","Log","useTableListener","ColumnNameError","TableDisconnectError","log","module","useTable","table","firstRow","lastRow","columnNames","dh","columns","setColumns","undefined","data","setData","columnError","setColumnError","tableError","setTableError","findColumns","e","error","debug2","setViewport","handleUpdate","_ref","detail","viewportData","map","column","rows","r","get","handleDisconnect","handleReconnect","Table","EVENT_UPDATED","EVENT_DISCONNECT","EVENT_RECONNECT"],"sources":["../src/useTable.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport type {
|
|
1
|
+
{"version":3,"file":"useTable.js","names":["useCallback","useEffect","useState","useApi","Log","useTableListener","ColumnNameError","TableDisconnectError","log","module","useTable","table","firstRow","lastRow","columnNames","dh","columns","setColumns","undefined","data","setData","columnError","setColumnError","tableError","setTableError","findColumns","e","error","debug2","setViewport","handleUpdate","_ref","detail","viewportData","map","column","rows","r","get","handleDisconnect","handleReconnect","Table","EVENT_UPDATED","EVENT_DISCONNECT","EVENT_RECONNECT"],"sources":["../src/useTable.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport type { dh } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport useTableListener from './useTableListener';\nimport ColumnNameError from './ColumnNameError';\nimport TableDisconnectError from './TableDisconnectError';\n\nconst log = Log.module('useTable');\n\nconst useTable = (\n table: dh.Table | undefined,\n firstRow: number,\n lastRow: number,\n columnNames?: string[]\n): {\n columns: dh.Column[] | undefined;\n data: unknown[][];\n error: Error | null;\n} => {\n const dh = useApi();\n const [columns, setColumns] = useState<dh.Column[] | undefined>(undefined);\n const [data, setData] = useState<unknown[][]>([]);\n const [columnError, setColumnError] = useState<Error | null>(null);\n const [tableError, setTableError] = useState<Error | null>(null);\n\n useEffect(() => {\n if (columnNames === undefined) {\n setColumns(table?.columns);\n setColumnError(null);\n return;\n }\n try {\n setColumns(table?.findColumns(columnNames));\n setColumnError(null);\n } catch (e) {\n log.error(`Column not found`, e, columnNames);\n setColumnError(new ColumnNameError('Invalid columnNames argument'));\n }\n }, [table, columnNames]);\n\n useEffect(() => {\n if (!columns || !table) {\n log.debug2('Table or column not initialized, skip viewport update.');\n return;\n }\n log.debug2('Setting viewport', firstRow, lastRow);\n table.setViewport(firstRow, lastRow, columns);\n }, [columns, table, firstRow, lastRow]);\n\n const handleUpdate = useCallback(\n ({ detail }) => {\n if (!columns) {\n log.error('Columns not initialized.');\n return;\n }\n const viewportData = columns.map(column =>\n (detail.rows as dh.Row[]).map(r => r.get(column))\n );\n setData(viewportData);\n },\n [columns]\n );\n\n const handleDisconnect = useCallback(() => {\n setTableError(new TableDisconnectError('Table disconnected'));\n }, []);\n\n const handleReconnect = useCallback(() => {\n setTableError(null);\n }, []);\n\n useTableListener(table, dh.Table.EVENT_UPDATED, handleUpdate);\n useTableListener(table, dh.Table.EVENT_DISCONNECT, handleDisconnect);\n useTableListener(table, dh.Table.EVENT_RECONNECT, handleReconnect);\n\n return { columns, data, error: tableError ?? columnError };\n};\n\nexport default useTable;\n"],"mappings":"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"}
|
package/dist/useTableClose.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
/**
|
|
3
3
|
* React hook that closes a given table when the reference changes or when the
|
|
4
4
|
* component unmounts.
|
|
5
5
|
* @param table
|
|
6
6
|
*/
|
|
7
|
-
export default function useTableClose(table: Table | TreeTable | null | undefined): void;
|
|
7
|
+
export default function useTableClose(table: dh.Table | dh.TreeTable | null | undefined): void;
|
|
8
8
|
//# sourceMappingURL=useTableClose.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableClose.d.ts","sourceRoot":"","sources":["../src/useTableClose.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useTableClose.d.ts","sourceRoot":"","sources":["../src/useTableClose.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAGjD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,GAAG,SAAS,GAChD,IAAI,CAaN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableClose.js","names":["useEffect","isClosed","useTableClose","table","close"],"sources":["../src/useTableClose.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type {
|
|
1
|
+
{"version":3,"file":"useTableClose.js","names":["useEffect","isClosed","useTableClose","table","close"],"sources":["../src/useTableClose.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { isClosed } from '@deephaven/jsapi-utils';\n\n/**\n * React hook that closes a given table when the reference changes or when the\n * component unmounts.\n * @param table\n */\nexport default function useTableClose(\n table: dh.Table | dh.TreeTable | null | undefined\n): void {\n useEffect(\n () => () => {\n if (table == null) {\n return;\n }\n\n if (!isClosed(table)) {\n table.close();\n }\n },\n [table]\n );\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AAEjC,SAASC,QAAQ,QAAQ,wBAAwB;;AAEjD;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,aAAaA,CACnCC,KAAiD,EAC3C;EACNH,SAAS,CACP,MAAM,MAAM;IACV,IAAIG,KAAK,IAAI,IAAI,EAAE;MACjB;IACF;IAEA,IAAI,CAACF,QAAQ,CAACE,KAAK,CAAC,EAAE;MACpBA,KAAK,CAACC,KAAK,CAAC,CAAC;IACf;EACF,CAAC,EACD,CAACD,KAAK,CACR,CAAC;AACH"}
|
package/dist/useTableColumn.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
/**
|
|
3
3
|
* Subscribe to viewport updates on a single table column
|
|
4
4
|
* @param table Table to get the data from
|
|
@@ -7,8 +7,8 @@ import type { Column, Table } from '@deephaven/jsapi-types';
|
|
|
7
7
|
* @param columnName Column to get the data from
|
|
8
8
|
* @returns Column object, data array for the column, error, setViewport method
|
|
9
9
|
*/
|
|
10
|
-
declare const useTableColumn: (table: Table | undefined, firstRow: number, lastRow: number, columnName: string) => {
|
|
11
|
-
column: Column | undefined;
|
|
10
|
+
declare const useTableColumn: (table: dh.Table | undefined, firstRow: number, lastRow: number, columnName: string) => {
|
|
11
|
+
column: dh.Column | undefined;
|
|
12
12
|
data: unknown[];
|
|
13
13
|
error: Error | null;
|
|
14
14
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableColumn.d.ts","sourceRoot":"","sources":["../src/useTableColumn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useTableColumn.d.ts","sourceRoot":"","sources":["../src/useTableColumn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAGjD;;;;;;;GAOG;AACH,QAAA,MAAM,cAAc,UACX,GAAG,KAAK,GAAG,SAAS,YACjB,MAAM,WACP,MAAM,cACH,MAAM;YAEV,GAAG,MAAM,GAAG,SAAS;UACvB,OAAO,EAAE;WACR,KAAK,GAAG,IAAI;CAapB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableColumn.js","names":["useMemo","useTable","useTableColumn","table","firstRow","lastRow","columnName","columnNames","columns","data","error","column"],"sources":["../src/useTableColumn.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport type {
|
|
1
|
+
{"version":3,"file":"useTableColumn.js","names":["useMemo","useTable","useTableColumn","table","firstRow","lastRow","columnName","columnNames","columns","data","error","column"],"sources":["../src/useTableColumn.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport useTable from './useTable';\n\n/**\n * Subscribe to viewport updates on a single table column\n * @param table Table to get the data from\n * @param firstRow First viewport row\n * @param lastRow Last viewport row\n * @param columnName Column to get the data from\n * @returns Column object, data array for the column, error, setViewport method\n */\nconst useTableColumn = (\n table: dh.Table | undefined,\n firstRow: number,\n lastRow: number,\n columnName: string\n): {\n column: dh.Column | undefined;\n data: unknown[];\n error: Error | null;\n} => {\n const columnNames = useMemo(() => [columnName], [columnName]);\n const {\n columns = [],\n data = [],\n error,\n } = useTable(table, firstRow, lastRow, columnNames);\n return {\n column: columns[0],\n data: data[0],\n error,\n };\n};\n\nexport default useTableColumn;\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAAC,OAEzBC,QAAQ;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,cAAc,GAAGA,CACrBC,KAA2B,EAC3BC,QAAgB,EAChBC,OAAe,EACfC,UAAkB,KAKf;EACH,IAAMC,WAAW,GAAGP,OAAO,CAAC,MAAM,CAACM,UAAU,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;EAC7D,IAAM;IACJE,OAAO,GAAG,EAAE;IACZC,IAAI,GAAG,EAAE;IACTC;EACF,CAAC,GAAGT,QAAQ,CAACE,KAAK,EAAEC,QAAQ,EAAEC,OAAO,EAAEE,WAAW,CAAC;EACnD,OAAO;IACLI,MAAM,EAAEH,OAAO,CAAC,CAAC,CAAC;IAClBC,IAAI,EAAEA,IAAI,CAAC,CAAC,CAAC;IACbC;EACF,CAAC;AACH,CAAC;AAED,eAAeR,cAAc"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const useTableListener: <T = unknown>(eventEmitter:
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
|
+
export declare const useTableListener: <T = unknown>(eventEmitter: dh.HasEventHandling | undefined | null, eventName: string, callback: (event: CustomEvent<T>) => void) => void;
|
|
3
3
|
export default useTableListener;
|
|
4
4
|
//# sourceMappingURL=useTableListener.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableListener.d.ts","sourceRoot":"","sources":["../src/useTableListener.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useTableListener.d.ts","sourceRoot":"","sources":["../src/useTableListener.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAKjD,eAAO,MAAM,gBAAgB,8BACb,GAAG,gBAAgB,GAAG,SAAS,GAAG,IAAI,aACzC,MAAM,uCACoB,IAAI,KACxC,IAWA,CAAC;AAEJ,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableListener.js","names":["useEffect","Log","log","module","useTableListener","eventEmitter","eventName","callback","initEventEmitter","debug2","addEventListener"],"sources":["../src/useTableListener.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type {
|
|
1
|
+
{"version":3,"file":"useTableListener.js","names":["useEffect","Log","log","module","useTableListener","eventEmitter","eventName","callback","initEventEmitter","debug2","addEventListener"],"sources":["../src/useTableListener.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('useTableListener');\n\nexport const useTableListener = <T = unknown>(\n eventEmitter: dh.HasEventHandling | undefined | null,\n eventName: string,\n callback: (event: CustomEvent<T>) => void\n): void =>\n useEffect(\n function initEventEmitter() {\n if (eventEmitter == null) {\n log.debug2('Emitter undefined, skipping addEventListener', eventName);\n return;\n }\n log.debug2('Adding listener', eventName);\n return eventEmitter.addEventListener(eventName, callback);\n },\n [eventEmitter, eventName, callback]\n );\n\nexport default useTableListener;\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AAEjC,OAAOC,GAAG,MAAM,gBAAgB;AAEhC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,kBAAkB,CAAC;AAE1C,OAAO,IAAMC,gBAAgB,GAAGA,CAC9BC,YAAoD,EACpDC,SAAiB,EACjBC,QAAyC,KAEzCP,SAAS,CACP,SAASQ,gBAAgBA,CAAA,EAAG;EAC1B,IAAIH,YAAY,IAAI,IAAI,EAAE;IACxBH,GAAG,CAACO,MAAM,CAAC,8CAA8C,EAAEH,SAAS,CAAC;IACrE;EACF;EACAJ,GAAG,CAACO,MAAM,CAAC,iBAAiB,EAAEH,SAAS,CAAC;EACxC,OAAOD,YAAY,CAACK,gBAAgB,CAACJ,SAAS,EAAEC,QAAQ,CAAC;AAC3D,CAAC,EACD,CAACF,YAAY,EAAEC,SAAS,EAAEC,QAAQ,CACpC,CAAC;AAEH,eAAeH,gBAAgB"}
|
package/dist/useTableSize.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
/**
|
|
3
3
|
* React hook that returns the size of a given table or zero if table is null or
|
|
4
4
|
* undefined. The hook subscribes to the dh.Table.EVENT_SIZECHANGED event and
|
|
@@ -6,6 +6,6 @@ import type { Table, TreeTable } from '@deephaven/jsapi-types';
|
|
|
6
6
|
* size.
|
|
7
7
|
* @param table The table to check the size on.
|
|
8
8
|
*/
|
|
9
|
-
export declare function useTableSize(table: Table | TreeTable | null | undefined): number;
|
|
9
|
+
export declare function useTableSize(table: dh.Table | dh.TreeTable | null | undefined): number;
|
|
10
10
|
export default useTableSize;
|
|
11
11
|
//# sourceMappingURL=useTableSize.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableSize.d.ts","sourceRoot":"","sources":["../src/useTableSize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useTableSize.d.ts","sourceRoot":"","sources":["../src/useTableSize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAIjD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,GAAG,SAAS,GAChD,MAAM,CAUR;AAED,eAAe,YAAY,CAAC"}
|
package/dist/useTableSize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableSize.js","names":["useState","useApi","getSize","useTableListener","useTableSize","table","forceRerender","dh","Table","EVENT_SIZECHANGED","i"],"sources":["../src/useTableSize.ts"],"sourcesContent":["import { useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport type {
|
|
1
|
+
{"version":3,"file":"useTableSize.js","names":["useState","useApi","getSize","useTableListener","useTableSize","table","forceRerender","dh","Table","EVENT_SIZECHANGED","i"],"sources":["../src/useTableSize.ts"],"sourcesContent":["import { useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { getSize } from '@deephaven/jsapi-utils';\nimport useTableListener from './useTableListener';\n\n/**\n * React hook that returns the size of a given table or zero if table is null or\n * undefined. The hook subscribes to the dh.Table.EVENT_SIZECHANGED event and\n * triggers a re-render if any events are received to ensure we have the current\n * size.\n * @param table The table to check the size on.\n */\nexport function useTableSize(\n table: dh.Table | dh.TreeTable | null | undefined\n): number {\n const [, forceRerender] = useState(0);\n\n const dh = useApi();\n\n useTableListener(table, dh.Table.EVENT_SIZECHANGED, () => {\n forceRerender(i => i + 1);\n });\n\n return getSize(table);\n}\n\nexport default useTableSize;\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,MAAM,QAAQ,4BAA4B;AAEnD,SAASC,OAAO,QAAQ,wBAAwB;AAAC,OAC1CC,gBAAgB;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAC1BC,KAAiD,EACzC;EACR,IAAM,GAAGC,aAAa,CAAC,GAAGN,QAAQ,CAAC,CAAC,CAAC;EAErC,IAAMO,EAAE,GAAGN,MAAM,CAAC,CAAC;EAEnBE,gBAAgB,CAACE,KAAK,EAAEE,EAAE,CAACC,KAAK,CAACC,iBAAiB,EAAE,MAAM;IACxDH,aAAa,CAACI,CAAC,IAAIA,CAAC,GAAG,CAAC,CAAC;EAC3B,CAAC,CAAC;EAEF,OAAOR,OAAO,CAACG,KAAK,CAAC;AACvB;AAEA,eAAeD,YAAY"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
import { RowDeserializer } from '@deephaven/jsapi-utils';
|
|
3
3
|
import { WindowedListData } from '@deephaven/react-hooks';
|
|
4
4
|
import { KeyedItem } from '@deephaven/utils';
|
|
5
|
-
export interface UseViewportDataProps<TItem, TTable extends Table | TreeTable> {
|
|
5
|
+
export interface UseViewportDataProps<TItem, TTable extends dh.Table | dh.TreeTable> {
|
|
6
6
|
table: TTable | null;
|
|
7
7
|
itemHeight?: number;
|
|
8
8
|
scrollDebounce?: number;
|
|
@@ -10,14 +10,14 @@ export interface UseViewportDataProps<TItem, TTable extends Table | TreeTable> {
|
|
|
10
10
|
viewportPadding?: number;
|
|
11
11
|
deserializeRow?: RowDeserializer<TItem>;
|
|
12
12
|
}
|
|
13
|
-
export interface UseViewportDataResult<TItem, TTable extends Table | TreeTable> {
|
|
13
|
+
export interface UseViewportDataResult<TItem, TTable extends dh.Table | dh.TreeTable> {
|
|
14
14
|
/** Manages deserialized row items associated with a DH Table */
|
|
15
15
|
viewportData: WindowedListData<KeyedItem<TItem>>;
|
|
16
16
|
/** Size of the underlying Table */
|
|
17
17
|
size: number;
|
|
18
18
|
table: TTable | null;
|
|
19
19
|
/** Apply filters and refresh viewport. */
|
|
20
|
-
applyFiltersAndRefresh: (filters: FilterCondition[]) => void;
|
|
20
|
+
applyFiltersAndRefresh: (filters: dh.FilterCondition[]) => void;
|
|
21
21
|
/** Set the viewport of the Table */
|
|
22
22
|
setViewport: (firstRow: number) => void;
|
|
23
23
|
/** Handler for scroll events to update viewport */
|
|
@@ -37,6 +37,6 @@ export interface UseViewportDataResult<TItem, TTable extends Table | TreeTable>
|
|
|
37
37
|
* @param viewportPadding
|
|
38
38
|
* @returns An object for managing Table viewport state.
|
|
39
39
|
*/
|
|
40
|
-
export declare function useViewportData<TItem, TTable extends Table | TreeTable>({ table, itemHeight, scrollDebounce, viewportSize, viewportPadding, deserializeRow, }: UseViewportDataProps<TItem, TTable>): UseViewportDataResult<TItem, TTable>;
|
|
40
|
+
export declare function useViewportData<TItem, TTable extends dh.Table | dh.TreeTable>({ table, itemHeight, scrollDebounce, viewportSize, viewportPadding, deserializeRow, }: UseViewportDataProps<TItem, TTable>): UseViewportDataResult<TItem, TTable>;
|
|
41
41
|
export default useViewportData;
|
|
42
42
|
//# sourceMappingURL=useViewportData.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useViewportData.d.ts","sourceRoot":"","sources":["../src/useViewportData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useViewportData.d.ts","sourceRoot":"","sources":["../src/useViewportData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EACL,eAAe,EAIhB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAEL,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAsB,MAAM,kBAAkB,CAAC;AAQjE,MAAM,WAAW,oBAAoB,CACnC,KAAK,EACL,MAAM,SAAS,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS;IAEtC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,qBAAqB,CACpC,KAAK,EACL,MAAM,SAAS,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS;IAEtC,gEAAgE;IAChE,YAAY,EAAE,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IAEb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,0CAA0C;IAC1C,sBAAsB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC;IAChE,oCAAoC;IACpC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,mDAAmD;IACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,SAAS,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,EAAE,EAC7E,KAAK,EACL,UAAc,EACd,cAAmC,EACnC,YAAiB,EACjB,eAAoB,EACpB,cAAuC,GACxC,EAAE,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAkE5E;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useViewportData.js","names":["useCallback","useEffect","useMemo","defaultRowDeserializer","isClosed","createOnTableUpdatedHandler","Log","useApi","useOnScrollOffsetChangeCallback","SCROLL_DEBOUNCE_MS","useInitializeViewportData","useSetPaddedViewportCallback","useTableSize","useTableListener","log","module","useViewportData","_ref","table","itemHeight","scrollDebounce","viewportSize","viewportPadding","deserializeRow","viewportData","setPaddedViewport","setViewport","firstRow","debug","applyFiltersAndRefresh","filters","applyFilter","dh","onTableUpdated","Table","EVENT_UPDATED","size","onScroll"],"sources":["../src/useViewportData.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo } from 'react';\nimport type {
|
|
1
|
+
{"version":3,"file":"useViewportData.js","names":["useCallback","useEffect","useMemo","defaultRowDeserializer","isClosed","createOnTableUpdatedHandler","Log","useApi","useOnScrollOffsetChangeCallback","SCROLL_DEBOUNCE_MS","useInitializeViewportData","useSetPaddedViewportCallback","useTableSize","useTableListener","log","module","useViewportData","_ref","table","itemHeight","scrollDebounce","viewportSize","viewportPadding","deserializeRow","viewportData","setPaddedViewport","setViewport","firstRow","debug","applyFiltersAndRefresh","filters","applyFilter","dh","onTableUpdated","Table","EVENT_UPDATED","size","onScroll"],"sources":["../src/useViewportData.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport {\n RowDeserializer,\n defaultRowDeserializer,\n isClosed,\n createOnTableUpdatedHandler,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport {\n useOnScrollOffsetChangeCallback,\n WindowedListData,\n} from '@deephaven/react-hooks';\nimport { KeyedItem, SCROLL_DEBOUNCE_MS } from '@deephaven/utils';\nimport useInitializeViewportData from './useInitializeViewportData';\nimport useSetPaddedViewportCallback from './useSetPaddedViewportCallback';\nimport useTableSize from './useTableSize';\nimport useTableListener from './useTableListener';\n\nconst log = Log.module('useViewportData');\n\nexport interface UseViewportDataProps<\n TItem,\n TTable extends dh.Table | dh.TreeTable,\n> {\n table: TTable | null;\n itemHeight?: number;\n scrollDebounce?: number;\n viewportSize?: number;\n viewportPadding?: number;\n deserializeRow?: RowDeserializer<TItem>;\n}\n\nexport interface UseViewportDataResult<\n TItem,\n TTable extends dh.Table | dh.TreeTable,\n> {\n /** Manages deserialized row items associated with a DH Table */\n viewportData: WindowedListData<KeyedItem<TItem>>;\n /** Size of the underlying Table */\n size: number;\n\n table: TTable | null;\n /** Apply filters and refresh viewport. */\n applyFiltersAndRefresh: (filters: dh.FilterCondition[]) => void;\n /** Set the viewport of the Table */\n setViewport: (firstRow: number) => void;\n /** Handler for scroll events to update viewport */\n onScroll: (event: Event) => void;\n}\n\n/**\n * Sets up state management for windowed Table viewports. Returns a ListData\n * instance for managing items associated with the Table + a `setViewport`\n * callback for changing the current viewport.\n *\n * IMPORTANT: this will create an empty KeyedItem object for every row in the\n * source table. This is intended for \"human\" sized tables such as those used in\n * admin panels. This is not suitable for \"machine\" scale with millions+ rows.\n * @param table\n * @param itemHeight\n * @param viewportSize\n * @param viewportPadding\n * @returns An object for managing Table viewport state.\n */\nexport function useViewportData<TItem, TTable extends dh.Table | dh.TreeTable>({\n table,\n itemHeight = 1,\n scrollDebounce = SCROLL_DEBOUNCE_MS,\n viewportSize = 10,\n viewportPadding = 50,\n deserializeRow = defaultRowDeserializer,\n}: UseViewportDataProps<TItem, TTable>): UseViewportDataResult<TItem, TTable> {\n const viewportData = useInitializeViewportData<TItem>(table);\n\n const setPaddedViewport = useSetPaddedViewportCallback(\n table,\n viewportSize,\n viewportPadding\n );\n\n const setViewport = useCallback(\n (firstRow: number) => {\n if (table && !isClosed(table)) {\n setPaddedViewport(firstRow);\n } else {\n log.debug('setViewport called on closed table.', table);\n }\n },\n [table, setPaddedViewport]\n );\n\n const applyFiltersAndRefresh = useCallback(\n (filters: dh.FilterCondition[]) => {\n if (table && !isClosed(table)) {\n table.applyFilter(filters);\n setViewport(0);\n } else {\n log.debug('applyFiltersAndRefresh called on closed table.', table);\n }\n },\n [setViewport, table]\n );\n\n const dh = useApi();\n\n const onTableUpdated = useMemo(\n () => createOnTableUpdatedHandler(viewportData, deserializeRow),\n [deserializeRow, viewportData]\n );\n\n useTableListener(table, dh.Table.EVENT_UPDATED, onTableUpdated);\n\n const size = useTableSize(table);\n\n useEffect(() => {\n // Hydrate the viewport with real data. This will fetch data from index\n // 0 to the end of the viewport + padding.\n setViewport(0);\n }, [table, setViewport, size]);\n\n const onScroll = useOnScrollOffsetChangeCallback(\n itemHeight,\n setViewport,\n scrollDebounce\n );\n\n return useMemo(\n () => ({\n viewportData,\n size,\n table,\n applyFiltersAndRefresh,\n setViewport,\n onScroll,\n }),\n [applyFiltersAndRefresh, onScroll, setViewport, size, table, viewportData]\n );\n}\n\nexport default useViewportData;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAEvD,SAEEC,sBAAsB,EACtBC,QAAQ,EACRC,2BAA2B,QACtB,wBAAwB;AAC/B,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,MAAM,QAAQ,4BAA4B;AACnD,SACEC,+BAA+B,QAE1B,wBAAwB;AAC/B,SAAoBC,kBAAkB,QAAQ,kBAAkB;AAAC,OAC1DC,yBAAyB;AAAA,OACzBC,4BAA4B;AAAA,OAC5BC,YAAY;AAAA,OACZC,gBAAgB;AAEvB,IAAMC,GAAG,GAAGR,GAAG,CAACS,MAAM,CAAC,iBAAiB,CAAC;AAgCzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAAC,IAAA,EAO+C;EAAA,IAPC;IAC7EC,KAAK;IACLC,UAAU,GAAG,CAAC;IACdC,cAAc,GAAGX,kBAAkB;IACnCY,YAAY,GAAG,EAAE;IACjBC,eAAe,GAAG,EAAE;IACpBC,cAAc,GAAGpB;EACkB,CAAC,GAAAc,IAAA;EACpC,IAAMO,YAAY,GAAGd,yBAAyB,CAAQQ,KAAK,CAAC;EAE5D,IAAMO,iBAAiB,GAAGd,4BAA4B,CACpDO,KAAK,EACLG,YAAY,EACZC,eACF,CAAC;EAED,IAAMI,WAAW,GAAG1B,WAAW,CAC5B2B,QAAgB,IAAK;IACpB,IAAIT,KAAK,IAAI,CAACd,QAAQ,CAACc,KAAK,CAAC,EAAE;MAC7BO,iBAAiB,CAACE,QAAQ,CAAC;IAC7B,CAAC,MAAM;MACLb,GAAG,CAACc,KAAK,CAAC,qCAAqC,EAAEV,KAAK,CAAC;IACzD;EACF,CAAC,EACD,CAACA,KAAK,EAAEO,iBAAiB,CAC3B,CAAC;EAED,IAAMI,sBAAsB,GAAG7B,WAAW,CACvC8B,OAA6B,IAAK;IACjC,IAAIZ,KAAK,IAAI,CAACd,QAAQ,CAACc,KAAK,CAAC,EAAE;MAC7BA,KAAK,CAACa,WAAW,CAACD,OAAO,CAAC;MAC1BJ,WAAW,CAAC,CAAC,CAAC;IAChB,CAAC,MAAM;MACLZ,GAAG,CAACc,KAAK,CAAC,gDAAgD,EAAEV,KAAK,CAAC;IACpE;EACF,CAAC,EACD,CAACQ,WAAW,EAAER,KAAK,CACrB,CAAC;EAED,IAAMc,EAAE,GAAGzB,MAAM,CAAC,CAAC;EAEnB,IAAM0B,cAAc,GAAG/B,OAAO,CAC5B,MAAMG,2BAA2B,CAACmB,YAAY,EAAED,cAAc,CAAC,EAC/D,CAACA,cAAc,EAAEC,YAAY,CAC/B,CAAC;EAEDX,gBAAgB,CAACK,KAAK,EAAEc,EAAE,CAACE,KAAK,CAACC,aAAa,EAAEF,cAAc,CAAC;EAE/D,IAAMG,IAAI,GAAGxB,YAAY,CAACM,KAAK,CAAC;EAEhCjB,SAAS,CAAC,MAAM;IACd;IACA;IACAyB,WAAW,CAAC,CAAC,CAAC;EAChB,CAAC,EAAE,CAACR,KAAK,EAAEQ,WAAW,EAAEU,IAAI,CAAC,CAAC;EAE9B,IAAMC,QAAQ,GAAG7B,+BAA+B,CAC9CW,UAAU,EACVO,WAAW,EACXN,cACF,CAAC;EAED,OAAOlB,OAAO,CACZ,OAAO;IACLsB,YAAY;IACZY,IAAI;IACJlB,KAAK;IACLW,sBAAsB;IACtBH,WAAW;IACXW;EACF,CAAC,CAAC,EACF,CAACR,sBAAsB,EAAEQ,QAAQ,EAAEX,WAAW,EAAEU,IAAI,EAAElB,KAAK,EAAEM,YAAY,CAC3E,CAAC;AACH;AAEA,eAAeR,eAAe"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
2
2
|
import { UseViewportDataResult } from './useViewportData';
|
|
3
3
|
/**
|
|
4
4
|
* Applies a filter to a viewport.
|
|
5
5
|
* @param viewportData Viewport to filter
|
|
6
6
|
* @param filter Filter to apply
|
|
7
7
|
*/
|
|
8
|
-
export declare function useViewportFilter<TItem>(viewportData: UseViewportDataResult<TItem, Table>, filter: FilterCondition[]): void;
|
|
8
|
+
export declare function useViewportFilter<TItem>(viewportData: UseViewportDataResult<TItem, dh.Table>, filter: dh.FilterCondition[]): void;
|
|
9
9
|
export default useViewportFilter;
|
|
10
10
|
//# sourceMappingURL=useViewportFilter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useViewportFilter.d.ts","sourceRoot":"","sources":["../src/useViewportFilter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useViewportFilter.d.ts","sourceRoot":"","sources":["../src/useViewportFilter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EACrC,YAAY,EAAE,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EACpD,MAAM,EAAE,EAAE,CAAC,eAAe,EAAE,GAC3B,IAAI,CAMN;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useViewportFilter.js","names":["useEffect","useViewportFilter","viewportData","filter","applyFiltersAndRefresh"],"sources":["../src/useViewportFilter.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type {
|
|
1
|
+
{"version":3,"file":"useViewportFilter.js","names":["useEffect","useViewportFilter","viewportData","filter","applyFiltersAndRefresh"],"sources":["../src/useViewportFilter.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { UseViewportDataResult } from './useViewportData';\n\n/**\n * Applies a filter to a viewport.\n * @param viewportData Viewport to filter\n * @param filter Filter to apply\n */\nexport function useViewportFilter<TItem>(\n viewportData: UseViewportDataResult<TItem, dh.Table>,\n filter: dh.FilterCondition[]\n): void {\n const { applyFiltersAndRefresh } = viewportData;\n\n useEffect(() => {\n applyFiltersAndRefresh(filter);\n }, [applyFiltersAndRefresh, filter]);\n}\n\nexport default useViewportFilter;\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AAIjC;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAC/BC,YAAoD,EACpDC,MAA4B,EACtB;EACN,IAAM;IAAEC;EAAuB,CAAC,GAAGF,YAAY;EAE/CF,SAAS,CAAC,MAAM;IACdI,sBAAsB,CAACD,MAAM,CAAC;EAChC,CAAC,EAAE,CAACC,sBAAsB,EAAED,MAAM,CAAC,CAAC;AACtC;AAEA,eAAeF,iBAAiB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/jsapi-components",
|
|
3
|
-
"version": "0.67.
|
|
3
|
+
"version": "0.67.1-beta.1+1ce6aac8",
|
|
4
4
|
"description": "Deephaven JSAPI Components",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -22,13 +22,13 @@
|
|
|
22
22
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@deephaven/components": "^0.67.
|
|
26
|
-
"@deephaven/jsapi-bootstrap": "^0.67.
|
|
27
|
-
"@deephaven/jsapi-types": "
|
|
28
|
-
"@deephaven/jsapi-utils": "^0.67.
|
|
29
|
-
"@deephaven/log": "^0.67.
|
|
30
|
-
"@deephaven/react-hooks": "^0.67.
|
|
31
|
-
"@deephaven/utils": "^0.67.
|
|
25
|
+
"@deephaven/components": "^0.67.1-beta.1+1ce6aac8",
|
|
26
|
+
"@deephaven/jsapi-bootstrap": "^0.67.1-beta.1+1ce6aac8",
|
|
27
|
+
"@deephaven/jsapi-types": "1.0.0-dev0.33.1",
|
|
28
|
+
"@deephaven/jsapi-utils": "^0.67.1-beta.1+1ce6aac8",
|
|
29
|
+
"@deephaven/log": "^0.67.1-beta.1+1ce6aac8",
|
|
30
|
+
"@deephaven/react-hooks": "^0.67.1-beta.1+1ce6aac8",
|
|
31
|
+
"@deephaven/utils": "^0.67.1-beta.1+1ce6aac8",
|
|
32
32
|
"@types/js-cookie": "^3.0.3",
|
|
33
33
|
"classnames": "^2.3.2",
|
|
34
34
|
"js-cookie": "^3.0.5",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"prop-types": "^15.8.1"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@deephaven/jsapi-shim": "^0.67.
|
|
39
|
+
"@deephaven/jsapi-shim": "^0.67.1-beta.1+1ce6aac8",
|
|
40
40
|
"react-test-renderer": "^17.0.2"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
@@ -51,5 +51,5 @@
|
|
|
51
51
|
"publishConfig": {
|
|
52
52
|
"access": "public"
|
|
53
53
|
},
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "1ce6aac82071303fdbed064e8b71b54f741d0a87"
|
|
55
55
|
}
|