impact-ui 4.0.15 → 4.0.17

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 (112) hide show
  1. package/README.md +3 -1
  2. package/dist/_virtual/index13.js +2 -2
  3. package/dist/_virtual/index14.js +2 -2
  4. package/dist/_virtual/index15.js +2 -2
  5. package/dist/components/CreateItemFlow/CreateItemFlow.types.d.ts +39 -16
  6. package/dist/components/CreateItemFlow/CreateItemFlow.types.d.ts.map +1 -1
  7. package/dist/components/CreateItemFlow/index.d.ts +2 -1
  8. package/dist/components/CreateItemFlow/index.d.ts.map +1 -1
  9. package/dist/components/CreateItemFlow/index.js +116 -66
  10. package/dist/components/DatePicker/datePickerDropdown.d.ts.map +1 -1
  11. package/dist/components/DatePicker/datePickerDropdown.js +3 -0
  12. package/dist/components/DatePicker/datePickerFooter.d.ts +3 -1
  13. package/dist/components/DatePicker/datePickerFooter.d.ts.map +1 -1
  14. package/dist/components/DatePicker/datePickerFooter.js +24 -2
  15. package/dist/components/DateRangePicker/dateRangePickerDropdown.d.ts +1 -1
  16. package/dist/components/DateRangePicker/dateRangePickerDropdown.d.ts.map +1 -1
  17. package/dist/components/DateRangePicker/dateRangePickerDropdown.js +35 -12
  18. package/dist/components/DateRangePicker/dateRangePickerFooter.d.ts +1 -1
  19. package/dist/components/DateRangePicker/dateRangePickerFooter.d.ts.map +1 -1
  20. package/dist/components/DateRangePicker/dateRangePickerFooter.js +5 -3
  21. package/dist/components/DateRangePicker/index.d.ts.map +1 -1
  22. package/dist/components/DateRangePicker/index.js +2 -0
  23. package/dist/components/DynamicLayout/index.d.ts +9 -12
  24. package/dist/components/DynamicLayout/index.d.ts.map +1 -1
  25. package/dist/components/DynamicLayout/index.js +37 -34
  26. package/dist/components/Header/index.js +2 -2
  27. package/dist/components/NewCreateItemFlow/NewCreateItemFlow.types.d.ts +21 -0
  28. package/dist/components/NewCreateItemFlow/NewCreateItemFlow.types.d.ts.map +1 -0
  29. package/dist/components/NewCreateItemFlow/index.d.ts +5 -0
  30. package/dist/components/NewCreateItemFlow/index.d.ts.map +1 -0
  31. package/dist/components/NewCreateItemFlow/index.js +93 -0
  32. package/dist/components/NewDynamicLayout/NewDynamicLayout.types.d.ts +26 -0
  33. package/dist/components/NewDynamicLayout/NewDynamicLayout.types.d.ts.map +1 -0
  34. package/dist/components/NewDynamicLayout/index.d.ts +15 -0
  35. package/dist/components/NewDynamicLayout/index.d.ts.map +1 -0
  36. package/dist/components/NewDynamicLayout/index.js +45 -0
  37. package/dist/components/Notification/NotificationBody/NotificationList/NotificationListItem.d.ts.map +1 -1
  38. package/dist/components/Notification/NotificationBody/NotificationList/NotificationListItem.js +6 -31
  39. package/dist/components/Notification/NotificationBody/NotificationPanelContent.js +2 -2
  40. package/dist/components/Notification/NotificationBody/NotificationTaskList.js +1 -2
  41. package/dist/components/Notification/index.js +1 -1
  42. package/dist/components/Table/AgGridHeader.d.ts.map +1 -1
  43. package/dist/components/Table/AgGridHeader.js +3 -1
  44. package/dist/components/Table/NewAdvanceSearchModal/NewAdvanceSearchModalItem.js +1 -1
  45. package/dist/components/Table/Table.types.d.ts +4 -0
  46. package/dist/components/Table/Table.types.d.ts.map +1 -1
  47. package/dist/components/Table/filterUtils.d.ts +13 -0
  48. package/dist/components/Table/filterUtils.d.ts.map +1 -1
  49. package/dist/components/Table/filterUtils.js +18 -9
  50. package/dist/components/Table/index.d.ts.map +1 -1
  51. package/dist/components/Table/index.js +15 -5
  52. package/dist/components/Table/tableFunctions.d.ts +1 -0
  53. package/dist/components/Table/tableFunctions.d.ts.map +1 -1
  54. package/dist/components/Table/tableFunctions.js +2 -2
  55. package/dist/components/Table/tableHeader.d.ts +2 -1
  56. package/dist/components/Table/tableHeader.d.ts.map +1 -1
  57. package/dist/components/Table/tableHeader.js +2 -0
  58. package/dist/components/Table/tableMoreOptions.d.ts +2 -1
  59. package/dist/components/Table/tableMoreOptions.d.ts.map +1 -1
  60. package/dist/components/Table/tableMoreOptions.js +58 -14
  61. package/dist/components/Table/tableSettings.d.ts.map +1 -1
  62. package/dist/components/Table/tableSettings.js +3 -2
  63. package/dist/components/TableOld/index.d.ts.map +1 -1
  64. package/dist/components/TableOld/index.js +36 -10
  65. package/dist/components/TableOld/tableFunctions.d.ts +1 -0
  66. package/dist/components/TableOld/tableFunctions.d.ts.map +1 -1
  67. package/dist/components/TableOld/tableFunctions.js +2 -2
  68. package/dist/components/TableOld/tableHeader.d.ts +2 -1
  69. package/dist/components/TableOld/tableHeader.d.ts.map +1 -1
  70. package/dist/components/TableOld/tableHeader.js +2 -0
  71. package/dist/components/index.d.ts +5 -1
  72. package/dist/components/index.d.ts.map +1 -1
  73. package/dist/components/index.js +4 -0
  74. package/dist/components/shared/tableColumnSettings/agGridColumnSettingsApi.d.ts +17 -0
  75. package/dist/components/shared/tableColumnSettings/agGridColumnSettingsApi.d.ts.map +1 -0
  76. package/dist/components/shared/tableColumnSettings/agGridColumnSettingsApi.js +52 -0
  77. package/dist/components/shared/tableColumnSettings/columnsSettingsColumnRow.d.ts +12 -0
  78. package/dist/components/shared/tableColumnSettings/columnsSettingsColumnRow.d.ts.map +1 -0
  79. package/dist/components/shared/tableColumnSettings/columnsSettingsColumnRow.js +264 -0
  80. package/dist/components/shared/tableColumnSettings/columnsSettingsVirtualList.d.ts +39 -0
  81. package/dist/components/shared/tableColumnSettings/columnsSettingsVirtualList.d.ts.map +1 -0
  82. package/dist/components/shared/tableColumnSettings/columnsSettingsVirtualList.js +298 -0
  83. package/dist/components/shared/tableColumnSettings/columnsTabV36.d.ts +2 -0
  84. package/dist/components/shared/tableColumnSettings/columnsTabV36.d.ts.map +1 -0
  85. package/dist/components/shared/tableColumnSettings/columnsTabV36.js +1531 -0
  86. package/dist/components/shared/tableColumnSettings/index.d.ts +4 -0
  87. package/dist/components/shared/tableColumnSettings/index.d.ts.map +1 -0
  88. package/dist/components/shared/tableColumnSettings/tableSettingsV36.d.ts +41 -0
  89. package/dist/components/shared/tableColumnSettings/tableSettingsV36.d.ts.map +1 -0
  90. package/dist/components/shared/tableColumnSettings/tableSettingsV36.js +328 -0
  91. package/dist/i18n/I18nContext.d.ts.map +1 -1
  92. package/dist/i18n/I18nContext.js +1 -0
  93. package/dist/locales/de-DE.json.d.ts +12 -0
  94. package/dist/locales/de-DE.json.js +12 -0
  95. package/dist/locales/en-US.json.d.ts +13 -1
  96. package/dist/locales/en-US.json.js +13 -1
  97. package/dist/locales/es-ES.json.d.ts +678 -0
  98. package/dist/locales/es-ES.json.js +611 -0
  99. package/dist/locales/index.d.ts.map +1 -1
  100. package/dist/locales/index.js +11 -3
  101. package/dist/mcp-component-registry.json +102 -60
  102. package/dist/node_modules/@impactsmartsuite/impact-icons/dist/index.js +128 -75
  103. package/dist/node_modules/call-bind/index.js +1 -1
  104. package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/index.js +1 -1
  105. package/dist/node_modules/moment/dist/locale/es.js +98 -0
  106. package/dist/node_modules/react-with-styles-interface-css/dist/index.js +1 -1
  107. package/dist/stories/LocaleDictionaryCollapse.d.ts.map +1 -1
  108. package/dist/stories/tableStoryDefaults.d.ts +18 -0
  109. package/dist/stories/tableStoryDefaults.d.ts.map +1 -0
  110. package/dist/stories/tableStoryManyColumns.d.ts +44 -0
  111. package/dist/stories/tableStoryManyColumns.d.ts.map +1 -0
  112. package/package.json +1 -1
