@economic/taco 1.32.0 → 1.34.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 (32) hide show
  1. package/dist/components/Provider/Localization.d.ts +1 -6
  2. package/dist/components/Table2/Table2.d.ts +10 -7
  3. package/dist/components/Table2/components/ColumnSettingsButton.d.ts +4 -5
  4. package/dist/components/Table2/components/column/utils.d.ts +1 -0
  5. package/dist/components/Table2/types.d.ts +2 -0
  6. package/dist/components/Table2/utilities/cell.d.ts +1 -0
  7. package/dist/components/Table2/utilities/columns.d.ts +2 -1
  8. package/dist/esm/packages/taco/src/components/Provider/Localization.js +2 -7
  9. package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
  10. package/dist/esm/packages/taco/src/components/Table2/Table2.js +10 -0
  11. package/dist/esm/packages/taco/src/components/Table2/Table2.js.map +1 -1
  12. package/dist/esm/packages/taco/src/components/Table2/components/ColumnSettingsButton.js +80 -335
  13. package/dist/esm/packages/taco/src/components/Table2/components/ColumnSettingsButton.js.map +1 -1
  14. package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js +12 -5
  15. package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js.map +1 -1
  16. package/dist/esm/packages/taco/src/components/Table2/components/column/utils.js +2 -1
  17. package/dist/esm/packages/taco/src/components/Table2/components/column/utils.js.map +1 -1
  18. package/dist/esm/packages/taco/src/components/Table2/hooks/useColumnDefinitions.js +6 -3
  19. package/dist/esm/packages/taco/src/components/Table2/hooks/useColumnDefinitions.js.map +1 -1
  20. package/dist/esm/packages/taco/src/components/Table2/hooks/useTable.js +3 -2
  21. package/dist/esm/packages/taco/src/components/Table2/hooks/useTable.js.map +1 -1
  22. package/dist/esm/packages/taco/src/components/Table2/types.js.map +1 -1
  23. package/dist/esm/packages/taco/src/components/Table2/utilities/cell.js +2 -2
  24. package/dist/esm/packages/taco/src/components/Table2/utilities/cell.js.map +1 -1
  25. package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js +37 -1
  26. package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js.map +1 -1
  27. package/dist/taco.cjs.development.js +155 -359
  28. package/dist/taco.cjs.development.js.map +1 -1
  29. package/dist/taco.cjs.production.min.js +1 -1
  30. package/dist/taco.cjs.production.min.js.map +1 -1
  31. package/package.json +2 -2
  32. package/types.json +79 -20
@@ -1,374 +1,119 @@
1
1
  import React__default from 'react';
2
+ import cn from 'classnames';
2
3
  import { Icon } from '../../Icon/Icon.js';
3
4
  import { useLocalization } from '../../Provider/Localization.js';
4
5
  import { Button } from '../../Button/Button.js';
5
6
  import { Checkbox } from '../../Checkbox/Checkbox.js';
6
7
  import { Input } from '../../Input/Input.js';
7
8
  import { Popover } from '../../Popover/Popover.js';
8
- import { isInternalColumn, COLUMN_ID_FOR_SELECTION, COLUMN_ID_FOR_EXPANSION } from '../utilities/columns.js';
9
+ import { isInternalColumn, COLUMN_ID_FOR_ACTIONS } from '../utilities/columns.js';
9
10
  import { Container } from '../../../primitives/Sortable/components/Container.js';
10
- import '@dnd-kit/sortable';
11
+ import { arrayMove } from '@dnd-kit/sortable';
11
12
  import { Item } from '../../../primitives/Sortable/components/Item.js';
12
13
  import { List } from '../../../primitives/Sortable/components/List.js';
13
14
  import { Truncate } from '../../Truncate/Truncate.js';
14
15
 
15
- const OrderableColumn = /*#__PURE__*/React__default.forwardRef((props, ref) => {
16
+ function getColumnName(column) {
16
17
  var _ref, _column$columnDef$hea, _column$columnDef$hea2;
18
+ return (_ref = (_column$columnDef$hea = (_column$columnDef$hea2 = column.columnDef.header) === null || _column$columnDef$hea2 === void 0 ? void 0 : _column$columnDef$hea2.toString()) !== null && _column$columnDef$hea !== void 0 ? _column$columnDef$hea : column.columnDef.id) !== null && _ref !== void 0 ? _ref : '';
19
+ }
20
+ const Column = /*#__PURE__*/React__default.forwardRef(function Column(props, ref) {
17
21
  const {
18
- canBeReordered,
19
22
  column,
20
- children,
21
- isColumnFixed,
22
- ...attributes
23
+ draggable = false,
24
+ isOrderingEnabled,
25
+ ...dragAttributes
23
26
  } = props;
24
- let icon;
25
- if (canBeReordered) {
26
- icon = /*#__PURE__*/React__default.createElement(Icon, {
27
- name: "drag",
28
- /** top margin of -3px on Icon, is added to make sure that each OrderableColumn is of 32px height **/
29
- className: "text-grey-500 hover:text-grey-700 mr-0.5 -ml-[6px] -mt-[3px] inline-block !h-5 !w-5 cursor-move"
30
- });
31
- } else if (isColumnFixed) {
32
- icon = /*#__PURE__*/React__default.createElement("span", {
33
- className: "mr-0.5 inline-flex w-4"
34
- });
35
- }
36
- // columnName should be a string
37
- const columnName = (_ref = (_column$columnDef$hea = (_column$columnDef$hea2 = column.columnDef.header) === null || _column$columnDef$hea2 === void 0 ? void 0 : _column$columnDef$hea2.toString()) !== null && _column$columnDef$hea !== void 0 ? _column$columnDef$hea : column.columnDef.id) !== null && _ref !== void 0 ? _ref : '';
27
+ const canHide = column.getCanHide();
28
+ const className = cn('group/column flex items-center gap-x-2 rounded py-1 px-2', {
29
+ 'hover:bg-grey-200': canHide || draggable,
30
+ 'hover:cursor-pointer': canHide,
31
+ 'active:cursor-move active:bg-grey-300': draggable
32
+ });
33
+ const attributes = draggable ? dragAttributes : undefined;
34
+ const text = getColumnName(column);
38
35
  return /*#__PURE__*/React__default.createElement("div", Object.assign({}, attributes, {
39
- className: "hover:bg-grey-100 aria-pressed:bg-grey-200 flex w-full items-center justify-between gap-x-2 rounded py-[6px] px-2 aria-pressed:z-10",
36
+ key: column.id,
37
+ className: className,
38
+ onClick: () => column.toggleVisibility(),
40
39
  ref: ref
41
- }), /*#__PURE__*/React__default.createElement(Truncate, {
42
- tooltip: columnName
40
+ }), draggable ? /*#__PURE__*/React__default.createElement(Icon, {
41
+ name: "drag",
42
+ className: "text-grey-500 group-hover/column:text-grey-700 -mx-2 !h-5"
43
+ }) : isOrderingEnabled ? /*#__PURE__*/React__default.createElement("span", {
44
+ className: "flex w-2"
45
+ }) : null, /*#__PURE__*/React__default.createElement(Truncate, {
46
+ tooltip: text
43
47
  }, /*#__PURE__*/React__default.createElement("span", {
44
- className: "select-none"
45
- }, icon, columnName)), children);
48
+ className: "flex-grow select-none"
49
+ }, text)), canHide ? /*#__PURE__*/React__default.createElement(Checkbox, {
50
+ checked: column.getIsVisible(),
51
+ onChange: column.toggleVisibility
52
+ }) : null);
46
53
  });
