@deephaven/iris-grid 1.8.1-beta.8 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/IrisGrid.d.ts +19 -0
  2. package/dist/IrisGrid.d.ts.map +1 -1
  3. package/dist/IrisGrid.js +17 -9
  4. package/dist/IrisGrid.js.map +1 -1
  5. package/dist/IrisGridMetricCalculator.d.ts +34 -1
  6. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  7. package/dist/IrisGridMetricCalculator.js +136 -1
  8. package/dist/IrisGridMetricCalculator.js.map +1 -1
  9. package/dist/LazyIrisGrid.d.ts +1 -0
  10. package/dist/LazyIrisGrid.d.ts.map +1 -1
  11. package/dist/TreeRebalanceUtil.d.ts +50 -0
  12. package/dist/TreeRebalanceUtil.d.ts.map +1 -0
  13. package/dist/TreeRebalanceUtil.js +105 -0
  14. package/dist/TreeRebalanceUtil.js.map +1 -0
  15. package/dist/sidebar/visibility-ordering-builder/SearchItem.d.ts +12 -0
  16. package/dist/sidebar/visibility-ordering-builder/SearchItem.d.ts.map +1 -0
  17. package/dist/sidebar/visibility-ordering-builder/SearchItem.js +55 -0
  18. package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -0
  19. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.css +408 -0
  20. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.css.map +1 -0
  21. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.d.ts +14 -0
  22. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.d.ts.map +1 -0
  23. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +235 -0
  24. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -0
  25. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +43 -43
  26. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
  27. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +427 -466
  28. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  29. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts +7 -2
  30. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.map +1 -1
  31. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +7 -4
  32. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  33. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts +7 -15
  34. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts.map +1 -1
  35. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +53 -137
  36. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  37. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.d.ts +14 -0
  38. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.d.ts.map +1 -0
  39. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +245 -0
  40. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -0
  41. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts +4 -3
  42. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.d.ts.map +1 -1
  43. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +2 -1
  44. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  45. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +45 -22
  46. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +1 -1
  47. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts +13 -14
  48. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts.map +1 -1
  49. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +9 -7
  50. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
  51. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.d.ts +1 -1
  52. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.d.ts.map +1 -1
  53. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +8 -7
  54. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
  55. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +4 -4
  56. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
  57. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +5 -1
  58. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  59. package/package.json +20 -19
  60. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts +0 -21
  61. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts.map +0 -1
  62. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +0 -149
  63. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +0 -1
