@worknice/whiteboard 0.43.0 → 0.44.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 (40) hide show
  1. package/dist/controls/LinkCard.d.ts +2 -1
  2. package/dist/controls/LinkCard.js +2 -1
  3. package/dist/controls/LinkCard.stories.d.ts +2 -1
  4. package/dist/fields/TimezoneField.d.ts +1 -1
  5. package/dist/fields/TimezoneField.js +3 -535
  6. package/dist/fields/TimezoneField.stories.d.ts +1 -1
  7. package/dist/fields/TimezoneField.stories.js +1 -1
  8. package/dist/forms/useForm.js +5 -2
  9. package/dist/icons/RestoreIcon.js +1 -3
  10. package/dist/icons/TableIcon.d.ts +3 -0
  11. package/dist/icons/TableIcon.js +11 -0
  12. package/dist/icons/index.d.ts +1 -0
  13. package/dist/icons/index.js +2 -1
  14. package/dist/inputs/CheckboxInput.js +1 -0
  15. package/dist/inputs/CheckboxInput.module.js +1 -0
  16. package/dist/inputs/CheckboxInput_module.css +4 -0
  17. package/dist/inputs/ListBoxInput_module.css +2 -1
  18. package/dist/presentation/CustomizableTable/ConfigureColumnsModal.d.ts +12 -0
  19. package/dist/presentation/CustomizableTable/ConfigureColumnsModal.js +72 -0
  20. package/dist/presentation/CustomizableTable/CustomizableTable.d.ts +23 -41
  21. package/dist/presentation/CustomizableTable/CustomizableTable.js +569 -202
  22. package/dist/presentation/CustomizableTable/CustomizableTable.module.js +19 -14
  23. package/dist/presentation/CustomizableTable/CustomizableTable_module.css +100 -81
  24. package/dist/presentation/Table.d.ts +2 -27
  25. package/dist/presentation/Table.js +5 -280
  26. package/dist/presentation/TableColumnFilterModal.d.ts +41 -0
  27. package/dist/presentation/TableColumnFilterModal.js +271 -0
  28. package/dist/utils/tables.d.ts +8 -0
  29. package/dist/utils/tables.js +18 -0
  30. package/package.json +4 -4
  31. package/dist/presentation/CustomizableTable/CustomizableTableContents.d.ts +0 -38
  32. package/dist/presentation/CustomizableTable/CustomizableTableContents.js +0 -305
  33. package/dist/presentation/CustomizableTable/CustomizableTableContents.module.js +0 -18
  34. package/dist/presentation/CustomizableTable/CustomizableTableContents_module.css +0 -148
  35. package/dist/presentation/CustomizableTable/CustomizableTableDetails.d.ts +0 -22
  36. package/dist/presentation/CustomizableTable/CustomizableTableDetails.js +0 -74
  37. package/dist/presentation/CustomizableTable/CustomizableTableDetails.module.js +0 -6
  38. package/dist/presentation/CustomizableTable/CustomizableTableDetails_module.css +0 -40
  39. package/dist/presentation/CustomizableTable/TableFilterModal.d.ts +0 -23
  40. package/dist/presentation/CustomizableTable/TableFilterModal.js +0 -77
@@ -1,43 +1,137 @@
1
+ "use client";
1
2
  import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime";
3
+ import * as __WEBPACK_EXTERNAL_MODULE__dnd_kit_core_a545325d__ from "@dnd-kit/core";
4
+ import * as __WEBPACK_EXTERNAL_MODULE__dnd_kit_sortable_a8361dd8__ from "@dnd-kit/sortable";
5
+ import * as __WEBPACK_EXTERNAL_MODULE__dnd_kit_utilities_3c8eb4c2__ from "@dnd-kit/utilities";
6
+ import * as __WEBPACK_EXTERNAL_MODULE__react_hook_throttle_d66151d4__ from "@react-hook/throttle";
2
7
  import * as __WEBPACK_EXTERNAL_MODULE__tanstack_react_table_777e1b4b__ from "@tanstack/react-table";
8
+ import * as __WEBPACK_EXTERNAL_MODULE__tanstack_react_virtual_e7b31bc6__ from "@tanstack/react-virtual";
9
+ import * as __WEBPACK_EXTERNAL_MODULE_clsx__ from "clsx";
3
10
  import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
