@economic/taco 1.28.0 → 1.29.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.
- 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;;;;"}
|