47
- const isOrderingAllowed = (table, column) => {
48
- var _column$columnDef$met;
49
- const meta = table.options.meta;
50
- return meta.enableColumnReordering ? !((_column$columnDef$met = column.columnDef.meta) !== null && _column$columnDef$met !== void 0 && _column$columnDef$met.disableReordering) : false;
51
- };
52
- const isColumnOrderingDisabled = (table, column) => {
53
- var _column$columnDef$met2;
54
- const meta = table.options.meta;
55
- return meta.enableColumnReordering && !!((_column$columnDef$met2 = column.columnDef.meta) !== null && _column$columnDef$met2 !== void 0 && _column$columnDef$met2.disableReordering);
56
- };
57
- const SortableColumnContainer = ({
58
- state,
59
- moveColumn,
60
- reorderColumn,
61
- table,
62
- query
63
- }) => {
54
+ function ColumnSettingsButton(props) {
55
+ const {
56
+ table
57
+ } = props;
64
58
  const {
65
59
  texts
66
60
  } = useLocalization();
67
- const meta = table.options.meta;
68
- const reorder = (activeId, overId, listId) => {
69
- const draggedColumn = state[listId].find(c => c.id === activeId);
70
- const targetColumn = state[listId].find(c => c.id === overId);
71
- if (draggedColumn && targetColumn) {
72
- reorderColumn(draggedColumn.id, targetColumn.id, listId === 'visible');
73
- }
74
- };
75
- const move = (activeId, oldListId) => {
76
- const column = state[oldListId].find(c => c.id === activeId);
77
- if (column) {
78
- moveColumn(column);
61
+ const [query, setQuery] = React__default.useState('');
62
+ const allColumns = table.getAllLeafColumns();
63
+ const tableMeta = table.options.meta;
64
+ const columns = React__default.useMemo(() => allColumns.filter(column => !isInternalColumn(column.id)).filter(column => query !== null && query !== void 0 && query.length ? getColumnName(column).toLowerCase().includes(query.toLowerCase()) : true), [allColumns, query]);
65
+ const listClassName = 'flex max-h-64 flex-col gap-y-px overflow-auto';
66
+ const handleReorder = (activeId, overId) => {
67
+ const items = columns.map(column => column.id);
68
+ if (columns.find(column => {
69
+ var _column$columnDef$met;
70
+ return column.id === overId && ((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.disableReordering);
71
+ })) {
72
+ return;
79
73
  }
74
+ table.setColumnOrder(currentOrder => {
75
+ const firstNonInternalColumnIndex = currentOrder.findIndex(id => !id.startsWith('__') && id !== COLUMN_ID_FOR_ACTIONS);
76
+ return [...currentOrder.slice(0, firstNonInternalColumnIndex), ...arrayMove(items, items.findIndex(c => c === activeId), items.findIndex(c => c === overId))];
77
+ });
80
78
  };
81
- const handleColumnCheckboxChange = column => () => {
82
- moveColumn === null || moveColumn === void 0 ? void 0 : moveColumn(column);
83
- column.toggleVisibility();
84
- };
85
- const isColumnHidingAllowed = meta.enableColumnHiding;
86
- const isQueryFilterNotApplied = query === '';
87
- const filteredHiddenColumns = state.hidden.filter(column => {
88
- var _column$columnDef$hea3;
89
- return (_column$columnDef$hea3 = column.columnDef.header) === null || _column$columnDef$hea3 === void 0 ? void 0 : _column$columnDef$hea3.toString().toLowerCase().includes(query.toLowerCase());
90
- });
91
- const filteredVisibleColumns = state.visible.filter(column => {
92
- var _column$columnDef$hea4;
93
- return (_column$columnDef$hea4 = column.columnDef.header) === null || _column$columnDef$hea4 === void 0 ? void 0 : _column$columnDef$hea4.toString().toLowerCase().includes(query.toLowerCase());
94
- });
95
- const visibleListDescriptionText = isQueryFilterNotApplied ? texts.table2.columnSettings.columnsVisibleDrop : texts.table2.columnSettings.noVisibleColumns;
96
- const hiddenListDescriptionText = isQueryFilterNotApplied ? texts.table2.columnSettings.columnsHiddenDrop : texts.table2.columnSettings.noHiddenColumns;
97
- if (isColumnHidingAllowed) {
98
- return /*#__PURE__*/React__default.createElement(Container, {
99
- reorder: reorder,
100
- move: move
101
- }, /*#__PURE__*/React__default.createElement(Truncate, {
102
- tooltip: texts.table2.columnSettings.columnsVisible
103
- }, /*#__PURE__*/React__default.createElement("h5", {
104
- className: "mx-4 my-[6px]"
105
- }, texts.table2.columnSettings.columnsVisible)), /*#__PURE__*/React__default.createElement(List, {
106
- id: "visible",
107
- className: "flex min-h-[theme(spacing.8)] flex-col overflow-hidden px-2"
108
- }, filteredVisibleColumns.length ? filteredVisibleColumns.map(column => {
109
- // When searching a column, we disable reordering and make it fixed
110
- const canBeReordered = isOrderingAllowed(table, column) && isQueryFilterNotApplied;
111
- const isColumnFixed = isColumnOrderingDisabled(table, column) && isQueryFilterNotApplied;
112
- return /*#__PURE__*/React__default.createElement(Item, {
113
- key: column.id,
114
- disabled: !canBeReordered,
115
- id: column.id,
116
- asChild: true
117
- }, /*#__PURE__*/React__default.createElement(OrderableColumn, {
118
- canBeReordered: canBeReordered,
119
- column: column,
120
- isColumnFixed: isColumnFixed
121
- }, column.getCanHide() ? /*#__PURE__*/React__default.createElement(Checkbox, {
122
- className: "!mt-0",
123
- checked: column.getIsVisible(),
124
- onChange: handleColumnCheckboxChange(column)
125
- }) : null));
126
- }) :
127
- /*#__PURE__*/
128
- // For some reason wrapping this paragraph with Truncate will throw error in scenarios where
129
- // we conditionally hide or show the paragraph e.g. moving the last column to the hide list
130
- React__default.createElement("p", {
131
- className: "text-grey-500 mb-0 flex h-8 items-center truncate px-2"
132
- }, visibleListDescriptionText)), /*#__PURE__*/React__default.createElement(Truncate, {
133
- tooltip: texts.table2.columnSettings.columnsHidden
134
- }, /*#__PURE__*/React__default.createElement("h5", {
135
- className: "mx-4 my-[6px] truncate"
136
- }, texts.table2.columnSettings.columnsHidden)), /*#__PURE__*/React__default.createElement(List, {
137
- id: "hidden",
138
- className: "flex min-h-[theme(spacing.8)] flex-col gap-y-px overflow-hidden px-2"
139
- }, filteredHiddenColumns.length ? filteredHiddenColumns.map(column => {
140
- // When searching a column, we disable reordering and make it fixed
141
- const canBeReordered = isOrderingAllowed(table, column) && isQueryFilterNotApplied;
142
- const isColumnFixed = isColumnOrderingDisabled(table, column) && isQueryFilterNotApplied;
143
- return /*#__PURE__*/React__default.createElement(Item, {
144
- key: column.id,
145
- disabled: !canBeReordered,
146
- id: column.id,
147
- asChild: true
148
- }, /*#__PURE__*/React__default.createElement(OrderableColumn, {
149
- canBeReordered: canBeReordered,
150
- column: column,
151
- isColumnFixed: isColumnFixed
152
- }, column.getCanHide() ? /*#__PURE__*/React__default.createElement(Checkbox, {
153
- className: "!mt-0",
154
- checked: column.getIsVisible(),
155
- onChange: handleColumnCheckboxChange(column)
156
- }) : null));
157
- }) :
158
- /*#__PURE__*/
159
- // For some reason wrapping this paragraph with Truncate will throw error in scenarios where
160
- // we conditionally hide or show the paragraph e.g. moving the last column to the visible list
161
- React__default.createElement("p", {
162
- className: "text-grey-500 mb-0 flex h-8 items-center truncate px-2"
163
- }, hiddenListDescriptionText)));
164
- }
165
- return /*#__PURE__*/React__default.createElement(Container, {
166
- reorder: reorder,
167
- move: move
79
+ const popover = popoverProps => /*#__PURE__*/React__default.createElement(Popover, Object.assign({}, popoverProps), /*#__PURE__*/React__default.createElement(Popover.Content, {
80
+ align: "end"
81
+ }, /*#__PURE__*/React__default.createElement("div", {
82
+ className: "flex w-60 flex-col gap-2"
83
+ }, table.options.enableHiding ? /*#__PURE__*/React__default.createElement(Input, {
84
+ onChange: event => setQuery(event.target.value),
85
+ placeholder: texts.table2.columnSettings.search,
86
+ value: query
87
+ }) : null, tableMeta.enableColumnReordering && columns.length && !(query !== null && query !== void 0 && query.length) ? /*#__PURE__*/React__default.createElement(Container, {
88
+ reorder: handleReorder
168
89
  }, /*#__PURE__*/React__default.createElement(List, {
169
- id: "visible",
170
- className: "flex min-h-[theme(spacing.8)] flex-col gap-y-px overflow-hidden px-2"
171
- }, state.visible.length ? state.visible.filter(column => {
172
- var _column$columnDef$hea5;
173
- return (_column$columnDef$hea5 = column.columnDef.header) === null || _column$columnDef$hea5 === void 0 ? void 0 : _column$columnDef$hea5.toString().toLowerCase().includes(query.toLowerCase());
174
- }).map(column => {
175
- // When searching a column, we disable reordering and make it fixed
176
- const canBeReordered = isOrderingAllowed(table, column) && isQueryFilterNotApplied;
177
- const isColumnFixed = isColumnOrderingDisabled(table, column) && isQueryFilterNotApplied;
90
+ id: "columns",
91
+ className: listClassName
92
+ }, columns.map(column => {
93
+ var _column$columnDef$met2, _column$columnDef$met3;
178
94
  return /*#__PURE__*/React__default.createElement(Item, {
179
95
  key: column.id,
180
- disabled: !canBeReordered,
181
96
  id: column.id,
97
+ disabled: (_column$columnDef$met2 = column.columnDef.meta) === null || _column$columnDef$met2 === void 0 ? void 0 : _column$columnDef$met2.disableReordering,
182
98
  asChild: true
183
- }, /*#__PURE__*/React__default.createElement(OrderableColumn, {
184
- canBeReordered: canBeReordered,
99
+ }, /*#__PURE__*/React__default.createElement(Column, {
185
100
  column: column,
186
- isColumnFixed: isColumnFixed
101
+ draggable: !((_column$columnDef$met3 = column.columnDef.meta) !== null && _column$columnDef$met3 !== void 0 && _column$columnDef$met3.disableReordering),
102
+ isOrderingEnabled: true
187
103
  }));
188
- }) : null));
189
- };
190
- const reorder = (draggedColumnId, targetColumnId, list = []) => {
191
- const nextColumnOrder = [...list];
192
- nextColumnOrder.splice(nextColumnOrder.findIndex(c => c.id === targetColumnId), 0, nextColumnOrder.splice(nextColumnOrder.findIndex(c => c.id === draggedColumnId), 1)[0]);
193
- return nextColumnOrder;
194
- };
195
- const ColumnSettingsButton = ({
196
- table
197
- }) => {
198
- const {
199
- texts
200
- } = useLocalization();
201
- const [query, setQuery] = React__default.useState('');
202
- const columns = table.getAllLeafColumns().filter(column => !isInternalColumn(column.id));
203
- const [state, setState] = React__default.useState({
204
- visible: columns.filter(column => column.getIsVisible()),
205
- hidden: columns.filter(column => !column.getIsVisible())
206
- });
207
- const initialOrderedColumns = React__default.useRef(columns);
208
- const moveColumnToList = column => {
209
- // If column can't hide then don't toggle visiblity
210
- if (column.getCanHide()) {
211
- column.toggleVisibility();
212
- }
213
- if (state.visible.find(c => c.id === column.id)) {
214
- setState(currentState => {
215
- const filteredColumns = currentState.visible.filter(c => c.id !== column.id);
216
- if (column.getCanHide()) {
217
- const hiddenColumns = [column].concat(...currentState.hidden);
218
- // Sort the hidden column so that they follow the initial order of fixed columns
219
- const sortedFixedHiddenColumns = hiddenColumns.filter(hiddenColumn => {
220
- var _hiddenColumn$columnD;
221
- return !!((_hiddenColumn$columnD = hiddenColumn.columnDef.meta) !== null && _hiddenColumn$columnD !== void 0 && _hiddenColumn$columnD.disableReordering);
222
- }).sort((colA, colB) => {
223
- const indexA = initialOrderedColumns.current.indexOf(colA);
224
- const indexB = initialOrderedColumns.current.indexOf(colB);
225
- return indexA - indexB;
226
- });
227
- const reorderableHiddenColumns = hiddenColumns.filter(hiddenColumn => {
228
- var _hiddenColumn$columnD2;
229
- return !((_hiddenColumn$columnD2 = hiddenColumn.columnDef.meta) !== null && _hiddenColumn$columnD2 !== void 0 && _hiddenColumn$columnD2.disableReordering);
230
- });
231
- return {
232
- visible: filteredColumns,
233
- hidden: [...sortedFixedHiddenColumns, ...reorderableHiddenColumns]
234
- };
235
- }
236
- // If column can't hide and it is dragged to hidden column list then move the column to the bottom of
237
- // the visible column list
238
- return {
239
- visible: filteredColumns.concat(column),
240
- hidden: currentState.hidden
241
- };
242
- });
243
- } else {
244
- setState(currentState => {
245
- let visibleColumns = [];
246
- // If ordering is allowed then we don't care about the previous column order
247
- if (isOrderingAllowed(table, column)) {
248
- visibleColumns = currentState.visible.concat(column);
249
- } else {
250
- const orderedVisibleColumns = initialOrderedColumns.current.filter(orderedColumn => !state.hidden.find(c => c.id === orderedColumn.id) || orderedColumn.id === column.id).map(({
251
- id
252
- }) => id);
253
- const movedColumnIndex = orderedVisibleColumns.indexOf(column.id);
254
- // Index of the column that is moved to visible list
255
- // Intial value for the index is the last item in visible list
256
- let index = currentState.visible.length;
257
- currentState.visible.find((col, colIndex) => {
258
- const columnIndex = orderedVisibleColumns.indexOf(col.id);
259
- // Index where the moved column should be shown in visible list
260
- if (movedColumnIndex < columnIndex) {
261
- index = colIndex;
262
- return true;
263
- }
264
- return false;
265
- });
266
- visibleColumns = currentState.visible.slice(0, index).concat(column).concat(currentState.visible.slice(index));
267
- }
268
- return {
269
- visible: visibleColumns,
270
- hidden: currentState.hidden.filter(c => c.id !== column.id)
271
- };
272
- });
273
- }
274
- };
275
- const reorderColumnInList = (draggedColumnId, targetColumnId, isVisible) => {
276
- var _columns$find, _columns$find$columnD;
277
- const isTargetColumnFixed = !!((_columns$find = columns.find(column => column.id === targetColumnId)) !== null && _columns$find !== void 0 && (_columns$find$columnD = _columns$find.columnDef.meta) !== null && _columns$find$columnD !== void 0 && _columns$find$columnD.disableReordering);
278
- if (isVisible) {
279
- let firstReorderableVisibleColumnId = targetColumnId;
280
- if (isTargetColumnFixed) {
281
- var _state$visible$find$i, _state$visible$find;
282
- firstReorderableVisibleColumnId = (_state$visible$find$i = (_state$visible$find = state.visible.find(visibleColumn => {
283
- var _visibleColumn$column;
284
- return !((_visibleColumn$column = visibleColumn.columnDef.meta) !== null && _visibleColumn$column !== void 0 && _visibleColumn$column.disableReordering);
285
- })) === null || _state$visible$find === void 0 ? void 0 : _state$visible$find.id) !== null && _state$visible$find$i !== void 0 ? _state$visible$find$i : targetColumnId;
286
- }
287
- setState(currentState => ({
288
- ...currentState,
289
- visible: reorder(draggedColumnId, firstReorderableVisibleColumnId, currentState.visible)
290
- }));
291
- } else {
292
- let firstReorderableHiddenColumnId = targetColumnId;
293
- if (isTargetColumnFixed) {
294
- var _state$hidden$find$id, _state$hidden$find;
295
- firstReorderableHiddenColumnId = (_state$hidden$find$id = (_state$hidden$find = state.hidden.find(visibleColumn => {
296
- var _visibleColumn$column2;
297
- return !((_visibleColumn$column2 = visibleColumn.columnDef.meta) !== null && _visibleColumn$column2 !== void 0 && _visibleColumn$column2.disableReordering);
298
- })) === null || _state$hidden$find === void 0 ? void 0 : _state$hidden$find.id) !== null && _state$hidden$find$id !== void 0 ? _state$hidden$find$id : targetColumnId;
299
- }
300
- setState(currentState => ({
301
- ...currentState,
302
- hidden: reorder(draggedColumnId, firstReorderableHiddenColumnId, currentState.hidden)
303
- }));
304
- }
305
- };
306
- const changeColumnOrder = newColumnOrder => {
307
- const internals = [];
308
- if (table.options.enableRowSelection) {
309
- internals.push(COLUMN_ID_FOR_SELECTION);
310
- }
311
- if (table.options.enableExpanding) {
312
- internals.push(COLUMN_ID_FOR_EXPANSION);
313
- }
314
- table.setColumnOrder(internals.concat(newColumnOrder.map(c => c.id)));
315
- };
316
- // probably a more elegant way to do this without local state but had
317
- // a range of issues using the native apis directly
318
- React__default.useEffect(() => {
319
- changeColumnOrder([...state.visible, ...state.hidden]);
320
- }, [state]);
321
- // This effect moves up all fixed/unorderable columns before orderable columns.
322
- // For custom column order, the fixed/unorderable columns will also move up before orderable columns.
323
- // The order between all fixed/unorderable column items, and all orderable column items will be same as it was
324
- // specified by the consumer.
325
- React__default.useEffect(() => {
326
- const orderableColumns = [];
327
- const fixedColumns = [];
328
- columns.forEach(column => {
329
- var _column$columnDef$met3;
330
- const isColumnFixed = !!((_column$columnDef$met3 = column.columnDef.meta) !== null && _column$columnDef$met3 !== void 0 && _column$columnDef$met3.disableReordering);
331
- if (isColumnFixed) {
332
- fixedColumns.push(column);
333
- } else {
334
- orderableColumns.push(column);
335
- }
336
- });
337
- const newOrderedColumns = [...fixedColumns, ...orderableColumns];
338
- // Changes order in the table
339
- changeColumnOrder(newOrderedColumns);
340
- // Changes order in the column settings button popover
341
- setState({
342
- visible: newOrderedColumns.filter(column => column.getIsVisible()),
343
- hidden: newOrderedColumns.filter(column => !column.getIsVisible())
344
- });
345
- // update initial column order
346
- initialOrderedColumns.current = newOrderedColumns;
347
- }, []);
104
+ }))) : /*#__PURE__*/React__default.createElement("div", {
105
+ className: listClassName
106
+ }, columns.length ? columns.map(column => /*#__PURE__*/React__default.createElement(Column, {
107
+ column: column,
108
+ key: column.id
109
+ })) : texts.table2.columnSettings.noResults))));
348
110
  return /*#__PURE__*/React__default.createElement(Button, {
349
- "aria-label": texts.table2.columnSettings.tooltip,
350
- popover: popoverProps => /*#__PURE__*/React__default.createElement(Popover, Object.assign({}, popoverProps), /*#__PURE__*/React__default.createElement(Popover.Content, {
351
- align: "end"
352
- }, /*#__PURE__*/React__default.createElement("div", {
353
- className: "flex w-60 flex-col gap-2"
354
- }, table.options.enableHiding ? /*#__PURE__*/React__default.createElement(Input, {
355
- onChange: event => setQuery(event.target.value),
356
- placeholder: texts.table2.columnSettings.search,
357
- value: query
358
- }) : null, /*#__PURE__*/React__default.createElement("div", {
359
- className: "-ml-[calc(theme(spacing.4)_-_2px)] -mb-2 max-h-64 w-[calc(100%_+_theme(spacing.7)_-_1px)] overflow-auto"
360
- }, /*#__PURE__*/React__default.createElement(SortableColumnContainer, {
361
- state: state,
362
- moveColumn: moveColumnToList,
363
- reorderColumn: reorderColumnInList,
364
- table: table,
365
- query: query
366
- }))))),
111
+ popover: popover,
367
112
  tooltip: texts.table2.columnSettings.tooltip
368
113
  }, /*#__PURE__*/React__default.createElement(Icon, {
369
114
  name: "columns"
370
- }), texts.table2.columnSettings.button);
371
- };
115
+ }), " ", texts.table2.columnSettings.button);
116
+ }
372
117
 