4
- import * as __WEBPACK_EXTERNAL_MODULE__inputs_CheckboxInput_js_0c849015__ from "../../inputs/CheckboxInput.js";
5
- import * as __WEBPACK_EXTERNAL_MODULE__VStack_js_6ebc0134__ from "../VStack.js";
6
- import * as __WEBPACK_EXTERNAL_MODULE__CustomizableTableContents_js_b9639d58__ from "./CustomizableTableContents.js";
7
- import * as __WEBPACK_EXTERNAL_MODULE__CustomizableTableDetails_js_b2cb72de__ from "./CustomizableTableDetails.js";
8
- import * as __WEBPACK_EXTERNAL_MODULE__TableFilterModal_js_008c3ed2__ from "./TableFilterModal.js";
9
- const selectColumnId = "_selectColumn";
10
- const CustomizableTable = ({ data, columns, getRowId, availableColumns = columns.map((col)=>({
11
+ import * as __WEBPACK_EXTERNAL_MODULE__controls_Button_js_2f50b64a__ from "../../controls/Button.js";
12
+ import * as __WEBPACK_EXTERNAL_MODULE__controls_Disclosure_js_07249afc__ from "../../controls/Disclosure.js";
13
+ import * as __WEBPACK_EXTERNAL_MODULE__inputs_StringInput_js_39dae7d5__ from "../../inputs/StringInput.js";
14
+ import * as __WEBPACK_EXTERNAL_MODULE__utils_tables_js_ad146866__ from "../../utils/tables.js";
15
+ import * as __WEBPACK_EXTERNAL_MODULE__Icon_js_e5f9af80__ from "../Icon.js";
16
+ import * as __WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__ from "../Table.module.js";
17
+ import * as __WEBPACK_EXTERNAL_MODULE__TableColumnFilterModal_js_faecb911__ from "../TableColumnFilterModal.js";
18
+ import * as __WEBPACK_EXTERNAL_MODULE__ConfigureColumnsModal_js_cdac33d6__ from "./ConfigureColumnsModal.js";
19
+ import * as __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__ from "./CustomizableTable.module.js";
20
+ function asFilter(filter) {
21
+ return filter;
22
+ }
23
+ const DraggableColumnHeader = ({ header, getColumnStyle, showResizer = true })=>{
24
+ const { attributes, listeners, setNodeRef, transform, transition, isDragging } = (0, __WEBPACK_EXTERNAL_MODULE__dnd_kit_sortable_a8361dd8__.useSortable)({
25
+ id: header.column.id
26
+ });
27
+ const style = {
28
+ transform: __WEBPACK_EXTERNAL_MODULE__dnd_kit_utilities_3c8eb4c2__.CSS.Transform.toString(transform),
29
+ transition: transition || void 0,
30
+ opacity: isDragging ? 0.5 : 1,
31
+ ...getColumnStyle(header.column),
32
+ flexGrow: 0,
33
+ position: "relative"
34
+ };
35
+ const headerContent = header.isPlaceholder ? null : header.column.getCanSort() ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
36
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("button", {
37
+ type: "button",
38
+ onClick: header.column.getToggleSortingHandler(),
39
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].sortableTableHeader, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].headerSortable),
40
+ title: "asc" === header.column.getIsSorted() ? "Sorted by ascending order" : "desc" === header.column.getIsSorted() ? "Sorted by descending order" : "Default sorting order",
41
+ children: [
42
+ (0, __WEBPACK_EXTERNAL_MODULE__tanstack_react_table_777e1b4b__.flexRender)(header.column.columnDef.header, header.getContext()),
43
+ "asc" === header.column.getIsSorted() ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Icon_js_e5f9af80__["default"], {
44
+ size: "small",
45
+ symbol: "SortAsc",
46
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].sortIcon, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].headerSortIcon)
47
+ }) : "desc" === header.column.getIsSorted() ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Icon_js_e5f9af80__["default"], {
48
+ size: "small",
49
+ symbol: "SortDes",
50
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].sortIcon, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].headerSortIcon)
51
+ }) : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Icon_js_e5f9af80__["default"], {
52
+ size: "small",
53
+ symbol: "SortDefault",
54
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].sortIcon, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].headerSortIcon)
55
+ })
56
+ ]
57
+ })
58
+ }) : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
59
+ children: (0, __WEBPACK_EXTERNAL_MODULE__tanstack_react_table_777e1b4b__.flexRender)(header.column.columnDef.header, header.getContext())
60
+ });
61
+ return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("th", {
62
+ ref: setNodeRef,
63
+ style: style,
64
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].tableCell, __WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].tableHeader, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].cell, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].headerCell),
65
+ ...attributes,
66
+ ...listeners,
67
+ children: [
68
+ headerContent,
69
+ showResizer ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
70
+ onPointerDown: (e)=>e.stopPropagation(),
71
+ onMouseDown: (e)=>{
72
+ e.stopPropagation();
73
+ header.getResizeHandler()(e);
74
+ },
75
+ onTouchStart: (e)=>{
76
+ e.stopPropagation();
77
+ header.getResizeHandler()(e);
78
+ },
79
+ className: __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].columnResizer
80
+ }) : null
81
+ ]
82
+ });
83
+ };
84
+ const CustomizableTable = ({ data, columns, csvFilename, getRowId, availableColumns = columns.map((col)=>({
11
85
  id: col.id,
12
86
  header: "string" == typeof col.header ? col.header : col.id
13
- })), initialState, onStateChange, showRowCount = true, isLoading = false })=>{
14
- const [name, setName] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(initialState.name);
15
- const [description, setDescription] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(initialState.description);
16
- const lastSelectedRow = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(void 0);
87
+ })), view, onViewChange, isLoading = false, estimatedRowSize = 100, emptyState = "No results" })=>{
88
+ const [searchTerm, setSearchTerm] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)("");
89
+ const [isFilterModalOpen, setIsFilterModalOpen] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(false);
90
+ const [activeId, setActiveId] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(null);
17
91
  const mountedRef = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(false);
18
- const [showFilterModal, setShowFilterModal] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(false);
19
- const enableRowSelection = false;
92
+ const resizeEmitTimeoutRef = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(null);
93
+ const scrollRef = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(null);
94
+ const [scrollContainerWidth, setScrollContainerWidth] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(0);
95
+ const sensors = (0, __WEBPACK_EXTERNAL_MODULE__dnd_kit_core_a545325d__.useSensors)((0, __WEBPACK_EXTERNAL_MODULE__dnd_kit_core_a545325d__.useSensor)(__WEBPACK_EXTERNAL_MODULE__dnd_kit_core_a545325d__.MouseSensor, {
96
+ activationConstraint: {
97
+ distance: 10
98
+ }
99
+ }), (0, __WEBPACK_EXTERNAL_MODULE__dnd_kit_core_a545325d__.useSensor)(__WEBPACK_EXTERNAL_MODULE__dnd_kit_core_a545325d__.TouchSensor, {
100
+ activationConstraint: {
101
+ delay: 250,
102
+ tolerance: 5
103
+ }
104
+ }));
20
105
  const columnDefs = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