@@ -0,0 +1,235 @@
1
+ import React, { useCallback, useMemo, useRef, useState } from 'react';
2
+ import { useDndMonitor } from '@dnd-kit/core';
3
+ import { GridUtils } from '@deephaven/grid';
4
+ import { ActionButton, Popper, SearchField } from '@deephaven/components';
5
+ import { useResizeObserver } from '@deephaven/react-hooks';
6
+ import SortableTree from "./sortable-tree/SortableTree.js";
7
+ import "./SearchWithModal.css";
8
+ import MemoizedSearchItem from "./SearchItem.js";
9
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
10
+ export function SearchWithModal(_ref) {
11
+ var _searchRef$current3, _searchRef$current4;
12
+ var {
13
+ items,
14
+ onModalOpenChange,
15
+ onClick,
16
+ onDragStart,
17
+ setSelection
18
+ } = _ref;
19
+ var [searchValue, setSearchValue] = useState('');
20
+ var [isModalOpen, setIsModalOpen] = useState(false);
21
+ var searchRef = useRef(null);
22
+ var popperRef = useRef(null);
23
+ var handleModalOpen = useCallback(() => {
24
+ if (isModalOpen) {
25
+ return;
26
+ }
27
+ setIsModalOpen(true);
28
+ onModalOpenChange(true);
29
+ }, [onModalOpenChange, isModalOpen]);
30
+ var handleModalClose = useCallback(() => {
31
+ if (!isModalOpen) {
32
+ return;
33
+ }
34
+ setIsModalOpen(false);
35
+ onModalOpenChange(false);
36
+ }, [onModalOpenChange, isModalOpen]);
37
+ var handleInputChange = useCallback(value => {
38
+ // Open in case the user hit escape to close the modal then started typing
39
+ // without blurring the input
40
+ handleModalOpen();
41
+ setSearchValue(value);
42
+ }, [handleModalOpen]);
43
+ var handleInputBlur = useCallback(e => {
44
+ if (!popperRef.current || !popperRef.current.element.contains(e.relatedTarget)) {
45
+ handleModalClose();
46
+ }
47
+ }, [handleModalClose]);
48
+ var handleModalBlur = useCallback(e => {
49
+ var _searchRef$current;
50
+ var searchElement = (_searchRef$current = searchRef.current) === null || _searchRef$current === void 0 ? void 0 : _searchRef$current.getInputElement();
51
+ if (!searchElement || !searchElement.contains(e.relatedTarget)) {
52
+ handleModalClose();
53
+ }
54
+ }, [handleModalClose]);
55
+ var handleDragStart = useCallback(event => {
56
+ onDragStart === null || onDragStart === void 0 || onDragStart(event);
57
+ handleModalClose();
58
+ }, [onDragStart, handleModalClose]);
59
+ useDndMonitor({
60
+ onDragStart: isModalOpen ? handleDragStart : undefined
61
+ });
62
+ var handleClick = useCallback((name, event) => {
63
+ onClick(name, event);
64
+ if (!event.shiftKey && !GridUtils.isModifierKeyDown(event)) {
65
+ handleModalClose();
66
+ }
67
+ }, [onClick, handleModalClose]);
68
+ var handleItemKeyDown = useCallback((name, event) => {
69
+ var {
70
+ key
71
+ } = event;
72
+ if (key === 'Enter') {
73
+ // Select item and close modal
74
+ event.preventDefault();
75
+ event.stopPropagation();
76
+ setSelection([name]);
77
+ handleModalClose();
78
+ } else if (key === 'ArrowDown') {
79
+ var _event$currentTarget$;
80
+ // Move focus to the next item
81
+ event.preventDefault();
82
+ event.stopPropagation();
83
+ var nextElement = (_event$currentTarget$ = event.currentTarget.parentElement) === null || _event$currentTarget$ === void 0 || (_event$currentTarget$ = _event$currentTarget$.nextElementSibling // The parent item-wrapper elements are siblings, not the tree-items
84
+ ) === null || _event$currentTarget$ === void 0 ? void 0 : _event$currentTarget$.querySelector('.tree-item[tabindex="0"]');
85
+ nextElement === null || nextElement === void 0 || nextElement.scrollIntoView({
86
+ block: 'nearest'
87
+ });
88
+ nextElement === null || nextElement === void 0 || nextElement.focus();
89
+ } else if (key === 'ArrowUp') {
90
+ var _event$currentTarget$2;
91
+ // Move focus to the previous item
92
+ event.preventDefault();
93
+ event.stopPropagation();
94
+ var prevElement = (_event$currentTarget$2 = event.currentTarget.parentElement) === null || _event$currentTarget$2 === void 0 || (_event$currentTarget$2 = _event$currentTarget$2.previousElementSibling // The parent item-wrapper elements are siblings, not the tree-items
95
+ ) === null || _event$currentTarget$2 === void 0 ? void 0 : _event$currentTarget$2.querySelector('.tree-item[tabindex="0"]');
96
+ if (prevElement) {
97
+ prevElement.scrollIntoView({
98
+ block: 'nearest'
99
+ });
100
+ prevElement.focus();
101
+ } else {
102
+ var _searchRef$current2;
103
+ (_searchRef$current2 = searchRef.current) === null || _searchRef$current2 === void 0 || (_searchRef$current2 = _searchRef$current2.getInputElement()) === null || _searchRef$current2 === void 0 || _searchRef$current2.focus();
104
+ }
105
+ }
106
+ }, [setSelection, handleModalClose]);
107
+ var renderItem = useCallback(_ref2 => {
108
+ var {
109
+ value,
110
+ item,
111
+ ref,
112
+ handleProps
113
+ } = _ref2;
114
+ return /*#__PURE__*/_jsx(MemoizedSearchItem, {
115
+ ref: ref,
116
+ value: value,
117
+ item: item,
118
+ onClick: handleClick,
119
+ onKeyDown: handleItemKeyDown,
120
+ handleProps: handleProps
121
+ }, item.id);
122
+ }, [handleClick, handleItemKeyDown]);
123
+
124
+ // Detect if the user resizes the panel height while the popper is open
125
+ useResizeObserver((_searchRef$current3 = searchRef.current) === null || _searchRef$current3 === void 0 || (_searchRef$current3 = _searchRef$current3.getInputElement()) === null || _searchRef$current3 === void 0 ? void 0 : _searchRef$current3.closest('.visibility-ordering-builder'), () => {
126
+ var _popperRef$current;
127
+ (_popperRef$current = popperRef.current) === null || _popperRef$current === void 0 || _popperRef$current.scheduleUpdate();
128
+ });
129
+ var filteredItems = useMemo(() => {
130
+ if (searchValue === '') {
131
+ return items;
132
+ }
133
+ var lowerSearch = searchValue.toLowerCase();
134
+ return items.filter(item => item.id.toLowerCase().includes(lowerSearch));
135
+ }, [items, searchValue]);
136
+ var handleSearchKeyDown = useCallback(
137
+ // Close on escape with empty search.
138
+ // If there is a search value, let the input handle the escape to clear the search.
139
+ e => {
140
+ if (e.key === 'Escape' && searchValue === '') {
141
+ handleModalClose();
142
+ }
143
+ if (e.key === 'Enter' && filteredItems.length > 0) {
144
+ e.preventDefault();
145
+ // Select the first item in the list
146
+ var firstItem = filteredItems[0];
147
+ setSelection([firstItem.id]);
148
+ handleModalClose();
149
+ }
150
+ if (e.key === 'ArrowDown' && filteredItems.length > 0) {
151
+ var _popperRef$current2;
152
+ e.preventDefault();
153
+ // Focus the first item in the list
154
+ var item = (_popperRef$current2 = popperRef.current) === null || _popperRef$current2 === void 0 ? void 0 : _popperRef$current2.element.querySelector('.tree-item[tabindex="0"]');
155
+ item === null || item === void 0 || item.focus();
156
+ }
157
+ }, [setSelection, filteredItems, handleModalClose, searchValue]);
158
+ var handleSelectMatching = useCallback(() => {
159
+ var matchingNames = filteredItems.map(item => item.id);
160
+ setSelection(matchingNames);
161
+ handleModalClose();
162
+ }, [filteredItems, setSelection, handleModalClose]);
163
+ var hasMultipleSelection = useMemo(() => {
164
+ var foundOne = false;
165
+ return filteredItems.some(item => {
166
+ if (item.selected) {
167
+ if (foundOne) {
168
+ return true;
169
+ }
170
+ foundOne = true;
171
+ }
172
+ return false;
173
+ });
174
+ }, [filteredItems]);
175
+ var hasMultipleMatches = searchValue !== '' && filteredItems.length > 1;
176
+ var showFooterButtons = hasMultipleSelection || hasMultipleMatches;
177
+ return /*#__PURE__*/_jsxs(_Fragment, {
178
+ children: [/*#__PURE__*/_jsx(SearchField, {
179
+ "aria-label": "Search columns",
180
+ ref: searchRef,
181
+ value: searchValue,
182
+ onChange: handleInputChange,
183
+ onFocus: handleModalOpen,
184
+ onBlur: handleInputBlur,
185
+ onKeyDown: handleSearchKeyDown
186
+ }), /*#__PURE__*/_jsx(Popper, {
187
+ ref: popperRef,
188
+ isShown: isModalOpen,
189
+ interactive: true,
190
+ keepInParent: true,
191
+ onBlur: handleModalBlur,
192
+ onExited: handleModalClose // May exit due to escape which does not trigger blur
193
+ ,
194
+ options: {
195
+ placement: 'bottom-end',
196
+ modifiers: {
197
+ preventOverflow: {
198
+ priority: ['top']
199
+ },
200
+ flip: {
201
+ enabled: false
202
+ }
203
+ }
204
+ },
205
+ referenceObject: (_searchRef$current4 = searchRef.current) === null || _searchRef$current4 === void 0 ? void 0 : _searchRef$current4.getInputElement(),
206
+ className: "visibility-search-list",
207
+ children: /*#__PURE__*/_jsx("div", {
208
+ className: "visibility-search-list-inner",
209
+ children: filteredItems.length === 0 ? /*#__PURE__*/_jsx("div", {
210
+ className: "no-results",
211
+ children: "No matching columns"
212
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
213
+ children: [/*#__PURE__*/_jsx(SortableTree, {
214
+ items: filteredItems,
215
+ withDepthMarkers: false,
216
+ renderItem: renderItem
217
+ }), showFooterButtons && /*#__PURE__*/_jsxs("div", {
218
+ className: "footer-buttons",
219
+ children: [hasMultipleSelection && /*#__PURE__*/_jsx(ActionButton, {
220
+ isQuiet: true,
221
+ onPress: handleModalClose,
222
+ children: "Select Group"
223
+ }), hasMultipleMatches && /*#__PURE__*/_jsx(ActionButton, {
224
+ isQuiet: true,
225
+ onPress: handleSelectMatching,
226
+ children: "Select Matching"
227
+ })]
228
+ })]
229
+ })
230
+ })
231
+ })]
232
+ });
233
+ }
234
+ export default SearchWithModal;
235
+ //# sourceMappingURL=SearchWithModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchWithModal.js","names":["React","useCallback","useMemo","useRef","useState","useDndMonitor","GridUtils","ActionButton","Popper","SearchField","useResizeObserver","SortableTree","MemoizedSearchItem","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SearchWithModal","_ref","_searchRef$current3","_searchRef$current4","items","onModalOpenChange","onClick","onDragStart","setSelection","searchValue","setSearchValue","isModalOpen","setIsModalOpen","searchRef","popperRef","handleModalOpen","handleModalClose","handleInputChange","value","handleInputBlur","e","current","element","contains","relatedTarget","handleModalBlur","_searchRef$current","searchElement","getInputElement","handleDragStart","event","undefined","handleClick","name","shiftKey","isModifierKeyDown","handleItemKeyDown","key","preventDefault","stopPropagation","_event$currentTarget$","nextElement","currentTarget","parentElement","nextElementSibling","querySelector","scrollIntoView","block","focus","_event$currentTarget$2","prevElement","previousElementSibling","_searchRef$current2","renderItem","_ref2","item","ref","handleProps","onKeyDown","id","closest","_popperRef$current","scheduleUpdate","filteredItems","lowerSearch","toLowerCase","filter","includes","handleSearchKeyDown","length","firstItem","_popperRef$current2","handleSelectMatching","matchingNames","map","hasMultipleSelection","foundOne","some","selected","hasMultipleMatches","showFooterButtons","children","onChange","onFocus","onBlur","isShown","interactive","keepInParent","onExited","options","placement","modifiers","preventOverflow","priority","flip","enabled","referenceObject","className","withDepthMarkers","isQuiet","onPress"],"sources":["../../../src/sidebar/visibility-ordering-builder/SearchWithModal.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { type DragStartEvent, useDndMonitor } from '@dnd-kit/core';\nimport type { TextFieldRef } from '@react-types/textfield';\nimport { GridUtils } from '@deephaven/grid';\nimport { ActionButton, Popper, SearchField } from '@deephaven/components';\nimport { useResizeObserver } from '@deephaven/react-hooks';\nimport SortableTree from './sortable-tree/SortableTree';\nimport { type TreeItemRenderFnProps } from './sortable-tree/TreeItem';\nimport type {\n IrisGridTreeItemData,\n FlattenedIrisGridTreeItem,\n} from './sortable-tree/utilities';\nimport './SearchWithModal.scss';\nimport MemoizedSearchItem from './SearchItem';\n\ninterface SearchWithModalProps {\n items: FlattenedIrisGridTreeItem[];\n onModalOpenChange: (isOpen: boolean) => void;\n onClick: (name: string, event: React.MouseEvent<HTMLElement>) => void;\n onDragStart?: (event: DragStartEvent) => void;\n setSelection: (columnNames: string[]) => void;\n}\n\nexport function SearchWithModal({\n items,\n onModalOpenChange,\n onClick,\n onDragStart,\n setSelection,\n}: SearchWithModalProps): JSX.Element {\n const [searchValue, setSearchValue] = useState('');\n const [isModalOpen, setIsModalOpen] = useState(false);\n const searchRef = useRef<TextFieldRef>(null);\n const popperRef = useRef<Popper>(null);\n\n const handleModalOpen = useCallback(() => {\n if (isModalOpen) {\n return;\n }\n setIsModalOpen(true);\n onModalOpenChange(true);\n }, [onModalOpenChange, isModalOpen]);\n\n const handleModalClose = useCallback(() => {\n if (!isModalOpen) {\n return;\n }\n setIsModalOpen(false);\n onModalOpenChange(false);\n }, [onModalOpenChange, isModalOpen]);\n\n const handleInputChange = useCallback(\n (value: string) => {\n // Open in case the user hit escape to close the modal then started typing\n // without blurring the input\n handleModalOpen();\n setSearchValue(value);\n },\n [handleModalOpen]\n );\n\n const handleInputBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n if (\n !popperRef.current ||\n !popperRef.current.element.contains(e.relatedTarget as Node)\n ) {\n handleModalClose();\n }\n },\n [handleModalClose]\n );\n\n const handleModalBlur = useCallback(\n (e: React.FocusEvent) => {\n const searchElement = searchRef.current?.getInputElement();\n if (!searchElement || !searchElement.contains(e.relatedTarget as Node)) {\n handleModalClose();\n }\n },\n [handleModalClose]\n );\n\n const handleDragStart = useCallback(\n (event: DragStartEvent) => {\n onDragStart?.(event);\n handleModalClose();\n },\n [onDragStart, handleModalClose]\n );\n\n useDndMonitor({\n onDragStart: isModalOpen ? handleDragStart : undefined,\n });\n\n const handleClick = useCallback(\n (name: string, event: React.MouseEvent<HTMLElement>) => {\n onClick(name, event);\n if (!event.shiftKey && !GridUtils.isModifierKeyDown(event)) {\n handleModalClose();\n }\n },\n [onClick, handleModalClose]\n );\n\n const handleItemKeyDown = useCallback(\n (name: string, event: React.KeyboardEvent<HTMLElement>) => {\n const { key } = event;\n if (key === 'Enter') {\n // Select item and close modal\n event.preventDefault();\n event.stopPropagation();\n setSelection([name]);\n handleModalClose();\n } else if (key === 'ArrowDown') {\n // Move focus to the next item\n event.preventDefault();\n event.stopPropagation();\n const nextElement = (\n event.currentTarget.parentElement as HTMLElement | null\n )?.nextElementSibling // The parent item-wrapper elements are siblings, not the tree-items\n ?.querySelector('.tree-item[tabindex=\"0\"]') as HTMLElement | null;\n nextElement?.scrollIntoView({ block: 'nearest' });\n nextElement?.focus();\n } else if (key === 'ArrowUp') {\n // Move focus to the previous item\n event.preventDefault();\n event.stopPropagation();\n const prevElement = (\n event.currentTarget.parentElement as HTMLElement | null\n )?.previousElementSibling // The parent item-wrapper elements are siblings, not the tree-items\n ?.querySelector('.tree-item[tabindex=\"0\"]') as HTMLElement | null;\n if (prevElement) {\n prevElement.scrollIntoView({ block: 'nearest' });\n prevElement.focus();\n } else {\n searchRef.current?.getInputElement()?.focus();\n }\n }\n },\n [setSelection, handleModalClose]\n );\n\n const renderItem = useCallback(\n ({\n value,\n item,\n ref,\n handleProps,\n }: TreeItemRenderFnProps<IrisGridTreeItemData>): JSX.Element => (\n <MemoizedSearchItem\n key={item.id}\n ref={ref}\n value={value}\n item={item}\n onClick={handleClick}\n onKeyDown={handleItemKeyDown}\n handleProps={handleProps}\n />\n ),\n [handleClick, handleItemKeyDown]\n );\n\n // Detect if the user resizes the panel height while the popper is open\n useResizeObserver(\n searchRef.current\n ?.getInputElement()\n ?.closest('.visibility-ordering-builder'),\n () => {\n popperRef.current?.scheduleUpdate();\n }\n );\n\n const filteredItems = useMemo(() => {\n if (searchValue === '') {\n return items;\n }\n const lowerSearch = searchValue.toLowerCase();\n return items.filter(item => item.id.toLowerCase().includes(lowerSearch));\n }, [items, searchValue]);\n\n const handleSearchKeyDown = useCallback(\n // Close on escape with empty search.\n // If there is a search value, let the input handle the escape to clear the search.\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape' && searchValue === '') {\n handleModalClose();\n }\n\n if (e.key === 'Enter' && filteredItems.length > 0) {\n e.preventDefault();\n // Select the first item in the list\n const firstItem = filteredItems[0];\n setSelection([firstItem.id]);\n handleModalClose();\n }\n\n if (e.key === 'ArrowDown' && filteredItems.length > 0) {\n e.preventDefault();\n // Focus the first item in the list\n const item = popperRef.current?.element.querySelector(\n '.tree-item[tabindex=\"0\"]'\n ) as HTMLElement | null;\n item?.focus();\n }\n },\n [setSelection, filteredItems, handleModalClose, searchValue]\n );\n\n const handleSelectMatching = useCallback(() => {\n const matchingNames = filteredItems.map(item => item.id);\n setSelection(matchingNames);\n handleModalClose();\n }, [filteredItems, setSelection, handleModalClose]);\n\n const hasMultipleSelection = useMemo(() => {\n let foundOne = false;\n return filteredItems.some(item => {\n if (item.selected) {\n if (foundOne) {\n return true;\n }\n foundOne = true;\n }\n return false;\n });\n }, [filteredItems]);\n\n const hasMultipleMatches = searchValue !== '' && filteredItems.length > 1;\n const showFooterButtons = hasMultipleSelection || hasMultipleMatches;\n\n return (\n <>\n <SearchField\n aria-label=\"Search columns\"\n ref={searchRef}\n value={searchValue}\n onChange={handleInputChange}\n onFocus={handleModalOpen}\n onBlur={handleInputBlur}\n onKeyDown={handleSearchKeyDown}\n />\n <Popper\n ref={popperRef}\n isShown={isModalOpen}\n interactive\n keepInParent\n onBlur={handleModalBlur}\n onExited={handleModalClose} // May exit due to escape which does not trigger blur\n options={{\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: {\n priority: ['top'],\n },\n flip: {\n enabled: false,\n },\n },\n }}\n referenceObject={searchRef.current?.getInputElement()}\n className=\"visibility-search-list\"\n >\n <div className=\"visibility-search-list-inner\">\n {filteredItems.length === 0 ? (\n <div className=\"no-results\">No matching columns</div>\n ) : (\n <>\n <SortableTree\n items={filteredItems}\n withDepthMarkers={false}\n renderItem={renderItem}\n />\n {showFooterButtons && (\n <div className=\"footer-buttons\">\n {hasMultipleSelection && (\n <ActionButton isQuiet onPress={handleModalClose}>\n Select Group\n </ActionButton>\n )}\n {hasMultipleMatches && (\n <ActionButton isQuiet onPress={handleSelectMatching}>\n Select Matching\n </ActionButton>\n )}\n </div>\n )}\n </>\n )}\n </div>\n </Popper>\n </>\n );\n}\n\nexport default SearchWithModal;\n"],"mappings":"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","ignoreList":[]}
@@ -1,25 +1,22 @@
1
- import React, { type ChangeEvent, PureComponent, type ReactElement } from 'react';
2
- import { type ModelIndex, type MoveOperation, type VisibleIndex } from '@deephaven/grid';
1
+ import React, { PureComponent, type ReactElement } from 'react';
2
+ import { type ModelIndex, type MoveOperation } from '@deephaven/grid';
3
3
  import type { dh } from '@deephaven/jsapi-types';