373
118
  export { ColumnSettingsButton };
374
119
  //# sourceMappingURL=ColumnSettingsButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnSettingsButton.js","sources":["../../../../../../../../src/components/Table2/components/ColumnSettingsButton.tsx"],"sourcesContent":["import React from 'react';\nimport { Column as RTColumn, Table as RTTable, TableMeta } from '@tanstack/react-table';\n\nimport { Checkbox } from '../../Checkbox/Checkbox';\nimport { Icon } from '../../Icon/Icon';\nimport { Input } from '../../Input/Input';\nimport { Button } from '../../Button/Button';\nimport { Popover } from '../../Popover/Popover';\nimport * as Sortable from '../../../primitives/Sortable/Sortable';\nimport { COLUMN_ID_FOR_EXPANSION, COLUMN_ID_FOR_SELECTION, isInternalColumn } from '../utilities/columns';\nimport { SortableItemId } from '../../../primitives/Sortable/Sortable';\nimport { useLocalization } from '../../Provider/Localization';\nimport { Truncate } from '../../Truncate/Truncate';\n\ntype OrderableColumnProps = React.HTMLAttributes<HTMLDivElement> & {\n canBeReordered: boolean;\n column: RTColumn<any, any>;\n isColumnFixed: boolean;\n};\n\nconst OrderableColumn = React.forwardRef<HTMLDivElement, OrderableColumnProps>((props, ref) => {\n const { canBeReordered, column, children, isColumnFixed, ...attributes } = props;\n let icon;\n\n if (canBeReordered) {\n icon = (\n <Icon\n name=\"drag\"\n /** top margin of -3px on Icon, is added to make sure that each OrderableColumn is of 32px height **/\n className=\"text-grey-500 hover:text-grey-700 mr-0.5 -ml-[6px] -mt-[3px] inline-block !h-5 !w-5 cursor-move\"\n />\n );\n } else if (isColumnFixed) {\n icon = <span className=\"mr-0.5 inline-flex w-4\" />;\n }\n\n // columnName should be a string\n const columnName = column.columnDef.header?.toString() ?? column.columnDef.id ?? '';\n\n return (\n <div\n {...attributes}\n className=\"hover:bg-grey-100 aria-pressed:bg-grey-200 flex w-full items-center justify-between gap-x-2 rounded py-[6px] px-2 aria-pressed:z-10\"\n ref={ref}>\n <Truncate tooltip={columnName}>\n <span className=\"select-none\">\n {icon}\n {columnName}\n </span>\n </Truncate>\n {children}\n </div>\n );\n});\n\nconst isOrderingAllowed = (table, column) => {\n const meta = table.options.meta as TableMeta<any>;\n\n return meta.enableColumnReordering ? !column.columnDef.meta?.disableReordering : false;\n};\n\nconst isColumnOrderingDisabled = (table, column) => {\n const meta = table.options.meta as TableMeta<any>;\n return meta.enableColumnReordering && !!column.columnDef.meta?.disableReordering;\n};\n\ntype SortableColumnContainerProps = {\n state: VisibilityState;\n moveColumn: (column: RTColumn<any, any>) => void;\n reorderColumn: (draggedColumnId: string, targetColumnId: string, isVisible: boolean) => void;\n table: RTTable<any>;\n query: string;\n};\n\nconst SortableColumnContainer = ({ state, moveColumn, reorderColumn, table, query }: SortableColumnContainerProps) => {\n const { texts } = useLocalization();\n const meta = table.options.meta as TableMeta<any>;\n\n const reorder = (activeId: SortableItemId, overId: SortableItemId, listId: string) => {\n const draggedColumn: RTColumn<any, any> = state[listId].find(c => c.id === activeId);\n const targetColumn: RTColumn<any, any> = state[listId].find(c => c.id === overId);\n\n if (draggedColumn && targetColumn) {\n reorderColumn(draggedColumn.id, targetColumn.id, listId === 'visible');\n }\n };\n\n const move = (activeId: SortableItemId, oldListId: string) => {\n const column = state[oldListId].find(c => c.id === activeId);\n\n if (column) {\n moveColumn(column);\n }\n };\n\n const handleColumnCheckboxChange = column => () => {\n moveColumn?.(column);\n column.toggleVisibility();\n };\n\n const isColumnHidingAllowed = meta.enableColumnHiding;\n const isQueryFilterNotApplied = query === '';\n const filteredHiddenColumns = state.hidden.filter(column =>\n column.columnDef.header?.toString().toLowerCase().includes(query.toLowerCase())\n );\n const filteredVisibleColumns = state.visible.filter(column =>\n column.columnDef.header?.toString().toLowerCase().includes(query.toLowerCase())\n );\n\n const visibleListDescriptionText = isQueryFilterNotApplied\n ? texts.table2.columnSettings.columnsVisibleDrop\n : texts.table2.columnSettings.noVisibleColumns;\n const hiddenListDescriptionText = isQueryFilterNotApplied\n ? texts.table2.columnSettings.columnsHiddenDrop\n : texts.table2.columnSettings.noHiddenColumns;\n\n if (isColumnHidingAllowed) {\n return (\n <Sortable.Container reorder={reorder} move={move}>\n <Truncate tooltip={texts.table2.columnSettings.columnsVisible}>\n <h5 className=\"mx-4 my-[6px]\">{texts.table2.columnSettings.columnsVisible}</h5>\n </Truncate>\n <Sortable.List id=\"visible\" className=\"flex min-h-[theme(spacing.8)] flex-col overflow-hidden px-2\">\n {filteredVisibleColumns.length ? (\n filteredVisibleColumns.map(column => {\n // When searching a column, we disable reordering and make it fixed\n const canBeReordered = isOrderingAllowed(table, column) && isQueryFilterNotApplied;\n const isColumnFixed = isColumnOrderingDisabled(table, column) && isQueryFilterNotApplied;\n\n return (\n <Sortable.Item key={column.id} disabled={!canBeReordered} id={column.id} asChild>\n <OrderableColumn\n canBeReordered={canBeReordered}\n column={column}\n isColumnFixed={isColumnFixed}>\n {column.getCanHide() ? (\n <Checkbox\n className=\"!mt-0\"\n checked={column.getIsVisible()}\n onChange={handleColumnCheckboxChange(column)}\n />\n ) : null}\n </OrderableColumn>\n </Sortable.Item>\n );\n })\n ) : (\n // For some reason wrapping this paragraph with Truncate will throw error in scenarios where\n // we conditionally hide or show the paragraph e.g. moving the last column to the hide list\n <p className=\"text-grey-500 mb-0 flex h-8 items-center truncate px-2\">{visibleListDescriptionText}</p>\n )}\n </Sortable.List>\n\n <Truncate tooltip={texts.table2.columnSettings.columnsHidden}>\n <h5 className=\"mx-4 my-[6px] truncate\">{texts.table2.columnSettings.columnsHidden}</h5>\n </Truncate>\n <Sortable.List id=\"hidden\" className=\"flex min-h-[theme(spacing.8)] flex-col gap-y-px overflow-hidden px-2\">\n {filteredHiddenColumns.length ? (\n filteredHiddenColumns.map((column: RTColumn<any, any>) => {\n // When searching a column, we disable reordering and make it fixed\n const canBeReordered = isOrderingAllowed(table, column) && isQueryFilterNotApplied;\n const isColumnFixed = isColumnOrderingDisabled(table, column) && isQueryFilterNotApplied;\n\n return (\n <Sortable.Item key={column.id} disabled={!canBeReordered} id={column.id} asChild>\n <OrderableColumn\n canBeReordered={canBeReordered}\n column={column}\n isColumnFixed={isColumnFixed}>\n {column.getCanHide() ? (\n <Checkbox\n className=\"!mt-0\"\n checked={column.getIsVisible()}\n onChange={handleColumnCheckboxChange(column)}\n />\n ) : null}\n </OrderableColumn>\n </Sortable.Item>\n );\n })\n ) : (\n // For some reason wrapping this paragraph with Truncate will throw error in scenarios where\n // we conditionally hide or show the paragraph e.g. moving the last column to the visible list\n <p className=\"text-grey-500 mb-0 flex h-8 items-center truncate px-2\">{hiddenListDescriptionText}</p>\n )}\n </Sortable.List>\n </Sortable.Container>\n );\n }\n\n return (\n <Sortable.Container reorder={reorder} move={move}>\n <Sortable.List id=\"visible\" className=\"flex min-h-[theme(spacing.8)] flex-col gap-y-px overflow-hidden px-2\">\n {state.visible.length\n ? state.visible\n .filter(column => column.columnDef.header?.toString().toLowerCase().includes(query.toLowerCase()))\n .map(column => {\n // When searching a column, we disable reordering and make it fixed\n const canBeReordered = isOrderingAllowed(table, column) && isQueryFilterNotApplied;\n const isColumnFixed = isColumnOrderingDisabled(table, column) && isQueryFilterNotApplied;\n\n return (\n <Sortable.Item key={column.id} disabled={!canBeReordered} id={column.id} asChild>\n <OrderableColumn\n canBeReordered={canBeReordered}\n column={column}\n isColumnFixed={isColumnFixed}\n />\n </Sortable.Item>\n );\n })\n : null}\n </Sortable.List>\n </Sortable.Container>\n );\n};\n\nconst reorder = (draggedColumnId: string, targetColumnId: string, list: RTColumn<any>[] = []): RTColumn<any>[] => {\n const nextColumnOrder = [...list];\n nextColumnOrder.splice(\n nextColumnOrder.findIndex(c => c.id === targetColumnId),\n 0,\n nextColumnOrder.splice(\n nextColumnOrder.findIndex(c => c.id === draggedColumnId),\n 1\n )[0]\n );\n return nextColumnOrder;\n};\n\ntype VisibilityState = {\n visible: RTColumn<any>[];\n hidden: RTColumn<any>[];\n};\ntype ColumnSettingsButtonProps = {\n table: RTTable<any>;\n};\n\nexport const ColumnSettingsButton = ({ table }: ColumnSettingsButtonProps) => {\n const { texts } = useLocalization();\n const [query, setQuery] = React.useState('');\n\n const columns = table.getAllLeafColumns().filter(column => !isInternalColumn(column.id));\n\n const [state, setState] = React.useState<VisibilityState>({\n visible: columns.filter(column => column.getIsVisible()),\n hidden: columns.filter(column => !column.getIsVisible()),\n });\n\n const initialOrderedColumns = React.useRef(columns);\n\n const moveColumnToList = (column: RTColumn<any, any>) => {\n // If column can't hide then don't toggle visiblity\n if (column.getCanHide()) {\n column.toggleVisibility();\n }\n\n if (state.visible.find(c => c.id === column.id)) {\n setState(currentState => {\n const filteredColumns = currentState.visible.filter(c => c.id !== column.id);\n\n if (column.getCanHide()) {\n const hiddenColumns = [column].concat(...currentState.hidden);\n\n // Sort the hidden column so that they follow the initial order of fixed columns\n const sortedFixedHiddenColumns = hiddenColumns\n .filter(hiddenColumn => !!hiddenColumn.columnDef.meta?.disableReordering)\n .sort((colA, colB) => {\n const indexA = initialOrderedColumns.current.indexOf(colA);\n const indexB = initialOrderedColumns.current.indexOf(colB);\n\n return indexA - indexB;\n });\n\n const reorderableHiddenColumns = hiddenColumns.filter(\n hiddenColumn => !hiddenColumn.columnDef.meta?.disableReordering\n );\n\n return {\n visible: filteredColumns,\n hidden: [...sortedFixedHiddenColumns, ...reorderableHiddenColumns],\n };\n }\n\n // If column can't hide and it is dragged to hidden column list then move the column to the bottom of\n // the visible column list\n return {\n visible: filteredColumns.concat(column),\n hidden: currentState.hidden,\n };\n });\n } else {\n setState(currentState => {\n let visibleColumns: RTColumn<any>[] = [];\n\n // If ordering is allowed then we don't care about the previous column order\n if (isOrderingAllowed(table, column)) {\n visibleColumns = currentState.visible.concat(column);\n } else {\n const orderedVisibleColumns = initialOrderedColumns.current\n .filter(\n orderedColumn => !state.hidden.find(c => c.id === orderedColumn.id) || orderedColumn.id === column.id\n )\n .map(({ id }) => id);\n\n const movedColumnIndex = orderedVisibleColumns.indexOf(column.id);\n\n // Index of the column that is moved to visible list\n // Intial value for the index is the last item in visible list\n let index = currentState.visible.length;\n\n currentState.visible.find((col, colIndex) => {\n const columnIndex = orderedVisibleColumns.indexOf(col.id);\n\n // Index where the moved column should be shown in visible list\n if (movedColumnIndex < columnIndex) {\n index = colIndex;\n return true;\n }\n\n return false;\n });\n\n visibleColumns = currentState.visible\n .slice(0, index)\n .concat(column)\n .concat(currentState.visible.slice(index));\n }\n\n return {\n visible: visibleColumns,\n hidden: currentState.hidden.filter(c => c.id !== column.id),\n };\n });\n }\n };\n\n const reorderColumnInList = (draggedColumnId: string, targetColumnId: string, isVisible: boolean) => {\n const isTargetColumnFixed = !!columns.find(column => column.id === targetColumnId)?.columnDef.meta?.disableReordering;\n\n if (isVisible) {\n let firstReorderableVisibleColumnId = targetColumnId;\n\n if (isTargetColumnFixed) {\n firstReorderableVisibleColumnId =\n state.visible.find(visibleColumn => !visibleColumn.columnDef.meta?.disableReordering)?.id ?? targetColumnId;\n }\n\n setState(currentState => ({\n ...currentState,\n visible: reorder(draggedColumnId, firstReorderableVisibleColumnId, currentState.visible),\n }));\n } else {\n let firstReorderableHiddenColumnId = targetColumnId;\n\n if (isTargetColumnFixed) {\n firstReorderableHiddenColumnId =\n state.hidden.find(visibleColumn => !visibleColumn.columnDef.meta?.disableReordering)?.id ?? targetColumnId;\n }\n\n setState(currentState => ({\n ...currentState,\n hidden: reorder(draggedColumnId, firstReorderableHiddenColumnId, currentState.hidden),\n }));\n }\n };\n\n const changeColumnOrder = (newColumnOrder: RTColumn<any>[]) => {\n const internals: string[] = [];\n\n if (table.options.enableRowSelection) {\n internals.push(COLUMN_ID_FOR_SELECTION);\n }\n\n if (table.options.enableExpanding) {\n internals.push(COLUMN_ID_FOR_EXPANSION);\n }\n\n table.setColumnOrder(internals.concat(newColumnOrder.map(c => c.id)));\n };\n\n // probably a more elegant way to do this without local state but had\n // a range of issues using the native apis directly\n React.useEffect(() => {\n changeColumnOrder([...state.visible, ...state.hidden]);\n }, [state]);\n\n // This effect moves up all fixed/unorderable columns before orderable columns.\n // For custom column order, the fixed/unorderable columns will also move up before orderable columns.\n // The order between all fixed/unorderable column items, and all orderable column items will be same as it was\n // specified by the consumer.\n React.useEffect(() => {\n const orderableColumns: RTColumn<any>[] = [];\n const fixedColumns: RTColumn<any>[] = [];\n\n columns.forEach(column => {\n const isColumnFixed = !!column.columnDef.meta?.disableReordering;\n\n if (isColumnFixed) {\n fixedColumns.push(column);\n } else {\n orderableColumns.push(column);\n }\n });\n\n const newOrderedColumns = [...fixedColumns, ...orderableColumns];\n\n // Changes order in the table\n changeColumnOrder(newOrderedColumns);\n\n // Changes order in the column settings button popover\n setState({\n visible: newOrderedColumns.filter(column => column.getIsVisible()),\n hidden: newOrderedColumns.filter(column => !column.getIsVisible()),\n });\n\n // update initial column order\n initialOrderedColumns.current = newOrderedColumns;\n }, []);\n\n return (\n <Button\n aria-label={texts.table2.columnSettings.tooltip}\n popover={popoverProps => (\n <Popover {...popoverProps}>\n <Popover.Content align=\"end\">\n <div className=\"flex w-60 flex-col gap-2\">\n {table.options.enableHiding ? (\n <Input\n onChange={event => setQuery(event.target.value)}\n placeholder={texts.table2.columnSettings.search}\n value={query}\n />\n ) : null}\n <div className=\"-ml-[calc(theme(spacing.4)_-_2px)] -mb-2 max-h-64 w-[calc(100%_+_theme(spacing.7)_-_1px)] overflow-auto\">\n <SortableColumnContainer\n state={state}\n moveColumn={moveColumnToList}\n reorderColumn={reorderColumnInList}\n table={table}\n query={query}\n />\n </div>\n </div>\n </Popover.Content>\n </Popover>\n )}\n tooltip={texts.table2.columnSettings.tooltip}>\n <Icon name=\"columns\" />\n {texts.table2.columnSettings.button}\n </Button>\n );\n};\n"],"names":["OrderableColumn","React","forwardRef","props","ref","canBeReordered","column","children","isColumnFixed","attributes","icon","Icon","name","className","columnName","columnDef","header","toString","id","Truncate","tooltip","isOrderingAllowed","table","meta","options","enableColumnReordering","disableReordering","isColumnOrderingDisabled","SortableColumnContainer","state","moveColumn","reorderColumn","query","texts","useLocalization","reorder","activeId","overId","listId","draggedColumn","find","c","targetColumn","move","oldListId","handleColumnCheckboxChange","toggleVisibility","isColumnHidingAllowed","enableColumnHiding","isQueryFilterNotApplied","filteredHiddenColumns","hidden","filter","toLowerCase","includes","filteredVisibleColumns","visible","visibleListDescriptionText","table2","columnSettings","columnsVisibleDrop","noVisibleColumns","hiddenListDescriptionText","columnsHiddenDrop","noHiddenColumns","Sortable","columnsVisible","length","map","key","disabled","asChild","getCanHide","Checkbox","checked","getIsVisible","onChange","columnsHidden","draggedColumnId","targetColumnId","list","nextColumnOrder","splice","findIndex","ColumnSettingsButton","setQuery","useState","columns","getAllLeafColumns","isInternalColumn","setState","initialOrderedColumns","useRef","moveColumnToList","currentState","filteredColumns","hiddenColumns","concat","sortedFixedHiddenColumns","hiddenColumn","sort","colA","colB","indexA","current","indexOf","indexB","reorderableHiddenColumns","visibleColumns","orderedVisibleColumns","orderedColumn","movedColumnIndex","index","col","colIndex","columnIndex","slice","reorderColumnInList","isVisible","isTargetColumnFixed","firstReorderableVisibleColumnId","visibleColumn","firstReorderableHiddenColumnId","changeColumnOrder","newColumnOrder","internals","enableRowSelection","push","COLUMN_ID_FOR_SELECTION","enableExpanding","COLUMN_ID_FOR_EXPANSION","setColumnOrder","useEffect","orderableColumns","fixedColumns","forEach","newOrderedColumns","Button","popover","popoverProps","Popover","Content","align","enableHiding","Input","event","target","value","placeholder","search","button"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnSettingsButton.js","sources":["../../../../../../../../src/components/Table2/components/ColumnSettingsButton.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { Table as RTable, Column as RTColumn, TableMeta } from '@tanstack/react-table';\nimport { Button } from '../../Button/Button';\nimport { useLocalization } from '../../Provider/Localization';\nimport { Checkbox } from '../../Checkbox/Checkbox';\nimport { Popover } from '../../Popover/Popover';\nimport { Input } from '../../Input/Input';\nimport * as SortablePrimitive from '../../../primitives/Sortable/Sortable';\nimport { Icon } from '../../Icon/Icon';\nimport { COLUMN_ID_FOR_ACTIONS, isInternalColumn } from '../utilities/columns';\nimport { Truncate } from '../../Truncate/Truncate';\n\ntype ColumnProps<TType = unknown> = React.HTMLAttributes<HTMLDivElement> & {\n column: RTColumn<TType, unknown>;\n draggable?: boolean;\n isOrderingEnabled?: boolean;\n};\n\nfunction getColumnName<TType = unknown>(column: RTColumn<TType, unknown>) {\n return column.columnDef.header?.toString() ?? column.columnDef.id ?? '';\n}\n\nconst Column = React.forwardRef(function Column<TType = unknown>(props: ColumnProps<TType>, ref: React.Ref<HTMLDivElement>) {\n const { column, draggable = false, isOrderingEnabled, ...dragAttributes } = props;\n const canHide = column.getCanHide();\n\n const className = cn('group/column flex items-center gap-x-2 rounded py-1 px-2', {\n 'hover:bg-grey-200': canHide || draggable,\n 'hover:cursor-pointer': canHide,\n 'active:cursor-move active:bg-grey-300': draggable,\n });\n\n const attributes = draggable ? dragAttributes : undefined;\n const text = getColumnName(column);\n\n return (\n <div {...attributes} key={column.id} className={className} onClick={() => column.toggleVisibility()} ref={ref}>\n {draggable ? (\n <Icon name=\"drag\" className=\"text-grey-500 group-hover/column:text-grey-700 -mx-2 !h-5\" />\n ) : isOrderingEnabled ? (\n <span className=\"flex w-2\" />\n ) : null}\n <Truncate tooltip={text}>\n <span className=\"flex-grow select-none\">{text}</span>\n </Truncate>\n {canHide ? <Checkbox checked={column.getIsVisible()} onChange={column.toggleVisibility} /> : null}\n </div>\n );\n});\n\nexport type ColumnSettingsProps<TType = unknown> = {\n table: RTable<TType>;\n};\n\nexport function ColumnSettingsButton<TType = unknown>(props: ColumnSettingsProps<TType>) {\n const { table } = props;\n const { texts } = useLocalization();\n const [query, setQuery] = React.useState('');\n const allColumns = table.getAllLeafColumns();\n const tableMeta = table.options.meta as TableMeta<TType>;\n const columns = React.useMemo(\n () =>\n allColumns\n .filter(column => !isInternalColumn(column.id))\n .filter(column => (query?.length ? getColumnName(column).toLowerCase().includes(query.toLowerCase()) : true)),\n [allColumns, query]\n );\n\n const listClassName = 'flex max-h-64 flex-col gap-y-px overflow-auto';\n\n const handleReorder = (activeId, overId) => {\n const items = columns.map(column => column.id);\n\n if (columns.find(column => column.id === overId && column.columnDef.meta?.disableReordering)) {\n return;\n }\n\n table.setColumnOrder(currentOrder => {\n const firstNonInternalColumnIndex = currentOrder.findIndex(\n id => !id.startsWith('__') && id !== COLUMN_ID_FOR_ACTIONS\n );\n\n return [\n ...currentOrder.slice(0, firstNonInternalColumnIndex),\n ...SortablePrimitive.arrayMove(\n items,\n items.findIndex(c => c === activeId),\n items.findIndex(c => c === overId)\n ),\n ];\n });\n };\n\n const popover = popoverProps => (\n <Popover {...popoverProps}>\n <Popover.Content align=\"end\">\n <div className=\"flex w-60 flex-col gap-2\">\n {table.options.enableHiding ? (\n <Input\n onChange={event => setQuery(event.target.value)}\n placeholder={texts.table2.columnSettings.search}\n value={query}\n />\n ) : null}\n {tableMeta.enableColumnReordering && columns.length && !query?.length ? (\n <SortablePrimitive.Container reorder={handleReorder}>\n <SortablePrimitive.List id=\"columns\" className={listClassName}>\n {columns.map(column => (\n <SortablePrimitive.Item\n key={column.id}\n id={column.id}\n disabled={column.columnDef.meta?.disableReordering}\n asChild>\n <Column\n column={column as any}\n draggable={!column.columnDef.meta?.disableReordering}\n isOrderingEnabled\n />\n </SortablePrimitive.Item>\n ))}\n </SortablePrimitive.List>\n </SortablePrimitive.Container>\n ) : (\n <div className={listClassName}>\n {columns.length\n ? columns.map(column => <Column column={column as any} key={column.id} />)\n : texts.table2.columnSettings.noResults}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover>\n );\n\n return (\n <Button popover={popover} tooltip={texts.table2.columnSettings.tooltip}>\n <Icon name=\"columns\" /> {texts.table2.columnSettings.button}\n </Button>\n );\n}\n"],"names":["getColumnName","column","columnDef","header","toString","id","Column","React","forwardRef","props","ref","draggable","isOrderingEnabled","dragAttributes","canHide","getCanHide","className","cn","attributes","undefined","text","key","onClick","toggleVisibility","Icon","name","Truncate","tooltip","Checkbox","checked","getIsVisible","onChange","ColumnSettingsButton","table","texts","useLocalization","query","setQuery","useState","allColumns","getAllLeafColumns","tableMeta","options","meta","columns","useMemo","filter","isInternalColumn","length","toLowerCase","includes","listClassName","handleReorder","activeId","overId","items","map","find","disableReordering","setColumnOrder","currentOrder","firstNonInternalColumnIndex","findIndex","startsWith","COLUMN_ID_FOR_ACTIONS","slice","SortablePrimitive","c","popover","popoverProps","Popover","Content","align","enableHiding","Input","event","target","value","placeholder","table2","columnSettings","search","enableColumnReordering","reorder","disabled","asChild","noResults","Button","button"],"mappings":"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"}