21
106
  const columnHelper = (0, __WEBPACK_EXTERNAL_MODULE__tanstack_react_table_777e1b4b__.createColumnHelper)();
22
107
  const result = columns.map((column)=>{
23
108
  const { filter, header, id, cell, globalFiltering, type, size, enableSorting, sortUndefined } = column;
24
- const columnSize = initialState.config.columns?.find((col)=>col.id === id)?.size ?? size ?? 150;
25
- if ("accessor" == type || void 0 == type) return columnHelper.accessor((row)=>column.value(row), {
109
+ const columnSize = view.columns?.find((col)=>col.id === id)?.size ?? size ?? 150;
110
+ const tableFilter = filter ? asFilter(filter) : void 0;
111
+ if ("accessor" === type || void 0 === type) return columnHelper.accessor((row)=>column.value(row), {
26
112
  cell: cell ? (props)=>cell(props.row.original) : void 0,
27
113
  enableGlobalFilter: false !== globalFiltering,
28
114
  enableSorting: enableSorting ?? true,
29
- filterFn: filter ? (row, _, filterValue)=>{
30
- const option = filter.options.find((option)=>option.id === filterValue);
31
- return option?.predicate?.(row.original) ?? true;
115
+ filterFn: tableFilter ? (row, _, filterValue)=>{
116
+ const f = tableFilter;
117
+ if (f.isMulti && Array.isArray(filterValue)) {
118
+ if (0 === filterValue.length) return true;
119
+ return filterValue.some((optionId)=>{
120
+ const option = f.options.find((opt)=>opt.id === optionId);
121
+ return option ? option.predicate(row.original) : false;
122
+ });
123
+ }
124
+ if (!f.isMulti && "string" == typeof filterValue) {
125
+ const option = f.options.find((opt)=>opt.id === filterValue);
126
+ return option?.predicate?.(row.original) ?? true;
127
+ }
128
+ return true;
32
129
  } : void 0,
33
130
  header,
34
131
  id,
35
132
  size: columnSize,
36
133
  meta: {
37
- fixedWidth: false,
38
- filter: filter ? {
39
- options: filter.options
40
- } : void 0
134
+ fixedWidth: false
41
135
  },
42
136
  sortUndefined: sortUndefined ?? 1
43
137
  });
@@ -47,66 +141,59 @@ const CustomizableTable = ({ data, columns, getRowId, availableColumns = columns
47
141
  id,
48
142
  size: columnSize,
49
143
  meta: {
50
- fixedWidth: false,
51
- filter: filter ? {
52
- options: filter.options
53
- } : void 0
144
+ fixedWidth: false
54
145
  }
55
146
  });
56
147
  });
57
- return enableRowSelection ? [
58
- {
59
- id: selectColumnId,
60
- header: ({ table })=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__inputs_CheckboxInput_js_0c849015__["default"], {
61
- disabled: 0 === table.getRowModel().rows.length,
62
- value: table.getIsAllRowsSelected(),
63
- onChange: ()=>{
64
- table.toggleAllRowsSelected(!(table.getIsAllRowsSelected() || table.getIsSomeRowsSelected()));
65
- },
66
- indeterminate: table.getIsSomeRowsSelected()
67
- }),
68
- cell: ({ table, row })=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__inputs_CheckboxInput_js_0c849015__["default"], {
69
- value: row.getIsSelected(),
70
- onClick: (event)=>{
71
- if (event.shiftKey && lastSelectedRow.current) {
72
- const visibleRows = table.getRowModel().rows;
73
- const visibleIndex = visibleRows.findIndex((r)=>r.id === row.id);
74
- const lastIndex = visibleRows.findIndex((r)=>r.id === lastSelectedRow.current?.id);
75
- const startIndex = Math.min(lastIndex, visibleIndex);
76
- const endIndex = Math.max(lastIndex, visibleIndex);
77
- const rowsToSelect = visibleRows.slice(startIndex, endIndex + 1).filter((r)=>0 === r.subRows.length);
78
- rowsToSelect.forEach((rowToSelect)=>rowToSelect.toggleSelected(!row.getIsSelected()));
79
- }
80
- lastSelectedRow.current = row;
81
- },
82
- onChange: (value)=>{
83
- row.toggleSelected(value);
84
- }
85
- })
86
- },
87
- ...result
88
- ] : result;
148
+ return result;
89
149
  }, [
90
150
  columns,
91
- enableRowSelection,
92
- initialState
151
+ view.columns
152
+ ]);
153
+ const filterableColumns = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>columns.filter((column)=>void 0 !== column.filter && column.filter.options.length > 0), [
154
+ columns
155
+ ]);
156
+ const columnFiltersInitialState = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>filterableColumns.map((col)=>{
157
+ const filter = col.filter;
158
+ if (filter.isMulti) return {
159
+ id: col.id,
160
+ value: []
161
+ };
162
+ const saved = view.filters.find((f)=>f.id === col.id);
163
+ return {
164
+ id: col.id,
165
+ value: saved?.value ?? filter.options[0].id
166
+ };
167
+ }), [
168
+ filterableColumns,
169
+ view.filters
170
+ ]);
171
+ const columnFiltersDefaultState = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>filterableColumns.map((col)=>{
172
+ const filter = col.filter;
173
+ return {
174
+ id: col.id,
175
+ value: filter.isMulti ? [] : filter.options[0].id
176
+ };
177
+ }), [
178
+ filterableColumns
93
179
  ]);