4
4
  import memoize from 'memoizee';
5
+ import { type DragStartEvent } from '@dnd-kit/core';
5
6
  import type { Key } from '@react-types/shared';
6
7
  import './VisibilityOrderingBuilder.scss';
7
8
  import { type DisplayColumn } from '../../IrisGridModel';
8
9
  import type IrisGridModel from '../../IrisGridModel';
9
10
  import { type ColumnName } from '../../CommonTypes';
10
11
  import ColumnHeaderGroup from '../../ColumnHeaderGroup';
11
- import { type FlattenedIrisGridTreeItem, type IrisGridTreeItem } from './sortable-tree/utilities';
12
- import { type TreeItemRenderFn } from './sortable-tree/TreeItem';
13
- interface IndexRange {
14
- prevIndex: number;
15
- nextIndex: number;
16
- }
12
+ import { type FlattenedIrisGridTreeItem, type IrisGridTreeItem, type IrisGridTreeItemData } from './sortable-tree/utilities';
13
+ import { type TreeItemRenderFnProps } from './sortable-tree/TreeItem';
17
14
  export interface VisibilityOrderingBuilderProps {
18
15
  model: IrisGridModel;
19
16
  movedColumns: readonly MoveOperation[];
20
17
  hiddenColumns: readonly ModelIndex[];
21
18
  columnHeaderGroups: readonly ColumnHeaderGroup[];
22
- onColumnVisibilityChanged: (columns: readonly VisibleIndex[], isVisible: boolean) => void;
19
+ onColumnVisibilityChanged: (columns: readonly ModelIndex[], isVisible: boolean) => void;
23
20
  onReset: () => void;
24
21
  onMovedColumnsChanged: (operations: readonly MoveOperation[], cb?: () => void) => void;
25
22
  onColumnHeaderGroupChanged: (groups: readonly ColumnHeaderGroup[]) => void;
@@ -36,12 +33,16 @@ interface VisibilityOrderingBuilderInnerProps extends Omit<VisibilityOrderingBui
36
33
  }