@@ -0,0 +1,1531 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { forwardRef, useState, useRef, useMemo, useEffect, useLayoutEffect, useCallback } from "react";
3
+ import { useSensors, useSensor, MouseSensor, TouchSensor, DndContext, closestCenter, DragOverlay } from "@dnd-kit/core";
4
+ import { arrayMove, SortableContext } from "@dnd-kit/sortable";
5
+ import { PersonUser as PersonUser_default, Globe as Globe_default } from "../../../node_modules/@impactsmartsuite/impact-icons/dist/index.js";
6
+ import default_1$1 from "../../../node_modules/@mui/icons-material/KeyboardArrowDown.js";
7
+ import default_1$3 from "../../../node_modules/@mui/icons-material/KeyboardArrowRight.js";
8
+ import default_1 from "../../../node_modules/@mui/icons-material/KeyboardArrowUp.js";
9
+ import default_1$2 from "../../../node_modules/@mui/icons-material/Search.js";
10
+ import { getAssetUrl } from "../../../utils/assetBase.js";
11
+ import { applyVisibilityMapToGrid, resolveColumnStateApi } from "./agGridColumnSettingsApi.js";
12
+ import { SortableColumnItem, NestedColumnItem, capitalizeHeader } from "./columnsSettingsColumnRow.js";
13
+ import { flattenColumnRows, SETTINGS_VIRTUALIZE_THRESHOLD, computeSettingsListHeights, buildCheckStateMap, scrollListTowardPointer, VirtualColumnList, FrozenListOuter, ScrollableListOuter } from "./columnsSettingsVirtualList.js";
14
+ import { debounce } from "../../../utils/debounce.js";
15
+ import { isViewNameUnique } from "../../../utils/helper.js";
16
+ import { Badge } from "../../Badge/index.js";
17
+ import { Button } from "../../Button/index.js";
18
+ import { Checkbox } from "../../Checkbox/index.js";
19
+ import { Input } from "../../Input/index.js";
20
+ import { Modal } from "../../Modal/index.js";
21
+ import { Prompt } from "../../Prompt/index.js";
22
+ import { RadioButtonGroup } from "../../RadioButtonGroup/index.js";
23
+ import { Select } from "../../Select/index.js";
24
+ import { useTranslation } from "../../../i18n/useTranslation.js";
25
+ import IconButton from "../../../node_modules/@mui/material/IconButton/IconButton.js";
26
+ import DragIndicator from "../../../node_modules/@mui/icons-material/esm/DragIndicator.js";
27
+ const saveViewIcon = getAssetUrl("icons/saveViewIcon.svg");
28
+ const saveViewEditIcon = getAssetUrl("icons/saveViewEditIcon.svg");
29
+ const saveViewDeleteIcon = getAssetUrl("icons/saveViewDeleteIcon.svg");
30
+ const defaultViewIcon = getAssetUrl("icons/defaultViewIcon.svg");
31
+ const defaultViewActiveIcon = getAssetUrl("icons/defaultViewIconActive.svg");
32
+ const DEFAULT_VIEW_TYPE_ICONS = {
33
+ global: /* @__PURE__ */ jsx(Globe_default, { height: 16, width: 16 }),
34
+ personal: /* @__PURE__ */ jsx(PersonUser_default, { height: 16, width: 16 })
35
+ };
36
+ const getViewTypeIcon = (viewType, viewTypeOptions) => {
37
+ var _a;
38
+ const customIcon = (_a = viewTypeOptions == null ? void 0 : viewTypeOptions.find((option) => option.value === viewType)) == null ? void 0 : _a.icon;
39
+ return customIcon || DEFAULT_VIEW_TYPE_ICONS[viewType] || null;
40
+ };
41
+ const filterColumnsBySearch = (columns, searchText) => {
42
+ if (!searchText) return columns;
43
+ return columns.map((column) => {
44
+ const matches = column.headerName.toLowerCase().includes(searchText);
45
+ const filteredChildren = column.children ? filterColumnsBySearch(column.children, searchText) : null;
46
+ if (matches || (filteredChildren == null ? void 0 : filteredChildren.length) > 0) {
47
+ return {
48
+ ...column,
49
+ children: filteredChildren
50
+ };
51
+ }
52
+ return null;
53
+ }).filter(Boolean);
54
+ };
55
+ const getDirectColumnIds = (columns) => (columns || []).map((col) => col.colId).filter(Boolean);
56
+ const getTopLevelColumnIds = getDirectColumnIds;
57
+ const findColumnById = (columns, colId) => {
58
+ var _a;
59
+ for (const col of columns || []) {
60
+ if (col.colId === colId) return col;
61
+ if ((_a = col.children) == null ? void 0 : _a.length) {
62
+ const found = findColumnById(col.children, colId);
63
+ if (found) return found;
64
+ }
65
+ }
66
+ return null;
67
+ };
68
+ const findColumnLocation = (columns, colId, parent = null) => {
69
+ var _a;
70
+ for (const col of columns || []) {
71
+ if (col.colId === colId) {
72
+ return { column: col, parent, siblings: columns };
73
+ }
74
+ if ((_a = col.children) == null ? void 0 : _a.length) {
75
+ const found = findColumnLocation(col.children, colId, col);
76
+ if (found) return found;
77
+ }
78
+ }
79
+ return null;
80
+ };
81
+ const reorderSiblingsInTree = (columns, parentId, siblingOrder) => (columns || []).map((col) => {
82
+ var _a, _b;
83
+ if (col.colId === parentId && ((_a = col.children) == null ? void 0 : _a.length)) {
84
+ const byId = new Map(col.children.map((c) => [c.colId, c]));
85
+ const ordered = siblingOrder.map((id) => byId.get(id)).filter(Boolean);
86
+ const orderedSet = new Set(siblingOrder);
87
+ const rest = col.children.filter((c) => !orderedSet.has(c.colId));
88
+ return { ...col, children: [...ordered, ...rest] };
89
+ }
90
+ if ((_b = col.children) == null ? void 0 : _b.length) {
91
+ return {
92
+ ...col,
93
+ children: reorderSiblingsInTree(col.children, parentId, siblingOrder)
94
+ };
95
+ }
96
+ return col;
97
+ });
98
+ const collectLeafColIds = (column) => {
99
+ var _a;
100
+ if (!((_a = column == null ? void 0 : column.children) == null ? void 0 : _a.length)) {
101
+ return (column == null ? void 0 : column.colId) ? [column.colId] : [];
102
+ }
103
+ return column.children.flatMap((child) => collectLeafColIds(child));
104
+ };
105
+ const buildOrderedLeafIds = (topLevelColumns, topLevelOrder) => {
106
+ const byId = new Map(topLevelColumns.map((c) => [c.colId, c]));
107
+ return topLevelOrder.flatMap((id) => {
108
+ const col = byId.get(id);
109
+ return col ? collectLeafColIds(col) : [id];
110
+ });
111
+ };
112
+ const applyColumnReorderToGrid = (gridApi, { allColumns, frozenOrder, scrollableOrder, pinChanges, childReorder }, gridRef) => {
113
+ if (!gridApi) return;
114
+ const stateApi = resolveColumnStateApi(gridApi, gridRef) ?? gridApi;
115
+ let columns = allColumns;
116
+ if ((childReorder == null ? void 0 : childReorder.parentId) && (childReorder == null ? void 0 : childReorder.siblingOrder)) {
117
+ columns = reorderSiblingsInTree(columns, childReorder.parentId, childReorder.siblingOrder);
118
+ }
119
+ const byId = new Map(columns.map((c) => [c.colId, c]));
120
+ if (pinChanges == null ? void 0 : pinChanges.length) {
121
+ const pinState = [];
122
+ pinChanges.forEach(({ colId, pinned }) => {
123
+ const col = byId.get(colId) || findColumnById(columns, colId);
124
+ const leafIds = col ? collectLeafColIds(col) : [colId];
125
+ leafIds.forEach((leafId) => {
126
+ pinState.push({ colId: leafId, pinned });
127
+ });
128
+ });
129
+ stateApi.applyColumnState({ state: pinState });
130
+ }
131
+ const orderedLeafIds = [
132
+ ...buildOrderedLeafIds(columns, frozenOrder),
133
+ ...buildOrderedLeafIds(columns, scrollableOrder)
134
+ ];
135
+ const seen = /* @__PURE__ */ new Set();
136
+ const uniqueLeafIds = orderedLeafIds.filter((id) => {
137
+ if (seen.has(id)) return false;
138
+ seen.add(id);
139
+ return true;
140
+ });
141
+ stateApi.applyColumnState({
142
+ state: uniqueLeafIds.map((colId) => ({ colId })),
143
+ applyOrder: true
144
+ });
145
+ };
146
+ const collectLeafVisibility = (columns) => {
147
+ const leaves = [];
148
+ const walk = (cols) => {
149
+ cols.forEach((col) => {
150
+ var _a;
151
+ if (((_a = col.children) == null ? void 0 : _a.length) > 0) {
152
+ walk(col.children);
153
+ } else {
154
+ leaves.push(!!col.isVisible);
155
+ }
156
+ });
157
+ };
158
+ walk(columns);
159
+ return leaves;
160
+ };
161
+ const getCheckState = (columns) => {
162
+ const leaves = collectLeafVisibility(columns);
163
+ if (leaves.length === 0) {
164
+ return { checked: false, indeterminate: false };
165
+ }
166
+ const visibleCount = leaves.filter(Boolean).length;
167
+ if (visibleCount === 0) {
168
+ return { checked: false, indeterminate: false };
169
+ }
170
+ if (visibleCount === leaves.length) {
171
+ return { checked: true, indeterminate: false };
172
+ }
173
+ return { checked: true, indeterminate: true };
174
+ };
175
+ const applyVisibilityToggle = (columns, colId) => {
176
+ const visibilityMap = /* @__PURE__ */ new Map();
177
+ const updateChildren = (children, visibility) => children.map((column) => {
178
+ visibilityMap.set(column.colId, visibility);
179
+ return {
180
+ ...column,
181
+ isVisible: visibility,
182
+ children: column.children ? updateChildren(column.children, visibility) : null
183
+ };
184
+ });
185
+ const update = (cols) => {
186
+ let changed = false;
187
+ const next = cols.map((column) => {
188
+ if (column.colId === colId) {
189
+ changed = true;
190
+ const newVisibility = !column.isVisible;
191
+ visibilityMap.set(column.colId, newVisibility);
192
+ return {
193
+ ...column,
194
+ isVisible: newVisibility,
195
+ children: column.children ? updateChildren(column.children, newVisibility) : null
196
+ };
197
+ }
198
+ if (column.children) {
199
+ const updatedChildren = update(column.children);
200
+ if (updatedChildren === column.children) return column;
201
+ changed = true;
202
+ const isAnyChildVisible = updatedChildren.some((child) => child.isVisible);
203
+ visibilityMap.set(column.colId, isAnyChildVisible);
204
+ return {
205
+ ...column,
206
+ isVisible: isAnyChildVisible,
207
+ children: updatedChildren
208
+ };
209
+ }
210
+ return column;
211
+ });
212
+ return changed ? next : cols;
213
+ };
214
+ return { columns: update(columns), visibilityMap };
215
+ };
216
+ const applyVisibilityToAll = (columns, visibility) => {
217
+ const visibilityMap = /* @__PURE__ */ new Map();
218
+ const update = (cols) => cols.map((column) => {
219
+ visibilityMap.set(column.colId, visibility);
220
+ return {
221
+ ...column,
222
+ isVisible: visibility,
223
+ children: column.children ? update(column.children) : null
224
+ };
225
+ });
226
+ return { columns: update(columns), visibilityMap };
227
+ };
228
+ const mouseSensorOptions = { activationConstraint: { distance: 5 } };
229
+ const touchSensorOptions = { activationConstraint: { delay: 200, tolerance: 5 } };
230
+ const ColumnsV36 = forwardRef((props, ref) => {
231
+ var _a, _b, _c, _d, _e, _f;
232
+ const { t } = useTranslation();
233
+ const [frozenColumn, setFrozenColumn] = useState([]);
234
+ const [scrollableColumn, setScrollableColumn] = useState([]);
235
+ const [searchInputValue, setSearchInputValue] = useState("");
236
+ const [debouncedSearchText, setDebouncedSearchText] = useState("");
237
+ const [collapsedScrollable, setCollapsedScrollable] = useState(false);
238
+ const [collapsedColumn, setCollapsedcolumn] = useState(false);
239
+ const [collapsedScrollColumns, setCollapsedScrollColumns] = useState({});
240
+ const [collapsedFrozenColumns, setCollapsedFrozenColumns] = useState({});
241
+ const [activeDragId, setActiveDragId] = useState(null);
242
+ const reorderLiveRegionRef = useRef(null);
243
+ const [openSaveViewModal, setOpenSaveViewModal] = useState(false);
244
+ const [isDefaultView, setIsDefaultView] = useState(false);
245
+ const [selectedViewType, setSelectedViewType] = useState(
246
+ (_a = props.saveViewCustomFilter) == null ? void 0 : _a.selectedOption
247
+ );
248
+ const [savedViewsOptions, setSavedViewsOptions] = useState(props.savedViewsOptions || []);
249
+ const [filteredSavedViewsOptions, setFilteredSavedViewsOptions] = useState(
250
+ props.savedViewsOptions || []
251
+ );
252
+ const [currentSaveViewOptions, setCurrentSaveViewOptions] = useState([]);
253
+ const [selectedSavedView, setSelectedSavedView] = useState(null);
254
+ const [inputValue, setInputValue] = useState("");
255
+ const [isOpen, setIsOpen] = useState(false);
256
+ const [openSaveViewMenu, setOpenSaveViewMenu] = useState(false);
257
+ const [selectedBadge, setSelectedBadge] = useState("All");
258
+ const [isEditView, setIsEditView] = useState(false);
259
+ const [editedView, setEditedView] = useState(null);
260
+ const [saveViewSearchText, setSaveViewSearchText] = useState("");
261
+ const [openDeletePrompt, setOpenDeletePrompt] = useState(false);
262
+ const [deleteView, setDeleteView] = useState(null);
263
+ const [selectedView, setSelectedView] = useState(null);
264
+ const isDraggingRef = useRef(false);
265
+ const isInternalUpdateRef = useRef(false);
266
+ const isColumnPinnedRef = useRef(false);
267
+ const frozenListRef = useRef(null);
268
+ const scrollableListRef = useRef(null);
269
+ const collapseContainerRef = useRef(null);
270
+ const autoScrollRafRef = useRef(null);
271
+ const dragPointerYRef = useRef(null);
272
+ const debouncedSetSearchText = useMemo(
273
+ () => debounce((value) => {
274
+ setDebouncedSearchText(value);
275
+ }, 150),
276
+ []
277
+ );
278
+ useEffect(
279
+ () => () => {
280
+ debouncedSetSearchText.cancel();
281
+ if (autoScrollRafRef.current != null) {
282
+ cancelAnimationFrame(autoScrollRafRef.current);
283
+ autoScrollRafRef.current = null;
284
+ }
285
+ },
286
+ [debouncedSetSearchText]
287
+ );
288
+ const filteredFrozenColumns = useMemo(
289
+ () => filterColumnsBySearch(frozenColumn, debouncedSearchText),
290
+ [frozenColumn, debouncedSearchText]
291
+ );
292
+ const filteredScrollableColumns = useMemo(
293
+ () => filterColumnsBySearch(scrollableColumn, debouncedSearchText),
294
+ [scrollableColumn, debouncedSearchText]
295
+ );
296
+ const frozenColumnOrder = useMemo(
297
+ () => getTopLevelColumnIds(
298
+ filteredFrozenColumns.filter((c) => c.headerName !== "N/A" && c.isVisible !== false)
299
+ ),
300
+ [filteredFrozenColumns]
301
+ );
302
+ const scrollableColumnOrder = useMemo(
303
+ () => getTopLevelColumnIds(
304
+ filteredScrollableColumns.filter((c) => c.headerName !== "N/A" && c.isVisible !== false)
305
+ ),
306
+ [filteredScrollableColumns]
307
+ );
308
+ const fullFrozenOrder = useMemo(
309
+ () => getTopLevelColumnIds(frozenColumn.filter((c) => c.headerName !== "N/A")),
310
+ [frozenColumn]
311
+ );
312
+ const fullScrollableOrder = useMemo(
313
+ () => getTopLevelColumnIds(scrollableColumn.filter((c) => c.headerName !== "N/A")),
314
+ [scrollableColumn]
315
+ );
316
+ const frozenRows = useMemo(
317
+ () => flattenColumnRows(filteredFrozenColumns, collapsedFrozenColumns, "frozen"),
318
+ [filteredFrozenColumns, collapsedFrozenColumns]
319
+ );
320
+ const scrollableRows = useMemo(
321
+ () => collapsedScrollable ? [] : flattenColumnRows(filteredScrollableColumns, collapsedScrollColumns, "scrollable"),
322
+ [filteredScrollableColumns, collapsedScrollColumns, collapsedScrollable]
323
+ );
324
+ const shouldVirtualize = frozenRows.length + scrollableRows.length > SETTINGS_VIRTUALIZE_THRESHOLD;
325
+ const [listViewportHeight, setListViewportHeight] = useState(0);
326
+ useLayoutEffect(() => {
327
+ const el = collapseContainerRef.current;
328
+ if (!el || !shouldVirtualize) return void 0;
329
+ const measure = () => {
330
+ setListViewportHeight(el.clientHeight);
331
+ };
332
+ measure();
333
+ if (typeof ResizeObserver === "undefined") {
334
+ window.addEventListener("resize", measure);
335
+ return () => {
336
+ window.removeEventListener("resize", measure);
337
+ };
338
+ }
339
+ const observer = new ResizeObserver(measure);
340
+ observer.observe(el);
341
+ return () => {
342
+ observer.disconnect();
343
+ };
344
+ }, [shouldVirtualize, collapsedColumn, props.isSaveViewEnabled]);
345
+ const listHeights = useMemo(
346
+ () => computeSettingsListHeights({
347
+ shouldVirtualize,
348
+ listViewportHeight,
349
+ frozenRowCount: frozenRows.length,
350
+ scrollableRowCount: scrollableRows.length
351
+ }),
352
+ [shouldVirtualize, listViewportHeight, frozenRows.length, scrollableRows.length]
353
+ );
354
+ const checkStateMap = useMemo(
355
+ () => buildCheckStateMap([filteredFrozenColumns, filteredScrollableColumns]),
356
+ [filteredFrozenColumns, filteredScrollableColumns]
357
+ );
358
+ const sortableItems = useMemo(() => {
359
+ if (!shouldVirtualize) {
360
+ return [...scrollableColumnOrder, ...frozenColumnOrder];
361
+ }
362
+ return [...scrollableRows, ...frozenRows].filter((row) => row.column.isVisible !== false).map((row) => row.column.colId);
363
+ }, [shouldVirtualize, scrollableColumnOrder, frozenColumnOrder, scrollableRows, frozenRows]);
364
+ const allColumnsForLookup = useMemo(
365
+ () => [...frozenColumn, ...scrollableColumn],
366
+ [frozenColumn, scrollableColumn]
367
+ );
368
+ const activeDragColumn = useMemo(
369
+ () => activeDragId ? findColumnById(allColumnsForLookup, activeDragId) : null,
370
+ [activeDragId, allColumnsForLookup]
371
+ );
372
+ const mainCheckState = useMemo(
373
+ () => getCheckState(filteredScrollableColumns),
374
+ [filteredScrollableColumns]
375
+ );
376
+ const allCheckState = useMemo(
377
+ () => getCheckState([...filteredFrozenColumns, ...filteredScrollableColumns]),
378
+ [filteredFrozenColumns, filteredScrollableColumns]
379
+ );
380
+ const mainChecked = mainCheckState.checked;
381
+ const allColumnVisibility = allCheckState.checked;
382
+ const sensors = useSensors(
383
+ useSensor(MouseSensor, mouseSensorOptions),
384
+ useSensor(TouchSensor, touchSensorOptions)
385
+ );
386
+ useEffect(() => {
387
+ const views = props.savedViewsOptions ?? [];
388
+ setSavedViewsOptions(views);
389
+ setFilteredSavedViewsOptions(views);
390
+ setSelectedView(views.filter((view) => view.isActive));
391
+ if (views.length === 0) {
392
+ setOpenSaveViewMenu(false);
393
+ setSaveViewSearchText("");
394
+ }
395
+ const matchingViews = views.filter(
396
+ (view) => !selectedViewType || view.viewType === selectedViewType
397
+ );
398
+ setCurrentSaveViewOptions(
399
+ views.map((view) => {
400
+ var _a2;
401
+ return {
402
+ label: /* @__PURE__ */ jsxs("span", { className: "save-view-select-option-label", children: [
403
+ /* @__PURE__ */ jsx("span", { className: "save-view-select-option-icon", children: getViewTypeIcon(view.viewType, (_a2 = props.saveViewCustomFilter) == null ? void 0 : _a2.options) }),
404
+ view.viewName
405
+ ] }),
406
+ value: view.viewName,
407
+ disabled: view == null ? void 0 : view.isDisabled,
408
+ viewType: view.viewType,
409
+ isDefaultView: view.isDefaultView
410
+ };
411
+ })
412
+ );
413
+ setSelectedSavedView(
414
+ (prev) => (prev == null ? void 0 : prev.value) && matchingViews.some((view) => view.viewName === prev.value) ? prev : null
415
+ );
416
+ }, [props.savedViewsOptions, selectedViewType]);
417
+ useEffect(() => {
418
+ if (selectedSavedView == null ? void 0 : selectedSavedView.value) {
419
+ setInputValue(selectedSavedView.value);
420
+ setSelectedViewType(selectedSavedView.viewType);
421
+ setIsDefaultView(!!selectedSavedView.isDefaultView);
422
+ } else {
423
+ setInputValue("");
424
+ setIsDefaultView(false);
425
+ }
426
+ }, [selectedSavedView]);
427
+ const isReplaceViewSelected = !!(selectedSavedView == null ? void 0 : selectedSavedView.value);
428
+ const isInputValueEmpty = !inputValue.trim();
429
+ const getColumnDefs = useCallback((columns) => {
430
+ return columns.map((column) => {
431
+ if (column.children) {
432
+ const updatedChildren = getColumnDefs(column.children);
433
+ const allChildrenHidden = updatedChildren.every((child) => child.hide === true);
434
+ return {
435
+ ...column,
436
+ children: updatedChildren,
437
+ hide: allChildrenHidden
438
+ };
439
+ }
440
+ return column;
441
+ });
442
+ }, []);
443
+ const updateColumnState = useCallback(() => {
444
+ var _a2, _b2;
445
+ const getColumnState = (columns) => columns.map((column) => {
446
+ var _a3;
447
+ return {
448
+ colId: column.colId || column.field || column.headerName,
449
+ headerName: column.headerName || column.field || "N/A",
450
+ isVisible: !(column == null ? void 0 : column.hide),
451
+ isPinned: column.pinned ? true : false,
452
+ children: ((_a3 = column == null ? void 0 : column.children) == null ? void 0 : _a3.length) > 0 ? getColumnState(column.children) : null,
453
+ disabled: column == null ? void 0 : column.disableColumnCheckboxInSettings
454
+ };
455
+ });
456
+ const columnDefs = getColumnDefs(((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.api) == null ? void 0 : _b2.getColumnDefs()) || props.column);
457
+ const columnState = getColumnState(columnDefs);
458
+ const { frozColumn, scrollColumn } = (columnState || []).reduce(
459
+ (acc, column) => {
460
+ if (column.isPinned) {
461
+ acc.frozColumn.push(column);
462
+ } else {
463
+ acc.scrollColumn.push(column);
464
+ }
465
+ return acc;
466
+ },
467
+ { frozColumn: [], scrollColumn: [] }
468
+ );
469
+ setFrozenColumn(frozColumn);
470
+ setScrollableColumn(scrollColumn);
471
+ }, [getColumnDefs, ref, props.column]);
472
+ const debouncedUpdateColumnState = useMemo(
473
+ () => debounce(updateColumnState, 100),
474
+ [updateColumnState]
475
+ );
476
+ const isColumnsPanelOpen = props.showTableSetting ?? props.showMenu;
477
+ useEffect(() => {
478
+ var _a2, _b2, _c2, _d2, _e2, _f2;
479
+ if (isColumnsPanelOpen || isColumnPinnedRef.current) {
480
+ isColumnPinnedRef.current = false;
481
+ updateColumnState();
482
+ const onColumnEvent = () => {
483
+ if (isDraggingRef.current || isInternalUpdateRef.current) {
484
+ return;
485
+ }
486
+ isColumnPinnedRef.current = true;
487
+ debouncedUpdateColumnState();
488
+ };
489
+ if (ref == null ? void 0 : ref.current) {
490
+ (_b2 = (_a2 = ref.current) == null ? void 0 : _a2.api) == null ? void 0 : _b2.addEventListener("columnPinned", onColumnEvent);
491
+ (_d2 = (_c2 = ref.current) == null ? void 0 : _c2.api) == null ? void 0 : _d2.addEventListener("columnMoved", onColumnEvent);
492
+ (_f2 = (_e2 = ref.current) == null ? void 0 : _e2.api) == null ? void 0 : _f2.addEventListener("columnVisible", onColumnEvent);
493
+ }
494
+ return () => {
495
+ var _a3, _b3, _c3, _d3, _e3, _f3;
496
+ if (ref == null ? void 0 : ref.current) {
497
+ (_b3 = (_a3 = ref.current) == null ? void 0 : _a3.api) == null ? void 0 : _b3.removeEventListener("columnPinned", onColumnEvent);
498
+ (_d3 = (_c3 = ref.current) == null ? void 0 : _c3.api) == null ? void 0 : _d3.removeEventListener("columnMoved", onColumnEvent);
499
+ (_f3 = (_e3 = ref.current) == null ? void 0 : _e3.api) == null ? void 0 : _f3.removeEventListener("columnVisible", onColumnEvent);
500
+ }
501
+ };
502
+ }
503
+ }, [isColumnsPanelOpen, updateColumnState, debouncedUpdateColumnState, ref]);
504
+ const handleSearchChange = useCallback(
505
+ (e) => {
506
+ const value = e.target.value;
507
+ setSearchInputValue(value);
508
+ debouncedSetSearchText(value.toLowerCase());
509
+ },
510
+ [debouncedSetSearchText]
511
+ );
512
+ const toggleColumnVisibility = useCallback(
513
+ (colId, section) => {
514
+ var _a2;
515
+ const api = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.api;
516
+ const setter = section === "frozen" ? setFrozenColumn : setScrollableColumn;
517
+ setter((prev) => {
518
+ const { columns, visibilityMap } = applyVisibilityToggle(prev, colId);
519
+ isInternalUpdateRef.current = true;
520
+ applyVisibilityMapToGrid(api, visibilityMap, ref);
521
+ queueMicrotask(() => {
522
+ isInternalUpdateRef.current = false;
523
+ });
524
+ return columns;
525
+ });
526
+ },
527
+ [ref]
528
+ );
529
+ const toggleColumnVisibilityFrozen = useCallback(
530
+ (colId) => {
531
+ toggleColumnVisibility(colId, "frozen");
532
+ },
533
+ [toggleColumnVisibility]
534
+ );
535
+ const toggleColumnVisibilityScroll = useCallback(
536
+ (colId) => {
537
+ toggleColumnVisibility(colId, "scrollable");
538
+ },
539
+ [toggleColumnVisibility]
540
+ );
541
+ const onMainCheckboxChange = useCallback(() => {
542
+ var _a2;
543
+ const api = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.api;
544
+ const nextVisible = !mainChecked;
545
+ const filteredIds = debouncedSearchText ? new Set(getTopLevelColumnIds(filteredScrollableColumns)) : null;
546
+ setScrollableColumn((prev) => {
547
+ let result;
548
+ if (filteredIds) {
549
+ const visibilityMap = /* @__PURE__ */ new Map();
550
+ const update = (cols) => cols.map((column) => {
551
+ var _a3;
552
+ const inFilter = filteredIds.has(column.colId) || ((_a3 = column.children) == null ? void 0 : _a3.some((c) => filteredIds.has(c.colId)));
553
+ if (!inFilter) return column;
554
+ visibilityMap.set(column.colId, nextVisible);
555
+ return {
556
+ ...column,
557
+ isVisible: nextVisible,
558
+ children: column.children ? update(column.children) : null
559
+ };
560
+ });
561
+ result = { columns: update(prev), visibilityMap };
562
+ } else {
563
+ result = applyVisibilityToAll(prev, nextVisible);
564
+ }
565
+ isInternalUpdateRef.current = true;
566
+ applyVisibilityMapToGrid(api, result.visibilityMap, ref);
567
+ queueMicrotask(() => {
568
+ isInternalUpdateRef.current = false;
569
+ });
570
+ return result.columns;
571
+ });
572
+ }, [ref, mainChecked, filteredScrollableColumns, debouncedSearchText]);
573
+ const onAllColumnCheckBoxChange = useCallback(() => {
574
+ var _a2;
575
+ const api = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.api;
576
+ const nextVisible = !allColumnVisibility;
577
+ const frozenResult = applyVisibilityToAll(frozenColumn, nextVisible);
578
+ const scrollResult = applyVisibilityToAll(scrollableColumn, nextVisible);
579
+ const combinedMap = new Map([...frozenResult.visibilityMap, ...scrollResult.visibilityMap]);
580
+ isInternalUpdateRef.current = true;
581
+ applyVisibilityMapToGrid(api, combinedMap, ref);
582
+ setFrozenColumn(frozenResult.columns);
583
+ setScrollableColumn(scrollResult.columns);
584
+ queueMicrotask(() => {
585
+ isInternalUpdateRef.current = false;
586
+ });
587
+ }, [ref, allColumnVisibility, frozenColumn, scrollableColumn]);
588
+ const toggleScrollableCollapse = useCallback((e) => {
589
+ e.stopPropagation();
590
+ setCollapsedScrollable((prev) => !prev);
591
+ }, []);
592
+ const toggleColumnCollapse = useCallback((e) => {
593
+ e.stopPropagation();
594
+ setCollapsedcolumn((prev) => !prev);
595
+ }, []);
596
+ const toggleScrollColumnCollapse = useCallback((colId) => {
597
+ setCollapsedScrollColumns((prev) => ({
598
+ ...prev,
599
+ [colId]: !prev[colId]
600
+ }));
601
+ }, []);
602
+ const toggleFrozenColumnCollapse = useCallback((colId) => {
603
+ setCollapsedFrozenColumns((prev) => ({
604
+ ...prev,
605
+ [colId]: !prev[colId]
606
+ }));
607
+ }, []);
608
+ const announceReorder = useCallback(
609
+ (colId, direction) => {
610
+ const el = reorderLiveRegionRef.current;
611
+ if (!el) return;
612
+ el.textContent = direction === -1 ? t("table.columns.reorderMovedUp", { name: colId }) : t("table.columns.reorderMovedDown", { name: colId });
613
+ },
614
+ [t]
615
+ );
616
+ const commitColumnReorder = useCallback(
617
+ ({ frozenOrder, scrollableOrder, pinChanges, childReorder, announce }) => {
618
+ var _a2;
619
+ const api = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.api;
620
+ if (!api) return;
621
+ isInternalUpdateRef.current = true;
622
+ isDraggingRef.current = true;
623
+ applyColumnReorderToGrid(
624
+ api,
625
+ {
626
+ allColumns: allColumnsForLookup,
627
+ frozenOrder,
628
+ scrollableOrder,
629
+ pinChanges,
630
+ childReorder
631
+ },
632
+ ref
633
+ );
634
+ updateColumnState();
635
+ if (announce) {
636
+ announceReorder(announce.colId, announce.direction);
637
+ }
638
+ queueMicrotask(() => {
639
+ isDraggingRef.current = false;
640
+ isInternalUpdateRef.current = false;
641
+ });
642
+ },
643
+ [ref, allColumnsForLookup, updateColumnState, announceReorder]
644
+ );
645
+ const stopSettingsListAutoScroll = useCallback(() => {
646
+ if (autoScrollRafRef.current != null) {
647
+ cancelAnimationFrame(autoScrollRafRef.current);
648
+ autoScrollRafRef.current = null;
649
+ }
650
+ dragPointerYRef.current = null;
651
+ }, []);
652
+ const tickSettingsListAutoScroll = useCallback(() => {
653
+ autoScrollRafRef.current = null;
654
+ const y = dragPointerYRef.current;
655
+ if (y == null) return;
656
+ const moved = scrollListTowardPointer(frozenListRef.current, y) || scrollListTowardPointer(scrollableListRef.current, y);
657
+ if (moved) {
658
+ autoScrollRafRef.current = requestAnimationFrame(tickSettingsListAutoScroll);
659
+ }
660
+ }, []);
661
+ const handleDragStart = useCallback((event) => {
662
+ isDraggingRef.current = true;
663
+ setActiveDragId(event.active.id);
664
+ }, []);
665
+ const handleDragMove = useCallback(
666
+ (event) => {
667
+ var _a2, _b2, _c2, _d2;
668
+ if (!shouldVirtualize) return;
669
+ const translated = (_c2 = (_b2 = (_a2 = event.active) == null ? void 0 : _a2.rect) == null ? void 0 : _b2.current) == null ? void 0 : _c2.translated;
670
+ const y = translated ? translated.top + translated.height / 2 : (_d2 = event.activatorEvent) == null ? void 0 : _d2.clientY;
671
+ if (y == null) return;
672
+ dragPointerYRef.current = y;
673
+ if (autoScrollRafRef.current == null) {
674
+ autoScrollRafRef.current = requestAnimationFrame(tickSettingsListAutoScroll);
675
+ }
676
+ },
677
+ [shouldVirtualize, tickSettingsListAutoScroll]
678
+ );
679
+ const handleDragCancel = useCallback(() => {
680
+ stopSettingsListAutoScroll();
681
+ setActiveDragId(null);
682
+ isDraggingRef.current = false;
683
+ }, [stopSettingsListAutoScroll]);
684
+ const handleDragEnd = useCallback(
685
+ (event) => {
686
+ const { active, over } = event;
687
+ stopSettingsListAutoScroll();
688
+ setActiveDragId(null);
689
+ if (!over || active.id === over.id) {
690
+ isDraggingRef.current = false;
691
+ return;
692
+ }
693
+ const activeId = active.id;
694
+ const overId = over.id;
695
+ const activeLoc = findColumnLocation(frozenColumn, activeId) || findColumnLocation(scrollableColumn, activeId);
696
+ if (!activeLoc) {
697
+ isDraggingRef.current = false;
698
+ return;
699
+ }
700
+ if (activeLoc.parent) {
701
+ const overLoc = findColumnLocation(frozenColumn, overId) || findColumnLocation(scrollableColumn, overId);
702
+ if (!(overLoc == null ? void 0 : overLoc.parent) || overLoc.parent.colId !== activeLoc.parent.colId) {
703
+ isDraggingRef.current = false;
704
+ return;
705
+ }
706
+ const siblingIds = getDirectColumnIds(activeLoc.siblings);
707
+ const oldIndex = siblingIds.indexOf(activeId);
708
+ const newIndex = siblingIds.indexOf(overId);
709
+ if (oldIndex === -1 || newIndex === -1) {
710
+ isDraggingRef.current = false;
711
+ return;
712
+ }
713
+ commitColumnReorder({
714
+ frozenOrder: fullFrozenOrder,
715
+ scrollableOrder: fullScrollableOrder,
716
+ childReorder: {
717
+ parentId: activeLoc.parent.colId,
718
+ siblingOrder: arrayMove(siblingIds, oldIndex, newIndex)
719
+ }
720
+ });
721
+ return;
722
+ }
723
+ const isFrozenSource = fullFrozenOrder.includes(activeId);
724
+ const isScrollableSource = fullScrollableOrder.includes(activeId);
725
+ if (!isFrozenSource && !isScrollableSource) {
726
+ isDraggingRef.current = false;
727
+ return;
728
+ }
729
+ const isFrozenTarget = fullFrozenOrder.includes(overId) || frozenColumnOrder.includes(overId);
730
+ const isScrollableTarget = fullScrollableOrder.includes(overId) || scrollableColumnOrder.includes(overId);
731
+ const visibleScrollable = scrollableColumnOrder.length ? scrollableColumnOrder : fullScrollableOrder;
732
+ let nextFrozen = [...fullFrozenOrder];
733
+ let nextScrollable = [...fullScrollableOrder];
734
+ let pinChanges = null;
735
+ if (isFrozenSource && isFrozenTarget) {
736
+ const oldIndex = nextFrozen.indexOf(activeId);
737
+ const newIndex = nextFrozen.indexOf(overId);
738
+ if (oldIndex === -1 || newIndex === -1) {
739
+ isDraggingRef.current = false;
740
+ return;
741
+ }
742
+ nextFrozen = arrayMove(nextFrozen, oldIndex, newIndex);
743
+ } else if (isScrollableSource && isScrollableTarget) {
744
+ const oldIndex = nextScrollable.indexOf(activeId);
745
+ const newIndex = nextScrollable.indexOf(overId);
746
+ if (oldIndex === -1 || newIndex === -1) {
747
+ isDraggingRef.current = false;
748
+ return;
749
+ }
750
+ nextScrollable = arrayMove(nextScrollable, oldIndex, newIndex);
751
+ } else if (isFrozenSource && isScrollableTarget) {
752
+ nextFrozen = nextFrozen.filter((id) => id !== activeId);
753
+ const overIndex = visibleScrollable.indexOf(overId);
754
+ const insertAt = overIndex === -1 ? nextScrollable.length : !nextScrollable.includes(overId) ? nextScrollable.length : nextScrollable.indexOf(overId);
755
+ nextScrollable = [...nextScrollable];
756
+ nextScrollable.splice(insertAt, 0, activeId);
757
+ pinChanges = [{ colId: activeId, pinned: null }];
758
+ } else if (isScrollableSource && isFrozenTarget) {
759
+ nextScrollable = nextScrollable.filter((id) => id !== activeId);
760
+ const insertAt = !nextFrozen.includes(overId) ? nextFrozen.length : nextFrozen.indexOf(overId);
761
+ nextFrozen = [...nextFrozen];
762
+ nextFrozen.splice(insertAt, 0, activeId);
763
+ pinChanges = [{ colId: activeId, pinned: "left" }];
764
+ } else {
765
+ isDraggingRef.current = false;
766
+ return;
767
+ }
768
+ commitColumnReorder({
769
+ frozenOrder: nextFrozen,
770
+ scrollableOrder: nextScrollable,
771
+ pinChanges
772
+ });
773
+ },
774
+ [
775
+ frozenColumn,
776
+ scrollableColumn,
777
+ fullFrozenOrder,
778
+ fullScrollableOrder,
779
+ frozenColumnOrder,
780
+ scrollableColumnOrder,
781
+ commitColumnReorder,
782
+ stopSettingsListAutoScroll
783
+ ]
784
+ );
785
+ const handleKeyboardReorder = useCallback(
786
+ (colId, direction) => {
787
+ const loc = findColumnLocation(frozenColumn, colId) || findColumnLocation(scrollableColumn, colId);
788
+ if (!loc) return;
789
+ if (loc.parent) {
790
+ const siblingIds = getDirectColumnIds(loc.siblings);
791
+ const oldIndex = siblingIds.indexOf(colId);
792
+ const newIndex = oldIndex + direction;
793
+ if (oldIndex === -1 || newIndex < 0 || newIndex >= siblingIds.length) return;
794
+ commitColumnReorder({
795
+ frozenOrder: fullFrozenOrder,
796
+ scrollableOrder: fullScrollableOrder,
797
+ childReorder: {
798
+ parentId: loc.parent.colId,
799
+ siblingOrder: arrayMove(siblingIds, oldIndex, newIndex)
800
+ },
801
+ announce: { colId, direction }
802
+ });
803
+ } else {
804
+ const isFrozen = fullFrozenOrder.includes(colId);
805
+ const isScrollable = fullScrollableOrder.includes(colId);
806
+ if (!isFrozen && !isScrollable) return;
807
+ const order = isFrozen ? [...fullFrozenOrder] : [...fullScrollableOrder];
808
+ const oldIndex = order.indexOf(colId);
809
+ const newIndex = oldIndex + direction;
810
+ if (oldIndex === -1 || newIndex < 0 || newIndex >= order.length) return;
811
+ const newOrder = arrayMove(order, oldIndex, newIndex);
812
+ commitColumnReorder({
813
+ frozenOrder: isFrozen ? newOrder : fullFrozenOrder,
814
+ scrollableOrder: isScrollable ? newOrder : fullScrollableOrder,
815
+ announce: { colId, direction }
816
+ });
817
+ }
818
+ requestAnimationFrame(() => {
819
+ var _a2, _b2;
820
+ const escaped = CSS.escape ? CSS.escape(colId) : colId.replace(/"/g, '\\"');
821
+ (_b2 = (_a2 = document.querySelector(`.table-setting-columns-settings [data-col-id="${escaped}"]`)) == null ? void 0 : _a2.focus) == null ? void 0 : _b2.call(_a2);
822
+ });
823
+ },
824
+ [frozenColumn, scrollableColumn, fullFrozenOrder, fullScrollableOrder, commitColumnReorder]
825
+ );
826
+ const renderColumnRow = useCallback(
827
+ (column, level, section) => {
828
+ const isFrozen = section === "frozen";
829
+ const collapsedMap = isFrozen ? collapsedFrozenColumns : collapsedScrollColumns;
830
+ const isCollapsed = !!collapsedMap[column.colId];
831
+ const hasChildren = Array.isArray(column.children) && column.children.length > 0;
832
+ const onToggleCollapse = isFrozen ? toggleFrozenColumnCollapse : toggleScrollColumnCollapse;
833
+ const onToggleVisibility = isFrozen ? toggleColumnVisibilityFrozen : toggleColumnVisibilityScroll;
834
+ const checkState = checkStateMap.get(column.colId) || {
835
+ checked: !!column.isVisible,
836
+ indeterminate: false
837
+ };
838
+ const reserveCollapseSlot = isFrozen ? hasChildren : true;
839
+ const rowClassName = isFrozen ? "table-setting-frozen-columns-list-item" : "table-setting-scroll-inner-column";
840
+ const dragIconClass = isFrozen ? "table-setting-frozen-columns-list-drag-icon" : "table-setting-scroll-columns-list-drag-icon";
841
+ const nestedSortableIds = hasChildren ? getDirectColumnIds(
842
+ column.children.filter((c) => c.headerName !== "N/A" && c.isVisible !== false)
843
+ ) : [];
844
+ const childNodes = hasChildren && !isCollapsed ? /* @__PURE__ */ jsx(SortableContext, { items: nestedSortableIds, children: /* @__PURE__ */ jsx("div", { className: "table-setting-column-children", role: "group", children: column.children.map((child) => renderColumnRow(child, level + 1, section)) }) }) : null;
845
+ if (column.isVisible !== false) {
846
+ return /* @__PURE__ */ jsx(
847
+ SortableColumnItem,
848
+ {
849
+ checkboxChecked: checkState.checked,
850
+ column,
851
+ dragIconClass,
852
+ hasChildren,
853
+ isCollapsed,
854
+ isIndeterminate: checkState.indeterminate,
855
+ level,
856
+ reserveCollapseSlot,
857
+ rowClassName,
858
+ onKeyboardReorder: handleKeyboardReorder,
859
+ onToggleCollapse,
860
+ onToggleVisibility,
861
+ children: childNodes
862
+ },
863
+ column.colId
864
+ );
865
+ }
866
+ return /* @__PURE__ */ jsx(
867
+ NestedColumnItem,
868
+ {
869
+ checkboxChecked: checkState.checked,
870
+ column,
871
+ dragIconClass,
872
+ hasChildren,
873
+ isCollapsed,
874
+ isIndeterminate: checkState.indeterminate,
875
+ level,
876
+ reserveCollapseSlot,
877
+ rowClassName,
878
+ onToggleCollapse,
879
+ onToggleVisibility,
880
+ children: childNodes
881
+ },
882
+ column.colId
883
+ );
884
+ },
885
+ [
886
+ checkStateMap,
887
+ collapsedFrozenColumns,
888
+ collapsedScrollColumns,
889
+ toggleFrozenColumnCollapse,
890
+ toggleScrollColumnCollapse,
891
+ toggleColumnVisibilityFrozen,
892
+ toggleColumnVisibilityScroll,
893
+ handleKeyboardReorder
894
+ ]
895
+ );
896
+ const virtualRowHandlers = useMemo(
897
+ () => ({
898
+ checkStateMap,
899
+ onToggleFrozenCollapse: toggleFrozenColumnCollapse,
900
+ onToggleScrollCollapse: toggleScrollColumnCollapse,
901
+ onToggleVisibilityFrozen: toggleColumnVisibilityFrozen,
902
+ onToggleVisibilityScroll: toggleColumnVisibilityScroll,
903
+ onKeyboardReorder: handleKeyboardReorder
904
+ }),
905
+ [
906
+ checkStateMap,
907
+ toggleFrozenColumnCollapse,
908
+ toggleScrollColumnCollapse,
909
+ toggleColumnVisibilityFrozen,
910
+ toggleColumnVisibilityScroll,
911
+ handleKeyboardReorder
912
+ ]
913
+ );
914
+ const frozenItemData = useMemo(
915
+ () => ({ ...virtualRowHandlers, rows: frozenRows }),
916
+ [virtualRowHandlers, frozenRows]
917
+ );
918
+ const scrollableItemData = useMemo(
919
+ () => ({ ...virtualRowHandlers, rows: scrollableRows }),
920
+ [virtualRowHandlers, scrollableRows]
921
+ );
922
+ const handleSaveAndApply = () => {
923
+ var _a2, _b2;
924
+ if (isEditView) {
925
+ const newView2 = {
926
+ ...editedView,
927
+ viewName: inputValue,
928
+ viewType: selectedViewType,
929
+ isDefaultView,
930
+ isActive: false
931
+ };
932
+ props.handleEditSaveView(newView2, editedView);
933
+ if (!props.isSavingViewLoading) {
934
+ setIsEditView(false);
935
+ setEditedView(null);
936
+ setOpenSaveViewModal(false);
937
+ setInputValue("");
938
+ setSelectedViewType((_a2 = props.saveViewCustomFilter) == null ? void 0 : _a2.selectedOption);
939
+ setIsDefaultView(false);
940
+ }
941
+ return;
942
+ }
943
+ const replaceViewName = selectedSavedView == null ? void 0 : selectedSavedView.value;
944
+ const isReplacing = isInputValueEmpty && !!replaceViewName;
945
+ const newView = {
946
+ viewName: isReplacing ? replaceViewName : inputValue,
947
+ viewType: selectedViewType,
948
+ isDefaultView,
949
+ isActive: true
950
+ };
951
+ const applyToViews = (prev) => isReplacing ? prev.map(
952
+ (view) => view.viewName === replaceViewName && view.viewType === selectedViewType ? { ...view, ...newView } : { ...view, isActive: false }
953
+ ) : [...prev.map((view) => ({ ...view, isActive: false })), newView];
954
+ setSavedViewsOptions(applyToViews);
955
+ setFilteredSavedViewsOptions(applyToViews);
956
+ (_b2 = props.handleSaveAndApply) == null ? void 0 : _b2.call(props, newView, replaceViewName);
957
+ };
958
+ useEffect(() => {
959
+ var _a2;
960
+ if (!props.isSavingViewLoading) {
961
+ setOpenSaveViewModal(false);
962
+ setSelectedSavedView(null);
963
+ setInputValue("");
964
+ setSelectedViewType((_a2 = props.saveViewCustomFilter) == null ? void 0 : _a2.selectedOption);
965
+ setIsDefaultView(false);
966
+ setOpenDeletePrompt(false);
967
+ setDeleteView(null);
968
+ setEditedView(null);
969
+ }
970
+ }, [props.isSavingViewLoading]);
971
+ const handleEditView = (view, e) => {
972
+ e.stopPropagation();
973
+ e.preventDefault();
974
+ setIsEditView(true);
975
+ setOpenSaveViewModal(true);
976
+ setInputValue(view.viewName);
977
+ setSelectedViewType(view.viewType);
978
+ setIsDefaultView(view.isDefaultView);
979
+ setEditedView(view);
980
+ };
981
+ const handleCloseSaveViewModal = () => {
982
+ var _a2;
983
+ setOpenSaveViewModal(false);
984
+ setSelectedSavedView(null);
985
+ setInputValue("");
986
+ setSelectedViewType((_a2 = props.saveViewCustomFilter) == null ? void 0 : _a2.selectedOption);
987
+ setIsDefaultView(false);
988
+ setIsEditView(false);
989
+ };
990
+ const handleSaveViewSearchChange = (e) => {
991
+ setSaveViewSearchText(e.target.value);
992
+ const filteredViews = savedViewsOptions.filter(
993
+ (view) => view.viewName.toLowerCase().includes(e.target.value.toLowerCase())
994
+ );
995
+ setFilteredSavedViewsOptions(filteredViews);
996
+ };
997
+ const handleDeleteView = (view, e) => {
998
+ e.stopPropagation();
999
+ e.preventDefault();
1000
+ setOpenDeletePrompt(true);
1001
+ setDeleteView(view);
1002
+ };
1003
+ useEffect(() => {
1004
+ if (!props.isDeleteViewLoading) {
1005
+ setOpenDeletePrompt(false);
1006
+ }
1007
+ }, [props.isDeleteViewLoading]);
1008
+ useEffect(() => {
1009
+ if (selectedBadge === "All") {
1010
+ setFilteredSavedViewsOptions([...savedViewsOptions]);
1011
+ } else {
1012
+ setFilteredSavedViewsOptions(
1013
+ savedViewsOptions.filter((view) => view.viewType === selectedBadge)
1014
+ );
1015
+ }
1016
+ }, [selectedBadge, savedViewsOptions]);
1017
+ const handleSaveViewClick = (view) => {
1018
+ setFilteredSavedViewsOptions(
1019
+ (prev) => prev.map((item) => {
1020
+ if (item.viewName === view.viewName) {
1021
+ return {
1022
+ ...item,
1023
+ isActive: true
1024
+ };
1025
+ }
1026
+ return {
1027
+ ...item,
1028
+ isActive: false
1029
+ };
1030
+ })
1031
+ );
1032
+ setSelectedView(view);
1033
+ };
1034
+ const nameConflictExcludeView = isEditView ? editedView : (selectedSavedView == null ? void 0 : selectedSavedView.value) ? {
1035
+ viewName: selectedSavedView.value,
1036
+ viewType: selectedSavedView.viewType
1037
+ } : null;
1038
+ const nameConflict = !props.isSavingViewLoading && !isInputValueEmpty && !isViewNameUnique(
1039
+ inputValue,
1040
+ selectedViewType,
1041
+ isDefaultView,
1042
+ savedViewsOptions,
1043
+ nameConflictExcludeView,
1044
+ props.isViewNameUniqueAcrossTypes
1045
+ );
1046
+ return /* @__PURE__ */ jsxs("div", { className: "table-setting-columns-settings", children: [
1047
+ /* @__PURE__ */ jsx(
1048
+ "div",
1049
+ {
1050
+ ref: reorderLiveRegionRef,
1051
+ "aria-live": "polite",
1052
+ className: "table-setting-reorder-live-region"
1053
+ }
1054
+ ),
1055
+ props.isSaveViewEnabled && /* @__PURE__ */ jsxs("div", { className: "table-setting-save-view-container", children: [
1056
+ savedViewsOptions.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "save-view-icon-title", children: [
1057
+ /* @__PURE__ */ jsx("img", { alt: "save-view-icon", src: saveViewIcon }),
1058
+ /* @__PURE__ */ jsx("span", { className: "save-view-title", children: t("table.views.none") })
1059
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "save-view-container-active-view", children: [
1060
+ /* @__PURE__ */ jsx(
1061
+ Badge,
1062
+ {
1063
+ color: "success",
1064
+ label: `${((_b = savedViewsOptions.find((view) => view.isActive)) == null ? void 0 : _b.viewName) || t("table.views.notApplicable")}`,
1065
+ variant: "stroke"
1066
+ }
1067
+ ),
1068
+ /* @__PURE__ */ jsx(
1069
+ Button,
1070
+ {
1071
+ icon: openSaveViewMenu ? /* @__PURE__ */ jsx(default_1, {}) : /* @__PURE__ */ jsx(default_1$1, {}),
1072
+ size: "small",
1073
+ variant: "tertiary",
1074
+ onClick: () => {
1075
+ setOpenSaveViewMenu(!openSaveViewMenu);
1076
+ setFilteredSavedViewsOptions([...savedViewsOptions]);
1077
+ }
1078
+ }
1079
+ )
1080
+ ] }),
1081
+ /* @__PURE__ */ jsx(
1082
+ Button,
1083
+ {
1084
+ size: "small",
1085
+ variant: "tertiary",
1086
+ onClick: () => {
1087
+ setOpenSaveViewModal(true);
1088
+ },
1089
+ children: t("table.views.saveView")
1090
+ }
1091
+ )
1092
+ ] }),
1093
+ openSaveViewMenu && /* @__PURE__ */ jsxs("div", { className: "save-view-menu", children: [
1094
+ /* @__PURE__ */ jsxs("div", { className: "save-view-menu-title", children: [
1095
+ /* @__PURE__ */ jsx("span", { children: t("table.views.savedViews") }),
1096
+ /* @__PURE__ */ jsxs("div", { className: "save-view-menu-default-view", children: [
1097
+ /* @__PURE__ */ jsx("img", { alt: "default-view-icon", src: defaultViewActiveIcon }),
1098
+ /* @__PURE__ */ jsx("span", { className: "save-view-menu-default-view-text", children: t("table.views.default") })
1099
+ ] })
1100
+ ] }),
1101
+ /* @__PURE__ */ jsxs("div", { className: "save-view-menu-view-type", children: [
1102
+ /* @__PURE__ */ jsx(
1103
+ Badge,
1104
+ {
1105
+ color: selectedBadge === "All" ? "info" : "default",
1106
+ label: t("table.views.all"),
1107
+ size: "small",
1108
+ variant: "stroke",
1109
+ onClick: () => {
1110
+ setSelectedBadge("All");
1111
+ setFilteredSavedViewsOptions([...savedViewsOptions]);
1112
+ }
1113
+ }
1114
+ ),
1115
+ (_d = (_c = props.saveViewCustomFilter) == null ? void 0 : _c.options) == null ? void 0 : _d.map((option) => /* @__PURE__ */ jsx(
1116
+ Badge,
1117
+ {
1118
+ isIcon: true,
1119
+ color: selectedBadge === option.value ? "info" : "default",
1120
+ icon: getViewTypeIcon(option.value),
1121
+ label: option.label,
1122
+ size: "small",
1123
+ variant: "stroke",
1124
+ onClick: () => {
1125
+ setSelectedBadge(option.value);
1126
+ setFilteredSavedViewsOptions(
1127
+ savedViewsOptions.filter((view) => view.viewType === option.value)
1128
+ );
1129
+ }
1130
+ },
1131
+ option.value
1132
+ ))
1133
+ ] }),
1134
+ /* @__PURE__ */ jsx("div", { className: "save-view-menu-search-container", children: /* @__PURE__ */ jsx(
1135
+ Input,
1136
+ {
1137
+ leftIcon: /* @__PURE__ */ jsx(default_1$2, {}),
1138
+ placeholder: t("table.views.searchPlaceholder"),
1139
+ value: saveViewSearchText,
1140
+ onChange: handleSaveViewSearchChange
1141
+ }
1142
+ ) }),
1143
+ /* @__PURE__ */ jsx("div", { className: "save-view-menu-view-list-container", children: props.customRenderSaveViewContent ? props.customRenderSaveViewContent : filteredSavedViewsOptions.length > 0 && filteredSavedViewsOptions.map((view, idx) => {
1144
+ var _a2;
1145
+ return /* @__PURE__ */ jsxs(
1146
+ "div",
1147
+ {
1148
+ "aria-label": t("table.views.savedViewAria", { name: view.viewName }),
1149
+ className: `save-view-menu-view-list-item ${view.isActive ? "active" : ""}`,
1150
+ role: "button",
1151
+ tabIndex: idx === 0 ? 0 : -1,
1152
+ onClick: () => {
1153
+ handleSaveViewClick(view);
1154
+ },
1155
+ onKeyDown: (e) => {
1156
+ var _a3, _b2;
1157
+ const current = e.currentTarget;
1158
+ switch (e.key) {
1159
+ case "Enter":
1160
+ case " ":
1161
+ e.preventDefault();
1162
+ handleSaveViewClick(view);
1163
+ break;
1164
+ case "ArrowDown": {
1165
+ e.preventDefault();
1166
+ (_a3 = current.nextElementSibling) == null ? void 0 : _a3.focus();
1167
+ break;
1168
+ }
1169
+ case "ArrowUp": {
1170
+ e.preventDefault();
1171
+ (_b2 = current.previousElementSibling) == null ? void 0 : _b2.focus();
1172
+ break;
1173
+ }
1174
+ }
1175
+ },
1176
+ children: [
1177
+ /* @__PURE__ */ jsxs("span", { className: "save-view-menu-view-list-item-name", children: [
1178
+ /* @__PURE__ */ jsx(
1179
+ "span",
1180
+ {
1181
+ "aria-hidden": "true",
1182
+ className: "save-view-menu-view-list-item-type-icon",
1183
+ title: view.viewType,
1184
+ children: getViewTypeIcon(view.viewType, (_a2 = props.saveViewCustomFilter) == null ? void 0 : _a2.options)
1185
+ }
1186
+ ),
1187
+ /* @__PURE__ */ jsx("span", { className: "save-view-menu-view-list-item-name-text", children: view.viewName })
1188
+ ] }),
1189
+ /* @__PURE__ */ jsxs("div", { className: "save-view-menu-view-list-item-actions", children: [
1190
+ (view == null ? void 0 : view.isEditable) && /* @__PURE__ */ jsx(
1191
+ "img",
1192
+ {
1193
+ alt: "save-view-edit-icon",
1194
+ src: saveViewEditIcon,
1195
+ onClick: (e) => {
1196
+ handleEditView(view, e);
1197
+ }
1198
+ }
1199
+ ),
1200
+ (view == null ? void 0 : view.isDeletable) && /* @__PURE__ */ jsx(
1201
+ "img",
1202
+ {
1203
+ alt: "save-view-delete-icon",
1204
+ src: saveViewDeleteIcon,
1205
+ onClick: (e) => {
1206
+ handleDeleteView(view, e);
1207
+ }
1208
+ }
1209
+ ),
1210
+ !(view == null ? void 0 : view.notReqDefaultView) && ((view == null ? void 0 : view.isDefaultView) ? /* @__PURE__ */ jsx(
1211
+ "img",
1212
+ {
1213
+ alt: "default-view-icon",
1214
+ className: "default-view-active-icon",
1215
+ src: defaultViewActiveIcon,
1216
+ onClick: (e) => {
1217
+ e.stopPropagation();
1218
+ e.preventDefault();
1219
+ props.handleSetDefaultView(view);
1220
+ }
1221
+ }
1222
+ ) : /* @__PURE__ */ jsx(
1223
+ "img",
1224
+ {
1225
+ alt: "default-view-icon",
1226
+ src: defaultViewIcon,
1227
+ onClick: (e) => {
1228
+ e.stopPropagation();
1229
+ e.preventDefault();
1230
+ props.handleSetDefaultView(view);
1231
+ }
1232
+ }
1233
+ ))
1234
+ ] })
1235
+ ]
1236
+ },
1237
+ view.viewName + idx
1238
+ );
1239
+ }) }),
1240
+ /* @__PURE__ */ jsx("hr", { className: "save-view-menu-view-list-item-divider" }),
1241
+ /* @__PURE__ */ jsxs("div", { className: "save-view-menu-footer", children: [
1242
+ /* @__PURE__ */ jsx(
1243
+ Button,
1244
+ {
1245
+ size: "medium",
1246
+ variant: "tertiary",
1247
+ onClick: () => {
1248
+ setOpenSaveViewMenu(false);
1249
+ setFilteredSavedViewsOptions([...savedViewsOptions]);
1250
+ },
1251
+ children: t("common.cancel")
1252
+ }
1253
+ ),
1254
+ /* @__PURE__ */ jsx(
1255
+ Button,
1256
+ {
1257
+ disabled: props.customRenderSaveViewContent,
1258
+ size: "medium",
1259
+ variant: "primary",
1260
+ onClick: () => {
1261
+ var _a2;
1262
+ (_a2 = props.handleSavedViewClick) == null ? void 0 : _a2.call(props, selectedView);
1263
+ updateColumnState();
1264
+ setOpenSaveViewMenu(false);
1265
+ },
1266
+ children: t("common.apply")
1267
+ }
1268
+ )
1269
+ ] })
1270
+ ] }),
1271
+ /* @__PURE__ */ jsx(
1272
+ Modal,
1273
+ {
1274
+ className: "save-view-modal",
1275
+ height: "542px",
1276
+ open: openSaveViewModal,
1277
+ primaryButtonLabel: props.isSavingViewLoading ? t("table.views.saving") : t("common.save"),
1278
+ primaryButtonProps: {
1279
+ disabled: (isInputValueEmpty || props.maxSavedViews != null && savedViewsOptions.length >= props.maxSavedViews) && !isReplaceViewSelected || nameConflict || props.isSavingViewLoading,
1280
+ loading: props.isSavingViewLoading,
1281
+ iconPlacement: "right"
1282
+ },
1283
+ secondaryButtonLabel: t("common.cancel"),
1284
+ title: isEditView ? t("table.views.editView") : t("table.views.saveViewTitle"),
1285
+ width: "422px",
1286
+ onClose: handleCloseSaveViewModal,
1287
+ onPrimaryButtonClick: handleSaveAndApply,
1288
+ onSecondaryButtonClick: handleCloseSaveViewModal,
1289
+ children: /* @__PURE__ */ jsxs("div", { className: "save-view-modal-children", children: [
1290
+ props.maxSavedViews != null && /* @__PURE__ */ jsx("div", { className: "save-view-modal-children-header", children: /* @__PURE__ */ jsx("span", { className: "save-view-modal-children-header-text", children: t("table.views.remaining", {
1291
+ remaining: props.maxSavedViews - savedViewsOptions.length,
1292
+ max: props.maxSavedViews
1293
+ }) }) }),
1294
+ /* @__PURE__ */ jsxs(
1295
+ "div",
1296
+ {
1297
+ className: `save-view-modal-children-body${props.maxSavedViews == null ? " save-view-modal-children-body-no-header" : ""}`,
1298
+ children: [
1299
+ /* @__PURE__ */ jsx("div", { className: "save-view-modal-children-body-input", children: /* @__PURE__ */ jsx(
1300
+ Input,
1301
+ {
1302
+ helperText: nameConflict ? t("table.views.nameConflict") : "",
1303
+ isDisabled: isReplaceViewSelected,
1304
+ isError: nameConflict,
1305
+ isHelperText: nameConflict,
1306
+ label: t("table.views.newViewName"),
1307
+ placeholder: t("table.views.enterHere"),
1308
+ readOnly: isReplaceViewSelected,
1309
+ value: inputValue,
1310
+ onChange: (e) => {
1311
+ setInputValue(e.target.value);
1312
+ setSelectedSavedView(null);
1313
+ }
1314
+ }
1315
+ ) }),
1316
+ !isEditView && /* @__PURE__ */ jsxs("div", { className: "save-view-modal-children-body-radio-group", children: [
1317
+ /* @__PURE__ */ jsx("span", { className: "save-view-modal-children-body-radio-group-text", children: t("table.views.viewType") }),
1318
+ /* @__PURE__ */ jsx(
1319
+ RadioButtonGroup,
1320
+ {
1321
+ isDisabled: isReplaceViewSelected,
1322
+ options: (_f = (_e = props.saveViewCustomFilter) == null ? void 0 : _e.options) == null ? void 0 : _f.filter(
1323
+ (option) => !(option == null ? void 0 : option.notReqInSaveView)
1324
+ ),
1325
+ orientation: "row",
1326
+ selectedOption: selectedViewType,
1327
+ onChange: (event) => {
1328
+ setSelectedViewType(event.target.value);
1329
+ }
1330
+ }
1331
+ )
1332
+ ] }),
1333
+ /* @__PURE__ */ jsx("div", { className: "save-view-modal-children-body-checkbox", children: /* @__PURE__ */ jsx(
1334
+ Checkbox,
1335
+ {
1336
+ checked: isDefaultView,
1337
+ disabled: isReplaceViewSelected,
1338
+ label: t("table.views.makeDefault"),
1339
+ onChange: () => {
1340
+ setIsDefaultView(!isDefaultView);
1341
+ }
1342
+ }
1343
+ ) }),
1344
+ /* @__PURE__ */ jsx("div", { className: "save-view-modal-children-body-replace-view", children: /* @__PURE__ */ jsx("span", { children: t("table.views.orReplace") }) }),
1345
+ /* @__PURE__ */ jsx("div", { className: "save-view-modal-children-body-replace-view-select", children: /* @__PURE__ */ jsx(
1346
+ Select,
1347
+ {
1348
+ isClearable: true,
1349
+ withPortal: true,
1350
+ currentOptions: currentSaveViewOptions,
1351
+ initialOptions: currentSaveViewOptions,
1352
+ isDisabled: savedViewsOptions.length === 0 || !isInputValueEmpty && !isReplaceViewSelected || isEditView,
1353
+ isOpen,
1354
+ label: t("table.views.replaceWith"),
1355
+ minWidth: "100%",
1356
+ selectedOptions: selectedSavedView,
1357
+ setCurrentOptions: setCurrentSaveViewOptions,
1358
+ setIsOpen,
1359
+ setSelectedOptions: setSelectedSavedView
1360
+ }
1361
+ ) })
1362
+ ]
1363
+ }
1364
+ )
1365
+ ] })
1366
+ }
1367
+ ),
1368
+ /* @__PURE__ */ jsx(
1369
+ Prompt,
1370
+ {
1371
+ handleClose: (e) => {
1372
+ e.stopPropagation();
1373
+ setOpenDeletePrompt(false);
1374
+ },
1375
+ isOpen: openDeletePrompt,
1376
+ primaryButtonLabel: t("table.views.deleteConfirm"),
1377
+ primaryButtonProps: {
1378
+ loading: props.isDeleteViewLoading,
1379
+ iconPlacement: "right"
1380
+ },
1381
+ secondaryButtonLabel: t("common.cancel"),
1382
+ title: t("table.views.deleteTitle"),
1383
+ variant: "error",
1384
+ onPrimaryButtonClick: (e) => {
1385
+ var _a2;
1386
+ e.stopPropagation();
1387
+ (_a2 = props.handleDeleteViewClick) == null ? void 0 : _a2.call(props, deleteView);
1388
+ },
1389
+ onSecondaryButtonClick: (e) => {
1390
+ e.stopPropagation();
1391
+ setOpenDeletePrompt(false);
1392
+ },
1393
+ children: props.deleteViewPromptText
1394
+ }
1395
+ ),
1396
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-column-search-container", children: [
1397
+ /* @__PURE__ */ jsx("span", { className: "table-setting-column-collapse-slot", children: /* @__PURE__ */ jsx(
1398
+ IconButton,
1399
+ {
1400
+ "aria-label": collapsedColumn ? t("table.columns.expandColumns") : t("table.columns.collapseColumns"),
1401
+ className: "table-setting-column-collapse-btn",
1402
+ onClick: toggleColumnCollapse,
1403
+ children: collapsedColumn ? /* @__PURE__ */ jsx(default_1$3, {}) : /* @__PURE__ */ jsx(default_1, {})
1404
+ }
1405
+ ) }),
1406
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-column-search-controls", children: [
1407
+ /* @__PURE__ */ jsx(
1408
+ Checkbox,
1409
+ {
1410
+ "aria-label": t("table.columns.toggleAll"),
1411
+ checked: allCheckState.checked,
1412
+ variant: allCheckState.indeterminate ? "dashed" : "default",
1413
+ onChange: onAllColumnCheckBoxChange
1414
+ }
1415
+ ),
1416
+ /* @__PURE__ */ jsx(
1417
+ Input,
1418
+ {
1419
+ placeholder: t("common.search"),
1420
+ rightIcon: /* @__PURE__ */ jsx(default_1$2, {}),
1421
+ value: searchInputValue,
1422
+ onChange: handleSearchChange
1423
+ }
1424
+ )
1425
+ ] })
1426
+ ] }),
1427
+ !collapsedColumn && /* @__PURE__ */ jsx(
1428
+ "div",
1429
+ {
1430
+ ref: collapseContainerRef,
1431
+ className: `table-setting-column-collapse-container ${props.isSaveViewEnabled ? "save-view-enabled" : ""} ${shouldVirtualize ? "is-virtualized" : ""}`,
1432
+ children: /* @__PURE__ */ jsxs(
1433
+ DndContext,
1434
+ {
1435
+ autoScroll: !shouldVirtualize,
1436
+ collisionDetection: closestCenter,
1437
+ sensors,
1438
+ onDragCancel: handleDragCancel,
1439
+ onDragEnd: handleDragEnd,
1440
+ onDragMove: handleDragMove,
1441
+ onDragStart: handleDragStart,
1442
+ children: [
1443
+ /* @__PURE__ */ jsxs(SortableContext, { items: sortableItems, children: [
1444
+ frozenColumn.length > 0 && !(frozenColumn.length === 1 && frozenColumn[0].headerName === "N/A") && /* @__PURE__ */ jsxs("div", { className: "table-setting-collapse-columns-container", children: [
1445
+ /* @__PURE__ */ jsx("h3", { children: t("table.columns.frozen") }),
1446
+ shouldVirtualize ? /* @__PURE__ */ jsx(
1447
+ VirtualColumnList,
1448
+ {
1449
+ className: "table-setting-frozen-columns-list",
1450
+ itemData: frozenItemData,
1451
+ maxHeight: listHeights.frozen,
1452
+ outerElementType: FrozenListOuter,
1453
+ outerRef: frozenListRef,
1454
+ rows: frozenRows
1455
+ }
1456
+ ) : /* @__PURE__ */ jsx(
1457
+ "div",
1458
+ {
1459
+ "aria-label": t("table.columns.frozen"),
1460
+ className: "table-setting-frozen-columns-list",
1461
+ role: "tree",
1462
+ children: filteredFrozenColumns.map(
1463
+ (column) => column.headerName !== "N/A" && renderColumnRow(column, 0, "frozen")
1464
+ )
1465
+ }
1466
+ )
1467
+ ] }),
1468
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-scroll-columns-container", children: [
1469
+ /* @__PURE__ */ jsx("h3", { children: t("table.columns.scrollable") }),
1470
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-scroll-main-column-list", children: [
1471
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-scroll-main-column", children: [
1472
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-column-leading", children: [
1473
+ /* @__PURE__ */ jsx("span", { className: "table-setting-column-collapse-slot", children: /* @__PURE__ */ jsx(
1474
+ IconButton,
1475
+ {
1476
+ "aria-label": collapsedScrollable ? t("table.columns.expandScrollable") : t("table.columns.collapseScrollable"),
1477
+ className: "table-setting-column-collapse-btn",
1478
+ onClick: toggleScrollableCollapse,
1479
+ children: collapsedScrollable ? /* @__PURE__ */ jsx(default_1$3, {}) : /* @__PURE__ */ jsx(default_1, {})
1480
+ }
1481
+ ) }),
1482
+ /* @__PURE__ */ jsx(
1483
+ Checkbox,
1484
+ {
1485
+ "aria-label": t("table.columns.toggleMain"),
1486
+ checked: mainCheckState.checked,
1487
+ variant: mainCheckState.indeterminate ? "dashed" : "default",
1488
+ onChange: onMainCheckboxChange
1489
+ }
1490
+ )
1491
+ ] }),
1492
+ /* @__PURE__ */ jsx("span", { className: "table-setting-column-name", children: t("table.columns.main") })
1493
+ ] }),
1494
+ shouldVirtualize ? /* @__PURE__ */ jsx(
1495
+ VirtualColumnList,
1496
+ {
1497
+ className: "table-setting-scroll-inner-column-list",
1498
+ itemData: scrollableItemData,
1499
+ maxHeight: listHeights.scrollable,
1500
+ outerElementType: ScrollableListOuter,
1501
+ outerRef: scrollableListRef,
1502
+ rows: scrollableRows
1503
+ }
1504
+ ) : /* @__PURE__ */ jsx(
1505
+ "div",
1506
+ {
1507
+ "aria-label": t("table.columns.scrollable"),
1508
+ className: "table-setting-scroll-inner-column-list",
1509
+ role: "tree",
1510
+ children: !collapsedScrollable && filteredScrollableColumns.map(
1511
+ (column) => column.headerName !== "N/A" && renderColumnRow(column, 0, "scrollable")
1512
+ )
1513
+ }
1514
+ )
1515
+ ] })
1516
+ ] })
1517
+ ] }),
1518
+ /* @__PURE__ */ jsx(DragOverlay, { adjustScale: false, dropAnimation: null, children: activeDragColumn ? /* @__PURE__ */ jsxs("div", { className: "table-setting-column-drag-overlay", role: "presentation", children: [
1519
+ /* @__PURE__ */ jsx(DragIndicator, { className: "table-setting-column-drag-overlay-icon" }),
1520
+ /* @__PURE__ */ jsx("span", { className: "table-setting-column-drag-overlay-label", children: capitalizeHeader(activeDragColumn.headerName) })
1521
+ ] }) : null })
1522
+ ]
1523
+ }
1524
+ )
1525
+ }
1526
+ )
1527
+ ] });
1528
+ });
1529
+ export {
1530
+ ColumnsV36
1531
+ };