@@ -14,7 +14,7 @@ import { globalFilterFn, columnFilterFn } from '../../utilities/filterFn.js';
14
14
  import { MOVE_DIR } from '../../hooks/useEditMode.js';
15
15
  import { IndicatorReason, Indicator } from './Indicator.js';
16
16
  import { ValidationError } from './ValidationError.js';
17
- import { hasChanged, willRowMoveAfterSorting } from './utils.js';
17
+ import { clickableNodeNames, hasChanged, willRowMoveAfterSorting } from './utils.js';
18
18
 
19
19
  const Cell = function Cell(props) {
20
20
  var _cell$column$columnDe, _cell$column$columnDe2, _table$options$meta;
@@ -306,11 +306,18 @@ const Cell = function Cell(props) {
306
306
  } else {
307
307
  if (meta.onRowClick) {
308
308
  attributes.onClick = event => {
309
- var _meta$onRowClick;
310
- if (event.target !== internalRef.current) {
311
- return;
309
+ const {
310
+ target
311
+ } = event;
312
+ // This check prevents triggering row click, when a click is performed in the dropdown (e.g. Select option or DayPicker date selection)
313
+ if (internalRef.current && target instanceof HTMLElement && internalRef.current.contains(target)) {
314
+ var _meta$onRowClick;
315
+ // Checking that target is clickable element or it is a child of clickable element
316
+ if (clickableNodeNames.includes(target.tagName) || target.closest(clickableNodeNames.map(tag => `[role=row] ${tag}`).join(','))) {
317
+ return;
318
+ }
319
+ (_meta$onRowClick = meta.onRowClick) === null || _meta$onRowClick === void 0 ? void 0 : _meta$onRowClick.call(meta, cell.row.original);
312
320
  }
313
- (_meta$onRowClick = meta.onRowClick) === null || _meta$onRowClick === void 0 ? void 0 : _meta$onRowClick.call(meta, cell.row.original);
314
321
  };
315
322
  }
316
323
  }