37
34
  interface VisibilityOrderingBuilderInnerState {
38
35
  selectedColumns: Set<string>;
39
- queriedColumnIndex: number | undefined;
40
- queriedColumnRange: IndexRange | undefined;
41
- prevQueriedColumns: Record<number, string> | undefined;
42
36
  lastSelectedColumn: string;
43
- searchFilter: string;
37
+ isSearchModalOpen: boolean;
44
38
  showHiddenColumns: boolean;
39
+ /**
40
+ * This is used only for drag end. In React 18, it seems our rendering is causing
41
+ * 1 render with just the children of this component, then updating to render with the
42
+ * updated movedColumns prop. That is causing the drop animation to animate back to
43
+ * the original position of the element.
44
+ */
45
+ movedColumns: readonly MoveOperation[];
45
46
  }
46
47
  declare class VisibilityOrderingBuilderInner extends PureComponent<VisibilityOrderingBuilderInnerProps, VisibilityOrderingBuilderInnerState> {
47
48
  static SORTING_OPTIONS: {
@@ -60,35 +61,19 @@ declare class VisibilityOrderingBuilderInner extends PureComponent<VisibilityOrd
60
61
  componentDidUpdate(prevProps: VisibilityOrderingBuilderInnerProps): void;
61
62
  componentWillUnmount(): void;
62
63
  wrapperRef: React.RefObject<HTMLDivElement>;
63
- lastFocusedItemIndex: number | null;
64
- list: HTMLDivElement | null;
65
- debouncedSearchColumns: import("lodash").DebouncedFunc<(searchFilter: string, updateQuery?: boolean) => void>;
66
- resetVisibilityOrdering(): void;
67
- resetSelection(): void;
68
- handleSearchInputChange(event: ChangeEvent<HTMLInputElement>): void;
69
- searchColumns(searchFilter: string, updateQuery?: boolean): void;
70
64
  /**
71
- * Change the selected column to the next or previous column that matches the search criteria.
72
- *
73
- * queriedColumnRange stores the closes options in the case that the user clicks on an option that didn't fulfill the search criteria.
74
- * On click of the forward/back button, queriedColumnIndex is updated to either the upper or lower index in queriedColumnRange
75
- *
76
- * queriedColumnIndex is the current index within prevQueriedColumns. Not their actual index in the tree.
77
- *
78
- * @param direction The direction to move the selection
65
+ * Used to track the last focused item index to maintain focus on updates.
66
+ * Cannot use name because it may change or be deleted when undoing or redoing.
79
67
  */
80
- changeSelectedColumn(direction: 'forward' | 'back'): void;
68
+ lastFocusedItemIndex: number | null;
69
+ list: HTMLDivElement | null;
81
70
  /**
82
- * Handles changing the queriedColumnIndex on user click.
83
- *
84
- * If the option clicked matches the search criteria the index is updated immediately.
85
- *
86
- * If the option clicked doesn't meet the search criteria, the two closest options that fulfill the criteria are stored.
87
- * On click of the forward/back button the selection will change to one of those options. (Think of VS Code search functionality)
88
- *
89
- * @param name the name of the clicked column
71
+ * This is set by the search modal handlers since a column could be hidden
72
+ * and not displayed in the list. We need to wait until the update to scroll to it.
90
73
  */
91
- adjustQueriedIndex(name: string): void;
74
+ scrollAndFocusColumnOnUpdate: string | null;
75
+ resetVisibilityOrdering(): void;
76
+ resetSelection(): void;
92
77
  /**
93
78
  * Moves the currently selected columns in the direction specified.
94
79
  * Does not commit any changes to any state, just gets the required modifications.
@@ -139,7 +124,19 @@ declare class VisibilityOrderingBuilderInner extends PureComponent<VisibilityOrd
139
124
  */
140
125
  getSortMoves(itemsParam: readonly IrisGridTreeItem[], option: keyof typeof VisibilityOrderingBuilderInner.SORTING_OPTIONS, movedColumns: readonly MoveOperation[]): MoveOperation[];
141
126
  handleSortColumns(option: keyof typeof VisibilityOrderingBuilderInner.SORTING_OPTIONS): void;
142
- handleItemClick(name: string, event: React.MouseEvent<HTMLElement, MouseEvent>): void;
127
+ /**
128
+ * Handles clicking on an item in the visibility ordering list.
129
+ * Adds and removes to selection as necessary based on modifier and shift keys.
130
+ * Returns the columns to be added to the selection, if any.
131
+ *
132
+ * @param name The name of the column clicked
133
+ * @param event The click event
134
+ * @param showHiddenColumns If hidden columns should be included in the selection
135
+ * @returns The columns to be added to the selection, if any`
136
+ */
137
+ handleItemClick(name: string, event: React.MouseEvent<HTMLElement, MouseEvent>, showHiddenColumns?: boolean): string[];
138
+ handleSearchItemClicked(name: string, event: React.MouseEvent<HTMLElement>): void;
139
+ handleSearchSelect(names: string[]): void;
143
140
  /**
144
141
  * Adds columns or groups to the selected column set
145
142
  * Groups being added will add all of their children to the selection as well
@@ -159,7 +156,7 @@ declare class VisibilityOrderingBuilderInner extends PureComponent<VisibilityOrd
159
156
  * @param name Name of the column to remove
160
157
  */
161
158
  removeColumnFromSelected(name: string): void;
162
- handleDragStart(id: string): void;
159
+ handleDragStart(id: string, event: DragStartEvent): void;
163
160
  handleDragEnd(from: FlattenedIrisGridTreeItem, to: FlattenedIrisGridTreeItem): void;
164
161
  handleGroupNameChange(group: ColumnHeaderGroup, newName: string): void;
165
162
  handleGroupColorChange: import("lodash").DebouncedFuncLeading<(group: ColumnHeaderGroup, color: string | undefined) => void>;
@@ -171,7 +168,7 @@ declare class VisibilityOrderingBuilderInner extends PureComponent<VisibilityOrd
171
168
  * @returns Error message if invalid
172
169
  */
173
170
  validateGroupName(groupName: string): string;
174
- renderItem: TreeItemRenderFn<IrisGridTreeItem> & memoize.Memoized<TreeItemRenderFn<IrisGridTreeItem>>;
171
+ renderItem({ value, clone, item, ref, handleProps, }: TreeItemRenderFnProps<IrisGridTreeItemData>): JSX.Element;
175
172
  getMemoizedFirstMovableIndex: ((model: IrisGridModel, columns: readonly dh.Column[], movedColumns: readonly MoveOperation[]) => number | null) & memoize.Memoized<(model: IrisGridModel, columns: readonly dh.Column[], movedColumns: readonly MoveOperation[]) => number | null>;
176
173
  /**
177
174
  * Gets the first movable visible index
@@ -186,9 +183,11 @@ declare class VisibilityOrderingBuilderInner extends PureComponent<VisibilityOrd
186
183
  /**
187
184
  * Gets the tree of movable items in order. Memoized for efficiency
188
185
  * Use flattenItems(this.getTreeItems()) if a flat list is needed
186
+ * @param showHiddenColumns Whether to show hidden columns in the tree. Defaults to the current state value.
189
187
  * @returns The movable tree items in order
190
188
  */
191
- getTreeItems(): readonly IrisGridTreeItem[];
189
+ getTreeItems(showHiddenColumns?: boolean): readonly IrisGridTreeItem[];
190
+ getSelectedItemModelIndexes(columnNames: Set<string>): ModelIndex[];
192
191
  /**
193
192
  * Gets the selected items that are movable.
194
193
  * This is any item whose parent is not also selected.
@@ -196,10 +195,11 @@ declare class VisibilityOrderingBuilderInner extends PureComponent<VisibilityOrd
196
195
  * @returns The array of items whose parents are not selected
197
196
  */
198
197
  getSelectedParentItems(): FlattenedIrisGridTreeItem[];
199
- makeVisibilityOrderingList: ((columns: readonly DisplayColumn[], treeItems: readonly IrisGridTreeItem[], showHiddenColumns: boolean) => import("react/jsx-runtime").JSX.Element[]) & memoize.Memoized<(columns: readonly DisplayColumn[], treeItems: readonly IrisGridTreeItem[], showHiddenColumns: boolean) => import("react/jsx-runtime").JSX.Element[]>;
198
+ makeVisibilityOrderingList: ((columns: readonly DisplayColumn[], treeItems: readonly IrisGridTreeItem[], showHiddenColumns: boolean, isDraggable: boolean) => import("react/jsx-runtime").JSX.Element[]) & memoize.Memoized<(columns: readonly DisplayColumn[], treeItems: readonly IrisGridTreeItem[], showHiddenColumns: boolean, isDraggable: boolean) => import("react/jsx-runtime").JSX.Element[]>;
200
199
  renderImmovableItem: ((columnName: ColumnName) => ReactElement) & memoize.Memoized<(columnName: ColumnName) => ReactElement>;
201
200
  handleOverflowAction(key: Key): void;
202
201
  handleKeyboardShortcut(event: React.KeyboardEvent): void;
202
+ handleSearchModalOpenChange(isOpen: boolean): void;
203
203
  render(): ReactElement;
204
204
  }
205
205
  declare const VisibilityOrderingBuilder: React.MemoExoticComponent<(props: VisibilityOrderingBuilderProps) => import("react/jsx-runtime").JSX.Element>;
@@ -1 +1 @@
1
- {"version":3,"file":"VisibilityOrderingBuilder.d.ts","sourceRoot":"","sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VisibilityOrderingBuilder.d.ts","sourceRoot":"","sources":["../../../src/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.tsx"],"names":[],"mappings":"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"}