94
180
  const getInitialState = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)(()=>({
95
181
  expanded: {},
96
- columnFilters: initialState.config.filters,
97
- sorting: initialState.config.sorting,
182
+ columnFilters: columnFiltersInitialState,
183
+ sorting: view.sorting,
98
184
  grouping: [],
99
185
  columnVisibility: Object.fromEntries(columns.map((col)=>[
100
186
  col.id,
101
- initialState.config.columns.some((c)=>c.id === col.id)
187
+ view.columns.some((c)=>c.id === col.id)
102
188
  ])),
103
189
  columnOrder: [
104
- selectColumnId,
105
- ...initialState.config.columns.map((col)=>col.id)
106
- ]
190
+ ...view.columns.map((col)=>col.id)
191
+ ],
192
+ globalFilter: ""
107
193
  }), [
108
194
  columns,
109
- initialState
195
+ view,
196
+ columnFiltersInitialState
110
197
  ]);
111
198
  const getColumnCanGlobalFilter = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((column)=>{
112
199
  const columnDef = columns.find((col)=>col.id === column.id);
@@ -114,6 +201,9 @@ const CustomizableTable = ({ data, columns, getRowId, availableColumns = columns
114
201
  }, [
115
202
  columns
116
203
  ]);
204
+ const globalFilterableColumns = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>columns.filter((column)=>false !== column.globalFiltering && "display" !== column.type), [
205
+ columns
206
+ ]);
117
207
  const reactTable = (0, __WEBPACK_EXTERNAL_MODULE__tanstack_react_table_777e1b4b__.useReactTable)({
118
208
  data,
119
209
  getRowId,
@@ -129,16 +219,16 @@ const CustomizableTable = ({ data, columns, getRowId, availableColumns = columns
129
219
  enableColumnResizing: true,
130
220
  initialState: mountedRef.current ? {
131
221
  expanded: true,
132
- columnFilters: initialState.config.filters,
133
- sorting: initialState.config.sorting,
222
+ columnFilters: columnFiltersInitialState,
223
+ sorting: view.sorting,
134
224
  columnVisibility: Object.fromEntries(columns.map((col)=>[
135
225
  col.id,
136
- initialState.config.columns.some((c)=>c.id === col.id)
226
+ view.columns.some((c)=>c.id === col.id)
137
227
  ])),
138
228
  columnOrder: [
139
- selectColumnId,
140
- ...initialState.config.columns.map((col)=>col.id)
141
- ]
229
+ ...view.columns.map((col)=>col.id)
230
+ ],
231
+ globalFilter: ""
142
232
  } : getInitialState(),
143
233
  defaultColumn: {
144
234
  enableGrouping: false,
@@ -149,160 +239,437 @@ const CustomizableTable = ({ data, columns, getRowId, availableColumns = columns
149
239
  minSize: 50
150
240
  }
151
241
  });
152
- const resizeTimeoutRef = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(null);
153
242
  const tableState = reactTable.getState();
154
243
  const columnVisibility = tableState.columnVisibility;
155
244
  const columnFilters = tableState.columnFilters;
156
245
  const sorting = tableState.sorting;
157
246
  const columnOrder = tableState.columnOrder;
158
247
  const columnSizing = tableState.columnSizing;
159
- (0, __WEBPACK_EXTERNAL_MODULE_react__.useEffect)(()=>{
160
- const currentSizing = reactTable.getState().columnSizing;
161
- if (resizeTimeoutRef.current) clearTimeout(resizeTimeoutRef.current);
162
- resizeTimeoutRef.current = setTimeout(()=>{
163
- onStateChange({
164
- name,
165
- description,
166
- config: {
167
- columns: Object.entries(reactTable.getState().columnVisibility).filter(([, visible])=>visible).map(([id])=>({
168
- id: id,
169
- size: reactTable.getColumn(id)?.getSize() ?? 150
170
- })).sort((a, b)=>{
171
- const aIndex = reactTable.getState().columnOrder.indexOf(a.id);
172
- const bIndex = reactTable.getState().columnOrder.indexOf(b.id);
173
- return aIndex - bIndex;
174
- }),
175
- filters: reactTable.getState().columnFilters.filter((filter)=>{
176
- const column = reactTable.getColumn(filter.id);
177
- return column?.getIsVisible();
178
- }).map((filter)=>({
179
- id: filter.id,
180
- value: filter.value
181
- })),
182
- sorting: reactTable.getState().sorting
183
- }
184
- });
185
- }, 250);
186
- if (0 === Object.keys(currentSizing).length) onStateChange({
187
- name,
188
- description,
189
- config: {
190
- columns: Object.entries(reactTable.getState().columnVisibility).filter(([, visible])=>visible).map(([id])=>({
191
- id: id,
192
- size: reactTable.getColumn(id)?.getSize() ?? 150
193
- })).sort((a, b)=>{
194
- const aIndex = reactTable.getState().columnOrder.indexOf(a.id);
195
- const bIndex = reactTable.getState().columnOrder.indexOf(b.id);
196
- return aIndex - bIndex;
197
- }),
198
- filters: reactTable.getState().columnFilters.filter((filter)=>{
199
- const column = reactTable.getColumn(filter.id);
200
- return column?.getIsVisible();
201
- }).map((filter)=>({
202
- id: filter.id,
203
- value: filter.value
204
- })),
205
- sorting: reactTable.getState().sorting
206
- }
207
- });
208
- return ()=>{
209
- if (resizeTimeoutRef.current) clearTimeout(resizeTimeoutRef.current);
210
- };
248
+ const throttledSetGlobalFilter = (0, __WEBPACK_EXTERNAL_MODULE__react_hook_throttle_d66151d4__.useThrottleCallback)((value)=>reactTable.setGlobalFilter(value), 4);
249
+ const csvExportableColumns = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
250
+ const columnMap = new Map(columns.map((c)=>[
251
+ c.id,
252
+ c
253
+ ]));
254
+ return reactTable.getVisibleLeafColumns().map((leaf)=>columnMap.get(leaf.id)).filter((col)=>void 0 !== col && true === col.csvExport).map((column)=>({
255
+ id: column.id,
256
+ header: "string" == typeof column.header ? column.header : column.id
257
+ }));
211
258
  }, [
212
- name,
213
- description,
259
+ columns,
214
260
  reactTable,
215
- columnVisibility,
216
- columnFilters,
217
- sorting,
218
- columnOrder,
219
- columnSizing,
220
- onStateChange
261
+ columnVisibility
262
+ ]);
263
+ const activeFilterCount = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
264
+ const currentFilters = tableState.columnFilters;
265
+ return columnFiltersDefaultState.filter((defaultFilter)=>{
266
+ const currentFilter = currentFilters.find((f)=>f.id === defaultFilter.id);
267
+ if (void 0 === currentFilter) return false;
268
+ const currentValue = currentFilter.value;
269
+ const defaultValue = defaultFilter.value;
270
+ if (Array.isArray(defaultValue) && Array.isArray(currentValue)) return currentValue.length !== defaultValue.length || defaultValue.some((v, i)=>v !== currentValue[i]);
271
+ return currentValue !== defaultValue;
272
+ }).length;
273
+ }, [
274
+ tableState.columnFilters,
275
+ columnFiltersDefaultState
276
+ ]);
277
+ const showSearchReset = activeFilterCount > 0 || "" !== tableState.globalFilter;
278
+ const rows = reactTable.getRowModel().rows;
279
+ const estimateSize = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)(()=>estimatedRowSize, [
280
+ estimatedRowSize
221
281
  ]);
282
+ const rowVirtualizer = (0, __WEBPACK_EXTERNAL_MODULE__tanstack_react_virtual_e7b31bc6__.useVirtualizer)({
283
+ count: isLoading ? 0 : rows.length,
284
+ getScrollElement: ()=>scrollRef.current,
285
+ estimateSize,
286
+ overscan: 10,
287
+ getItemKey: (index)=>rows[index]?.id ?? String(index),
288
+ measureElement: (element, _, instance)=>{
289
+ const rect = element.getBoundingClientRect();
290
+ if (rect.height > 0 && rect.width > 0) return Math.round(rect.height);
291
+ const cachedSize = instance.measurementsCache[instance.indexFromElement(element)]?.size;
292
+ return cachedSize ?? estimatedRowSize;
293
+ }
294
+ });
222
295
  (0, __WEBPACK_EXTERNAL_MODULE_react__.useEffect)(()=>{
223
296
  mountedRef.current = true;
224
297
  }, []);
225
- const filterableColumns = columns.filter((column)=>{
226
- const tableColumn = reactTable.getColumn(column.id);
227
- return void 0 !== column.filter && void 0 !== tableColumn && tableColumn.getIsVisible();
228
- });
229
- const hasFilterableColumns = filterableColumns.length > 0;
230
- const handleColumnClick = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((col)=>{
231
- const tableColumn = reactTable.getColumn(col.id);
232
- if (!tableColumn) return;
233
- const newVisibility = !tableColumn.getIsVisible();
234
- tableColumn.toggleVisibility(newVisibility);
235
- if (newVisibility) {
236
- const currentOrder = reactTable.getState().columnOrder;
237
- const newOrder = [
238
- ...currentOrder.filter((id)=>id !== col.id),
239
- col.id
240
- ];
241
- reactTable.setColumnOrder(newOrder);
242
- } else {
243
- const currentFilters = reactTable.getState().columnFilters;
244
- const newFilters = currentFilters.filter((filter)=>filter.id !== col.id);
245
- reactTable.setColumnFilters(newFilters);
246
- }
298
+ (0, __WEBPACK_EXTERNAL_MODULE_react__.useEffect)(()=>{
299
+ const el = scrollRef.current;
300
+ if (!el) return;
301
+ const update = ()=>setScrollContainerWidth(el.clientWidth);
302
+ update();
303
+ const ro = new ResizeObserver(update);
304
+ ro.observe(el);
305
+ return ()=>ro.disconnect();
306
+ }, []);
307
+ const emitView = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)(()=>{
308
+ onViewChange({
309
+ columns: Object.entries(reactTable.getState().columnVisibility).filter(([, visible])=>visible).map(([id])=>({
310
+ id: id,
311
+ size: reactTable.getColumn(id)?.getSize() ?? 150
312
+ })).sort((a, b)=>{
313
+ const aIndex = reactTable.getState().columnOrder.indexOf(a.id);
314
+ const bIndex = reactTable.getState().columnOrder.indexOf(b.id);
315
+ return aIndex - bIndex;
316
+ }),
317
+ filters: reactTable.getState().columnFilters.filter((filter)=>{
318
+ const column = reactTable.getColumn(filter.id);
319
+ return column?.getIsVisible();
320
+ }).map((filter)=>({
321
+ id: filter.id,
322
+ value: filter.value
323
+ })),
324
+ sorting: reactTable.getState().sorting
325
+ });
247
326
  }, [
327
+ onViewChange,
248
328
  reactTable
249
329
  ]);
250
- const memoizedTableContents = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__CustomizableTableContents_js_b9639d58__["default"], {
251
- reactTable: reactTable,
252
- columns: columns,
253
- showRowCount: showRowCount,
254
- isLoading: isLoading
255
- }), [
256
- reactTable,
257
- columns,
258
- showRowCount,
259
- isLoading,
260
- columnSizing,
330
+ (0, __WEBPACK_EXTERNAL_MODULE_react__.useEffect)(()=>{
331
+ if (resizeEmitTimeoutRef.current) {
332
+ clearTimeout(resizeEmitTimeoutRef.current);
333
+ resizeEmitTimeoutRef.current = null;
334
+ }
335
+ emitView();
336
+ }, [
261
337
  columnFilters,
338
+ columnOrder,
339
+ columnVisibility,
340
+ emitView,
262
341
  sorting
263
342
  ]);
343
+ const columnSizingKey = JSON.stringify(columnSizing);
344
+ (0, __WEBPACK_EXTERNAL_MODULE_react__.useEffect)(()=>{
345
+ if ("{}" === columnSizingKey) return;
346
+ if (resizeEmitTimeoutRef.current) clearTimeout(resizeEmitTimeoutRef.current);
347
+ resizeEmitTimeoutRef.current = setTimeout(()=>{
348
+ resizeEmitTimeoutRef.current = null;
349
+ emitView();
350
+ }, 250);
351
+ return ()=>{
352
+ if (resizeEmitTimeoutRef.current) {
353
+ clearTimeout(resizeEmitTimeoutRef.current);
354
+ resizeEmitTimeoutRef.current = null;
355
+ }
356
+ };
357
+ }, [
358
+ columnSizingKey,
359
+ emitView
360
+ ]);
361
+ const filterableColumnsForModal = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>filterableColumns.filter((col)=>{
362
+ const tableColumn = reactTable.getColumn(col.id);
363
+ return void 0 !== tableColumn && tableColumn.getIsVisible();
364
+ }), [
365
+ filterableColumns,
366
+ reactTable
367
+ ]);
368
+ const hasFilterableColumns = filterableColumnsForModal.length > 0;
369
+ const applyColumnSelection = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((selected)=>{
370
+ if (0 === availableColumns.length) return;
371
+ const availableIds = new Set(availableColumns.map((c)=>c.id));
372
+ const selectedIds = new Set(selected.map((c)=>c.id));
373
+ const filtersBefore = reactTable.getState().columnFilters;
374
+ const visibility = {
375
+ ...reactTable.getState().columnVisibility
376
+ };
377
+ for (const id of availableIds)visibility[id] = selectedIds.has(id);
378
+ reactTable.setColumnVisibility(visibility);
379
+ const currentOrder = reactTable.getState().columnOrder;
380
+ const newOrder = currentOrder.filter((id)=>{
381
+ if (availableIds.has(id)) return selectedIds.has(id);
382
+ return true;
383
+ });
384
+ for (const col of selected)if (!newOrder.includes(col.id)) newOrder.push(col.id);
385
+ reactTable.setColumnOrder(newOrder);
386
+ reactTable.setColumnFilters(filtersBefore.filter((f)=>!availableIds.has(f.id) || selectedIds.has(f.id)));
387
+ }, [
388
+ availableColumns,
389
+ reactTable
390
+ ]);
391
+ const configureColumnsModalColumns = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>availableColumns.map((col)=>({
392
+ id: col.id,
393
+ name: col.header
394
+ })), [
395
+ availableColumns
396
+ ]);
397
+ const selectedConfigureColumns = availableColumns.filter((col)=>reactTable.getColumn(col.id)?.getIsVisible() ?? false).map((col)=>({
398
+ id: col.id,
399
+ name: col.header
400
+ }));
401
+ const handleDragStart = (event)=>{
402
+ setActiveId(event.active.id);
403
+ };
404
+ const handleDragEnd = (event)=>{
405
+ const { active, over } = event;
406
+ setActiveId(null);
407
+ if (over && active.id !== over.id) {
408
+ const order = reactTable.getState().columnOrder;
409
+ const oldIndex = order.indexOf(active.id);
410
+ const newIndex = order.indexOf(over.id);
411
+ if (-1 !== oldIndex && -1 !== newIndex) reactTable.setColumnOrder((0, __WEBPACK_EXTERNAL_MODULE__dnd_kit_sortable_a8361dd8__.arrayMove)(order, oldIndex, newIndex));
412
+ }
413
+ };
414
+ const getColumnStyle = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((column)=>{
415
+ if (!mountedRef.current) return {
416
+ width: `${column.getSize()}px`,
417
+ minWidth: "50px"
418
+ };
419
+ const containerWidth = scrollContainerWidth;
420
+ const visible = reactTable.getVisibleLeafColumns();
421
+ if (1 === visible.length) return {
422
+ width: `${containerWidth}px`,
423
+ minWidth: "50px"
424
+ };
425
+ const currentSize = column.getSize();
426
+ const totalVisibleWidth = visible.reduce((sum, col)=>sum + col.getSize(), 0);
427
+ const isLastVisibleColumn = visible[visible.length - 1]?.id === column.id;
428
+ if (isLastVisibleColumn && containerWidth > totalVisibleWidth) return {
429
+ width: `${currentSize + (containerWidth - totalVisibleWidth)}px`,
430
+ minWidth: "50px"
431
+ };
432
+ return {
433
+ width: `${currentSize}px`,
434
+ minWidth: "50px"
435
+ };
436
+ }, [
437
+ reactTable,
438
+ scrollContainerWidth
439
+ ]);
440
+ const showTableFilterBar = 0 !== globalFilterableColumns.length || 0 !== filterableColumns.length || 0 !== availableColumns.length;
441
+ const tableLayoutWidthPx = reactTable.getTotalSize();
264
442
  return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
