@economic/taco 1.28.0 → 1.29.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/components/Header/Header.d.ts +2 -1
- package/dist/components/Header/components/Button.d.ts +1 -1
- package/dist/components/Header/components/Logo.d.ts +1 -0
- package/dist/components/Icon/components/ColumnFreeze.d.ts +3 -0
- package/dist/components/Icon/components/ColumnUnfreeze.d.ts +3 -0
- package/dist/components/Icon/components/index.d.ts +1 -1
- package/dist/components/Input/Input.d.ts +1 -1
- package/dist/components/Menu/components/Item.d.ts +1 -1
- package/dist/components/Menu/components/Link.d.ts +1 -1
- package/dist/components/Navigation2/components/Link.d.ts +1 -1
- package/dist/components/Provider/Localization.d.ts +12 -4
- package/dist/components/Select2/components/Option.d.ts +1 -1
- package/dist/components/Select2/components/Search.d.ts +1 -1
- package/dist/components/Table2/Table2.d.ts +11 -4
- package/dist/components/Table2/components/row/ExpandedRow.d.ts +1 -1
- package/dist/components/Table2/hooks/useColumnDefinitions.d.ts +2 -2
- package/dist/components/Table2/hooks/useTable.d.ts +4 -0
- package/dist/components/Table2/types.d.ts +3 -4
- package/dist/components/Table2/utilities/cell.d.ts +1 -1
- package/dist/components/Table2/utilities/columns.d.ts +1 -0
- package/dist/components/Tag/Tag.d.ts +1 -1
- package/dist/components/Truncate/Truncate.d.ts +6 -0
- package/dist/esm/packages/taco/src/components/Header/Header.js +3 -2
- package/dist/esm/packages/taco/src/components/Header/Header.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Header/components/Button.js +3 -1
- package/dist/esm/packages/taco/src/components/Header/components/Button.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Header/components/Logo.js +19 -2
- package/dist/esm/packages/taco/src/components/Header/components/Logo.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Header/components/MenuButton.js +1 -1
- package/dist/esm/packages/taco/src/components/Header/components/MenuButton.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Header/components/SecondaryNavigation.js +1 -1
- package/dist/esm/packages/taco/src/components/Header/components/SecondaryNavigation.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Icon/components/ColumnFreeze.js +19 -0
- package/dist/esm/packages/taco/src/components/Icon/components/ColumnFreeze.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Icon/components/ColumnUnfreeze.js +19 -0
- package/dist/esm/packages/taco/src/components/Icon/components/ColumnUnfreeze.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Icon/components/index.js +4 -0
- package/dist/esm/packages/taco/src/components/Icon/components/index.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Input/Input.js +14 -14
- package/dist/esm/packages/taco/src/components/Input/Input.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Provider/Localization.js +13 -6
- package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
- package/dist/esm/packages/taco/src/components/SearchInput/SearchInput.js +1 -0
- package/dist/esm/packages/taco/src/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Select2/components/Collection.js +2 -1
- package/dist/esm/packages/taco/src/components/Select2/components/Collection.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/Table2.js +21 -9
- package/dist/esm/packages/taco/src/components/Table2/Table2.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/components/ColumnSettingsButton.js +243 -111
- package/dist/esm/packages/taco/src/components/Table2/components/ColumnSettingsButton.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/components/column/Base.js +5 -5
- package/dist/esm/packages/taco/src/components/Table2/components/column/Base.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js +76 -31
- package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/components/column/Footer.js +2 -2
- package/dist/esm/packages/taco/src/components/Table2/components/column/Footer.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/components/column/Header.js +85 -19
- package/dist/esm/packages/taco/src/components/Table2/components/column/Header.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/components/row/ExpandedRow.js +3 -0
- package/dist/esm/packages/taco/src/components/Table2/components/row/ExpandedRow.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useColumnOffsetStateListener.js +6 -3
- package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useColumnOffsetStateListener.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useSettingsStateListener.js +2 -2
- package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useSettingsStateListener.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/hooks/useColumnDefinitions.js +6 -9
- package/dist/esm/packages/taco/src/components/Table2/hooks/useColumnDefinitions.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/hooks/useTable.js +14 -6
- package/dist/esm/packages/taco/src/components/Table2/hooks/useTable.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/types.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/utilities/cell.js +8 -8
- package/dist/esm/packages/taco/src/components/Table2/utilities/cell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js +17 -8
- package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Truncate/Truncate.js +32 -0
- package/dist/esm/packages/taco/src/components/Truncate/Truncate.js.map +1 -0
- package/dist/esm/packages/taco/src/index.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Listbox2/components/Option.js +3 -1
- package/dist/esm/packages/taco/src/primitives/Listbox2/components/Option.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Listbox2/components/Root.js +3 -1
- package/dist/esm/packages/taco/src/primitives/Listbox2/components/Root.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Sortable/components/Item.js +5 -1
- package/dist/esm/packages/taco/src/primitives/Sortable/components/Item.js.map +1 -1
- package/dist/taco.cjs.development.js +601 -234
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/package.json +2 -2
- package/types.json +74 -19
@@ -1,6 +1,6 @@
|
|
1
1
|
import React__default from 'react';
|
2
2
|
import cn from 'classnames';
|
3
|
-
import {
|
3
|
+
import { getFrozenShadowClasses, getCellAlignmentClasses } from '../../utilities/cell.js';
|
4
4
|
|
5
5
|
const ColumnBase = /*#__PURE__*/React__default.forwardRef(function Table2ColumnBase(props, ref) {
|
6
6
|
var _column$columnDef$met;
|
@@ -11,18 +11,18 @@ const ColumnBase = /*#__PURE__*/React__default.forwardRef(function Table2ColumnB
|
|
11
11
|
table,
|
12
12
|
...attributes
|
13
13
|
} = props;
|
14
|
-
const
|
14
|
+
const isFrozenColumn = !!column.getIsPinned();
|
15
15
|
const meta = table.options.meta;
|
16
16
|
const left = meta.columnOffsets[column.id];
|
17
|
-
const
|
18
|
-
const className = cn('border-grey-300',
|
17
|
+
const columnFreezing = table.getLeftVisibleLeafColumns().map(c => c.id);
|
18
|
+
const className = cn('border-grey-300', getFrozenShadowClasses(column, columnFreezing, scrolled), getCellAlignmentClasses((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.align), {
|
19
19
|
'cursor-pointer': !!attributes.onClick
|
20
20
|
}, attributes.className);
|
21
21
|
return /*#__PURE__*/React__default.createElement("div", Object.assign({}, attributes, {
|
22
22
|
className: className,
|
23
23
|
style: {
|
24
24
|
...style,
|
25
|
-
left:
|
25
|
+
left: isFrozenColumn && Number.isInteger(left) ? left : undefined
|
26
26
|
},
|
27
27
|
ref: ref
|
28
28
|
}));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Base.js","sources":["../../../../../../../../../src/components/Table2/components/column/Base.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { Column as RTColumn, Table as RTTable, TableMeta } from '@tanstack/react-table';\nimport { getCellAlignmentClasses,
|
1
|
+
{"version":3,"file":"Base.js","sources":["../../../../../../../../../src/components/Table2/components/column/Base.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { Column as RTColumn, Table as RTTable, TableMeta } from '@tanstack/react-table';\nimport { getCellAlignmentClasses, getFrozenShadowClasses } from '../../utilities/cell';\n\nexport type ColumnBaseProps<TType = any> = React.HTMLAttributes<HTMLDivElement> & {\n column: RTColumn<TType, any>;\n scrolled: boolean;\n table: RTTable<TType>;\n};\n\nexport const ColumnBase = React.forwardRef<HTMLDivElement, ColumnBaseProps>(function Table2ColumnBase(props, ref) {\n const { column, scrolled, style, table, ...attributes } = props;\n const isFrozenColumn = !!column.getIsPinned();\n const meta = table.options.meta as TableMeta<any>;\n const left = meta.columnOffsets[column.id];\n\n const columnFreezing = table.getLeftVisibleLeafColumns().map(c => c.id);\n\n const className = cn(\n 'border-grey-300',\n getFrozenShadowClasses(column, columnFreezing, scrolled),\n getCellAlignmentClasses(column.columnDef.meta?.align),\n {\n 'cursor-pointer': !!attributes.onClick,\n },\n attributes.className\n );\n\n return (\n <div\n {...attributes}\n className={className}\n style={{ ...style, left: isFrozenColumn && Number.isInteger(left) ? left : undefined }}\n ref={ref}\n />\n );\n});\n"],"names":["ColumnBase","React","forwardRef","Table2ColumnBase","props","ref","column","scrolled","style","table","attributes","isFrozenColumn","getIsPinned","meta","options","left","columnOffsets","id","columnFreezing","getLeftVisibleLeafColumns","map","c","className","cn","getFrozenShadowClasses","getCellAlignmentClasses","columnDef","align","onClick","Number","isInteger","undefined"],"mappings":";;;;MAWaA,UAAU,gBAAGC,cAAK,CAACC,UAAU,CAAkC,SAASC,gBAAgB,CAACC,KAAK,EAAEC,GAAG;;EAC5G,MAAM;IAAEC,MAAM;IAAEC,QAAQ;IAAEC,KAAK;IAAEC,KAAK;IAAE,GAAGC;GAAY,GAAGN,KAAK;EAC/D,MAAMO,cAAc,GAAG,CAAC,CAACL,MAAM,CAACM,WAAW,EAAE;EAC7C,MAAMC,IAAI,GAAGJ,KAAK,CAACK,OAAO,CAACD,IAAsB;EACjD,MAAME,IAAI,GAAGF,IAAI,CAACG,aAAa,CAACV,MAAM,CAACW,EAAE,CAAC;EAE1C,MAAMC,cAAc,GAAGT,KAAK,CAACU,yBAAyB,EAAE,CAACC,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACJ,EAAE,CAAC;EAEvE,MAAMK,SAAS,GAAGC,EAAE,CAChB,iBAAiB,EACjBC,sBAAsB,CAAClB,MAAM,EAAEY,cAAc,EAAEX,QAAQ,CAAC,EACxDkB,uBAAuB,0BAACnB,MAAM,CAACoB,SAAS,CAACb,IAAI,0DAArB,sBAAuBc,KAAK,CAAC,EACrD;IACI,gBAAgB,EAAE,CAAC,CAACjB,UAAU,CAACkB;GAClC,EACDlB,UAAU,CAACY,SAAS,CACvB;EAED,oBACIrB,sDACQS,UAAU;IACdY,SAAS,EAAEA,SAAS;IACpBd,KAAK,EAAE;MAAE,GAAGA,KAAK;MAAEO,IAAI,EAAEJ,cAAc,IAAIkB,MAAM,CAACC,SAAS,CAACf,IAAI,CAAC,GAAGA,IAAI,GAAGgB;KAAW;IACtF1B,GAAG,EAAEA;KACP;AAEV,CAAC;;;;"}
|
@@ -47,7 +47,7 @@ const Cell = function Cell(props) {
|
|
47
47
|
const controlRef = React__default.useRef(null);
|
48
48
|
const cellClassName = (_cell$column$columnDe = cell.column.columnDef.meta) === null || _cell$column$columnDe === void 0 ? void 0 : _cell$column$columnDe.className;
|
49
49
|
const isActiveRow = meta.activeRowIndex === rowIndex;
|
50
|
-
const
|
50
|
+
const isFrozen = !!cell.column.getIsPinned();
|
51
51
|
const isDragging = meta.dragging[cell.row.id];
|
52
52
|
const isSelected = cell.row.getIsSelected();
|
53
53
|
const isDataColumn = !isInternalColumn(cell.column.id);
|
@@ -73,7 +73,7 @@ const Cell = function Cell(props) {
|
|
73
73
|
}, [isIndicatorVisible, isLastRow]);
|
74
74
|
const className = cn('[&>[data-taco="tag"]]:-my-0.5', {
|
75
75
|
'border-b': !isLastRow,
|
76
|
-
'sticky z-[1]':
|
76
|
+
'sticky z-[1]': isFrozen,
|
77
77
|
// use isHoveredRow rather than css group-hover/row because we want to hide hover state when keyboard navigating
|
78
78
|
'bg-white': !isActiveRow && !isSelected,
|
79
79
|
'group-hover/row:bg-grey-100': !isActiveRow && !isSelected && !meta.shouldPauseHoverState,
|
@@ -82,10 +82,10 @@ const Cell = function Cell(props) {
|
|
82
82
|
'!wcag-blue-500': isDragging,
|
83
83
|
'[&>*]:!grayscale [&_.bg-white]:!bg-grey-100': !isEditingThisRow && isHoveringThisRowWhileEditing,
|
84
84
|
'!bg-red-100': hasValidationErrorsInRow,
|
85
|
-
'z-[1]':
|
85
|
+
'z-[1]': isFrozen && isActiveRow,
|
86
86
|
// First column should have higher z-index so that row indicator always show on top of the cell
|
87
|
-
// control components.
|
88
|
-
'z-[
|
87
|
+
// control components. A z-index of 3, will show the indicator when columns are pinned.
|
88
|
+
'z-[3]': isFrozen && isActiveRow && index === 0,
|
89
89
|
'border-blue !border-y-2 border-x-0': isIndicatorVisible,
|
90
90
|
'border-l-2 rounded-l': isIndicatorVisible && index === 0,
|
91
91
|
'border-r-2 rounded-r': isIndicatorVisible && index === lastColumnIndex
|
@@ -125,9 +125,6 @@ const Cell = function Cell(props) {
|
|
125
125
|
role: 'cell'
|
126
126
|
};
|
127
127
|
const [detailModeEditing, setDetailModeEditing] = React__default.useState(false);
|
128
|
-
const detailModeClassName = cn({
|
129
|
-
'!shadow-[0_0_0_4px_rgba(0,99,255,0.25)]': detailModeEditing
|
130
|
-
});
|
131
128
|
// reset the editing state when we move column
|
132
129
|
React__default.useEffect(() => {
|
133
130
|
if (meta.editMode.columnIndex !== index) {
|
@@ -166,6 +163,9 @@ const Cell = function Cell(props) {
|
|
166
163
|
}
|
167
164
|
}
|
168
165
|
};
|
166
|
+
attributes.onBlur = () => {
|
167
|
+
setDetailModeEditing(false);
|
168
|
+
};
|
169
169
|
if (canEditThisCell) {
|
170
170
|
var _allFocussableColumnI, _allFocussableColumnI2;
|
171
171
|
const firstDataColumnIndex = (_allFocussableColumnI = allFocussableColumnIndexes.at(0)) !== null && _allFocussableColumnI !== void 0 ? _allFocussableColumnI : 0;
|
@@ -185,18 +185,24 @@ const Cell = function Cell(props) {
|
|
185
185
|
if (!detailModeEditing) {
|
186
186
|
var _input$setSelectionRa, _input$value, _input$value2;
|
187
187
|
(_input$setSelectionRa = input.setSelectionRange) === null || _input$setSelectionRa === void 0 ? void 0 : _input$setSelectionRa.call(input, (_input$value = input.value) === null || _input$value === void 0 ? void 0 : _input$value.length, (_input$value2 = input.value) === null || _input$value2 === void 0 ? void 0 : _input$value2.length);
|
188
|
-
|
188
|
+
} else {
|
189
|
+
var _input$select;
|
190
|
+
input === null || input === void 0 ? void 0 : (_input$select = input.select) === null || _input$select === void 0 ? void 0 : _input$select.call(input);
|
189
191
|
}
|
192
|
+
setDetailModeEditing(!detailModeEditing);
|
190
193
|
return;
|
191
194
|
}
|
195
|
+
// Datepicker doesn't have keydown event handler its value doesn't change when user types inside
|
196
|
+
// datepicker input, so we need to explicitly enable detail editing mode on typing any alphanumeric
|
197
|
+
// character
|
198
|
+
if (control !== null && control !== void 0 && control.closest('[data-taco="datepicker"]') && /^[a-z0-9]$/i.test(event.key)) {
|
199
|
+
setDetailModeEditing(true);
|
200
|
+
}
|
192
201
|
}
|
193
202
|
// Don't exit edit mode if the target of the escape isn't a child of the cell (e.g. if its a popover).
|
194
203
|
if (event.key === 'Escape' && event.currentTarget.contains(control)) {
|
195
204
|
event.preventDefault();
|
196
|
-
const input = control;
|
197
205
|
if (detailModeEditing) {
|
198
|
-
var _input$select;
|
199
|
-
input === null || input === void 0 ? void 0 : (_input$select = input.select) === null || _input$select === void 0 ? void 0 : _input$select.call(input);
|
200
206
|
setDetailModeEditing(false);
|
201
207
|
} else {
|
202
208
|
var _tableRef$current3;
|
@@ -279,7 +285,7 @@ const Cell = function Cell(props) {
|
|
279
285
|
};
|
280
286
|
}
|
281
287
|
return /*#__PURE__*/React__default.createElement(ColumnBase, Object.assign({}, attributes), /*#__PURE__*/React__default.createElement(EditingCell, {
|
282
|
-
|
288
|
+
detailModeEditing: detailModeEditing,
|
283
289
|
cell: cell,
|
284
290
|
cellRef: internalRef,
|
285
291
|
columnIndex: index,
|
@@ -290,7 +296,12 @@ const Cell = function Cell(props) {
|
|
290
296
|
tableRef: tableRef,
|
291
297
|
ref: controlRef,
|
292
298
|
rowValues: rows[rowIndex].original,
|
293
|
-
rowsLength: rows.length
|
299
|
+
rowsLength: rows.length,
|
300
|
+
enableDetailModeEditing: () => {
|
301
|
+
if (!detailModeEditing) {
|
302
|
+
setDetailModeEditing(true);
|
303
|
+
}
|
304
|
+
}
|
294
305
|
}));
|
295
306
|
} else {
|
296
307
|
if (meta.onRowClick) {
|
@@ -311,13 +322,14 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
|
|
311
322
|
cell,
|
312
323
|
cellRef,
|
313
324
|
columnIndex,
|
314
|
-
|
325
|
+
detailModeEditing,
|
315
326
|
isEditingThisCell = false,
|
316
327
|
onSave: handleSave,
|
317
328
|
rowIndex,
|
318
329
|
rowValues,
|
319
330
|
table,
|
320
|
-
tableRef
|
331
|
+
tableRef,
|
332
|
+
enableDetailModeEditing
|
321
333
|
} = props;
|
322
334
|
const {
|
323
335
|
editMode: {
|
@@ -342,6 +354,7 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
|
|
342
354
|
const hasValidationError = !isHoveringAnotherRowWhileEditing && !!cellValidationError;
|
343
355
|
// On each save, the initialValue will be set to the new value of the cell
|
344
356
|
const initialValue = React__default.useRef(value);
|
357
|
+
const stateReset = React__default.useRef(false);
|
345
358
|
// It is important that we let consumers pass a newValue as an argument because when setState is called before
|
346
359
|
// onBlur then saveIfChanged method gets the stale state value. This happens because the rerender hasn't happened
|
347
360
|
// before the saveIfChanged method is called.
|
@@ -402,15 +415,39 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
|
|
402
415
|
const pinnedColumnsWidth = React__default.useMemo(() => {
|
403
416
|
const pinnedColumns = table.getState().columnPinning.left;
|
404
417
|
if (Array.isArray(pinnedColumns) && pinnedColumns.length > 0) {
|
405
|
-
const
|
406
|
-
const
|
407
|
-
if (
|
418
|
+
const lastFrozenColumn = pinnedColumns[pinnedColumns.length - 1];
|
419
|
+
const lastFrozenColumnOffset = meta.columnOffsets[lastFrozenColumn];
|
420
|
+
if (lastFrozenColumnOffset !== undefined) {
|
408
421
|
var _table$getState$colum;
|
409
|
-
return
|
422
|
+
return lastFrozenColumnOffset + ((_table$getState$colum = table.getState().columnSizing[lastFrozenColumn]) !== null && _table$getState$colum !== void 0 ? _table$getState$colum : 0);
|
410
423
|
}
|
411
424
|
}
|
412
425
|
return 0;
|
413
426
|
}, [meta.columnOffsets, table.getState().columnSizing]);
|
427
|
+
React__default.useEffect(() => {
|
428
|
+
if (hasChanged(initialValue.current, state)) {
|
429
|
+
var _controlRef$current2;
|
430
|
+
// For an input we want to make sure that if the value is changed then we go into detail mode, so that
|
431
|
+
// arrow keys doesn't trigger the quick mode shortcuts.
|
432
|
+
if (((_controlRef$current2 = controlRef.current) === null || _controlRef$current2 === void 0 ? void 0 : _controlRef$current2.nodeName) === 'INPUT') {
|
433
|
+
enableDetailModeEditing();
|
434
|
+
}
|
435
|
+
showIndicator();
|
436
|
+
} else {
|
437
|
+
hideIndicator();
|
438
|
+
}
|
439
|
+
return hideIndicator;
|
440
|
+
}, [state]);
|
441
|
+
// This effect makes sure we select the input control value when escape key is pressed
|
442
|
+
React__default.useEffect(() => {
|
443
|
+
var _controlRef$current3, _controlRef$current4;
|
444
|
+
const isControlInput = ((_controlRef$current3 = controlRef.current) === null || _controlRef$current3 === void 0 ? void 0 : _controlRef$current3.nodeName) === 'INPUT' && ((_controlRef$current4 = controlRef.current) === null || _controlRef$current4 === void 0 ? void 0 : _controlRef$current4.getAttribute('data-inline-editing-component')) === 'true';
|
445
|
+
if (stateReset.current && isControlInput) {
|
446
|
+
var _controlRef$current5;
|
447
|
+
(_controlRef$current5 = controlRef.current) === null || _controlRef$current5 === void 0 ? void 0 : _controlRef$current5.select();
|
448
|
+
}
|
449
|
+
stateReset.current = false;
|
450
|
+
}, [stateReset.current]);
|
414
451
|
const handleFocus = event => {
|
415
452
|
var _event$target, _cellRef$current;
|
416
453
|
meta.editMode.setColumn(columnIndex);
|
@@ -426,14 +463,17 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
|
|
426
463
|
(_tableRef$current4 = tableRef.current) === null || _tableRef$current4 === void 0 ? void 0 : _tableRef$current4.scrollTo(leftOffset - pinnedColumnsWidth, tableRef.current.scrollTop);
|
427
464
|
}
|
428
465
|
};
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
466
|
+
// In order to reset the value of an input when escape key is pressed this keydown handler is required.
|
467
|
+
// Instead of adding this event handler in parent component, this handler is added here because we have access
|
468
|
+
// to the state handler of the control component.
|
469
|
+
const handleKeyDown = event => {
|
470
|
+
const control = event.target;
|
471
|
+
const isControlInput = control.nodeName === 'INPUT' && (control === null || control === void 0 ? void 0 : control.getAttribute('data-inline-editing-component')) === 'true';
|
472
|
+
if (isControlInput && event.key === 'Escape') {
|
473
|
+
setState(initialValue.current);
|
474
|
+
stateReset.current = true;
|
434
475
|
}
|
435
|
-
|
436
|
-
}, [state]);
|
476
|
+
};
|
437
477
|
const showIndicator = () => {
|
438
478
|
var _table$getState$sorti;
|
439
479
|
let willRowMoveReason = null;
|
@@ -482,6 +522,9 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
|
|
482
522
|
const className = cn(getCellAlignmentClasses((_cell$column$columnDe4 = cell.column.columnDef.meta) === null || _cell$column$columnDe4 === void 0 ? void 0 : _cell$column$columnDe4.align));
|
483
523
|
const indicatorMountNode = (_cellRef$current2 = cellRef.current) === null || _cellRef$current2 === void 0 ? void 0 : (_cellRef$current2$par = _cellRef$current2.parentElement) === null || _cellRef$current2$par === void 0 ? void 0 : _cellRef$current2$par.querySelector(':first-child');
|
484
524
|
let controlComponent;
|
525
|
+
const detailModeClassName = cn({
|
526
|
+
'!shadow-[0_0_0_4px_rgba(0,99,255,0.25)]': detailModeEditing
|
527
|
+
});
|
485
528
|
if (cellControl) {
|
486
529
|
if (typeof cellControl === 'function') {
|
487
530
|
controlComponent = cellControl({
|
@@ -491,14 +534,15 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
|
|
491
534
|
ref: controlRef,
|
492
535
|
setValue: setState,
|
493
536
|
value: state,
|
494
|
-
'data-inline-editing-component': 'true'
|
495
|
-
className: detailModeClassName
|
537
|
+
'data-inline-editing-component': 'true'
|
496
538
|
}, cell.row.original);
|
497
539
|
} else {
|
498
540
|
switch (cellControl) {
|
499
541
|
case 'datepicker':
|
500
542
|
controlComponent = /*#__PURE__*/React__default.createElement(Datepicker, Object.assign({}, attributes, {
|
501
|
-
className:
|
543
|
+
className: cn({
|
544
|
+
'[&_input]:!shadow-[0_0_0_4px_rgba(0,99,255,0.25)]': detailModeEditing
|
545
|
+
}),
|
502
546
|
invalid: hasValidationError,
|
503
547
|
onBlur: event => {
|
504
548
|
const newDate = event.detail;
|
@@ -527,7 +571,8 @@ const EditingCell = /*#__PURE__*/React__default.memo( /*#__PURE__*/React__defaul
|
|
527
571
|
setState(event.target.value);
|
528
572
|
},
|
529
573
|
ref: controlRef,
|
530
|
-
value: String(state !== null && state !== void 0 ? state : '')
|
574
|
+
value: String(state !== null && state !== void 0 ? state : ''),
|
575
|
+
onKeyDown: handleKeyDown
|
531
576
|
}));
|
532
577
|
break;
|
533
578
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Cell.js","sources":["../../../../../../../../../src/components/Table2/components/column/Cell.tsx"],"sourcesContent":["import React, { RefObject } from 'react';\nimport cn from 'classnames';\nimport { flexRender, Cell as RTCell, Row as RTRow, Table as RTTable, TableMeta } from '@tanstack/react-table';\nimport { Input } from '../../../Input/Input';\nimport { ColumnBase, ColumnBaseProps } from './Base';\nimport { getCellAlignmentClasses, getCellSizingClasses, isKeyboardFocusableElement } from '../../utilities/cell';\nimport { isInternalColumn } from '../../utilities/columns';\nimport { Datepicker } from '../../../Datepicker/Datepicker';\nimport { Switch } from '../../../Switch/Switch';\nimport { SaveHandler, SaveHandlerErrorResponse, Table2Filter } from '../../types';\nimport { columnFilterFn, globalFilterFn } from '../../utilities/filterFn';\nimport { MOVE_DIR } from '../../hooks/useEditMode';\nimport { useRowContext } from '../row/Context';\nimport { Indicator, IndicatorReason } from './Indicator';\nimport { ValidationError } from './ValidationError';\nimport { hasChanged, willRowMoveAfterSorting } from './utils';\nimport { useMergedRef } from '../../../../hooks/useMergedRef';\n\ntype CellProps<TType = unknown> = Omit<ColumnBaseProps<TType>, 'column' | 'isEditing'> & {\n cell: RTCell<TType, unknown>;\n index: number;\n isLastRow: boolean;\n rowIndex: number;\n rows: RTRow<TType>[];\n scrollToIndex: (index: number, options?: any) => void;\n scrollToOffset: (index: number, options?: any) => void;\n tableRef: React.RefObject<HTMLDivElement>;\n};\n\nexport const Cell = function Cell<TType = unknown>(props: CellProps<TType>) {\n const { cell, index, isLastRow, rowIndex, rows, scrollToIndex, scrollToOffset, table, tableRef, ...columnProps } = props;\n const meta = table.options.meta as TableMeta<any>;\n\n const { addFocussableColumnIndex, focussableColumnIndexes: allFocussableColumnIndexes } = meta;\n\n const {\n editMode: { validationErrors, rowMoveReason },\n isHovered: isHoveredRow,\n } = useRowContext();\n const hasValidationErrorsInRow = !!validationErrors;\n\n const internalRef = React.useRef<HTMLDivElement>(null);\n const controlRef = React.useRef<HTMLElement>(null);\n const cellClassName = cell.column.columnDef.meta?.className;\n\n const isActiveRow = meta.activeRowIndex === rowIndex;\n const isPinned = !!cell.column.getIsPinned();\n const isDragging = meta.dragging[cell.row.id];\n const isSelected = cell.row.getIsSelected();\n const isDataColumn = !isInternalColumn(cell.column.id);\n const hasCellControl = !!cell.column.columnDef.meta?.control;\n const allVisibleColumns = table.getVisibleLeafColumns();\n const lastColumnIndex = allVisibleColumns.length > 0 ? allVisibleColumns.length - 1 : 0;\n\n // editing\n const isEditingThisRow = meta.editMode.isEditing && isActiveRow;\n const canEditThisCell = isEditingThisRow && isDataColumn;\n const isEditingThisCell = canEditThisCell && meta.editMode.columnIndex === index;\n const isHoveringThisRowWhileEditing = meta.editMode.isEditing && isHoveredRow && !meta.shouldPauseHoverState;\n\n const isIndicatorVisible = Object.keys(rowMoveReason).length > 0;\n\n React.useEffect(() => {\n // Adds padding to the table so that indicator doesn't get cropped\n if (isIndicatorVisible && isLastRow) {\n tableRef.current?.classList.add('pb-4');\n }\n\n return () => tableRef.current?.classList.remove('pb-4');\n }, [isIndicatorVisible, isLastRow]);\n\n const className = cn(\n '[&>[data-taco=\"tag\"]]:-my-0.5',\n {\n 'border-b': !isLastRow,\n 'sticky z-[1]': isPinned,\n // use isHoveredRow rather than css group-hover/row because we want to hide hover state when keyboard navigating\n 'bg-white': !isActiveRow && !isSelected,\n 'group-hover/row:bg-grey-100': !isActiveRow && !isSelected && !meta.shouldPauseHoverState,\n 'bg-grey-200 group-hover/row:bg-grey-200': isActiveRow && !isSelected,\n 'bg-blue-100': isSelected,\n '!wcag-blue-500': isDragging,\n '[&>*]:!grayscale [&_.bg-white]:!bg-grey-100': !isEditingThisRow && isHoveringThisRowWhileEditing,\n '!bg-red-100': hasValidationErrorsInRow,\n 'z-[1]': isPinned && isActiveRow,\n // First column should have higher z-index so that row indicator always show on top of the cell\n // control components.\n 'z-[2]': isPinned && isActiveRow && index === 0,\n 'border-blue !border-y-2 border-x-0': isIndicatorVisible,\n 'border-l-2 rounded-l': isIndicatorVisible && index === 0,\n 'border-r-2 rounded-r': isIndicatorVisible && index === lastColumnIndex,\n },\n getCellSizingClasses(\n table.options.meta?.rowDensity,\n (isEditingThisRow || isHoveringThisRowWhileEditing) && hasCellControl\n ),\n typeof cellClassName === 'function' ? cellClassName(cell.row, table) : cellClassName\n );\n\n const handleMouseDown = (event: React.MouseEvent<HTMLElement>) => {\n // only detect left clicks\n if (event.button === 0) {\n const activeElement = document.activeElement;\n const isActiveElementControl = activeElement?.closest('[role=\"cell\"]');\n const hasActiveRowChanged = meta.activeRowIndex !== rowIndex;\n\n // When user clicks on a cell that is not in the active row, for some reason blur event is not called on the cell\n // previous cell control element so we need to manually call it in order to save the changes in that cell\n if (isActiveElementControl && hasActiveRowChanged) {\n (activeElement as HTMLElement).blur();\n }\n\n meta.setActiveRowIndex(rowIndex);\n\n if (meta.editMode.isEditing) {\n if (allFocussableColumnIndexes.includes(index)) {\n meta.editMode.setColumn(index);\n } else {\n meta.editMode.setColumn(allFocussableColumnIndexes[0]);\n }\n }\n }\n };\n\n const attributes = {\n ...columnProps,\n // base props,\n column: cell.column,\n table,\n // dom attributes\n className,\n 'data-column-index': index,\n 'data-row-index': rowIndex,\n onMouseDown: handleMouseDown,\n ref: internalRef,\n role: 'cell',\n };\n\n const [detailModeEditing, setDetailModeEditing] = React.useState(false);\n\n const detailModeClassName = cn({\n '!shadow-[0_0_0_4px_rgba(0,99,255,0.25)]': detailModeEditing,\n });\n\n // reset the editing state when we move column\n React.useEffect(() => {\n if (meta.editMode.columnIndex !== index) {\n setDetailModeEditing(false);\n }\n }, [meta.editMode.columnIndex]);\n\n React.useEffect(() => {\n if (isEditingThisRow && controlRef.current && isKeyboardFocusableElement(controlRef.current)) {\n addFocussableColumnIndex(index);\n }\n }, [isEditingThisRow, allFocussableColumnIndexes, addFocussableColumnIndex, index]);\n\n const moveRow = (moveDirection: MOVE_DIR) => {\n if (moveDirection === MOVE_DIR.PREV) {\n meta.moveToPreviousRow(rows, nextIndex => scrollToIndex(nextIndex - 1));\n } else if (moveDirection === MOVE_DIR.NEXT) {\n meta.moveToNextRow(rows, nextIndex => scrollToIndex(nextIndex + 2));\n }\n };\n\n if (meta.editMode.onSave && hasCellControl && (canEditThisCell || (isHoveringThisRowWhileEditing && isDataColumn))) {\n attributes.onMouseDown = event => {\n handleMouseDown(event);\n\n const target = event.target;\n const isTargetInput = target !== null && (target as HTMLElement).nodeName === 'INPUT';\n\n // event.target?.select is only truthy for input elements\n // if event.target is active element, then that means we should select the text\n if (isTargetInput && target !== document.activeElement) {\n event.preventDefault();\n\n setTimeout(() => {\n (target as HTMLInputElement).select();\n }, 1);\n } else if (isTargetInput && target === document.activeElement) {\n // if user left clicks on the input then we are into edit mode\n // only detect left clicks\n if (event.button === 0) {\n setDetailModeEditing(true);\n }\n }\n };\n\n if (canEditThisCell) {\n const firstDataColumnIndex = allFocussableColumnIndexes.at(0) ?? 0;\n const lastDataColumnIndex = allFocussableColumnIndexes.at(-1) ?? 0;\n\n attributes.onKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n const control = event.target as HTMLElement;\n const isControlInput =\n control.nodeName === 'INPUT' && control?.getAttribute('data-inline-editing-component') === 'true';\n\n // For some reason, Taco Input keyboard event always return true when \"event.isDefaultPrevented()\" is\n // called. So we need to check if the control is input or not so that we don't return early.\n if (!isControlInput && (event.isDefaultPrevented() || event.isPropagationStopped())) {\n return;\n }\n\n if (control.tagName === 'INPUT') {\n if (event.key === 'Enter') {\n event.preventDefault();\n const input = control as HTMLInputElement;\n\n if (!detailModeEditing) {\n input.setSelectionRange?.(input.value?.length, input.value?.length);\n setDetailModeEditing(true);\n }\n\n return;\n }\n }\n\n // Don't exit edit mode if the target of the escape isn't a child of the cell (e.g. if its a popover).\n if (event.key === 'Escape' && event.currentTarget.contains(control)) {\n event.preventDefault();\n const input = control as HTMLInputElement;\n\n if (detailModeEditing) {\n input?.select?.();\n setDetailModeEditing(false);\n } else {\n meta.editMode.toggleEditing(false);\n tableRef.current?.focus();\n }\n\n return;\n }\n\n if ((!detailModeEditing && event.key === 'ArrowLeft') || (event.key === 'Tab' && event.shiftKey)) {\n event.preventDefault();\n\n const isFirstRow = rowIndex === 0;\n const isFirstColumn = index === firstDataColumnIndex;\n\n if (event.ctrlKey || event.metaKey) {\n // If the current active column is the first column then we don't do any thing so that focus\n // remains on the first column.\n if (!isFirstColumn) {\n control.blur();\n meta.editMode.moveToFirstColumn(allFocussableColumnIndexes);\n }\n } else {\n // If it is first row and first column, then don't move column.\n if (!isFirstRow || !isFirstColumn) {\n control.blur();\n meta.editMode.moveToPreviousColumn(allFocussableColumnIndexes, moveRow);\n }\n }\n\n return;\n }\n\n if ((!detailModeEditing && event.key === 'ArrowRight') || (event.key === 'Tab' && !event.shiftKey)) {\n event.preventDefault();\n\n const isLastColumn = index === lastDataColumnIndex;\n\n if (event.ctrlKey || event.metaKey) {\n // If the current active column is the last column then we don't do any thing so that focus\n // remains on the last column.\n if (!isLastColumn) {\n control.blur();\n meta.editMode.moveToLastColumn(allFocussableColumnIndexes);\n }\n } else {\n // If it is last row and last column, then don't move column.\n if (!isLastRow || !isLastColumn) {\n control.blur();\n meta.editMode.moveToNextColumn(allFocussableColumnIndexes, moveRow);\n }\n }\n\n return;\n }\n\n if (!detailModeEditing && event.key === 'ArrowUp') {\n event.preventDefault();\n\n // if it is the first row then return early, so that focus on the cell is not lost\n if (rowIndex === 0) {\n return;\n }\n\n control.blur();\n\n if (event.ctrlKey || event.metaKey) {\n meta.setActiveRowIndex(0);\n\n scrollToOffset(0);\n } else {\n moveRow(MOVE_DIR.PREV);\n }\n\n meta.setShouldPauseHoverState(true);\n return;\n }\n\n if (!detailModeEditing && event.key === 'ArrowDown') {\n event.preventDefault();\n\n // if it is the last row then return early, so that focus on the cell is not lost\n if (rowIndex === rows.length - 1) {\n return;\n }\n\n control.blur();\n\n if (event.ctrlKey || event.metaKey) {\n meta.setActiveRowIndex(rows.length - 1);\n scrollToIndex(rows.length + 20);\n } else {\n moveRow(MOVE_DIR.NEXT);\n }\n\n meta.setShouldPauseHoverState(true);\n return;\n }\n };\n }\n\n return (\n <ColumnBase {...attributes}>\n <EditingCell\n detailModeClassName={detailModeClassName}\n cell={cell}\n cellRef={internalRef}\n columnIndex={index}\n isEditingThisCell={isEditingThisCell}\n onSave={meta.editMode.onSave}\n rowIndex={rowIndex}\n table={table}\n tableRef={tableRef}\n ref={controlRef}\n rowValues={rows[rowIndex].original}\n rowsLength={rows.length}\n />\n </ColumnBase>\n );\n } else {\n if (meta.onRowClick) {\n attributes.onClick = event => {\n if (event.target !== internalRef.current) {\n return;\n }\n\n meta.onRowClick?.(cell.row.original);\n };\n }\n }\n\n return <ColumnBase {...attributes}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</ColumnBase>;\n};\n\ntype EditingCellProps = {\n cell: RTCell<any, unknown>;\n cellRef: React.RefObject<HTMLDivElement>;\n columnIndex: number;\n isEditingThisCell: boolean;\n onSave: SaveHandler<any>;\n rowIndex: number;\n table: RTTable<any>;\n tableRef: React.RefObject<HTMLDivElement>;\n rowValues: Record<string, any>;\n rowsLength: number;\n detailModeClassName?: string;\n};\n\nconst EditingCell = React.memo(\n React.forwardRef<HTMLElement, EditingCellProps>((props, ref) => {\n const {\n cell,\n cellRef,\n columnIndex,\n detailModeClassName,\n isEditingThisCell = false,\n onSave: handleSave,\n rowIndex,\n rowValues,\n table,\n tableRef,\n } = props;\n const {\n editMode: { validationErrors, setValidationErrors, rowMoveReason, setRowMoveReason },\n isHovered,\n } = useRowContext();\n\n const controlRef = useMergedRef(ref);\n const cellId = cell.column.id;\n const cellValidationError = validationErrors?.[cellId];\n\n const value = cell.getValue();\n const ariaLabel = cell.column.columnDef.header as string | undefined;\n const meta = table.options.meta as TableMeta<any>;\n const { globalFilter } = table.getState();\n\n const [state, setState] = React.useState(value);\n\n const isHoveringAnotherRowWhileEditing = meta.editMode.isEditing && meta.activeRowIndex !== rowIndex && isHovered;\n const hasValidationError = !isHoveringAnotherRowWhileEditing && !!cellValidationError;\n // On each save, the initialValue will be set to the new value of the cell\n const initialValue = React.useRef<any>(value);\n\n // It is important that we let consumers pass a newValue as an argument because when setState is called before\n // onBlur then saveIfChanged method gets the stale state value. This happens because the rerender hasn't happened\n // before the saveIfChanged method is called.\n const saveIfChanged = async (eventOrNewValue?: any) => {\n let newValue = state;\n\n // if eventOrNewValue is not an event object\n if (!eventOrNewValue.target) {\n newValue = eventOrNewValue;\n }\n\n if (hasChanged(value, newValue)) {\n try {\n const updatedRow = { ...cell.row.original, [cellId]: newValue };\n\n await handleSave(updatedRow, cellId);\n\n // If sorting is paused then update the last sorted or filtered rows to store the newly updated row\n if (meta.shouldPauseSortingAndFiltering) {\n meta.lastSortedOrFilteredRows.current = meta.lastSortedOrFilteredRows.current.map(row => {\n if (row.id === cell.row.id) {\n row.original = updatedRow;\n }\n\n return row;\n });\n }\n\n // Reset error if save was successful\n setValidationErrors(null);\n } catch (error) {\n setValidationErrors({ ...validationErrors, ...(error as SaveHandlerErrorResponse) });\n }\n }\n };\n\n // Ensures we \"auto focus\" the field if the cell is being edited.\n React.useEffect(() => {\n const isFocusInsideTable = meta.tableRef.current?.contains(document.activeElement);\n // When control is blurred then body gets the focus that's why we have to make sure if activeElement\n // is body then we focus the cell if it is being edited.\n const isBodyFocussed = document.body === document.activeElement;\n\n // Don't focus cell if any table popup(filter popup, column settings popup) is open.\n if (isEditingThisCell && (isFocusInsideTable || isBodyFocussed)) {\n (controlRef.current as HTMLElement)?.focus?.();\n }\n }, [isEditingThisCell, controlRef.current]);\n\n const pinnedColumnsWidth = React.useMemo(() => {\n const pinnedColumns = table.getState().columnPinning.left;\n\n if (Array.isArray(pinnedColumns) && pinnedColumns.length > 0) {\n const lastPinnedColumn = pinnedColumns[pinnedColumns.length - 1];\n const lastPinnedColumnOffset = meta.columnOffsets[lastPinnedColumn];\n\n if (lastPinnedColumnOffset !== undefined) {\n return lastPinnedColumnOffset + (table.getState().columnSizing[lastPinnedColumn] ?? 0);\n }\n }\n\n return 0;\n }, [meta.columnOffsets, table.getState().columnSizing]);\n\n const handleFocus = event => {\n meta.editMode.setColumn(columnIndex);\n\n if (event.target?.select) {\n event.target?.select();\n }\n\n // ensure the field is always visible (e.g. not hidden behind the pinned columns)\n const rect = cellRef.current?.getBoundingClientRect();\n const leftOffset = meta.columnOffsets[cellId];\n\n if (rect && leftOffset && rect.left < pinnedColumnsWidth) {\n tableRef.current?.scrollTo(leftOffset - pinnedColumnsWidth, tableRef.current.scrollTop);\n }\n };\n\n React.useEffect(() => {\n if (hasChanged(initialValue.current, state)) {\n showIndicator();\n } else {\n hideIndicator();\n }\n\n return hideIndicator;\n }, [state]);\n\n const showIndicator = () => {\n let willRowMoveReason: IndicatorReason | null = null;\n\n const isFilteredByGlobalFilter = Object.values<unknown>({ ...rowValues, [cellId]: state }).some(cellValue =>\n // Global filter can be undefined when there is no text being searched so we pass an empty string to\n // globalFilterFn as query in that case.\n globalFilterFn(String(cellValue), globalFilter ? String(globalFilter) : '')\n );\n\n if (!isFilteredByGlobalFilter) {\n willRowMoveReason = IndicatorReason.SEARCH;\n } else if (cell.column.getIsFiltered() && !columnFilterFn(state, cell.column.getFilterValue() as Table2Filter)) {\n willRowMoveReason = IndicatorReason.FILTER;\n } else if (\n !willRowMoveReason &&\n cell.column.getIsSorted() &&\n willRowMoveAfterSorting(\n state,\n cell,\n rowIndex,\n table.getRowModel().rows,\n !!table.getState().sorting.find(s => s.id === cell.column.id)?.desc\n )\n ) {\n willRowMoveReason = IndicatorReason.SORTING;\n }\n\n if (willRowMoveReason !== null) {\n meta.setShouldPauseSortingAndFiltering(true);\n setRowMoveReason({ [cellId]: willRowMoveReason });\n }\n };\n\n const hideIndicator = () => {\n setRowMoveReason(prevState => {\n const newState = { ...prevState };\n delete newState[cellId];\n\n return newState;\n });\n };\n\n const cellControl = cell.column.columnDef.meta?.control;\n\n const attributes = {\n 'aria-label': ariaLabel,\n onBlur: saveIfChanged,\n onFocus: handleFocus,\n ref,\n // This is a temporary fix to enable up/down arrow key shortcuts on input in quick mode. For some reason,\n // the preventDefault is true on Taco Input, so the keyboard shortcuts doesn't work. By adding this\n // data attribute we make sure the event is coming from a control component, and then we can make sure\n // keyboard shortcut works as expected.\n 'data-inline-editing-component': 'true',\n };\n\n const className = cn(getCellAlignmentClasses(cell.column.columnDef.meta?.align));\n const indicatorMountNode = cellRef.current?.parentElement?.querySelector(':first-child') as Element | null;\n\n let controlComponent;\n\n if (cellControl) {\n if (typeof cellControl === 'function') {\n controlComponent = cellControl(\n {\n invalid: hasValidationError,\n onBlur: saveIfChanged,\n onFocus: handleFocus,\n ref: controlRef,\n setValue: setState,\n value: state,\n 'data-inline-editing-component': 'true',\n className: detailModeClassName,\n },\n cell.row.original\n );\n } else {\n switch (cellControl) {\n case 'datepicker':\n controlComponent = (\n <Datepicker\n {...attributes}\n className={detailModeClassName}\n invalid={hasValidationError}\n onBlur={event => {\n const newDate = (event as any).detail;\n saveIfChanged(newDate);\n }}\n onChange={event => {\n setState((event as any).detail);\n }}\n ref={controlRef as RefObject<HTMLInputElement>}\n value={state as Date}\n />\n );\n break;\n\n case 'switch':\n controlComponent = (\n <Switch\n {...attributes}\n className={cn('mx-2 mt-1.5', detailModeClassName)}\n checked={Boolean(state)}\n onChange={setState}\n ref={controlRef as RefObject<HTMLButtonElement>}\n />\n );\n break;\n default:\n controlComponent = (\n <Input\n {...attributes}\n className={cn(className, detailModeClassName)}\n invalid={hasValidationError}\n onChange={event => {\n setState(event.target.value);\n }}\n ref={controlRef as RefObject<HTMLInputElement>}\n value={String(state ?? '')}\n />\n );\n break;\n }\n }\n }\n\n const indicatorReason = rowMoveReason[cellId] ?? null;\n\n return (\n <>\n {indicatorReason !== null && (\n <Indicator\n reason={indicatorReason}\n columnName={String(cell.column.columnDef.header)}\n mountNode={indicatorMountNode}\n validationErrors={validationErrors}\n />\n )}\n <span className=\"relative flex-grow\">\n {controlComponent}\n {hasValidationError && <ValidationError>{String(cellValidationError)}</ValidationError>}\n </span>\n </>\n );\n })\n);\n"],"names":["Cell","props","cell","index","isLastRow","rowIndex","rows","scrollToIndex","scrollToOffset","table","tableRef","columnProps","meta","options","addFocussableColumnIndex","focussableColumnIndexes","allFocussableColumnIndexes","editMode","validationErrors","rowMoveReason","isHovered","isHoveredRow","useRowContext","hasValidationErrorsInRow","internalRef","React","useRef","controlRef","cellClassName","column","columnDef","className","isActiveRow","activeRowIndex","isPinned","getIsPinned","isDragging","dragging","row","id","isSelected","getIsSelected","isDataColumn","isInternalColumn","hasCellControl","control","allVisibleColumns","getVisibleLeafColumns","lastColumnIndex","length","isEditingThisRow","isEditing","canEditThisCell","isEditingThisCell","columnIndex","isHoveringThisRowWhileEditing","shouldPauseHoverState","isIndicatorVisible","Object","keys","useEffect","current","classList","add","remove","cn","getCellSizingClasses","rowDensity","handleMouseDown","event","button","activeElement","document","isActiveElementControl","closest","hasActiveRowChanged","blur","setActiveRowIndex","includes","setColumn","attributes","onMouseDown","ref","role","detailModeEditing","setDetailModeEditing","useState","detailModeClassName","isKeyboardFocusableElement","moveRow","moveDirection","MOVE_DIR","PREV","moveToPreviousRow","nextIndex","NEXT","moveToNextRow","onSave","target","isTargetInput","nodeName","preventDefault","setTimeout","select","firstDataColumnIndex","at","lastDataColumnIndex","onKeyDown","isControlInput","getAttribute","isDefaultPrevented","isPropagationStopped","tagName","key","input","setSelectionRange","value","currentTarget","contains","toggleEditing","focus","shiftKey","isFirstRow","isFirstColumn","ctrlKey","metaKey","moveToFirstColumn","moveToPreviousColumn","isLastColumn","moveToLastColumn","moveToNextColumn","setShouldPauseHoverState","ColumnBase","EditingCell","cellRef","rowValues","original","rowsLength","onRowClick","onClick","flexRender","getContext","memo","forwardRef","handleSave","setValidationErrors","setRowMoveReason","useMergedRef","cellId","cellValidationError","getValue","ariaLabel","header","globalFilter","getState","state","setState","isHoveringAnotherRowWhileEditing","hasValidationError","initialValue","saveIfChanged","eventOrNewValue","newValue","hasChanged","updatedRow","shouldPauseSortingAndFiltering","lastSortedOrFilteredRows","map","error","isFocusInsideTable","isBodyFocussed","body","pinnedColumnsWidth","useMemo","pinnedColumns","columnPinning","left","Array","isArray","lastPinnedColumn","lastPinnedColumnOffset","columnOffsets","undefined","columnSizing","handleFocus","rect","getBoundingClientRect","leftOffset","scrollTo","scrollTop","showIndicator","hideIndicator","willRowMoveReason","isFilteredByGlobalFilter","values","some","cellValue","globalFilterFn","String","IndicatorReason","SEARCH","getIsFiltered","columnFilterFn","getFilterValue","FILTER","getIsSorted","willRowMoveAfterSorting","getRowModel","sorting","find","s","desc","SORTING","setShouldPauseSortingAndFiltering","prevState","newState","cellControl","onBlur","onFocus","getCellAlignmentClasses","align","indicatorMountNode","parentElement","querySelector","controlComponent","invalid","setValue","Datepicker","newDate","detail","onChange","Switch","checked","Boolean","Input","indicatorReason","Indicator","reason","columnName","mountNode","ValidationError"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"Cell.js","sources":["../../../../../../../../../src/components/Table2/components/column/Cell.tsx"],"sourcesContent":["import React, { RefObject } from 'react';\nimport cn from 'classnames';\nimport { flexRender, Cell as RTCell, Row as RTRow, Table as RTTable, TableMeta } from '@tanstack/react-table';\nimport { Input } from '../../../Input/Input';\nimport { ColumnBase, ColumnBaseProps } from './Base';\nimport { getCellAlignmentClasses, getCellSizingClasses, isKeyboardFocusableElement } from '../../utilities/cell';\nimport { isInternalColumn } from '../../utilities/columns';\nimport { Datepicker } from '../../../Datepicker/Datepicker';\nimport { Switch } from '../../../Switch/Switch';\nimport { SaveHandler, SaveHandlerErrorResponse, Table2Filter } from '../../types';\nimport { columnFilterFn, globalFilterFn } from '../../utilities/filterFn';\nimport { MOVE_DIR } from '../../hooks/useEditMode';\nimport { useRowContext } from '../row/Context';\nimport { Indicator, IndicatorReason } from './Indicator';\nimport { ValidationError } from './ValidationError';\nimport { hasChanged, willRowMoveAfterSorting } from './utils';\nimport { useMergedRef } from '../../../../hooks/useMergedRef';\n\ntype CellProps<TType = unknown> = Omit<ColumnBaseProps<TType>, 'column' | 'isEditing'> & {\n cell: RTCell<TType, unknown>;\n index: number;\n isLastRow: boolean;\n rowIndex: number;\n rows: RTRow<TType>[];\n scrollToIndex: (index: number, options?: any) => void;\n scrollToOffset: (index: number, options?: any) => void;\n tableRef: React.RefObject<HTMLDivElement>;\n};\n\nexport const Cell = function Cell<TType = unknown>(props: CellProps<TType>) {\n const { cell, index, isLastRow, rowIndex, rows, scrollToIndex, scrollToOffset, table, tableRef, ...columnProps } = props;\n const meta = table.options.meta as TableMeta<any>;\n\n const { addFocussableColumnIndex, focussableColumnIndexes: allFocussableColumnIndexes } = meta;\n\n const {\n editMode: { validationErrors, rowMoveReason },\n isHovered: isHoveredRow,\n } = useRowContext();\n const hasValidationErrorsInRow = !!validationErrors;\n\n const internalRef = React.useRef<HTMLDivElement>(null);\n const controlRef = React.useRef<HTMLElement>(null);\n const cellClassName = cell.column.columnDef.meta?.className;\n\n const isActiveRow = meta.activeRowIndex === rowIndex;\n const isFrozen = !!cell.column.getIsPinned();\n const isDragging = meta.dragging[cell.row.id];\n const isSelected = cell.row.getIsSelected();\n const isDataColumn = !isInternalColumn(cell.column.id);\n const hasCellControl = !!cell.column.columnDef.meta?.control;\n const allVisibleColumns = table.getVisibleLeafColumns();\n const lastColumnIndex = allVisibleColumns.length > 0 ? allVisibleColumns.length - 1 : 0;\n\n // editing\n const isEditingThisRow = meta.editMode.isEditing && isActiveRow;\n const canEditThisCell = isEditingThisRow && isDataColumn;\n const isEditingThisCell = canEditThisCell && meta.editMode.columnIndex === index;\n const isHoveringThisRowWhileEditing = meta.editMode.isEditing && isHoveredRow && !meta.shouldPauseHoverState;\n\n const isIndicatorVisible = Object.keys(rowMoveReason).length > 0;\n\n React.useEffect(() => {\n // Adds padding to the table so that indicator doesn't get cropped\n if (isIndicatorVisible && isLastRow) {\n tableRef.current?.classList.add('pb-4');\n }\n\n return () => tableRef.current?.classList.remove('pb-4');\n }, [isIndicatorVisible, isLastRow]);\n\n const className = cn(\n '[&>[data-taco=\"tag\"]]:-my-0.5',\n {\n 'border-b': !isLastRow,\n 'sticky z-[1]': isFrozen,\n // use isHoveredRow rather than css group-hover/row because we want to hide hover state when keyboard navigating\n 'bg-white': !isActiveRow && !isSelected,\n 'group-hover/row:bg-grey-100': !isActiveRow && !isSelected && !meta.shouldPauseHoverState,\n 'bg-grey-200 group-hover/row:bg-grey-200': isActiveRow && !isSelected,\n 'bg-blue-100': isSelected,\n '!wcag-blue-500': isDragging,\n '[&>*]:!grayscale [&_.bg-white]:!bg-grey-100': !isEditingThisRow && isHoveringThisRowWhileEditing,\n '!bg-red-100': hasValidationErrorsInRow,\n 'z-[1]': isFrozen && isActiveRow,\n // First column should have higher z-index so that row indicator always show on top of the cell\n // control components. A z-index of 3, will show the indicator when columns are pinned.\n 'z-[3]': isFrozen && isActiveRow && index === 0,\n 'border-blue !border-y-2 border-x-0': isIndicatorVisible,\n 'border-l-2 rounded-l': isIndicatorVisible && index === 0,\n 'border-r-2 rounded-r': isIndicatorVisible && index === lastColumnIndex,\n },\n getCellSizingClasses(\n table.options.meta?.rowDensity,\n (isEditingThisRow || isHoveringThisRowWhileEditing) && hasCellControl\n ),\n typeof cellClassName === 'function' ? cellClassName(cell.row, table) : cellClassName\n );\n\n const handleMouseDown = (event: React.MouseEvent<HTMLElement>) => {\n // only detect left clicks\n if (event.button === 0) {\n const activeElement = document.activeElement;\n const isActiveElementControl = activeElement?.closest('[role=\"cell\"]');\n const hasActiveRowChanged = meta.activeRowIndex !== rowIndex;\n\n // When user clicks on a cell that is not in the active row, for some reason blur event is not called on the cell\n // previous cell control element so we need to manually call it in order to save the changes in that cell\n if (isActiveElementControl && hasActiveRowChanged) {\n (activeElement as HTMLElement).blur();\n }\n\n meta.setActiveRowIndex(rowIndex);\n\n if (meta.editMode.isEditing) {\n if (allFocussableColumnIndexes.includes(index)) {\n meta.editMode.setColumn(index);\n } else {\n meta.editMode.setColumn(allFocussableColumnIndexes[0]);\n }\n }\n }\n };\n\n const attributes = {\n ...columnProps,\n // base props,\n column: cell.column,\n table,\n // dom attributes\n className,\n 'data-column-index': index,\n 'data-row-index': rowIndex,\n onMouseDown: handleMouseDown,\n ref: internalRef,\n role: 'cell',\n };\n\n const [detailModeEditing, setDetailModeEditing] = React.useState(false);\n\n // reset the editing state when we move column\n React.useEffect(() => {\n if (meta.editMode.columnIndex !== index) {\n setDetailModeEditing(false);\n }\n }, [meta.editMode.columnIndex]);\n\n React.useEffect(() => {\n if (isEditingThisRow && controlRef.current && isKeyboardFocusableElement(controlRef.current)) {\n addFocussableColumnIndex(index);\n }\n }, [isEditingThisRow, allFocussableColumnIndexes, addFocussableColumnIndex, index]);\n\n const moveRow = (moveDirection: MOVE_DIR) => {\n if (moveDirection === MOVE_DIR.PREV) {\n meta.moveToPreviousRow(rows, nextIndex => scrollToIndex(nextIndex - 1));\n } else if (moveDirection === MOVE_DIR.NEXT) {\n meta.moveToNextRow(rows, nextIndex => scrollToIndex(nextIndex + 2));\n }\n };\n\n if (meta.editMode.onSave && hasCellControl && (canEditThisCell || (isHoveringThisRowWhileEditing && isDataColumn))) {\n attributes.onMouseDown = event => {\n handleMouseDown(event);\n\n const target = event.target as HTMLElement;\n const isTargetInput = target !== null && target.nodeName === 'INPUT';\n\n // event.target?.select is only truthy for input elements\n // if event.target is active element, then that means we should select the text\n if (isTargetInput && target !== document.activeElement) {\n event.preventDefault();\n\n setTimeout(() => {\n (target as HTMLInputElement).select();\n }, 1);\n } else if (isTargetInput && target === document.activeElement) {\n // if user left clicks on the input then we are into edit mode\n // only detect left clicks\n if (event.button === 0) {\n setDetailModeEditing(true);\n }\n }\n };\n\n attributes.onBlur = () => {\n setDetailModeEditing(false);\n };\n\n if (canEditThisCell) {\n const firstDataColumnIndex = allFocussableColumnIndexes.at(0) ?? 0;\n const lastDataColumnIndex = allFocussableColumnIndexes.at(-1) ?? 0;\n\n attributes.onKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n const control = event.target as HTMLElement;\n const isControlInput =\n control.nodeName === 'INPUT' && control?.getAttribute('data-inline-editing-component') === 'true';\n\n // For some reason, Taco Input keyboard event always return true when \"event.isDefaultPrevented()\" is\n // called. So we need to check if the control is input or not so that we don't return early.\n if (!isControlInput && (event.isDefaultPrevented() || event.isPropagationStopped())) {\n return;\n }\n\n if (control.tagName === 'INPUT') {\n if (event.key === 'Enter') {\n event.preventDefault();\n const input = control as HTMLInputElement;\n\n if (!detailModeEditing) {\n input.setSelectionRange?.(input.value?.length, input.value?.length);\n } else {\n input?.select?.();\n }\n\n setDetailModeEditing(!detailModeEditing);\n\n return;\n }\n\n // Datepicker doesn't have keydown event handler its value doesn't change when user types inside\n // datepicker input, so we need to explicitly enable detail editing mode on typing any alphanumeric\n // character\n if (control?.closest('[data-taco=\"datepicker\"]') && /^[a-z0-9]$/i.test(event.key)) {\n setDetailModeEditing(true);\n }\n }\n\n // Don't exit edit mode if the target of the escape isn't a child of the cell (e.g. if its a popover).\n if (event.key === 'Escape' && event.currentTarget.contains(control)) {\n event.preventDefault();\n\n if (detailModeEditing) {\n setDetailModeEditing(false);\n } else {\n meta.editMode.toggleEditing(false);\n tableRef.current?.focus();\n }\n\n return;\n }\n\n if ((!detailModeEditing && event.key === 'ArrowLeft') || (event.key === 'Tab' && event.shiftKey)) {\n event.preventDefault();\n\n const isFirstRow = rowIndex === 0;\n const isFirstColumn = index === firstDataColumnIndex;\n\n if (event.ctrlKey || event.metaKey) {\n // If the current active column is the first column then we don't do any thing so that focus\n // remains on the first column.\n if (!isFirstColumn) {\n control.blur();\n meta.editMode.moveToFirstColumn(allFocussableColumnIndexes);\n }\n } else {\n // If it is first row and first column, then don't move column.\n if (!isFirstRow || !isFirstColumn) {\n control.blur();\n meta.editMode.moveToPreviousColumn(allFocussableColumnIndexes, moveRow);\n }\n }\n\n return;\n }\n\n if ((!detailModeEditing && event.key === 'ArrowRight') || (event.key === 'Tab' && !event.shiftKey)) {\n event.preventDefault();\n\n const isLastColumn = index === lastDataColumnIndex;\n\n if (event.ctrlKey || event.metaKey) {\n // If the current active column is the last column then we don't do any thing so that focus\n // remains on the last column.\n if (!isLastColumn) {\n control.blur();\n meta.editMode.moveToLastColumn(allFocussableColumnIndexes);\n }\n } else {\n // If it is last row and last column, then don't move column.\n if (!isLastRow || !isLastColumn) {\n control.blur();\n meta.editMode.moveToNextColumn(allFocussableColumnIndexes, moveRow);\n }\n }\n\n return;\n }\n\n if (!detailModeEditing && event.key === 'ArrowUp') {\n event.preventDefault();\n\n // if it is the first row then return early, so that focus on the cell is not lost\n if (rowIndex === 0) {\n return;\n }\n\n control.blur();\n\n if (event.ctrlKey || event.metaKey) {\n meta.setActiveRowIndex(0);\n\n scrollToOffset(0);\n } else {\n moveRow(MOVE_DIR.PREV);\n }\n\n meta.setShouldPauseHoverState(true);\n return;\n }\n\n if (!detailModeEditing && event.key === 'ArrowDown') {\n event.preventDefault();\n\n // if it is the last row then return early, so that focus on the cell is not lost\n if (rowIndex === rows.length - 1) {\n return;\n }\n\n control.blur();\n\n if (event.ctrlKey || event.metaKey) {\n meta.setActiveRowIndex(rows.length - 1);\n scrollToIndex(rows.length + 20);\n } else {\n moveRow(MOVE_DIR.NEXT);\n }\n\n meta.setShouldPauseHoverState(true);\n return;\n }\n };\n }\n\n return (\n <ColumnBase {...attributes}>\n <EditingCell\n detailModeEditing={detailModeEditing}\n cell={cell}\n cellRef={internalRef}\n columnIndex={index}\n isEditingThisCell={isEditingThisCell}\n onSave={meta.editMode.onSave}\n rowIndex={rowIndex}\n table={table}\n tableRef={tableRef}\n ref={controlRef}\n rowValues={rows[rowIndex].original}\n rowsLength={rows.length}\n enableDetailModeEditing={() => {\n if (!detailModeEditing) {\n setDetailModeEditing(true);\n }\n }}\n />\n </ColumnBase>\n );\n } else {\n if (meta.onRowClick) {\n attributes.onClick = event => {\n if (event.target !== internalRef.current) {\n return;\n }\n\n meta.onRowClick?.(cell.row.original);\n };\n }\n }\n\n return <ColumnBase {...attributes}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</ColumnBase>;\n};\n\ntype EditingCellProps = {\n cell: RTCell<any, unknown>;\n cellRef: React.RefObject<HTMLDivElement>;\n columnIndex: number;\n isEditingThisCell: boolean;\n onSave: SaveHandler<any>;\n rowIndex: number;\n table: RTTable<any>;\n tableRef: React.RefObject<HTMLDivElement>;\n rowValues: Record<string, any>;\n rowsLength: number;\n detailModeEditing: boolean;\n enableDetailModeEditing: () => void;\n};\n\nconst EditingCell = React.memo(\n React.forwardRef<HTMLElement, EditingCellProps>((props, ref) => {\n const {\n cell,\n cellRef,\n columnIndex,\n detailModeEditing,\n isEditingThisCell = false,\n onSave: handleSave,\n rowIndex,\n rowValues,\n table,\n tableRef,\n enableDetailModeEditing,\n } = props;\n const {\n editMode: { validationErrors, setValidationErrors, rowMoveReason, setRowMoveReason },\n isHovered,\n } = useRowContext();\n\n const controlRef = useMergedRef(ref);\n const cellId = cell.column.id;\n const cellValidationError = validationErrors?.[cellId];\n\n const value = cell.getValue();\n const ariaLabel = cell.column.columnDef.header as string | undefined;\n const meta = table.options.meta as TableMeta<any>;\n const { globalFilter } = table.getState();\n\n const [state, setState] = React.useState(value);\n\n const isHoveringAnotherRowWhileEditing = meta.editMode.isEditing && meta.activeRowIndex !== rowIndex && isHovered;\n const hasValidationError = !isHoveringAnotherRowWhileEditing && !!cellValidationError;\n // On each save, the initialValue will be set to the new value of the cell\n const initialValue = React.useRef<any>(value);\n const stateReset = React.useRef(false);\n\n // It is important that we let consumers pass a newValue as an argument because when setState is called before\n // onBlur then saveIfChanged method gets the stale state value. This happens because the rerender hasn't happened\n // before the saveIfChanged method is called.\n const saveIfChanged = async (eventOrNewValue?: any) => {\n let newValue = state;\n\n // if eventOrNewValue is not an event object\n if (!eventOrNewValue.target) {\n newValue = eventOrNewValue;\n }\n\n if (hasChanged(value, newValue)) {\n try {\n const updatedRow = { ...cell.row.original, [cellId]: newValue };\n\n await handleSave(updatedRow, cellId);\n\n // If sorting is paused then update the last sorted or filtered rows to store the newly updated row\n if (meta.shouldPauseSortingAndFiltering) {\n meta.lastSortedOrFilteredRows.current = meta.lastSortedOrFilteredRows.current.map(row => {\n if (row.id === cell.row.id) {\n row.original = updatedRow;\n }\n\n return row;\n });\n }\n\n // Reset error if save was successful\n setValidationErrors(null);\n } catch (error) {\n setValidationErrors({ ...validationErrors, ...(error as SaveHandlerErrorResponse) });\n }\n }\n };\n\n // Ensures we \"auto focus\" the field if the cell is being edited.\n React.useEffect(() => {\n const isFocusInsideTable = meta.tableRef.current?.contains(document.activeElement);\n // When control is blurred then body gets the focus that's why we have to make sure if activeElement\n // is body then we focus the cell if it is being edited.\n const isBodyFocussed = document.body === document.activeElement;\n\n // Don't focus cell if any table popup(filter popup, column settings popup) is open.\n if (isEditingThisCell && (isFocusInsideTable || isBodyFocussed)) {\n (controlRef.current as HTMLElement)?.focus?.();\n }\n }, [isEditingThisCell, controlRef.current]);\n\n const pinnedColumnsWidth = React.useMemo(() => {\n const pinnedColumns = table.getState().columnPinning.left;\n\n if (Array.isArray(pinnedColumns) && pinnedColumns.length > 0) {\n const lastFrozenColumn = pinnedColumns[pinnedColumns.length - 1];\n const lastFrozenColumnOffset = meta.columnOffsets[lastFrozenColumn];\n\n if (lastFrozenColumnOffset !== undefined) {\n return lastFrozenColumnOffset + (table.getState().columnSizing[lastFrozenColumn] ?? 0);\n }\n }\n\n return 0;\n }, [meta.columnOffsets, table.getState().columnSizing]);\n\n React.useEffect(() => {\n if (hasChanged(initialValue.current, state)) {\n // For an input we want to make sure that if the value is changed then we go into detail mode, so that\n // arrow keys doesn't trigger the quick mode shortcuts.\n if (controlRef.current?.nodeName === 'INPUT') {\n enableDetailModeEditing();\n }\n\n showIndicator();\n } else {\n hideIndicator();\n }\n\n return hideIndicator;\n }, [state]);\n\n // This effect makes sure we select the input control value when escape key is pressed\n React.useEffect(() => {\n const isControlInput =\n controlRef.current?.nodeName === 'INPUT' &&\n controlRef.current?.getAttribute('data-inline-editing-component') === 'true';\n\n if (stateReset.current && isControlInput) {\n (controlRef.current as HTMLInputElement)?.select();\n }\n\n stateReset.current = false;\n }, [stateReset.current]);\n\n const handleFocus = event => {\n meta.editMode.setColumn(columnIndex);\n\n if (event.target?.select) {\n event.target?.select();\n }\n\n // ensure the field is always visible (e.g. not hidden behind the pinned columns)\n const rect = cellRef.current?.getBoundingClientRect();\n const leftOffset = meta.columnOffsets[cellId];\n\n if (rect && leftOffset && rect.left < pinnedColumnsWidth) {\n tableRef.current?.scrollTo(leftOffset - pinnedColumnsWidth, tableRef.current.scrollTop);\n }\n };\n\n // In order to reset the value of an input when escape key is pressed this keydown handler is required.\n // Instead of adding this event handler in parent component, this handler is added here because we have access\n // to the state handler of the control component.\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const control = event.target as HTMLInputElement;\n const isControlInput =\n control.nodeName === 'INPUT' && control?.getAttribute('data-inline-editing-component') === 'true';\n\n if (isControlInput && event.key === 'Escape') {\n setState(initialValue.current);\n stateReset.current = true;\n }\n };\n\n const showIndicator = () => {\n let willRowMoveReason: IndicatorReason | null = null;\n\n const isFilteredByGlobalFilter = Object.values<unknown>({ ...rowValues, [cellId]: state }).some(cellValue =>\n // Global filter can be undefined when there is no text being searched so we pass an empty string to\n // globalFilterFn as query in that case.\n globalFilterFn(String(cellValue), globalFilter ? String(globalFilter) : '')\n );\n\n if (!isFilteredByGlobalFilter) {\n willRowMoveReason = IndicatorReason.SEARCH;\n } else if (cell.column.getIsFiltered() && !columnFilterFn(state, cell.column.getFilterValue() as Table2Filter)) {\n willRowMoveReason = IndicatorReason.FILTER;\n } else if (\n !willRowMoveReason &&\n cell.column.getIsSorted() &&\n willRowMoveAfterSorting(\n state,\n cell,\n rowIndex,\n table.getRowModel().rows,\n !!table.getState().sorting.find(s => s.id === cell.column.id)?.desc\n )\n ) {\n willRowMoveReason = IndicatorReason.SORTING;\n }\n\n if (willRowMoveReason !== null) {\n meta.setShouldPauseSortingAndFiltering(true);\n setRowMoveReason({ [cellId]: willRowMoveReason });\n }\n };\n\n const hideIndicator = () => {\n setRowMoveReason(prevState => {\n const newState = { ...prevState };\n delete newState[cellId];\n\n return newState;\n });\n };\n\n const cellControl = cell.column.columnDef.meta?.control;\n\n const attributes = {\n 'aria-label': ariaLabel,\n onBlur: saveIfChanged,\n onFocus: handleFocus,\n ref,\n // This is a temporary fix to enable up/down arrow key shortcuts on input in quick mode. For some reason,\n // the preventDefault is true on Taco Input, so the keyboard shortcuts doesn't work. By adding this\n // data attribute we make sure the event is coming from a control component, and then we can make sure\n // keyboard shortcut works as expected.\n 'data-inline-editing-component': 'true',\n };\n\n const className = cn(getCellAlignmentClasses(cell.column.columnDef.meta?.align));\n const indicatorMountNode = cellRef.current?.parentElement?.querySelector(':first-child') as Element | null;\n\n let controlComponent;\n const detailModeClassName = cn({ '!shadow-[0_0_0_4px_rgba(0,99,255,0.25)]': detailModeEditing });\n\n if (cellControl) {\n if (typeof cellControl === 'function') {\n controlComponent = cellControl(\n {\n invalid: hasValidationError,\n onBlur: saveIfChanged,\n onFocus: handleFocus,\n ref: controlRef,\n setValue: setState,\n value: state,\n 'data-inline-editing-component': 'true',\n },\n cell.row.original\n );\n } else {\n switch (cellControl) {\n case 'datepicker':\n controlComponent = (\n <Datepicker\n {...attributes}\n className={cn({ '[&_input]:!shadow-[0_0_0_4px_rgba(0,99,255,0.25)]': detailModeEditing })}\n invalid={hasValidationError}\n onBlur={event => {\n const newDate = (event as any).detail;\n saveIfChanged(newDate);\n }}\n onChange={event => {\n setState((event as any).detail);\n }}\n ref={controlRef as RefObject<HTMLInputElement>}\n value={state as Date}\n />\n );\n break;\n\n case 'switch':\n controlComponent = (\n <Switch\n {...attributes}\n className={cn('mx-2 mt-1.5', detailModeClassName)}\n checked={Boolean(state)}\n onChange={setState}\n ref={controlRef as RefObject<HTMLButtonElement>}\n />\n );\n break;\n default:\n controlComponent = (\n <Input\n {...attributes}\n className={cn(className, detailModeClassName)}\n invalid={hasValidationError}\n onChange={event => {\n setState(event.target.value);\n }}\n ref={controlRef as RefObject<HTMLInputElement>}\n value={String(state ?? '')}\n onKeyDown={handleKeyDown}\n />\n );\n break;\n }\n }\n }\n\n const indicatorReason = rowMoveReason[cellId] ?? null;\n\n return (\n <>\n {indicatorReason !== null && (\n <Indicator\n reason={indicatorReason}\n columnName={String(cell.column.columnDef.header)}\n mountNode={indicatorMountNode}\n validationErrors={validationErrors}\n />\n )}\n <span className=\"relative flex-grow\">\n {controlComponent}\n {hasValidationError && <ValidationError>{String(cellValidationError)}</ValidationError>}\n </span>\n </>\n );\n })\n);\n"],"names":["Cell","props","cell","index","isLastRow","rowIndex","rows","scrollToIndex","scrollToOffset","table","tableRef","columnProps","meta","options","addFocussableColumnIndex","focussableColumnIndexes","allFocussableColumnIndexes","editMode","validationErrors","rowMoveReason","isHovered","isHoveredRow","useRowContext","hasValidationErrorsInRow","internalRef","React","useRef","controlRef","cellClassName","column","columnDef","className","isActiveRow","activeRowIndex","isFrozen","getIsPinned","isDragging","dragging","row","id","isSelected","getIsSelected","isDataColumn","isInternalColumn","hasCellControl","control","allVisibleColumns","getVisibleLeafColumns","lastColumnIndex","length","isEditingThisRow","isEditing","canEditThisCell","isEditingThisCell","columnIndex","isHoveringThisRowWhileEditing","shouldPauseHoverState","isIndicatorVisible","Object","keys","useEffect","current","classList","add","remove","cn","getCellSizingClasses","rowDensity","handleMouseDown","event","button","activeElement","document","isActiveElementControl","closest","hasActiveRowChanged","blur","setActiveRowIndex","includes","setColumn","attributes","onMouseDown","ref","role","detailModeEditing","setDetailModeEditing","useState","isKeyboardFocusableElement","moveRow","moveDirection","MOVE_DIR","PREV","moveToPreviousRow","nextIndex","NEXT","moveToNextRow","onSave","target","isTargetInput","nodeName","preventDefault","setTimeout","select","onBlur","firstDataColumnIndex","at","lastDataColumnIndex","onKeyDown","isControlInput","getAttribute","isDefaultPrevented","isPropagationStopped","tagName","key","input","setSelectionRange","value","test","currentTarget","contains","toggleEditing","focus","shiftKey","isFirstRow","isFirstColumn","ctrlKey","metaKey","moveToFirstColumn","moveToPreviousColumn","isLastColumn","moveToLastColumn","moveToNextColumn","setShouldPauseHoverState","ColumnBase","EditingCell","cellRef","rowValues","original","rowsLength","enableDetailModeEditing","onRowClick","onClick","flexRender","getContext","memo","forwardRef","handleSave","setValidationErrors","setRowMoveReason","useMergedRef","cellId","cellValidationError","getValue","ariaLabel","header","globalFilter","getState","state","setState","isHoveringAnotherRowWhileEditing","hasValidationError","initialValue","stateReset","saveIfChanged","eventOrNewValue","newValue","hasChanged","updatedRow","shouldPauseSortingAndFiltering","lastSortedOrFilteredRows","map","error","isFocusInsideTable","isBodyFocussed","body","pinnedColumnsWidth","useMemo","pinnedColumns","columnPinning","left","Array","isArray","lastFrozenColumn","lastFrozenColumnOffset","columnOffsets","undefined","columnSizing","showIndicator","hideIndicator","handleFocus","rect","getBoundingClientRect","leftOffset","scrollTo","scrollTop","handleKeyDown","willRowMoveReason","isFilteredByGlobalFilter","values","some","cellValue","globalFilterFn","String","IndicatorReason","SEARCH","getIsFiltered","columnFilterFn","getFilterValue","FILTER","getIsSorted","willRowMoveAfterSorting","getRowModel","sorting","find","s","desc","SORTING","setShouldPauseSortingAndFiltering","prevState","newState","cellControl","onFocus","getCellAlignmentClasses","align","indicatorMountNode","parentElement","querySelector","controlComponent","detailModeClassName","invalid","setValue","Datepicker","newDate","detail","onChange","Switch","checked","Boolean","Input","indicatorReason","Indicator","reason","columnName","mountNode","ValidationError"],"mappings":"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"}
|
@@ -11,9 +11,9 @@ const Footer = function Footer(props) {
|
|
11
11
|
table,
|
12
12
|
...columnProps
|
13
13
|
} = props;
|
14
|
-
const
|
14
|
+
const isFrozen = !!footer.column.getIsPinned();
|
15
15
|
const className = cn('group/header sticky bottom-0 bg-white border-t-2 relative', getCellSizingClasses('normal'), {
|
16
|
-
'z-[1]':
|
16
|
+
'z-[1]': isFrozen
|
17
17
|
}, props.className);
|
18
18
|
return /*#__PURE__*/React__default.createElement(ColumnBase, Object.assign({}, columnProps, {
|
19
19
|
// base props
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Footer.js","sources":["../../../../../../../../../src/components/Table2/components/column/Footer.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { Header as RTHeader } from '@tanstack/react-table';\nimport { ColumnBase, ColumnBaseProps } from './Base';\nimport { getCellSizingClasses } from '../../utilities/cell';\n\ntype FooterProps<TType = unknown> = Omit<ColumnBaseProps<TType>, 'column' | 'isEditing'> & {\n footer: RTHeader<TType, unknown>;\n index: number;\n};\n\nexport const Footer = function Footer<TType = unknown>(props: FooterProps<TType>) {\n const { children, footer, index, table, ...columnProps } = props;\n const
|
1
|
+
{"version":3,"file":"Footer.js","sources":["../../../../../../../../../src/components/Table2/components/column/Footer.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { Header as RTHeader } from '@tanstack/react-table';\nimport { ColumnBase, ColumnBaseProps } from './Base';\nimport { getCellSizingClasses } from '../../utilities/cell';\n\ntype FooterProps<TType = unknown> = Omit<ColumnBaseProps<TType>, 'column' | 'isEditing'> & {\n footer: RTHeader<TType, unknown>;\n index: number;\n};\n\nexport const Footer = function Footer<TType = unknown>(props: FooterProps<TType>) {\n const { children, footer, index, table, ...columnProps } = props;\n const isFrozen = !!footer.column.getIsPinned();\n\n const className = cn(\n 'group/header sticky bottom-0 bg-white border-t-2 relative',\n getCellSizingClasses('normal'),\n {\n 'z-[1]': isFrozen, // frozen headers should show above cells and other headers, so we add z-index\n },\n props.className\n );\n\n return (\n <ColumnBase\n {...columnProps}\n // base props\n column={footer.column}\n table={table}\n className={className}\n role=\"cell\"\n // helper props\n data-column-index={index}>\n <span className=\"truncate\">{children}</span>\n </ColumnBase>\n );\n};\n"],"names":["Footer","props","children","footer","index","table","columnProps","isFrozen","column","getIsPinned","className","cn","getCellSizingClasses","React","ColumnBase","role"],"mappings":";;;;;MAWaA,MAAM,GAAG,SAASA,MAAM,CAAkBC,KAAyB;EAC5E,MAAM;IAAEC,QAAQ;IAAEC,MAAM;IAAEC,KAAK;IAAEC,KAAK;IAAE,GAAGC;GAAa,GAAGL,KAAK;EAChE,MAAMM,QAAQ,GAAG,CAAC,CAACJ,MAAM,CAACK,MAAM,CAACC,WAAW,EAAE;EAE9C,MAAMC,SAAS,GAAGC,EAAE,CAChB,2DAA2D,EAC3DC,oBAAoB,CAAC,QAAQ,CAAC,EAC9B;IACI,OAAO,EAAEL;GACZ,EACDN,KAAK,CAACS,SAAS,CAClB;EAED,oBACIG,6BAACC,UAAU,oBACHR,WAAW;;IAEfE,MAAM,EAAEL,MAAM,CAACK,MAAM;IACrBH,KAAK,EAAEA,KAAK;IACZK,SAAS,EAAEA,SAAS;IACpBK,IAAI,EAAC,MAAM;yBAEQX;mBACnBS;IAAMH,SAAS,EAAC;KAAYR,QAAQ,CAAQ,CACnC;AAErB;;;;"}
|