443
+ className: __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].root,
265
444
  children: [
266
- /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE__VStack_js_6ebc0134__["default"], {
267
- spacing: "p2",
268
- children: [
269
- /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__CustomizableTableDetails_js_b2cb72de__["default"], {
270
- name: name,
271
- description: description,
272
- onStateChange: (state)=>{
273
- setName(state.name);
274
- setDescription(state.description);
275
- },
276
- availableColumns: availableColumns.map((col)=>({
277
- id: col.id,
278
- header: col.header,
279
- visible: reactTable.getColumn(col.id)?.getIsVisible() ?? false
280
- })),
281
- hasFilterableColumns: hasFilterableColumns,
282
- onColumnClick: handleColumnClick,
283
- onFilterListClick: ()=>setShowFilterModal(true)
284
- }),
285
- memoizedTableContents
286
- ]
445
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
446
+ className: __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].mainColumn,
447
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
448
+ className: __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].columnStack,
449
+ children: [
450
+ showTableFilterBar ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
451
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].filterBar,
452
+ children: [
453
+ 0 !== globalFilterableColumns.length ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
454
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].filterBarSearch,
455
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__inputs_StringInput_js_39dae7d5__["default"], {
456
+ prefix: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Icon_js_e5f9af80__["default"], {
457
+ symbol: "Search"
458
+ }),
459
+ placeholder: "Search",
460
+ id: "globalSearch",
461
+ value: searchTerm,
462
+ onChange: (value)=>{
463
+ setSearchTerm(value ?? "");
464
+ throttledSetGlobalFilter(value ?? "");
465
+ },
466
+ disabled: isLoading
467
+ })
468
+ }) : null,
469
+ 0 !== availableColumns.length || 0 !== filterableColumns.length ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
470
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].filterSelectMenus,
471
+ children: [
472
+ 0 !== filterableColumns.length ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE__controls_Button_js_2f50b64a__["default"], {
473
+ type: "secondary",
474
+ onClick: ()=>setIsFilterModalOpen(true),
475
+ icon: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Icon_js_e5f9af80__["default"], {
476
+ symbol: "Filter"
477
+ }),
478
+ disabled: isLoading || !hasFilterableColumns,
479
+ children: [
480
+ "Filters",
481
+ !isLoading && activeFilterCount > 0 ? ` (${activeFilterCount})` : ""
482
+ ]
483
+ }) : null,
484
+ 0 !== availableColumns.length ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__controls_Disclosure_js_07249afc__["default"], {
485
+ disabled: isLoading,
486
+ id: "columnVisibility",
487
+ icon: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Icon_js_e5f9af80__["default"], {
488
+ symbol: "Columns"
489
+ }),
490
+ type: "secondary",
491
+ render: (onClose)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__ConfigureColumnsModal_js_cdac33d6__.ConfigureColumnsModal, {
492
+ selectedColumns: selectedConfigureColumns,
493
+ availableColumns: configureColumnsModalColumns,
494
+ onClose: onClose,
495
+ onSave: (selectedColumns)=>{
496
+ applyColumnSelection(selectedColumns);
497
+ }
498
+ }),
499
+ children: "Columns"
500
+ }) : null,
501
+ data.length > 0 ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__controls_Button_js_2f50b64a__["default"], {
502
+ type: "secondary",
503
+ icon: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Icon_js_e5f9af80__["default"], {
504
+ symbol: "Download"
505
+ }),
506
+ tooltip: "Download as CSV",
507
+ onClick: ()=>(0, __WEBPACK_EXTERNAL_MODULE__utils_tables_js_ad146866__.handleDownloadCsv)(csvFilename, csvExportableColumns, rows)
508
+ }) : null
509
+ ]
510
+ }) : null,
511
+ !isLoading && showSearchReset ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
512
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].filterBarSearchReset,
513
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
514
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].filterBarSearchResetContent,
515
+ children: [
516
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("p", {
517
+ children: [
518
+ "Showing ",
519
+ reactTable.getPreGroupedRowModel().flatRows.length,
520
+ " of",
521
+ " ",
522
+ reactTable.getPreFilteredRowModel().flatRows.length
523
+ ]
524
+ }),
525
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__controls_Button_js_2f50b64a__["default"], {
526
+ onClick: ()=>{
527
+ reactTable.setColumnFilters(columnFiltersDefaultState);
528
+ reactTable.resetGlobalFilter();
529
+ setSearchTerm("");
530
+ },
531
+ type: "secondary",
532
+ size: "small",
533
+ children: "Reset filters"
534
+ })
535
+ ]
536
+ })
537
+ }) : null
538
+ ]
539
+ }) : null,
540
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
541
+ className: __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].scrollArea,
542
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
543
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].tableHorizontal, {
544
+ [__WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].tableHorizontalLoading]: isLoading
545
+ }),
546
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE__dnd_kit_core_a545325d__.DndContext, {
547
+ sensors: sensors,
548
+ onDragStart: handleDragStart,
549
+ onDragEnd: handleDragEnd,
550
+ children: [
551
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
552
+ className: __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].tableHorizontalInner,
553
+ style: {
554
+ width: isLoading ? "100%" : `${tableLayoutWidthPx}px`,
555
+ minWidth: "100%"
556
+ },
557
+ children: [
558
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("table", {
559
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].table,
560
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("thead", {
561
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].tableHead, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].stickyHead),
562
+ children: !isLoading && reactTable.getHeaderGroups().map((headerGroup)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("tr", {
563
+ className: __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].headerRow,
564
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__dnd_kit_sortable_a8361dd8__.SortableContext, {
565
+ items: headerGroup.headers.map((h)=>h.column.id),
566
+ strategy: __WEBPACK_EXTERNAL_MODULE__dnd_kit_sortable_a8361dd8__.horizontalListSortingStrategy,
567
+ children: headerGroup.headers.map((header, headerIndex)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(DraggableColumnHeader, {
568
+ header: header,
569
+ getColumnStyle: getColumnStyle,
570
+ showResizer: headerIndex < headerGroup.headers.length - 1
571
+ }, header.id))
572
+ })
573
+ }, headerGroup.id))
574
+ })
575
+ }),
576
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
577
+ ref: scrollRef,
578
+ className: __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].bodyScroll,
579
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("table", {
580
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].table,
581
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("tbody", {
582
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].tableBody,
583
+ style: {
584
+ height: !isLoading && rows.length > 0 ? `${rowVirtualizer.getTotalSize()}px` : "auto"
585
+ },
586
+ children: isLoading ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("tr", {
587
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].tableRow, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].row),
588
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("td", {
589
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].noRows, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].loadingCell),
590
+ colSpan: Math.max(reactTable.getVisibleLeafColumns().length, 1),
591
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Icon_js_e5f9af80__["default"], {
592
+ symbol: "Loading",
593
+ size: "large",
594
+ animate: true
595
+ })
596
+ })
597
+ }) : 0 === reactTable.getVisibleLeafColumns().length ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("tr", {
598
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].tableRow, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].row),
599
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("td", {
600
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].noRows,
601
+ children: "No columns"
602
+ })
603
+ }) : rows.length ? rowVirtualizer.getVirtualItems().map((virtualRow)=>{
604
+ const row = rows[virtualRow.index];
605
+ return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("tr", {
606
+ "data-state": row.getIsSelected() ? "selected" : "",
607
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].tableRow, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].row),
608
+ "data-index": virtualRow.index,
609
+ ref: rowVirtualizer.measureElement,
610
+ style: {
611
+ position: "absolute",
612
+ transform: `translateY(${virtualRow.start}px)`
613
+ },
614
+ children: row.getVisibleCells().map((cell)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("td", {
615
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].tableCell, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].cell),
616
+ style: {
617
+ ...getColumnStyle(cell.column),
618
+ flexGrow: 0
619
+ },
620
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
621
+ className: __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].cellClip,
622
+ children: (0, __WEBPACK_EXTERNAL_MODULE__tanstack_react_table_777e1b4b__.flexRender)(cell.column.columnDef.cell, cell.getContext())
623
+ })
624
+ }, cell.id))
625
+ }, row.id);
626
+ }) : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("tr", {
627
+ className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].tableRow, __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].row),
628
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("td", {
629
+ className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_61474ffd__["default"].noRows,
630
+ colSpan: reactTable.getVisibleLeafColumns().length,
631
+ children: emptyState
632
+ })
633
+ })
634
+ })
635
+ })
636
+ })
637
+ ]
638
+ }),
639
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__dnd_kit_core_a545325d__.DragOverlay, {
640
+ children: activeId ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
641
+ className: __WEBPACK_EXTERNAL_MODULE__CustomizableTable_module_js_80cff08d__["default"].dragOverlayHeader,
642
+ children: (()=>{
643
+ const header = reactTable.getHeaderGroups().flatMap((group)=>group.headers).find((h)=>h.column.id === activeId);
644
+ if (!header) return null;
645
+ const headerContent = header.column.columnDef.header;
646
+ return "string" == typeof headerContent ? headerContent : (0, __WEBPACK_EXTERNAL_MODULE__tanstack_react_table_777e1b4b__.flexRender)(headerContent, header.getContext());
647
+ })()
648
+ }) : null
649
+ })
650
+ ]
651
+ })
652
+ })
653
+ })
654
+ ]
655
+ })
287
656
  }),
288
- showFilterModal && /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__TableFilterModal_js_008c3ed2__.TableFilterModal, {
289
- onClose: ()=>setShowFilterModal(false),
290
- columns: columns.filter((col)=>{
291
- const tableColumn = reactTable.getColumn(col.id);
292
- return void 0 !== col.filter && void 0 !== tableColumn && tableColumn.getIsVisible();
293
- }).map((col)=>({
657
+ isFilterModalOpen && filterableColumnsForModal.length > 0 ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__TableColumnFilterModal_js_faecb911__["default"], {
658
+ onClose: ()=>setIsFilterModalOpen(false),
659
+ filterableColumns: filterableColumnsForModal.map((col)=>({
294
660
  id: col.id,
295
- header: "string" == typeof col.header ? col.header : col.id,
296
661
  filter: col.filter
297
662
  })),
663
+ currentFilters: reactTable.getState().columnFilters,
298
664
  onFiltersChange: (filters)=>{
299
- reactTable.setColumnFilters(filters);
300
- },
301
- currentFilters: reactTable.getState().columnFilters.map((filter)=>({
302
- id: filter.id,
303
- value: filter.value
304
- }))
305
- })
665
+ const visibleFilterColumnIds = new Set(filterableColumnsForModal.map((col)=>col.id));
666
+ const hiddenColumnFilters = reactTable.getState().columnFilters.filter((filter)=>!visibleFilterColumnIds.has(filter.id));
667
+ reactTable.setColumnFilters([
668
+ ...hiddenColumnFilters,
669
+ ...filters
670
+ ]);
671
+ }
672
+ }) : null
306
673
  ]
307
674
  });
308
675
  };