@economic/taco 2.44.4 → 2.44.5-create.4
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/Provider/Localization.d.ts +2 -0
- package/dist/components/Report/Report.d.ts +1 -1
- package/dist/components/Table3/Table3.d.ts +2 -14
- package/dist/components/Table3/components/Columns/Internal/EditingActionsMenu.d.ts +1 -2
- package/dist/components/Table3/components/Editing/DiscardChangesConfirmationDialog.d.ts +7 -0
- package/dist/components/Table3/components/Row/Editing/CreateNewRow.d.ts +13 -0
- package/dist/components/Table3/components/Row/Editing/TemporaryRow.d.ts +11 -0
- package/dist/components/Table3/features/useEditingState.d.ts +28 -0
- package/dist/components/Table3/features/useTableEditing.d.ts +25 -36
- package/dist/components/Table3/types.d.ts +23 -8
- package/dist/components/Table3/useTable3.d.ts +6 -0
- package/dist/components/Table3/util/editing.d.ts +2 -1
- package/dist/esm/index.css +6 -2
- package/dist/esm/node_modules/babel-plugin-transform-async-to-promises/helpers.mjs.js +17 -17
- package/dist/esm/node_modules/babel-plugin-transform-async-to-promises/helpers.mjs.js.map +1 -1
- package/dist/esm/packages/taco/src/components/ModeSwitch/ModeSwitch.js +2 -2
- package/dist/esm/packages/taco/src/components/ModeSwitch/ModeSwitch.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Provider/Localization.js +5 -3
- package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Switch/Switch.js +1 -1
- package/dist/esm/packages/taco/src/components/Switch/Switch.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/Table3.js +19 -7
- package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +21 -10
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Internal/EditingActionsMenu.js +5 -37
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Internal/EditingActionsMenu.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js +17 -12
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/DiscardChangesConfirmationDialog.js +34 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/DiscardChangesConfirmationDialog.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js +88 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/SaveStatus.js +2 -14
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/SaveStatus.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js +95 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js +39 -6
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Toolbar/Editing/Editing.js +7 -2
- package/dist/esm/packages/taco/src/components/Table3/components/Toolbar/Editing/Editing.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js +512 -0
- package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +19 -406
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js +37 -32
- package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/useTable3.js +25 -8
- package/dist/esm/packages/taco/src/components/Table3/useTable3.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/util/editing.js +6 -24
- package/dist/esm/packages/taco/src/components/Table3/util/editing.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Collection/components/Root.js +18 -2
- package/dist/esm/packages/taco/src/primitives/Collection/components/Root.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Listbox2/components/Root.js +1 -0
- package/dist/esm/packages/taco/src/primitives/Listbox2/components/Root.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js +3 -4
- package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.js +9 -3
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Actions.js +6 -3
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Actions.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Footer.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Footer.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +23 -6
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js +2 -2
- package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/types.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +11 -0
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
- package/dist/esm/packages/taco/src/utils/dom.js +7 -4
- package/dist/esm/packages/taco/src/utils/dom.js.map +1 -1
- package/dist/index.css +6 -2
- package/dist/primitives/Collection/components/Root.d.ts +2 -0
- package/dist/primitives/Table/Core/Table.d.ts +1 -0
- package/dist/primitives/Table/Core/components/Columns/Internal/Actions.d.ts +3 -1
- package/dist/primitives/Table/Core/components/Footer/Footer.d.ts +2 -2
- package/dist/primitives/Table/Core/features/useTableRenderer.d.ts +2 -2
- package/dist/primitives/Table/Core/features/useTableStyle.d.ts +1 -1
- package/dist/primitives/Table/Core/types.d.ts +3 -0
- package/dist/primitives/Table/Core/useTable.d.ts +2 -2
- package/dist/primitives/Table/types.d.ts +1 -1
- package/dist/primitives/Table/useTableManager/useTableManager.d.ts +1 -1
- package/dist/taco.cjs.development.js +941 -628
- 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/dist/utils/dom.d.ts +1 -0
- package/package.json +3 -5
- package/dist/components/Table3/components/Row/Editing/CreateRowButton.d.ts +0 -11
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateRowButton.js +0 -90
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateRowButton.js.map +0 -1
|
@@ -43,7 +43,8 @@ var set = _interopDefault(require('lodash/set'));
|
|
|
43
43
|
var unset = _interopDefault(require('lodash/unset'));
|
|
44
44
|
var compact = _interopDefault(require('lodash/compact'));
|
|
45
45
|
var pullAt = _interopDefault(require('lodash/pullAt'));
|
|
46
|
-
var
|
|
46
|
+
var omit = _interopDefault(require('lodash/omit'));
|
|
47
|
+
var setWith = _interopDefault(require('lodash/setWith'));
|
|
47
48
|
var TabsPrimitive = require('@radix-ui/react-tabs');
|
|
48
49
|
var Joyride = require('react-joyride');
|
|
49
50
|
var Joyride__default = _interopDefault(Joyride);
|
|
@@ -4205,7 +4206,7 @@ const getOverlaySelector = element => {
|
|
|
4205
4206
|
return undefined;
|
|
4206
4207
|
}
|
|
4207
4208
|
};
|
|
4208
|
-
function
|
|
4209
|
+
function isElementTriggeredFromContainer(element, container) {
|
|
4209
4210
|
var _getOverlaySelector, _element$closest;
|
|
4210
4211
|
const selector = (_getOverlaySelector = getOverlaySelector(element)) !== null && _getOverlaySelector !== void 0 ? _getOverlaySelector : getOverlaySelector((_element$closest = element === null || element === void 0 ? void 0 : element.closest('[role=dialog],[role=menu]')) !== null && _element$closest !== void 0 ? _element$closest : null);
|
|
4211
4212
|
if (selector) {
|
|
@@ -4215,11 +4216,14 @@ function isElementInsideOrTriggeredFromContainer(element, container) {
|
|
|
4215
4216
|
const elementInDocument = document.querySelector(selector);
|
|
4216
4217
|
// if the element does exist, see if it is itself connected to somethng that was triggered from the container
|
|
4217
4218
|
if (elementInDocument) {
|
|
4218
|
-
return
|
|
4219
|
+
return isElementTriggeredFromContainer(elementInDocument, container);
|
|
4219
4220
|
}
|
|
4220
4221
|
return false;
|
|
4221
4222
|
}
|
|
4222
|
-
return
|
|
4223
|
+
return false;
|
|
4224
|
+
}
|
|
4225
|
+
function isElementInsideOrTriggeredFromContainer(element, container) {
|
|
4226
|
+
return isElementTriggeredFromContainer(element, container) || !!(container !== null && container !== void 0 && container.contains(element));
|
|
4223
4227
|
}
|
|
4224
4228
|
function isElementInsideOverlay(element) {
|
|
4225
4229
|
return !!(element !== null && element !== void 0 && element.closest('[role=dialog],[role=menu]'));
|
|
@@ -4713,7 +4717,9 @@ const defaultLocalisationTexts = {
|
|
|
4713
4717
|
tooltip: 'Edit table'
|
|
4714
4718
|
},
|
|
4715
4719
|
create: {
|
|
4716
|
-
label: 'New'
|
|
4720
|
+
label: 'New',
|
|
4721
|
+
disabled: 'Existing new row must be saved',
|
|
4722
|
+
saving: 'Saving...'
|
|
4717
4723
|
}
|
|
4718
4724
|
},
|
|
4719
4725
|
clearChangesConfirmationDialog: {
|
|
@@ -4735,8 +4741,8 @@ const defaultLocalisationTexts = {
|
|
|
4735
4741
|
},
|
|
4736
4742
|
validation: {
|
|
4737
4743
|
alert: {
|
|
4738
|
-
titleOne: '[COUNT] unsaved
|
|
4739
|
-
titlePlural: '[COUNT] unsaved
|
|
4744
|
+
titleOne: '[COUNT] unsaved row:',
|
|
4745
|
+
titlePlural: '[COUNT] unsaved rows:',
|
|
4740
4746
|
messageOne: "[COLUMN] [ROW] is incomplete and hasn't been saved.",
|
|
4741
4747
|
messagePlural: "[COLUMN] [ROW] are incomplete and haven't been saved.",
|
|
4742
4748
|
messageRow: 'Row',
|
|
@@ -7632,7 +7638,7 @@ const Switch = /*#__PURE__*/React.forwardRef(function Switch(props, ref) {
|
|
|
7632
7638
|
onCheckedChange: onChange,
|
|
7633
7639
|
ref: ref
|
|
7634
7640
|
}), /*#__PURE__*/React.createElement(PrimitiveSwitch.Thumb, {
|
|
7635
|
-
className: "
|
|
7641
|
+
className: "pointer-events-none mt-0.5 h-4 w-4 translate-x-[0.15rem] rounded-full bg-white transition-transform will-change-transform group-disabled:opacity-50 group-aria-checked:translate-x-[1.1rem]"
|
|
7636
7642
|
}));
|
|
7637
7643
|
if (label) {
|
|
7638
7644
|
const labelContainerClassName = cn('flex self-start cursor-pointer', {
|
|
@@ -8692,10 +8698,10 @@ const ModeSwitch = /*#__PURE__*/React.forwardRef(function ModeSwitch(props, ref)
|
|
|
8692
8698
|
onCheckedChange: onChange,
|
|
8693
8699
|
ref: ref
|
|
8694
8700
|
}), /*#__PURE__*/React.createElement(PrimitiveSwitch.Thumb, {
|
|
8695
|
-
className: "
|
|
8701
|
+
className: "pointer-events-none flex h-6 w-6 items-center justify-center rounded-full bg-white transition-transform will-change-transform group-disabled:opacity-50 group-aria-checked:translate-x-[100%]"
|
|
8696
8702
|
}, /*#__PURE__*/React.createElement(Icon, {
|
|
8697
8703
|
name: "edit-simple",
|
|
8698
|
-
className: "!h-5 !w-5"
|
|
8704
|
+
className: "pointer-events-none !h-5 !w-5"
|
|
8699
8705
|
})));
|
|
8700
8706
|
});
|
|
8701
8707
|
ModeSwitch.displayName = 'ModeSwitch';
|
|
@@ -10398,6 +10404,15 @@ function configureReactTableOptions(options, props, localization) {
|
|
|
10398
10404
|
// We don't want to expose internal Tanstack Table row, so we need to wrap enableRowSelection callback into additional function,
|
|
10399
10405
|
// which receives the React Table Row object and passes row.original to a callback.
|
|
10400
10406
|
const reactTableEnableRowSelection = typeof options.enableRowSelection === 'function' ? row => options.enableRowSelection(row.original) : options.enableRowSelection;
|
|
10407
|
+
let getRowId;
|
|
10408
|
+
if (props.rowIdentityAccessor) {
|
|
10409
|
+
getRowId = (originalRow, index) => {
|
|
10410
|
+
if (originalRow) {
|
|
10411
|
+
return originalRow[props.rowIdentityAccessor];
|
|
10412
|
+
}
|
|
10413
|
+
return String(index);
|
|
10414
|
+
};
|
|
10415
|
+
}
|
|
10401
10416
|
const tableOptions = {
|
|
10402
10417
|
defaultColumn: {
|
|
10403
10418
|
enableColumnFilter: options.enableFiltering || true,
|
|
@@ -10416,11 +10431,13 @@ function configureReactTableOptions(options, props, localization) {
|
|
|
10416
10431
|
enableGrouping: true,
|
|
10417
10432
|
enableHiding: (_options$enableColumn2 = options.enableColumnHiding) !== null && _options$enableColumn2 !== void 0 ? _options$enableColumn2 : false,
|
|
10418
10433
|
enablePinning: (_options$enableColumn3 = options.enableColumnFreezing) !== null && _options$enableColumn3 !== void 0 ? _options$enableColumn3 : false,
|
|
10434
|
+
enableRowPinning: true,
|
|
10419
10435
|
enableRowSelection: reactTableEnableRowSelection !== null && reactTableEnableRowSelection !== void 0 ? reactTableEnableRowSelection : false,
|
|
10420
10436
|
enableSorting: (_options$enableSortin = options.enableSorting) !== null && _options$enableSortin !== void 0 ? _options$enableSortin : false,
|
|
10421
10437
|
// models for default features
|
|
10422
10438
|
getExpandedRowModel: reactTable.getExpandedRowModel(),
|
|
10423
10439
|
getGroupedRowModel: reactTable.getGroupedRowModel(),
|
|
10440
|
+
getRowId,
|
|
10424
10441
|
groupedColumnMode: false
|
|
10425
10442
|
};
|
|
10426
10443
|
if (tableOptions.enableColumnResizing) {
|
|
@@ -10964,13 +10981,13 @@ function useTableSearch(isEnabled = false, defaultEnableGlobalFilter = false) {
|
|
|
10964
10981
|
}
|
|
10965
10982
|
|
|
10966
10983
|
// A type of promise-like that resolves synchronously and supports only one observer
|
|
10967
|
-
|
|
10984
|
+
var _Pact = /*#__PURE__*/function () {
|
|
10968
10985
|
function _Pact() {}
|
|
10969
10986
|
_Pact.prototype.then = function (onFulfilled, onRejected) {
|
|
10970
|
-
|
|
10971
|
-
|
|
10987
|
+
var result = new _Pact();
|
|
10988
|
+
var state = this.s;
|
|
10972
10989
|
if (state) {
|
|
10973
|
-
|
|
10990
|
+
var callback = state & 1 ? onFulfilled : onRejected;
|
|
10974
10991
|
if (callback) {
|
|
10975
10992
|
try {
|
|
10976
10993
|
_settle(result, 1, callback(this.v));
|
|
@@ -10984,7 +11001,7 @@ const _Pact = /*#__PURE__*/function () {
|
|
|
10984
11001
|
}
|
|
10985
11002
|
this.o = function (_this) {
|
|
10986
11003
|
try {
|
|
10987
|
-
|
|
11004
|
+
var value = _this.v;
|
|
10988
11005
|
if (_this.s & 1) {
|
|
10989
11006
|
_settle(result, 1, onFulfilled ? onFulfilled(value) : value);
|
|
10990
11007
|
} else if (onRejected) {
|
|
@@ -11021,7 +11038,7 @@ function _settle(pact, state, value) {
|
|
|
11021
11038
|
}
|
|
11022
11039
|
pact.s = state;
|
|
11023
11040
|
pact.v = value;
|
|
11024
|
-
|
|
11041
|
+
var observer = pact.o;
|
|
11025
11042
|
if (observer) {
|
|
11026
11043
|
observer(pact);
|
|
11027
11044
|
}
|
|
@@ -11061,17 +11078,13 @@ function _forTo(array, body, check) {
|
|
|
11061
11078
|
_cycle();
|
|
11062
11079
|
return pact;
|
|
11063
11080
|
}
|
|
11064
|
-
|
|
11081
|
+
var _iteratorSymbol = /*#__PURE__*/typeof Symbol !== "undefined" ? Symbol.iterator || (Symbol.iterator = /*#__PURE__*/Symbol("Symbol.iterator")) : "@@iterator";
|
|
11065
11082
|
|
|
11066
11083
|
// Asynchronously iterate through an object's values
|
|
11067
11084
|
// Uses for...of if the runtime supports it, otherwise iterates until length on a copy
|
|
11068
11085
|
function _forOf(target, body, check) {
|
|
11069
11086
|
if (typeof target[_iteratorSymbol] === "function") {
|
|
11070
|
-
var
|
|
11071
|
-
step,
|
|
11072
|
-
pact,
|
|
11073
|
-
reject;
|
|
11074
|
-
function _cycle(result) {
|
|
11087
|
+
var _cycle = function _cycle(result) {
|
|
11075
11088
|
try {
|
|
11076
11089
|
while (!(step = iterator.next()).done && (!check || !check())) {
|
|
11077
11090
|
result = body(step.value);
|
|
@@ -11092,13 +11105,17 @@ function _forOf(target, body, check) {
|
|
|
11092
11105
|
} catch (e) {
|
|
11093
11106
|
_settle(pact || (pact = new _Pact()), 2, e);
|
|
11094
11107
|
}
|
|
11095
|
-
}
|
|
11108
|
+
};
|
|
11109
|
+
var iterator = target[_iteratorSymbol](),
|
|
11110
|
+
step,
|
|
11111
|
+
pact,
|
|
11112
|
+
reject;
|
|
11096
11113
|
_cycle();
|
|
11097
|
-
if (iterator
|
|
11098
|
-
var _fixup = function (value) {
|
|
11114
|
+
if (iterator["return"]) {
|
|
11115
|
+
var _fixup = function _fixup(value) {
|
|
11099
11116
|
try {
|
|
11100
11117
|
if (!step.done) {
|
|
11101
|
-
iterator
|
|
11118
|
+
iterator["return"]();
|
|
11102
11119
|
}
|
|
11103
11120
|
} catch (e) {}
|
|
11104
11121
|
return value;
|
|
@@ -11125,7 +11142,7 @@ function _forOf(target, body, check) {
|
|
|
11125
11142
|
return body(values[i]);
|
|
11126
11143
|
}, check);
|
|
11127
11144
|
}
|
|
11128
|
-
|
|
11145
|
+
var _asyncIteratorSymbol = /*#__PURE__*/typeof Symbol !== "undefined" ? Symbol.asyncIterator || (Symbol.asyncIterator = /*#__PURE__*/Symbol("Symbol.asyncIterator")) : "@@asyncIterator";
|
|
11129
11146
|
|
|
11130
11147
|
// Asynchronously call a function and send errors to recovery continuation
|
|
11131
11148
|
function _catch(body, recover) {
|
|
@@ -11753,7 +11770,7 @@ function useTableManager(props, meta, internalColumns) {
|
|
|
11753
11770
|
rowDrag,
|
|
11754
11771
|
rowDrop: rowDrop,
|
|
11755
11772
|
rowExpansion: rowExpansion,
|
|
11756
|
-
|
|
11773
|
+
rowIdentityAccessor: props.rowIdentityAccessor,
|
|
11757
11774
|
rowGoto,
|
|
11758
11775
|
rowGroups: rowGroups,
|
|
11759
11776
|
rowHeight,
|
|
@@ -12118,11 +12135,30 @@ function Row(props) {
|
|
|
12118
12135
|
})));
|
|
12119
12136
|
}
|
|
12120
12137
|
|
|
12121
|
-
|
|
12138
|
+
// scroll padding end is designed to always show half of the next row
|
|
12139
|
+
function getScrollPaddingEndOffset(table, options) {
|
|
12140
|
+
var _options$virtualiserP;
|
|
12141
|
+
const tableMeta = table.options.meta;
|
|
12142
|
+
let offset = 2 + ((_options$virtualiserP = options === null || options === void 0 ? void 0 : options.virtualiserPaddingEndOffset) !== null && _options$virtualiserP !== void 0 ? _options$virtualiserP : 0);
|
|
12143
|
+
if (tableMeta.footer.isEnabled) {
|
|
12144
|
+
offset += 1;
|
|
12145
|
+
}
|
|
12146
|
+
if (table.getHeaderGroups().length > 1) {
|
|
12147
|
+
offset += table.getHeaderGroups().length - 1;
|
|
12148
|
+
}
|
|
12149
|
+
let height = ROW_HEIGHT_ESTIMATES.medium * offset;
|
|
12150
|
+
const bottomRows = table.getBottomRows();
|
|
12151
|
+
if (bottomRows.length) {
|
|
12152
|
+
height += ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height] * 1.4 * bottomRows.length;
|
|
12153
|
+
}
|
|
12154
|
+
return height;
|
|
12155
|
+
}
|
|
12156
|
+
function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex, options) {
|
|
12122
12157
|
var _table$getState$group, _virtualItems$padding, _virtualItems$padding2, _virtualItems$padding3, _ref, _virtualItems;
|
|
12123
12158
|
const tableMeta = table.options.meta;
|
|
12124
|
-
const rows = table.
|
|
12159
|
+
const rows = table.getCenterRows();
|
|
12125
12160
|
const isTableRowGrouped = !!((_table$getState$group = table.getState().grouping) !== null && _table$getState$group !== void 0 && _table$getState$group.length);
|
|
12161
|
+
const bottomRows = table.getBottomRows();
|
|
12126
12162
|
// expanded rows
|
|
12127
12163
|
const {
|
|
12128
12164
|
createRowMeasurer,
|
|
@@ -12132,9 +12168,6 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
|
|
|
12132
12168
|
const rangeExtractor = useRowGroupVirtualisation(table);
|
|
12133
12169
|
// account for thead and tfoot in the scroll area - both are always medium row height
|
|
12134
12170
|
const scrollPaddingStart = ROW_HEIGHT_ESTIMATES.medium;
|
|
12135
|
-
// column groups offset the bottom padding :shrug:, multiplying by 1.5 ensures the bottom padding remains
|
|
12136
|
-
// consistent when there are groups and when there aren't. 1.5 is relatively arbitrary, but it gives alignment
|
|
12137
|
-
const scrollPaddingEnd = ROW_HEIGHT_ESTIMATES.medium * (table.getHeaderGroups().length > 1 ? 1.5 : 1);
|
|
12138
12171
|
const virtualiser = reactVirtual.useVirtualizer({
|
|
12139
12172
|
count: rows.length,
|
|
12140
12173
|
estimateSize,
|
|
@@ -12143,7 +12176,8 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
|
|
|
12143
12176
|
rangeExtractor,
|
|
12144
12177
|
// correctly sets the scroll padding offset, e.g. when keyboard navigating rows in the list
|
|
12145
12178
|
scrollPaddingStart,
|
|
12146
|
-
scrollPaddingEnd:
|
|
12179
|
+
scrollPaddingEnd: getScrollPaddingEndOffset(table, options),
|
|
12180
|
+
paddingEnd: ROW_HEIGHT_ESTIMATES.medium * bottomRows.length
|
|
12147
12181
|
});
|
|
12148
12182
|
const totalSize = virtualiser.getTotalSize();
|
|
12149
12183
|
const virtualItems = virtualiser.getVirtualItems();
|
|
@@ -12300,12 +12334,14 @@ function Actions$1(props) {
|
|
|
12300
12334
|
actionsLength,
|
|
12301
12335
|
data,
|
|
12302
12336
|
isActiveRow,
|
|
12303
|
-
rowId
|
|
12337
|
+
rowId,
|
|
12338
|
+
table
|
|
12304
12339
|
} = props;
|
|
12305
12340
|
const {
|
|
12306
12341
|
texts
|
|
12307
12342
|
} = useLocalization();
|
|
12308
|
-
|
|
12343
|
+
// we don't want to document passing table, so it isn't on the type
|
|
12344
|
+
const visibleActions = actions.map(action => action(data, rowId, table)).filter(action => !!action);
|
|
12309
12345
|
const actionsOnRow = visibleActions.length === actionsLength ? visibleActions : visibleActions.slice(0, actionsLength - 1);
|
|
12310
12346
|
const actionsInMenu = visibleActions.slice(visibleActions.length === actionsLength ? actionsLength : actionsLength - 1);
|
|
12311
12347
|
const className = cn('flex justify-end text-right bg-[inherit] shadow-[-6px_0px_6px_var(--table-row-actions-shadow)] print:hidden');
|
|
@@ -12361,7 +12397,8 @@ const Cell = /*#__PURE__*/React__default.memo(function MemoedCell(context) {
|
|
|
12361
12397
|
actionsLength: actionsLength,
|
|
12362
12398
|
data: row.original,
|
|
12363
12399
|
isActiveRow: isActiveRow,
|
|
12364
|
-
rowId: row.id
|
|
12400
|
+
rowId: row.id,
|
|
12401
|
+
table: table
|
|
12365
12402
|
});
|
|
12366
12403
|
}
|
|
12367
12404
|
return null;
|
|
@@ -12611,13 +12648,13 @@ const INTERNAL_RENDERERS = {
|
|
|
12611
12648
|
rowExpansion: renderer$2,
|
|
12612
12649
|
rowSelection: renderer$3
|
|
12613
12650
|
};
|
|
12614
|
-
function useTable(props, externalRef, renderers, meta) {
|
|
12651
|
+
function useTable(props, externalRef, renderers, meta, options) {
|
|
12615
12652
|
// create a ref and merge with the consumer's ref
|
|
12616
12653
|
const ref = useMergedRef(externalRef);
|
|
12617
12654
|
// configure the table
|
|
12618
12655
|
const manager = useTableManager(props, meta, INTERNAL_RENDERERS);
|
|
12619
12656
|
// configure the virtualised renderer
|
|
12620
|
-
const renderer = useTableRenderer(renderers, manager.instance, ref, props.defaultRowActiveIndex);
|
|
12657
|
+
const renderer = useTableRenderer(renderers, manager.instance, ref, props.defaultRowActiveIndex, options);
|
|
12621
12658
|
// configure dynamic styling
|
|
12622
12659
|
const {
|
|
12623
12660
|
style,
|
|
@@ -12718,7 +12755,10 @@ function GroupedCell(props) {
|
|
|
12718
12755
|
index,
|
|
12719
12756
|
isHighlighted
|
|
12720
12757
|
} = props;
|
|
12721
|
-
const
|
|
12758
|
+
const {
|
|
12759
|
+
table
|
|
12760
|
+
} = cell.getContext();
|
|
12761
|
+
const tableMeta = table.options.meta;
|
|
12722
12762
|
const columnMeta = cell.column.columnDef.meta;
|
|
12723
12763
|
const attributes = getCellAttributes(cell, index, isHighlighted);
|
|
12724
12764
|
const {
|
|
@@ -12736,7 +12776,8 @@ function GroupedCell(props) {
|
|
|
12736
12776
|
colSpan: colSpan,
|
|
12737
12777
|
rowActions: tableMeta.rowGroups.rowActionsForGroup,
|
|
12738
12778
|
rowId: cell.row.id,
|
|
12739
|
-
subRows: subRows
|
|
12779
|
+
subRows: subRows,
|
|
12780
|
+
table: table
|
|
12740
12781
|
}), content);
|
|
12741
12782
|
}
|
|
12742
12783
|
const MemoedGroupedCell = /*#__PURE__*/React__default.memo(function MemoedGroupedCell(props) {
|
|
@@ -12748,6 +12789,7 @@ const MemoedGroupedCell = /*#__PURE__*/React__default.memo(function MemoedGroupe
|
|
|
12748
12789
|
rowActions,
|
|
12749
12790
|
rowId,
|
|
12750
12791
|
subRows,
|
|
12792
|
+
table,
|
|
12751
12793
|
...attributes
|
|
12752
12794
|
} = props;
|
|
12753
12795
|
return /*#__PURE__*/React__default.createElement("td", Object.assign({}, attributes, {
|
|
@@ -12762,7 +12804,8 @@ const MemoedGroupedCell = /*#__PURE__*/React__default.memo(function MemoedGroupe
|
|
|
12762
12804
|
actionsLength: 4,
|
|
12763
12805
|
data: subRows,
|
|
12764
12806
|
isActiveRow: true,
|
|
12765
|
-
rowId: rowId
|
|
12807
|
+
rowId: rowId,
|
|
12808
|
+
table: table
|
|
12766
12809
|
})) : null);
|
|
12767
12810
|
});
|
|
12768
12811
|
|
|
@@ -12902,7 +12945,7 @@ const DisplayRow = /*#__PURE__*/React__default.memo(function DisplayRow(props) {
|
|
|
12902
12945
|
const expansionRef = React__default.useRef(null);
|
|
12903
12946
|
const isExpanded = !!attributes['data-row-expanded'];
|
|
12904
12947
|
useSetVirtualisedRowHeight(measureRow, ref.current, expansionRef.current, isExpanded);
|
|
12905
|
-
const className = cn('group/row', {
|
|
12948
|
+
const className = cn('group/row', otherAttributes.className, {
|
|
12906
12949
|
'hover:cursor-grab': tableMeta.rowDrag.isEnabled && typeof attributes.onClick !== 'function',
|
|
12907
12950
|
'hover:cursor-pointer': typeof attributes.onClick === 'function'
|
|
12908
12951
|
});
|
|
@@ -13696,7 +13739,7 @@ function Summary(props) {
|
|
|
13696
13739
|
|
|
13697
13740
|
function Foot(props) {
|
|
13698
13741
|
const nonGroupedHeaders = props.table.getFooterGroups()[0].headers.filter(header => !header.column.getIsGrouped());
|
|
13699
|
-
return /*#__PURE__*/React__default.createElement("tfoot", null, /*#__PURE__*/React__default.createElement("tr", null, nonGroupedHeaders.map((header, index) => (/*#__PURE__*/React__default.createElement(Footer$3, {
|
|
13742
|
+
return /*#__PURE__*/React__default.createElement("tfoot", null, props.children, /*#__PURE__*/React__default.createElement("tr", null, nonGroupedHeaders.map((header, index) => (/*#__PURE__*/React__default.createElement(Footer$3, {
|
|
13700
13743
|
key: header.id,
|
|
13701
13744
|
header: header,
|
|
13702
13745
|
index: index
|
|
@@ -14386,6 +14429,7 @@ const getOptionsFromCollection = (collection, selector) => collection.querySelec
|
|
|
14386
14429
|
const Root = /*#__PURE__*/React__default.forwardRef(function CollectionRoot(props, ref) {
|
|
14387
14430
|
const {
|
|
14388
14431
|
querySelector,
|
|
14432
|
+
resetOnChange,
|
|
14389
14433
|
tabIndex = 0,
|
|
14390
14434
|
...otherProps
|
|
14391
14435
|
} = props;
|
|
@@ -14416,6 +14460,21 @@ const Root = /*#__PURE__*/React__default.forwardRef(function CollectionRoot(prop
|
|
|
14416
14460
|
internalRef.current.setActiveIndexByElement = setActiveIndexByElement;
|
|
14417
14461
|
}
|
|
14418
14462
|
}, [internalRef.current]);
|
|
14463
|
+
React__default.useEffect(() => {
|
|
14464
|
+
if (internalRef.current) {
|
|
14465
|
+
const selected = internalRef.current.querySelectorAll(`[aria-current="true"]`);
|
|
14466
|
+
const options = getOptionsFromCollection(internalRef.current, querySelector);
|
|
14467
|
+
if (options.length && selected.length === 1) {
|
|
14468
|
+
const firstSelected = internalRef.current.querySelector(`[aria-selected]`);
|
|
14469
|
+
if (firstSelected) {
|
|
14470
|
+
const selectedIndex = Array.from(options).indexOf(firstSelected);
|
|
14471
|
+
if (selectedIndex > -1) {
|
|
14472
|
+
setActiveOption(selectedIndex, internalRef.current, firstSelected);
|
|
14473
|
+
}
|
|
14474
|
+
}
|
|
14475
|
+
}
|
|
14476
|
+
}
|
|
14477
|
+
}, [resetOnChange]);
|
|
14419
14478
|
React__default.useEffect(() => {
|
|
14420
14479
|
if (internalRef.current) {
|
|
14421
14480
|
const options = getOptionsFromCollection(internalRef.current, querySelector);
|
|
@@ -14427,8 +14486,8 @@ const Root = /*#__PURE__*/React__default.forwardRef(function CollectionRoot(prop
|
|
|
14427
14486
|
}
|
|
14428
14487
|
// if one item is selected, make sure it's current
|
|
14429
14488
|
if (selected.length === 1) {
|
|
14430
|
-
|
|
14431
|
-
|
|
14489
|
+
if (options) {
|
|
14490
|
+
const firstSelected = selected.item(0);
|
|
14432
14491
|
const selectedIndex = Array.from(options).indexOf(firstSelected);
|
|
14433
14492
|
if (selectedIndex > -1) {
|
|
14434
14493
|
setActiveOption(selectedIndex, internalRef.current, firstSelected);
|
|
@@ -14571,6 +14630,7 @@ const Root$1 = /*#__PURE__*/React__default.forwardRef(function Listbox2(props, r
|
|
|
14571
14630
|
id: id,
|
|
14572
14631
|
querySelector: customSelector ? `${DEFAULT_SELECTOR}, ${customSelector}` : DEFAULT_SELECTOR,
|
|
14573
14632
|
ref: ref,
|
|
14633
|
+
resetOnChange: value,
|
|
14574
14634
|
role: "listbox"
|
|
14575
14635
|
}), children)));
|
|
14576
14636
|
});
|
|
@@ -16755,6 +16815,7 @@ function TableGrid(props) {
|
|
|
16755
16815
|
var _table$state$grouping;
|
|
16756
16816
|
const {
|
|
16757
16817
|
enableHorizontalArrowKeyNavigation,
|
|
16818
|
+
rowsForFooter,
|
|
16758
16819
|
table,
|
|
16759
16820
|
...attributes
|
|
16760
16821
|
} = props;
|
|
@@ -16762,8 +16823,6 @@ function TableGrid(props) {
|
|
|
16762
16823
|
table.meta.rowActive.handleFocus(event, table.meta.length, table.renderer.scrollToIndex);
|
|
16763
16824
|
} : undefined;
|
|
16764
16825
|
const filterReason = getFilterReason(table);
|
|
16765
|
-
const searchNotApplied = !table.state.globalFilter || table.state.globalFilter === '';
|
|
16766
|
-
const filtersNotApplied = !table.state.columnFilters || table.state.columnFilters.length === 0;
|
|
16767
16826
|
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("style", null, table.stylesheet), /*#__PURE__*/React__default.createElement(focus.FocusScope, null, /*#__PURE__*/React__default.createElement("table", Object.assign({}, attributes, {
|
|
16768
16827
|
id: table.id,
|
|
16769
16828
|
"data-table-font-size": table.meta.fontSize.size,
|
|
@@ -16796,9 +16855,9 @@ function TableGrid(props) {
|
|
|
16796
16855
|
...table.renderer.style,
|
|
16797
16856
|
height: table.renderer.style.height + ROW_HEIGHT_ESTIMATES[table.meta.rowHeight.height]
|
|
16798
16857
|
} : table.renderer.style
|
|
16799
|
-
}, table.renderer.rows,
|
|
16858
|
+
}, table.renderer.rows, props.children), table.meta.footer.isEnabled ? /*#__PURE__*/React__default.createElement(Foot, {
|
|
16800
16859
|
table: table.instance
|
|
16801
|
-
}) : null)))));
|
|
16860
|
+
}, rowsForFooter) : null)))));
|
|
16802
16861
|
}
|
|
16803
16862
|
|
|
16804
16863
|
function Column$1(_) {
|
|
@@ -18301,33 +18360,16 @@ const useTableRowCreation = (data, tableRef) => {
|
|
|
18301
18360
|
|
|
18302
18361
|
function useTableEditingListener(table, tableRef) {
|
|
18303
18362
|
const tableMeta = table.options.meta;
|
|
18304
|
-
const completedRowsCount = tableMeta.editing.getCompletedRowsCount();
|
|
18305
18363
|
const localization = useLocalization();
|
|
18306
|
-
const saveChanges = () => {
|
|
18307
|
-
requestAnimationFrame(() => {
|
|
18308
|
-
tableMeta.editing.saveChanges();
|
|
18309
|
-
});
|
|
18310
|
-
};
|
|
18311
18364
|
// save when the row changes
|
|
18365
|
+
// store the last row active index, otherwise everytime tableMeta.editing.saveChanges changes the hook runs again
|
|
18366
|
+
const lastRowActiveIndexRef = React__default.useRef(tableMeta.rowActive.rowActiveIndex);
|
|
18312
18367
|
useLazyEffect(() => {
|
|
18313
|
-
if (tableMeta.editing.isEditing) {
|
|
18314
|
-
|
|
18315
|
-
|
|
18316
|
-
}, [tableMeta.rowActive.rowActiveIndex]);
|
|
18317
|
-
useLazyEffect(() => {
|
|
18318
|
-
if (tableMeta.editing.isEditing) {
|
|
18319
|
-
if (tableMeta.rowActive.rowActiveIndex === undefined) {
|
|
18320
|
-
tableMeta.rowActive.setRowActiveIndex(0);
|
|
18321
|
-
}
|
|
18322
|
-
} else {
|
|
18323
|
-
// save
|
|
18324
|
-
saveChanges();
|
|
18325
|
-
// reset detailed mode
|
|
18326
|
-
tableMeta.editing.toggleDetailedMode(false);
|
|
18327
|
-
// reset the last index back to the first focusable element, when editing gets turned off
|
|
18328
|
-
tableMeta.editing.setLastFocusedCellIndex(undefined);
|
|
18368
|
+
if (tableMeta.editing.isEditing && tableMeta.rowActive.rowActiveIndex !== lastRowActiveIndexRef.current) {
|
|
18369
|
+
lastRowActiveIndexRef.current = tableMeta.rowActive.rowActiveIndex;
|
|
18370
|
+
tableMeta.editing.saveChanges(table);
|
|
18329
18371
|
}
|
|
18330
|
-
}, [tableMeta.editing.
|
|
18372
|
+
}, [tableMeta.rowActive.rowActiveIndex, tableMeta.editing.saveChanges]);
|
|
18331
18373
|
// show a warning if the user navigates away without triggering save, such as using the browser back/forward button
|
|
18332
18374
|
const hasChanges = tableMeta.editing.hasChanges();
|
|
18333
18375
|
React__default.useEffect(() => {
|
|
@@ -18343,25 +18385,46 @@ function useTableEditingListener(table, tableRef) {
|
|
|
18343
18385
|
window.removeEventListener('beforeunload', showUnsavedChangesWarning);
|
|
18344
18386
|
};
|
|
18345
18387
|
}, [tableMeta.editing.isEditing, hasChanges]);
|
|
18346
|
-
|
|
18347
|
-
|
|
18388
|
+
const hasSavedChanges = tableMeta.editing.hasSaved();
|
|
18389
|
+
useLazyEffect(() => {
|
|
18390
|
+
if (hasSavedChanges) {
|
|
18348
18391
|
resetHighlightedColumnIndexes(table.getState().globalFilter, table, localization);
|
|
18349
18392
|
}
|
|
18350
|
-
}, [
|
|
18393
|
+
}, [hasSavedChanges]);
|
|
18351
18394
|
React__default.useEffect(() => {
|
|
18352
18395
|
const onClickOutside = event => {
|
|
18353
18396
|
if (tableMeta.editing.isEditing) {
|
|
18354
|
-
|
|
18355
|
-
const
|
|
18356
|
-
|
|
18357
|
-
if (!insideTable) {
|
|
18358
|
-
saveChanges();
|
|
18397
|
+
const element = event.target;
|
|
18398
|
+
const insideTable = element.getAttribute('data-taco') === 'backdrop' || element.getAttribute('data-table') === 'editing-toggle' || isElementInsideOrTriggeredFromContainer(element, tableRef.current);
|
|
18399
|
+
// users can click the white space below rows which could be inside the table, but a valid scenario to save
|
|
18400
|
+
if (!insideTable || element.tagName === 'TABLE' || element.tagName === 'TBODY') {
|
|
18401
|
+
tableMeta.editing.saveChanges(table);
|
|
18359
18402
|
}
|
|
18360
18403
|
}
|
|
18361
18404
|
};
|
|
18362
18405
|
document.addEventListener('click', onClickOutside);
|
|
18363
18406
|
return () => document.removeEventListener('click', onClickOutside);
|
|
18364
|
-
}, [
|
|
18407
|
+
}, [tableMeta.editing.isEditing, tableMeta.editing.saveChanges]);
|
|
18408
|
+
const rows = table.getRowModel().rows;
|
|
18409
|
+
// make sure pending changes are removed for rows that no longer exist
|
|
18410
|
+
useLazyEffect(() => {
|
|
18411
|
+
const pendingChanges = tableMeta.editing.getErrorsShownInAlert();
|
|
18412
|
+
pendingChanges.forEach(pendingChange => {
|
|
18413
|
+
try {
|
|
18414
|
+
table.getRow(pendingChange.rowId);
|
|
18415
|
+
} catch {
|
|
18416
|
+
tableMeta.editing.discardChanges(pendingChange.rowId, table);
|
|
18417
|
+
}
|
|
18418
|
+
});
|
|
18419
|
+
}, [rows.length]);
|
|
18420
|
+
useGlobalKeyDown(tableMeta.editing.isEditing ? {
|
|
18421
|
+
key: 's',
|
|
18422
|
+
meta: true,
|
|
18423
|
+
shift: false
|
|
18424
|
+
} : undefined, event => {
|
|
18425
|
+
event.preventDefault();
|
|
18426
|
+
tableMeta.editing.saveChanges(table);
|
|
18427
|
+
});
|
|
18365
18428
|
}
|
|
18366
18429
|
|
|
18367
18430
|
function willRowMove(cell, change, rowIndex, localization) {
|
|
@@ -18431,6 +18494,8 @@ function willRowMoveAfterSorting(cell, change, rowIndex) {
|
|
|
18431
18494
|
const aUndefined = aValue === undefined;
|
|
18432
18495
|
const bUndefined = bValue === undefined;
|
|
18433
18496
|
if (aUndefined || bUndefined) {
|
|
18497
|
+
if (sortUndefined === 'first') return aUndefined ? -1 : 1;
|
|
18498
|
+
if (sortUndefined === 'last') return aUndefined ? 1 : -1;
|
|
18434
18499
|
return aUndefined && bUndefined ? 0 : aUndefined ? sortUndefined : -sortUndefined;
|
|
18435
18500
|
}
|
|
18436
18501
|
}
|
|
@@ -18441,444 +18506,544 @@ function willRowMoveAfterSorting(cell, change, rowIndex) {
|
|
|
18441
18506
|
}
|
|
18442
18507
|
return ((_resortedRows$index = resortedRows[index]) === null || _resortedRows$index === void 0 ? void 0 : _resortedRows$index.id) !== cell.row.id;
|
|
18443
18508
|
}
|
|
18444
|
-
|
|
18445
|
-
|
|
18446
|
-
|
|
18447
|
-
const firstCell = templateRow.querySelector(':first-child');
|
|
18448
|
-
const checkbox = firstCell === null || firstCell === void 0 ? void 0 : firstCell.querySelector('[data-taco="checkbox"]');
|
|
18449
|
-
firstCell === null || firstCell === void 0 ? void 0 : firstCell.focus();
|
|
18450
|
-
if (checkbox) {
|
|
18451
|
-
setDataFocusAttribute(checkbox);
|
|
18452
|
-
}
|
|
18453
|
-
templateRow.scrollIntoView();
|
|
18454
|
-
const keyframes = [{
|
|
18455
|
-
background: '#b2c7ef'
|
|
18456
|
-
}, {
|
|
18457
|
-
background: '#ebebeb'
|
|
18458
|
-
}];
|
|
18459
|
-
for (const child of templateRow.children) {
|
|
18460
|
-
child.animate(keyframes, {
|
|
18461
|
-
duration: 1000,
|
|
18462
|
-
easing: 'ease-out'
|
|
18463
|
-
});
|
|
18464
|
-
}
|
|
18465
|
-
}
|
|
18509
|
+
const TEMPORARY_ROW_ID_PREFIX = 'temp-';
|
|
18510
|
+
function isTemporaryRow(rowId) {
|
|
18511
|
+
return rowId === null || rowId === void 0 ? void 0 : rowId.startsWith(TEMPORARY_ROW_ID_PREFIX);
|
|
18466
18512
|
}
|
|
18467
18513
|
|
|
18468
|
-
|
|
18469
|
-
|
|
18470
|
-
const
|
|
18471
|
-
|
|
18472
|
-
|
|
18473
|
-
|
|
18474
|
-
|
|
18475
|
-
|
|
18476
|
-
|
|
18477
|
-
|
|
18478
|
-
|
|
18479
|
-
|
|
18480
|
-
|
|
18481
|
-
|
|
18482
|
-
|
|
18483
|
-
|
|
18484
|
-
|
|
18485
|
-
|
|
18486
|
-
|
|
18487
|
-
|
|
18488
|
-
|
|
18489
|
-
|
|
18490
|
-
|
|
18491
|
-
|
|
18492
|
-
|
|
18493
|
-
|
|
18494
|
-
|
|
18495
|
-
|
|
18496
|
-
|
|
18514
|
+
const DELAY_BEFORE_REMOVING_SAVE_STATUS = 3000;
|
|
18515
|
+
function reducer$2(state, action) {
|
|
18516
|
+
const {
|
|
18517
|
+
type,
|
|
18518
|
+
rowId,
|
|
18519
|
+
payload
|
|
18520
|
+
} = action;
|
|
18521
|
+
switch (type) {
|
|
18522
|
+
case 'setCellValue':
|
|
18523
|
+
{
|
|
18524
|
+
const {
|
|
18525
|
+
columnId,
|
|
18526
|
+
row,
|
|
18527
|
+
value
|
|
18528
|
+
} = payload;
|
|
18529
|
+
return {
|
|
18530
|
+
...state,
|
|
18531
|
+
changes: {
|
|
18532
|
+
...state.changes,
|
|
18533
|
+
rows: setWith(state.changes.rows, `${rowId}.${columnId}`, value, Object),
|
|
18534
|
+
originals: setWith(state.changes.originals, rowId, row, Object)
|
|
18535
|
+
}
|
|
18536
|
+
};
|
|
18537
|
+
}
|
|
18538
|
+
case 'removeCellValue':
|
|
18539
|
+
{
|
|
18540
|
+
const {
|
|
18541
|
+
columnId,
|
|
18542
|
+
rowIdentityAccessor
|
|
18543
|
+
} = payload;
|
|
18544
|
+
const changes = omit(state.changes.rows, `${rowId}.${columnId}`);
|
|
18545
|
+
// if there are no changes left, remove the row
|
|
18546
|
+
if (!Object.keys(changes[rowId]).length) {
|
|
18547
|
+
return reducer$2(state, {
|
|
18548
|
+
type: 'removeRow',
|
|
18549
|
+
rowId,
|
|
18550
|
+
payload: {
|
|
18551
|
+
rowIdentityAccessor
|
|
18552
|
+
}
|
|
18553
|
+
});
|
|
18554
|
+
}
|
|
18555
|
+
return {
|
|
18556
|
+
...state,
|
|
18557
|
+
changes: {
|
|
18558
|
+
...state.changes,
|
|
18559
|
+
rows: omit(state.changes.rows, `${rowId}.${columnId}`),
|
|
18560
|
+
errors: omit(state.changes.errors, `${rowId}.cells.${columnId}`),
|
|
18561
|
+
moveReasons: omit(state.changes.moveReasons, `${rowId}.${columnId}`)
|
|
18562
|
+
}
|
|
18563
|
+
};
|
|
18564
|
+
}
|
|
18565
|
+
case 'updateRow':
|
|
18566
|
+
{
|
|
18567
|
+
const {
|
|
18568
|
+
cellErrors,
|
|
18569
|
+
moveReasons,
|
|
18570
|
+
original,
|
|
18571
|
+
value
|
|
18572
|
+
} = payload;
|
|
18573
|
+
return {
|
|
18574
|
+
...state,
|
|
18575
|
+
changes: {
|
|
18576
|
+
...state.changes,
|
|
18577
|
+
rows: setWith(state.changes.rows, rowId, value, Object),
|
|
18578
|
+
errors: setWith(state.changes.errors, `${rowId}.cells`, cellErrors !== null && cellErrors !== void 0 ? cellErrors : state.changes.errors.cells[rowId], Object),
|
|
18579
|
+
originals: setWith(state.changes.originals, rowId, original !== null && original !== void 0 ? original : state.changes.originals[rowId], Object),
|
|
18580
|
+
moveReasons: setWith(state.changes.moveReasons, rowId, moveReasons !== null && moveReasons !== void 0 ? moveReasons : state.changes.moveReasons[rowId], Object),
|
|
18581
|
+
// status can be undefined, so don't use ??
|
|
18582
|
+
status: setWith(state.changes.status, rowId, undefined, Object)
|
|
18583
|
+
}
|
|
18584
|
+
};
|
|
18585
|
+
}
|
|
18586
|
+
case 'removeRow':
|
|
18587
|
+
{
|
|
18588
|
+
const {
|
|
18589
|
+
rowIdentityAccessor
|
|
18590
|
+
} = payload;
|
|
18591
|
+
return {
|
|
18592
|
+
...state,
|
|
18593
|
+
changes: {
|
|
18594
|
+
...state.changes,
|
|
18595
|
+
rows: omit(state.changes.rows, rowId),
|
|
18596
|
+
errors: omit(state.changes.errors, rowId),
|
|
18597
|
+
moveReasons: omit(state.changes.moveReasons, rowId),
|
|
18598
|
+
originals: omit(state.changes.originals, rowId),
|
|
18599
|
+
status: omit(state.changes.status, rowId)
|
|
18600
|
+
},
|
|
18601
|
+
temporaryRows: state.temporaryRows.filter(row => row[rowIdentityAccessor] !== rowId)
|
|
18602
|
+
};
|
|
18603
|
+
}
|
|
18604
|
+
case 'setRowStatus':
|
|
18605
|
+
{
|
|
18606
|
+
const {
|
|
18607
|
+
status
|
|
18608
|
+
} = payload;
|
|
18609
|
+
return {
|
|
18610
|
+
...state,
|
|
18611
|
+
changes: {
|
|
18612
|
+
...state.changes,
|
|
18613
|
+
status: status ? setWith(state.changes.status, rowId, status, Object) : omit(state.changes.status, rowId)
|
|
18614
|
+
}
|
|
18615
|
+
};
|
|
18616
|
+
}
|
|
18617
|
+
case 'setRowErrors':
|
|
18618
|
+
{
|
|
18619
|
+
const {
|
|
18620
|
+
...errors
|
|
18621
|
+
} = payload;
|
|
18622
|
+
return {
|
|
18623
|
+
...state,
|
|
18624
|
+
changes: {
|
|
18625
|
+
...state.changes,
|
|
18626
|
+
errors: setWith(state.changes.errors, rowId, errors, Object)
|
|
18627
|
+
}
|
|
18628
|
+
};
|
|
18629
|
+
}
|
|
18630
|
+
case 'createRow':
|
|
18631
|
+
{
|
|
18632
|
+
const {
|
|
18633
|
+
value
|
|
18634
|
+
} = payload;
|
|
18635
|
+
return {
|
|
18636
|
+
...state,
|
|
18637
|
+
temporaryRows: state.temporaryRows.concat(value),
|
|
18638
|
+
changes: {
|
|
18639
|
+
...state.changes,
|
|
18640
|
+
rows: setWith(state.changes.rows, rowId, value, Object),
|
|
18641
|
+
originals: setWith(state.changes.originals, rowId, value, Object)
|
|
18642
|
+
}
|
|
18643
|
+
};
|
|
18644
|
+
}
|
|
18645
|
+
default:
|
|
18646
|
+
return state;
|
|
18647
|
+
}
|
|
18497
18648
|
}
|
|
18498
|
-
function
|
|
18499
|
-
const saveChanges = function (rowId = undefined) {
|
|
18649
|
+
function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, validator) {
|
|
18650
|
+
const saveChanges = function (table, rowId = undefined) {
|
|
18500
18651
|
try {
|
|
18501
18652
|
let _exit = false;
|
|
18502
18653
|
if (!handleSave) {
|
|
18503
18654
|
console.warn('Tried to save, but Table has no onEditingSave handler');
|
|
18504
|
-
return Promise.resolve();
|
|
18655
|
+
return Promise.resolve(false);
|
|
18505
18656
|
}
|
|
18506
|
-
// we
|
|
18507
|
-
const
|
|
18508
|
-
[rowId]:
|
|
18509
|
-
} :
|
|
18510
|
-
|
|
18511
|
-
|
|
18512
|
-
|
|
18513
|
-
|
|
18514
|
-
|
|
18515
|
-
|
|
18516
|
-
|
|
18517
|
-
|
|
18518
|
-
|
|
18519
|
-
|
|
18520
|
-
|
|
18521
|
-
|
|
18522
|
-
|
|
18523
|
-
|
|
18524
|
-
|
|
18525
|
-
|
|
18526
|
-
|
|
18527
|
-
|
|
18528
|
-
|
|
18529
|
-
|
|
18530
|
-
|
|
18531
|
-
|
|
18532
|
-
|
|
18533
|
-
|
|
18534
|
-
|
|
18535
|
-
|
|
18536
|
-
|
|
18537
|
-
|
|
18538
|
-
|
|
18539
|
-
|
|
18540
|
-
|
|
18541
|
-
|
|
18542
|
-
|
|
18543
|
-
|
|
18544
|
-
// the onEditingSave handler should throw errors when something fails, e.g. validation, network errors etc
|
|
18545
|
-
// this code handles those errors and maps them either to row errors or cell specific errors
|
|
18546
|
-
let rowError;
|
|
18547
|
-
let cellErrors;
|
|
18548
|
-
if (typeof error === 'string') {
|
|
18549
|
-
rowError = error;
|
|
18550
|
-
} else if (error instanceof Error) {
|
|
18551
|
-
var _error$response;
|
|
18552
|
-
rowError = error.message;
|
|
18553
|
-
// most of our apis return error objects within this shape
|
|
18554
|
-
if (typeof ((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) === 'object') {
|
|
18555
|
-
var _error$response2;
|
|
18556
|
-
cellErrors = (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data;
|
|
18657
|
+
// sometimes we only want to save one row
|
|
18658
|
+
const changes = rowId ? {
|
|
18659
|
+
[rowId]: state.changes.rows[rowId]
|
|
18660
|
+
} : state.changes.rows;
|
|
18661
|
+
let completed = true;
|
|
18662
|
+
const _temp9 = _forOf(Object.keys(changes), function (rowId) {
|
|
18663
|
+
const status = getRowStatus(rowId);
|
|
18664
|
+
return _catch(function () {
|
|
18665
|
+
function _temp8(_result) {
|
|
18666
|
+
return _exit ? _result : Promise.resolve(handleSave(changeSet)).then(function () {
|
|
18667
|
+
// cleanup changes, we don't need them after saving
|
|
18668
|
+
discardChanges(rowId, table);
|
|
18669
|
+
// show the saved status, then remove it after a delay
|
|
18670
|
+
setRowStatus(rowId, 'saved');
|
|
18671
|
+
setTimeout(() => {
|
|
18672
|
+
setRowStatus(rowId, undefined);
|
|
18673
|
+
}, DELAY_BEFORE_REMOVING_SAVE_STATUS);
|
|
18674
|
+
});
|
|
18675
|
+
}
|
|
18676
|
+
// don't try to save if - already saving, or there are known errors
|
|
18677
|
+
if (status === 'saving' || status === 'errored') {
|
|
18678
|
+
return;
|
|
18679
|
+
}
|
|
18680
|
+
setRowStatus(rowId, 'saving');
|
|
18681
|
+
const changeSet = {
|
|
18682
|
+
...state.changes.originals[rowId],
|
|
18683
|
+
...changes[rowId]
|
|
18684
|
+
};
|
|
18685
|
+
// if we had to create a temporary id, delete it first - it's our data, not theirs
|
|
18686
|
+
if (isTemporaryRow(changeSet[rowIdentityAccessor])) {
|
|
18687
|
+
delete changeSet[rowIdentityAccessor];
|
|
18688
|
+
}
|
|
18689
|
+
// re-run validation, maybe a cell is already invalid but has never been blurred
|
|
18690
|
+
const _temp7 = function () {
|
|
18691
|
+
if (validator) {
|
|
18692
|
+
return Promise.resolve(validator(changeSet)).then(function (errors) {
|
|
18693
|
+
if (errors && Object.keys(errors).length) {
|
|
18694
|
+
throw errors;
|
|
18557
18695
|
}
|
|
18558
|
-
}
|
|
18559
|
-
|
|
18560
|
-
|
|
18561
|
-
|
|
18562
|
-
|
|
18563
|
-
|
|
18564
|
-
|
|
18565
|
-
|
|
18566
|
-
|
|
18567
|
-
|
|
18568
|
-
|
|
18569
|
-
|
|
18570
|
-
|
|
18571
|
-
|
|
18572
|
-
|
|
18696
|
+
});
|
|
18697
|
+
}
|
|
18698
|
+
}();
|
|
18699
|
+
return _temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7); // send new data to the server
|
|
18700
|
+
}, function (error) {
|
|
18701
|
+
var _error$response;
|
|
18702
|
+
if (error instanceof ReferenceError || error instanceof TypeError || (error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) >= 500) {
|
|
18703
|
+
console.error(error);
|
|
18704
|
+
}
|
|
18705
|
+
// the onEditingSave handler should throw errors when something fails, e.g. validation, network errors etc
|
|
18706
|
+
// this code handles those errors and maps them either to row errors or cell specific errors
|
|
18707
|
+
let rowError;
|
|
18708
|
+
let cellErrors;
|
|
18709
|
+
if (typeof error === 'string') {
|
|
18710
|
+
rowError = error;
|
|
18711
|
+
} else if (error instanceof Error) {
|
|
18712
|
+
var _error$response2;
|
|
18713
|
+
rowError = error.message;
|
|
18714
|
+
// most of our apis return error objects within this shape
|
|
18715
|
+
if (typeof ((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data) === 'object') {
|
|
18716
|
+
var _error$response3;
|
|
18717
|
+
cellErrors = (_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data;
|
|
18718
|
+
}
|
|
18719
|
+
} else if (typeof error === 'object') {
|
|
18720
|
+
cellErrors = error;
|
|
18721
|
+
}
|
|
18722
|
+
if (rowError || cellErrors) {
|
|
18723
|
+
dispatch({
|
|
18724
|
+
type: 'setRowErrors',
|
|
18725
|
+
rowId,
|
|
18726
|
+
payload: {
|
|
18727
|
+
row: rowError,
|
|
18728
|
+
cells: cellErrors,
|
|
18729
|
+
shouldShowErrorAlert: true
|
|
18573
18730
|
}
|
|
18574
|
-
setRowSaveStatus(rowId, undefined);
|
|
18575
18731
|
});
|
|
18576
|
-
}
|
|
18577
|
-
|
|
18578
|
-
|
|
18579
|
-
}
|
|
18580
|
-
}()
|
|
18732
|
+
}
|
|
18733
|
+
setRowStatus(rowId, 'errored');
|
|
18734
|
+
completed = false;
|
|
18735
|
+
});
|
|
18736
|
+
}, function () {
|
|
18737
|
+
return _exit;
|
|
18738
|
+
});
|
|
18739
|
+
return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(function (_result3) {
|
|
18740
|
+
return _exit ? _result3 : completed;
|
|
18741
|
+
}) : _exit ? _temp9 : completed);
|
|
18581
18742
|
} catch (e) {
|
|
18582
18743
|
return Promise.reject(e);
|
|
18583
18744
|
}
|
|
18584
18745
|
};
|
|
18585
|
-
const
|
|
18746
|
+
const onCellChanged = function (cell, rowIndex) {
|
|
18586
18747
|
try {
|
|
18587
|
-
|
|
18588
|
-
|
|
18589
|
-
|
|
18590
|
-
|
|
18591
|
-
|
|
18592
|
-
|
|
18593
|
-
|
|
18594
|
-
|
|
18595
|
-
|
|
18596
|
-
|
|
18597
|
-
|
|
18598
|
-
|
|
18599
|
-
|
|
18600
|
-
|
|
18601
|
-
|
|
18602
|
-
|
|
18603
|
-
|
|
18604
|
-
|
|
18748
|
+
function _temp6() {
|
|
18749
|
+
var _state$changes$errors8;
|
|
18750
|
+
function _temp4() {
|
|
18751
|
+
// only set errors and move reasons for the cells we're currently acting on
|
|
18752
|
+
// why? because the UX is not good if we set them for cells the user hasn't touched yet
|
|
18753
|
+
const cellsToActOn = [cell.column.id, ...Object.keys(updatesForOtherCells)];
|
|
18754
|
+
const allCells = cell.row._getAllCellsByColumnId();
|
|
18755
|
+
cellsToActOn.forEach(accessor => {
|
|
18756
|
+
if (validationErrors[accessor]) {
|
|
18757
|
+
nextCellErrors[accessor] = validationErrors[accessor];
|
|
18758
|
+
// don't show move indicator for cells with errors, they aren't valid and can't be saved
|
|
18759
|
+
delete nextMoveReasons[accessor];
|
|
18760
|
+
} else {
|
|
18761
|
+
var _allCells$accessor;
|
|
18762
|
+
// there isn't any error in this run, remove any error set in state
|
|
18763
|
+
delete nextCellErrors[accessor];
|
|
18764
|
+
if ((_allCells$accessor = allCells[accessor]) !== null && _allCells$accessor !== void 0 && _allCells$accessor.column.getIsSorted()) {
|
|
18765
|
+
// run row move determination
|
|
18766
|
+
const reason = willRowMove(cell, nextChanges[accessor], rowIndex, localization);
|
|
18767
|
+
// if the row will move based on this change save why, otherwise delete any existing state
|
|
18768
|
+
if (reason) {
|
|
18769
|
+
nextMoveReasons[accessor] = reason;
|
|
18770
|
+
} else {
|
|
18771
|
+
delete nextMoveReasons[accessor];
|
|
18605
18772
|
}
|
|
18606
|
-
}
|
|
18607
|
-
|
|
18773
|
+
}
|
|
18774
|
+
}
|
|
18775
|
+
});
|
|
18776
|
+
dispatch({
|
|
18777
|
+
type: 'updateRow',
|
|
18778
|
+
rowId: cell.row.id,
|
|
18779
|
+
payload: {
|
|
18780
|
+
cellErrors: nextCellErrors,
|
|
18781
|
+
moveReasons: nextMoveReasons,
|
|
18782
|
+
value: nextChanges
|
|
18783
|
+
}
|
|
18784
|
+
});
|
|
18785
|
+
}
|
|
18786
|
+
// create a projection of the next state, so we can act against it
|
|
18787
|
+
const nextChanges = {
|
|
18788
|
+
...state.changes.rows[cell.row.id],
|
|
18789
|
+
...updatesForOtherCells
|
|
18790
|
+
};
|
|
18791
|
+
const nextMoveReasons = {
|
|
18792
|
+
...state.changes.moveReasons[cell.row.id]
|
|
18793
|
+
};
|
|
18794
|
+
const nextCellErrors = {
|
|
18795
|
+
...((_state$changes$errors8 = state.changes.errors[cell.row.id]) === null || _state$changes$errors8 === void 0 ? void 0 : _state$changes$errors8.cells)
|
|
18796
|
+
};
|
|
18797
|
+
// run validation
|
|
18798
|
+
let validationErrors = {};
|
|
18799
|
+
const _temp3 = function () {
|
|
18800
|
+
if (validator) {
|
|
18801
|
+
const nextRowValue = {
|
|
18802
|
+
...state.changes.originals[cell.row.id],
|
|
18803
|
+
...changes,
|
|
18804
|
+
...updatesForOtherCells
|
|
18805
|
+
};
|
|
18806
|
+
return Promise.resolve(validator(nextRowValue)).then(function (_validator2) {
|
|
18807
|
+
validationErrors = _validator2 !== null && _validator2 !== void 0 ? _validator2 : {};
|
|
18608
18808
|
});
|
|
18809
|
+
}
|
|
18810
|
+
}();
|
|
18811
|
+
return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
|
|
18812
|
+
}
|
|
18813
|
+
const changes = state.changes.rows[cell.row.id];
|
|
18814
|
+
if (!changes) {
|
|
18815
|
+
return Promise.resolve();
|
|
18816
|
+
}
|
|
18817
|
+
let updatesForOtherCells = {};
|
|
18818
|
+
// run the updater handler if there is one, to see if there are any other cells to update
|
|
18819
|
+
const _temp5 = function () {
|
|
18820
|
+
if (typeof handleChange === 'function') {
|
|
18821
|
+
const previousRowValue = {
|
|
18822
|
+
...state.changes.originals[cell.row.id]
|
|
18823
|
+
};
|
|
18824
|
+
const nextRowValue = {
|
|
18825
|
+
...state.changes.originals[cell.row.id],
|
|
18826
|
+
...changes
|
|
18827
|
+
};
|
|
18828
|
+
return Promise.resolve(handleChange(cell.column.id, changes[cell.column.id], nextRowValue, previousRowValue)).then(function (_handleChange) {
|
|
18829
|
+
updatesForOtherCells = _handleChange !== null && _handleChange !== void 0 ? _handleChange : {};
|
|
18609
18830
|
});
|
|
18610
18831
|
}
|
|
18611
18832
|
}();
|
|
18612
|
-
return Promise.resolve(
|
|
18833
|
+
return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
|
|
18613
18834
|
} catch (e) {
|
|
18614
18835
|
return Promise.reject(e);
|
|
18615
18836
|
}
|
|
18616
|
-
};
|
|
18617
|
-
const
|
|
18837
|
+
}; // general
|
|
18838
|
+
const createRow = function (data) {
|
|
18618
18839
|
try {
|
|
18619
|
-
const
|
|
18620
|
-
|
|
18840
|
+
const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${uuid.v4()}`;
|
|
18841
|
+
const value = {
|
|
18842
|
+
...data,
|
|
18843
|
+
[rowIdentityAccessor]: newRowId
|
|
18621
18844
|
};
|
|
18622
|
-
|
|
18623
|
-
|
|
18624
|
-
|
|
18625
|
-
|
|
18845
|
+
dispatch({
|
|
18846
|
+
type: 'createRow',
|
|
18847
|
+
rowId: newRowId,
|
|
18848
|
+
payload: {
|
|
18849
|
+
value
|
|
18850
|
+
}
|
|
18626
18851
|
});
|
|
18627
|
-
|
|
18628
|
-
return Promise.resolve();
|
|
18852
|
+
return Promise.resolve(newRowId);
|
|
18629
18853
|
} catch (e) {
|
|
18630
18854
|
return Promise.reject(e);
|
|
18631
18855
|
}
|
|
18632
|
-
};
|
|
18633
|
-
|
|
18856
|
+
}; // cells
|
|
18857
|
+
// rows
|
|
18858
|
+
const setRowValue = function (rowId, original, value) {
|
|
18634
18859
|
try {
|
|
18635
|
-
|
|
18636
|
-
|
|
18637
|
-
|
|
18638
|
-
|
|
18639
|
-
|
|
18640
|
-
|
|
18641
|
-
|
|
18642
|
-
|
|
18643
|
-
...changes[cell.row.id],
|
|
18644
|
-
[cell.column.id]: cell.getValue(),
|
|
18645
|
-
_meta: {
|
|
18646
|
-
...((_currentChanges$cell$ = currentChanges[cell.row.id]) === null || _currentChanges$cell$ === void 0 ? void 0 : _currentChanges$cell$._meta),
|
|
18647
|
-
original: cell.row.original,
|
|
18648
|
-
moveReason: {
|
|
18649
|
-
...((_currentChanges$cell$2 = currentChanges[cell.row.id]) === null || _currentChanges$cell$2 === void 0 ? void 0 : _currentChanges$cell$2._meta.moveReason)
|
|
18650
|
-
},
|
|
18651
|
-
errors: {
|
|
18652
|
-
...((_currentChanges$cell$3 = currentChanges[cell.row.id]) === null || _currentChanges$cell$3 === void 0 ? void 0 : _currentChanges$cell$3._meta.errors)
|
|
18653
|
-
}
|
|
18654
|
-
}
|
|
18655
|
-
}
|
|
18656
|
-
};
|
|
18657
|
-
} else {
|
|
18658
|
-
return changes;
|
|
18860
|
+
function _temp2() {
|
|
18861
|
+
dispatch({
|
|
18862
|
+
type: 'updateRow',
|
|
18863
|
+
rowId,
|
|
18864
|
+
payload: {
|
|
18865
|
+
cellErrors,
|
|
18866
|
+
original,
|
|
18867
|
+
value
|
|
18659
18868
|
}
|
|
18660
|
-
}
|
|
18661
|
-
}
|
|
18662
|
-
|
|
18869
|
+
});
|
|
18870
|
+
}
|
|
18871
|
+
let cellErrors;
|
|
18872
|
+
const _temp = function () {
|
|
18873
|
+
if (validator) {
|
|
18874
|
+
const row = {
|
|
18875
|
+
...original,
|
|
18876
|
+
...value
|
|
18877
|
+
};
|
|
18878
|
+
return Promise.resolve(validator(row)).then(function (_validator) {
|
|
18879
|
+
cellErrors = _validator !== null && _validator !== void 0 ? _validator : {};
|
|
18880
|
+
});
|
|
18881
|
+
}
|
|
18882
|
+
}();
|
|
18883
|
+
return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
|
|
18663
18884
|
} catch (e) {
|
|
18664
18885
|
return Promise.reject(e);
|
|
18665
18886
|
}
|
|
18666
18887
|
};
|
|
18667
18888
|
const localization = useLocalization();
|
|
18668
|
-
const [
|
|
18669
|
-
|
|
18670
|
-
|
|
18671
|
-
|
|
18672
|
-
|
|
18673
|
-
|
|
18889
|
+
const [state, dispatch] = React__default.useReducer(reducer$2, {
|
|
18890
|
+
changes: {
|
|
18891
|
+
rows: {},
|
|
18892
|
+
errors: {},
|
|
18893
|
+
moveReasons: {},
|
|
18894
|
+
originals: {},
|
|
18895
|
+
status: {}
|
|
18896
|
+
},
|
|
18897
|
+
temporaryRows: []
|
|
18898
|
+
});
|
|
18899
|
+
function getRowValue(rowId) {
|
|
18900
|
+
var _state$changes$rows$r, _state$changes$rows;
|
|
18901
|
+
return (_state$changes$rows$r = (_state$changes$rows = state.changes.rows) === null || _state$changes$rows === void 0 ? void 0 : _state$changes$rows[rowId]) !== null && _state$changes$rows$r !== void 0 ? _state$changes$rows$r : undefined;
|
|
18674
18902
|
}
|
|
18675
|
-
function
|
|
18676
|
-
var
|
|
18677
|
-
return (
|
|
18903
|
+
function getRowMoveReason(rowId) {
|
|
18904
|
+
var _Object$values$, _state$changes$moveRe, _state$changes$moveRe2;
|
|
18905
|
+
return (_Object$values$ = Object.values((_state$changes$moveRe = (_state$changes$moveRe2 = state.changes.moveReasons) === null || _state$changes$moveRe2 === void 0 ? void 0 : _state$changes$moveRe2[rowId]) !== null && _state$changes$moveRe !== void 0 ? _state$changes$moveRe : {})[0]) !== null && _Object$values$ !== void 0 ? _Object$values$ : undefined;
|
|
18678
18906
|
}
|
|
18679
|
-
const pendingChangesUpdater = usePendingChangesUpdater(handleChange, setPendingChanges);
|
|
18680
18907
|
function hasRowErrors(rowId) {
|
|
18681
|
-
var
|
|
18682
|
-
|
|
18683
|
-
return false;
|
|
18684
|
-
}
|
|
18685
|
-
return !!((_pendingChanges$rowId = pendingChanges[rowId]) !== null && _pendingChanges$rowId !== void 0 && (_pendingChanges$rowId2 = _pendingChanges$rowId._meta.errors) !== null && _pendingChanges$rowId2 !== void 0 && _pendingChanges$rowId2.row) || !!Object.keys((_pendingChanges$rowId3 = (_pendingChanges$rowId4 = pendingChanges[rowId]) === null || _pendingChanges$rowId4 === void 0 ? void 0 : (_pendingChanges$rowId5 = _pendingChanges$rowId4._meta.errors) === null || _pendingChanges$rowId5 === void 0 ? void 0 : _pendingChanges$rowId5.cells) !== null && _pendingChanges$rowId3 !== void 0 ? _pendingChanges$rowId3 : {}).length;
|
|
18908
|
+
var _state$changes$errors, _state$changes$errors2, _state$changes$errors3;
|
|
18909
|
+
return !!((_state$changes$errors = state.changes.errors[rowId]) !== null && _state$changes$errors !== void 0 && _state$changes$errors.row) || !!Object.keys((_state$changes$errors2 = (_state$changes$errors3 = state.changes.errors[rowId]) === null || _state$changes$errors3 === void 0 ? void 0 : _state$changes$errors3.cells) !== null && _state$changes$errors2 !== void 0 ? _state$changes$errors2 : {}).length;
|
|
18686
18910
|
}
|
|
18687
|
-
function
|
|
18688
|
-
var
|
|
18689
|
-
|
|
18690
|
-
return false;
|
|
18691
|
-
}
|
|
18692
|
-
return hasRowErrors(rowId) && !!((_pendingChanges$rowId6 = pendingChanges[rowId]._meta.errors) !== null && _pendingChanges$rowId6 !== void 0 && _pendingChanges$rowId6.shouldShowErrorAlert);
|
|
18693
|
-
}
|
|
18694
|
-
function getRowPendingChange(rowId) {
|
|
18695
|
-
const rowPendingChanges = pendingChanges[rowId];
|
|
18696
|
-
if (rowPendingChanges) {
|
|
18697
|
-
const {
|
|
18698
|
-
_meta,
|
|
18699
|
-
...pendingChange
|
|
18700
|
-
} = rowPendingChanges;
|
|
18701
|
-
return pendingChange;
|
|
18702
|
-
}
|
|
18703
|
-
return undefined;
|
|
18911
|
+
function hasRowErrorsShownInAlert(rowId) {
|
|
18912
|
+
var _state$changes$errors4;
|
|
18913
|
+
return hasRowErrors(rowId) && !!((_state$changes$errors4 = state.changes.errors[rowId]) !== null && _state$changes$errors4 !== void 0 && _state$changes$errors4.shouldShowErrorAlert);
|
|
18704
18914
|
}
|
|
18705
|
-
function
|
|
18706
|
-
|
|
18707
|
-
return false;
|
|
18708
|
-
}
|
|
18709
|
-
return saveStates[rowId];
|
|
18915
|
+
function getRowStatus(rowId) {
|
|
18916
|
+
return state.changes.status[rowId];
|
|
18710
18917
|
}
|
|
18711
|
-
function
|
|
18712
|
-
|
|
18713
|
-
|
|
18714
|
-
|
|
18715
|
-
|
|
18716
|
-
|
|
18717
|
-
nextStates[rowId] = status;
|
|
18718
|
-
} else {
|
|
18719
|
-
delete nextStates[rowId];
|
|
18918
|
+
function setRowStatus(rowId, status) {
|
|
18919
|
+
dispatch({
|
|
18920
|
+
type: 'setRowStatus',
|
|
18921
|
+
rowId,
|
|
18922
|
+
payload: {
|
|
18923
|
+
status
|
|
18720
18924
|
}
|
|
18721
|
-
return nextStates;
|
|
18722
18925
|
});
|
|
18723
18926
|
}
|
|
18724
|
-
function
|
|
18725
|
-
|
|
18726
|
-
|
|
18727
|
-
|
|
18728
|
-
|
|
18729
|
-
|
|
18730
|
-
|
|
18927
|
+
function setCellValue(cell, value) {
|
|
18928
|
+
const rowId = cell.row.id;
|
|
18929
|
+
const columnId = cell.column.id;
|
|
18930
|
+
// update if the change is different to the original value
|
|
18931
|
+
if (value !== cell.row.original[columnId]) {
|
|
18932
|
+
dispatch({
|
|
18933
|
+
type: 'setCellValue',
|
|
18934
|
+
rowId,
|
|
18935
|
+
payload: {
|
|
18936
|
+
columnId,
|
|
18937
|
+
row: cell.row.original,
|
|
18938
|
+
value
|
|
18939
|
+
}
|
|
18940
|
+
});
|
|
18731
18941
|
}
|
|
18732
|
-
|
|
18733
|
-
|
|
18734
|
-
|
|
18735
|
-
|
|
18736
|
-
|
|
18942
|
+
// otherwise remove any previous change - no point saving the same value
|
|
18943
|
+
else if (cell.row.id in state.changes.rows) {
|
|
18944
|
+
dispatch({
|
|
18945
|
+
type: 'removeCellValue',
|
|
18946
|
+
rowId,
|
|
18947
|
+
payload: {
|
|
18948
|
+
columnId,
|
|
18949
|
+
rowIdentityAccessor
|
|
18950
|
+
}
|
|
18951
|
+
});
|
|
18737
18952
|
}
|
|
18738
|
-
return !!getAlertErrors().length;
|
|
18739
18953
|
}
|
|
18740
|
-
function
|
|
18741
|
-
|
|
18954
|
+
function getCellValue(cell) {
|
|
18955
|
+
var _state$changes$rows2, _state$changes$rows2$;
|
|
18956
|
+
return (_state$changes$rows2 = state.changes.rows) === null || _state$changes$rows2 === void 0 ? void 0 : (_state$changes$rows2$ = _state$changes$rows2[cell.row.id]) === null || _state$changes$rows2$ === void 0 ? void 0 : _state$changes$rows2$[cell.column.id];
|
|
18957
|
+
}
|
|
18958
|
+
function getCellError(cell) {
|
|
18959
|
+
var _state$changes$errors5, _state$changes$errors6, _state$changes$errors7;
|
|
18960
|
+
return (_state$changes$errors5 = state.changes.errors) === null || _state$changes$errors5 === void 0 ? void 0 : (_state$changes$errors6 = _state$changes$errors5[cell.row.id]) === null || _state$changes$errors6 === void 0 ? void 0 : (_state$changes$errors7 = _state$changes$errors6.cells) === null || _state$changes$errors7 === void 0 ? void 0 : _state$changes$errors7[cell.column.id];
|
|
18961
|
+
}
|
|
18962
|
+
function getErrorsShownInAlert() {
|
|
18963
|
+
const rowsWithErrors = Object.keys(state.changes.errors);
|
|
18964
|
+
if (!rowsWithErrors.length) {
|
|
18965
|
+
return [];
|
|
18966
|
+
}
|
|
18967
|
+
return rowsWithErrors.filter(hasRowErrorsShownInAlert).map(rowId => ({
|
|
18742
18968
|
rowId,
|
|
18743
|
-
|
|
18969
|
+
changes: state.changes.rows[rowId],
|
|
18970
|
+
errors: state.changes.errors[rowId]
|
|
18744
18971
|
}));
|
|
18745
18972
|
}
|
|
18746
|
-
function
|
|
18747
|
-
|
|
18748
|
-
|
|
18749
|
-
|
|
18750
|
-
|
|
18751
|
-
delete nextChanges[rowId];
|
|
18752
|
-
return nextChanges;
|
|
18753
|
-
});
|
|
18973
|
+
function hasSaved() {
|
|
18974
|
+
return !!Object.values(state.changes.status).filter(value => value === 'saved').length;
|
|
18975
|
+
}
|
|
18976
|
+
function hasChanges(rowId) {
|
|
18977
|
+
return rowId ? !!state.changes.rows[rowId] : !!Object.keys(state.changes.rows).length;
|
|
18754
18978
|
}
|
|
18755
|
-
function
|
|
18756
|
-
|
|
18979
|
+
function discardChanges(rowId, table) {
|
|
18980
|
+
// remove any new rows from pinned state before discarding them
|
|
18981
|
+
table.resetRowPinning(true);
|
|
18982
|
+
dispatch({
|
|
18983
|
+
type: 'removeRow',
|
|
18984
|
+
rowId,
|
|
18985
|
+
payload: {
|
|
18986
|
+
rowIdentityAccessor
|
|
18987
|
+
}
|
|
18988
|
+
});
|
|
18757
18989
|
}
|
|
18758
18990
|
return {
|
|
18991
|
+
// row
|
|
18992
|
+
setRowValue,
|
|
18993
|
+
getRowValue,
|
|
18994
|
+
getRowMoveReason,
|
|
18995
|
+
hasRowErrors,
|
|
18996
|
+
hasRowErrorsShownInAlert,
|
|
18997
|
+
getRowStatus,
|
|
18998
|
+
setRowStatus,
|
|
18999
|
+
// cells
|
|
19000
|
+
setCellValue,
|
|
18759
19001
|
getCellValue,
|
|
18760
19002
|
getCellError,
|
|
18761
|
-
|
|
18762
|
-
|
|
18763
|
-
|
|
19003
|
+
onCellChanged,
|
|
19004
|
+
// general
|
|
19005
|
+
getErrorsShownInAlert,
|
|
18764
19006
|
hasChanges,
|
|
18765
|
-
hasAlertErrors,
|
|
18766
|
-
getAlertErrors,
|
|
18767
19007
|
saveChanges,
|
|
18768
|
-
|
|
18769
|
-
|
|
18770
|
-
|
|
18771
|
-
|
|
18772
|
-
|
|
18773
|
-
setRowSaveStatus,
|
|
18774
|
-
getRowMoveReason,
|
|
18775
|
-
getCompletedRowsCount
|
|
19008
|
+
discardChanges,
|
|
19009
|
+
hasSaved,
|
|
19010
|
+
// new rows
|
|
19011
|
+
createRow,
|
|
19012
|
+
temporaryRows: state.temporaryRows
|
|
18776
19013
|
};
|
|
18777
19014
|
}
|
|
18778
|
-
|
|
19015
|
+
|
|
19016
|
+
function useTableEditing(isEnabled = false, handleSave, handleChange, rowIdentityAccessor, validator) {
|
|
19017
|
+
// used to switch the table into editing mode
|
|
19018
|
+
const [isEditing, setEditing] = React__default.useState(false);
|
|
19019
|
+
// used to switch the editing between "detailed" mode
|
|
19020
|
+
const [isDetailedMode, toggleDetailedMode] = React__default.useState(false);
|
|
19021
|
+
// used to contain ref to the create button
|
|
19022
|
+
const createRowButtonRef = React__default.useRef(null);
|
|
18779
19023
|
// store the last focused cell, so that up/down arrow key navigation remains in the same column
|
|
18780
|
-
const
|
|
18781
|
-
const
|
|
18782
|
-
|
|
18783
|
-
|
|
18784
|
-
|
|
18785
|
-
|
|
18786
|
-
|
|
18787
|
-
|
|
18788
|
-
|
|
18789
|
-
|
|
18790
|
-
try {
|
|
18791
|
-
const _temp4 = function () {
|
|
18792
|
-
if (typeof handleChange === 'function') {
|
|
18793
|
-
const previousValues = {
|
|
18794
|
-
...cell.row.original,
|
|
18795
|
-
...getChangesetFromChanges(updatersRef.current[cell.row.id])
|
|
18796
|
-
};
|
|
18797
|
-
const nextValues = {
|
|
18798
|
-
...previousValues,
|
|
18799
|
-
...changes
|
|
18800
|
-
};
|
|
18801
|
-
return Promise.resolve(handleChange(cell.column.id, changes[cell.column.id], nextValues, previousValues)).then(function (updates) {
|
|
18802
|
-
if (updates && Object.keys(updates).length) {
|
|
18803
|
-
setPendingChanges(currentChanges => createPendingChangesSetter(currentChanges, cell.row, rowIndex, updates, localization));
|
|
18804
|
-
}
|
|
18805
|
-
});
|
|
18806
|
-
}
|
|
18807
|
-
}();
|
|
18808
|
-
return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(function () {}) : void 0);
|
|
18809
|
-
} catch (e) {
|
|
18810
|
-
return Promise.reject(e);
|
|
19024
|
+
const [lastFocusedCellIndex, setLastFocusedCellIndex] = React__default.useState(undefined);
|
|
19025
|
+
const pendingChangesFns = usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, validator);
|
|
19026
|
+
function toggleEditing(enabled, table) {
|
|
19027
|
+
if (!enabled) {
|
|
19028
|
+
// save
|
|
19029
|
+
pendingChangesFns.saveChanges(table);
|
|
19030
|
+
// reset detailed mode
|
|
19031
|
+
toggleDetailedMode(false);
|
|
19032
|
+
// reset the last index back to the first focusable element, when editing gets turned off
|
|
19033
|
+
setLastFocusedCellIndex(undefined);
|
|
18811
19034
|
}
|
|
18812
|
-
|
|
18813
|
-
function syncCellChanges(changes) {
|
|
18814
|
-
updatersRef.current = changes;
|
|
19035
|
+
setEditing(enabled);
|
|
18815
19036
|
}
|
|
18816
19037
|
return {
|
|
18817
|
-
|
|
18818
|
-
|
|
18819
|
-
|
|
18820
|
-
|
|
18821
|
-
|
|
18822
|
-
|
|
18823
|
-
|
|
18824
|
-
|
|
18825
|
-
...
|
|
18826
|
-
};
|
|
18827
|
-
const rowChanges = {
|
|
18828
|
-
...currentChanges[row.id],
|
|
18829
|
-
_meta: {
|
|
18830
|
-
...((_currentChanges$row$i = currentChanges[row.id]) === null || _currentChanges$row$i === void 0 ? void 0 : _currentChanges$row$i._meta),
|
|
18831
|
-
original: row.original,
|
|
18832
|
-
moveReason: {
|
|
18833
|
-
...((_currentChanges$row$i2 = currentChanges[row.id]) === null || _currentChanges$row$i2 === void 0 ? void 0 : _currentChanges$row$i2._meta.moveReason)
|
|
18834
|
-
},
|
|
18835
|
-
errors: {
|
|
18836
|
-
...((_currentChanges$row$i3 = currentChanges[row.id]) === null || _currentChanges$row$i3 === void 0 ? void 0 : _currentChanges$row$i3._meta.errors)
|
|
18837
|
-
}
|
|
18838
|
-
}
|
|
18839
|
-
};
|
|
18840
|
-
// run changes
|
|
18841
|
-
const cells = row._getAllCellsByColumnId();
|
|
18842
|
-
for (const [accessor, change] of Object.entries(changes)) {
|
|
18843
|
-
// update if the change is different to the original (saved) value,
|
|
18844
|
-
// otherwise remove any change - no point saving the same value
|
|
18845
|
-
if (change !== row.original[accessor]) {
|
|
18846
|
-
rowChanges[accessor] = change;
|
|
18847
|
-
// consumers sometimes include properties in onEditingChange that aren't rendered as columns, we need to guard against that.
|
|
18848
|
-
// eslint-disable-next-line no-prototype-builtins
|
|
18849
|
-
if (cells.hasOwnProperty(accessor)) {
|
|
18850
|
-
// determine if the row will move position based on this change, and save why it will move
|
|
18851
|
-
const reason = willRowMove(cells[accessor], change, rowIndex, localization);
|
|
18852
|
-
if (reason) {
|
|
18853
|
-
rowChanges._meta.moveReason[accessor] = reason;
|
|
18854
|
-
} else {
|
|
18855
|
-
delete rowChanges._meta.moveReason[accessor];
|
|
18856
|
-
}
|
|
18857
|
-
}
|
|
18858
|
-
} else {
|
|
18859
|
-
delete rowChanges[accessor];
|
|
18860
|
-
delete rowChanges._meta.moveReason[accessor];
|
|
18861
|
-
}
|
|
18862
|
-
}
|
|
18863
|
-
// set changes
|
|
18864
|
-
// or delete if there are no changes left, so that we don't store changes with unchanged data
|
|
18865
|
-
if (Object.keys(rowChanges).filter(k => k !== '_meta').length) {
|
|
18866
|
-
nextChanges[row.id] = rowChanges;
|
|
18867
|
-
} else {
|
|
18868
|
-
delete nextChanges[row.id];
|
|
18869
|
-
}
|
|
18870
|
-
return nextChanges;
|
|
18871
|
-
}
|
|
18872
|
-
function getChangesetFromChanges(changes) {
|
|
18873
|
-
// extract the original data from the row changes
|
|
18874
|
-
const {
|
|
18875
|
-
_meta,
|
|
18876
|
-
...changeset
|
|
18877
|
-
} = changes !== null && changes !== void 0 ? changes : {};
|
|
18878
|
-
// and mix them in with the changes, ready to send to the server
|
|
18879
|
-
return {
|
|
18880
|
-
...(_meta === null || _meta === void 0 ? void 0 : _meta.original),
|
|
18881
|
-
...changeset
|
|
19038
|
+
isEnabled,
|
|
19039
|
+
isEditing,
|
|
19040
|
+
isDetailedMode,
|
|
19041
|
+
toggleDetailedMode: isEnabled ? toggleDetailedMode : () => undefined,
|
|
19042
|
+
toggleEditing: isEnabled ? toggleEditing : () => undefined,
|
|
19043
|
+
lastFocusedCellIndex,
|
|
19044
|
+
setLastFocusedCellIndex,
|
|
19045
|
+
createRowButtonRef,
|
|
19046
|
+
...pendingChangesFns
|
|
18882
19047
|
};
|
|
18883
19048
|
}
|
|
18884
19049
|
|
|
@@ -19120,13 +19285,28 @@ function EditingControlCell(props) {
|
|
|
19120
19285
|
const {
|
|
19121
19286
|
rowIndex
|
|
19122
19287
|
} = React__default.useContext(RowContext);
|
|
19123
|
-
const
|
|
19288
|
+
const {
|
|
19289
|
+
table
|
|
19290
|
+
} = cell.getContext();
|
|
19291
|
+
const tableMeta = table.options.meta;
|
|
19124
19292
|
const columnMeta = cell.column.columnDef.meta;
|
|
19125
19293
|
const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;
|
|
19294
|
+
const type = (_columnMeta$control = columnMeta.control) !== null && _columnMeta$control !== void 0 ? _columnMeta$control : 'input';
|
|
19126
19295
|
const handleFocus = useEditingCellAutofocus(props);
|
|
19296
|
+
// some controls, like select2, should trigger cell changed (validation, updates) as the value changes
|
|
19297
|
+
const hasNonTextControl = React__default.useMemo(() => {
|
|
19298
|
+
var _cellRef$current;
|
|
19299
|
+
return typeof type === 'function' && !!((_cellRef$current = cellRef.current) !== null && _cellRef$current !== void 0 && _cellRef$current.querySelector('[data-taco="Select2"],[data-taco="switch"],[data-taco="checkbox"]'));
|
|
19300
|
+
}, [cellRef.current]);
|
|
19301
|
+
const handleChange = value => {
|
|
19302
|
+
tableMeta.editing.setCellValue(cell, value);
|
|
19303
|
+
if (hasNonTextControl) {
|
|
19304
|
+
tableMeta.editing.onCellChanged(cell, rowIndex);
|
|
19305
|
+
}
|
|
19306
|
+
};
|
|
19127
19307
|
const handleBlur = () => {
|
|
19128
19308
|
tableMeta.editing.toggleDetailedMode(false);
|
|
19129
|
-
tableMeta.editing.
|
|
19309
|
+
tableMeta.editing.onCellChanged(cell, rowIndex);
|
|
19130
19310
|
};
|
|
19131
19311
|
// ensure that blur runs when the cell gets unmounted (when vertically arrow key navigating)
|
|
19132
19312
|
React__default.useEffect(() => {
|
|
@@ -19146,13 +19326,12 @@ function EditingControlCell(props) {
|
|
|
19146
19326
|
isDetailedMode: tableMeta.editing.isDetailedMode,
|
|
19147
19327
|
isTruncated: !!columnMeta.enableTruncate,
|
|
19148
19328
|
onBlur: handleBlur,
|
|
19149
|
-
onChange:
|
|
19329
|
+
onChange: handleChange,
|
|
19150
19330
|
row: cell.row.original,
|
|
19151
|
-
rowPendingChanges: tableMeta.editing.
|
|
19331
|
+
rowPendingChanges: tableMeta.editing.getRowValue(cell.row.id),
|
|
19152
19332
|
tabIndex: isActiveRow ? 0 : -1,
|
|
19153
|
-
toggleEditing: tableMeta.editing.toggleEditing,
|
|
19154
19333
|
toggleDetailedMode: tableMeta.editing.toggleDetailedMode,
|
|
19155
|
-
type
|
|
19334
|
+
type,
|
|
19156
19335
|
value: cell.getValue()
|
|
19157
19336
|
};
|
|
19158
19337
|
const cellAttributes = {
|
|
@@ -19185,7 +19364,6 @@ const MemoedEditingCell = /*#__PURE__*/React__default.memo(function MemoedEditin
|
|
|
19185
19364
|
row,
|
|
19186
19365
|
rowPendingChanges,
|
|
19187
19366
|
tabIndex = -1,
|
|
19188
|
-
toggleEditing,
|
|
19189
19367
|
toggleDetailedMode,
|
|
19190
19368
|
type = 'input',
|
|
19191
19369
|
value
|
|
@@ -19244,8 +19422,8 @@ const MemoedEditingCell = /*#__PURE__*/React__default.memo(function MemoedEditin
|
|
|
19244
19422
|
}
|
|
19245
19423
|
// reset the value, or exit edit mode when pressing escape
|
|
19246
19424
|
if (event.key === 'Escape') {
|
|
19247
|
-
event.preventDefault();
|
|
19248
19425
|
if (isDetailedMode) {
|
|
19426
|
+
event.preventDefault();
|
|
19249
19427
|
toggleDetailedMode(false);
|
|
19250
19428
|
if (value !== currentValue) {
|
|
19251
19429
|
props.onChange(currentValue);
|
|
@@ -19255,8 +19433,6 @@ const MemoedEditingCell = /*#__PURE__*/React__default.memo(function MemoedEditin
|
|
|
19255
19433
|
var _target$select2;
|
|
19256
19434
|
return (_target$select2 = target.select) === null || _target$select2 === void 0 ? void 0 : _target$select2.call(target);
|
|
19257
19435
|
});
|
|
19258
|
-
} else {
|
|
19259
|
-
toggleEditing(false);
|
|
19260
19436
|
}
|
|
19261
19437
|
return;
|
|
19262
19438
|
}
|
|
@@ -19355,12 +19531,37 @@ function Cell$5(props) {
|
|
|
19355
19531
|
return /*#__PURE__*/React__default.createElement(DisplayCell, Object.assign({}, props));
|
|
19356
19532
|
}
|
|
19357
19533
|
|
|
19534
|
+
function DiscardChangesConfirmationDialog(props) {
|
|
19535
|
+
const {
|
|
19536
|
+
onDiscard: handleDiscard,
|
|
19537
|
+
...dialogProps
|
|
19538
|
+
} = props;
|
|
19539
|
+
const {
|
|
19540
|
+
texts
|
|
19541
|
+
} = useLocalization();
|
|
19542
|
+
const handleClickInsideDialogContent = event => {
|
|
19543
|
+
// Prevents the click event from propagating to the table, ensuring the row isn't saved when a click occurs
|
|
19544
|
+
// inside the dialog
|
|
19545
|
+
event.stopPropagation();
|
|
19546
|
+
};
|
|
19547
|
+
return /*#__PURE__*/React__default.createElement(Dialog, Object.assign({}, dialogProps), /*#__PURE__*/React__default.createElement(Dialog.Content, {
|
|
19548
|
+
"aria-label": texts.table3.editing.clearChangesConfirmationDialog.title,
|
|
19549
|
+
onClick: handleClickInsideDialogContent
|
|
19550
|
+
}, /*#__PURE__*/React__default.createElement(Dialog.Title, null, texts.table3.editing.clearChangesConfirmationDialog.title), /*#__PURE__*/React__default.createElement("p", null, texts.table3.editing.clearChangesConfirmationDialog.description), /*#__PURE__*/React__default.createElement(Dialog.Footer, null, /*#__PURE__*/React__default.createElement(Group, null, /*#__PURE__*/React__default.createElement(Dialog.Close, null, /*#__PURE__*/React__default.createElement(Button$1, {
|
|
19551
|
+
tabIndex: 0
|
|
19552
|
+
}, texts.table3.editing.clearChangesConfirmationDialog.cancel)), /*#__PURE__*/React__default.createElement(Dialog.Close, null, /*#__PURE__*/React__default.createElement(Button$1, {
|
|
19553
|
+
autoFocus: true,
|
|
19554
|
+
tabIndex: 0,
|
|
19555
|
+
appearance: "primary",
|
|
19556
|
+
onClick: handleDiscard
|
|
19557
|
+
}, texts.table3.editing.clearChangesConfirmationDialog.confirm))))));
|
|
19558
|
+
}
|
|
19559
|
+
|
|
19358
19560
|
function EditingActionMenu(props) {
|
|
19359
19561
|
const {
|
|
19360
19562
|
hasChanges,
|
|
19361
19563
|
hasErrors,
|
|
19362
|
-
|
|
19363
|
-
onExit: handleExit,
|
|
19564
|
+
onDiscard: handleDiscard,
|
|
19364
19565
|
onEditingSave: handleSave,
|
|
19365
19566
|
isLastRow
|
|
19366
19567
|
} = props;
|
|
@@ -19382,7 +19583,6 @@ function EditingActionMenu(props) {
|
|
|
19382
19583
|
return /*#__PURE__*/React__default.createElement(IconButton, {
|
|
19383
19584
|
appearance: "transparent",
|
|
19384
19585
|
"aria-label": texts.table3.editing.actions.tooltip,
|
|
19385
|
-
className: "group-[[data-row-editing-status]]/row:hidden",
|
|
19386
19586
|
icon: "more",
|
|
19387
19587
|
onKeyDown: handleKeyDown,
|
|
19388
19588
|
menu: menuProps => (/*#__PURE__*/React__default.createElement(Menu$1, Object.assign({}, menuProps), /*#__PURE__*/React__default.createElement(Menu$1.Content, {
|
|
@@ -19394,42 +19594,13 @@ function EditingActionMenu(props) {
|
|
|
19394
19594
|
}, texts.table3.editing.actions.save), /*#__PURE__*/React__default.createElement(Menu$1.Item, {
|
|
19395
19595
|
icon: "close",
|
|
19396
19596
|
disabled: !hasChanges,
|
|
19397
|
-
dialog: props => /*#__PURE__*/React__default.createElement(
|
|
19398
|
-
|
|
19597
|
+
dialog: props => /*#__PURE__*/React__default.createElement(DiscardChangesConfirmationDialog, Object.assign({}, props, {
|
|
19598
|
+
onDiscard: handleDiscard
|
|
19399
19599
|
}))
|
|
19400
|
-
}, texts.table3.editing.actions.clear)
|
|
19401
|
-
icon: "undo",
|
|
19402
|
-
onClick: handleExit
|
|
19403
|
-
}, texts.table3.editing.actions.exit))))
|
|
19600
|
+
}, texts.table3.editing.actions.clear))))
|
|
19404
19601
|
});
|
|
19405
19602
|
}
|
|
19406
|
-
function ConfirmClearChangesDialog(props) {
|
|
19407
|
-
const {
|
|
19408
|
-
onClear: handleClear,
|
|
19409
|
-
...dialogProps
|
|
19410
|
-
} = props;
|
|
19411
|
-
const {
|
|
19412
|
-
texts
|
|
19413
|
-
} = useLocalization();
|
|
19414
|
-
const handleClickInsideDialogContent = event => {
|
|
19415
|
-
// Prevents the click event from propagating to the table, ensuring the row isn't saved when a click occurs
|
|
19416
|
-
// inside the dialog
|
|
19417
|
-
event.stopPropagation();
|
|
19418
|
-
};
|
|
19419
|
-
return /*#__PURE__*/React__default.createElement(Dialog, Object.assign({}, dialogProps), /*#__PURE__*/React__default.createElement(Dialog.Content, {
|
|
19420
|
-
"aria-label": texts.table3.editing.clearChangesConfirmationDialog.title,
|
|
19421
|
-
onClick: handleClickInsideDialogContent
|
|
19422
|
-
}, /*#__PURE__*/React__default.createElement(Dialog.Title, null, texts.table3.editing.clearChangesConfirmationDialog.title), /*#__PURE__*/React__default.createElement("p", null, texts.table3.editing.clearChangesConfirmationDialog.description), /*#__PURE__*/React__default.createElement(Dialog.Footer, null, /*#__PURE__*/React__default.createElement(Group, null, /*#__PURE__*/React__default.createElement(Dialog.Close, null, /*#__PURE__*/React__default.createElement(Button$1, {
|
|
19423
|
-
tabIndex: 0
|
|
19424
|
-
}, texts.table3.editing.clearChangesConfirmationDialog.cancel)), /*#__PURE__*/React__default.createElement(Dialog.Close, null, /*#__PURE__*/React__default.createElement(Button$1, {
|
|
19425
|
-
autoFocus: true,
|
|
19426
|
-
tabIndex: 0,
|
|
19427
|
-
appearance: "primary",
|
|
19428
|
-
onClick: handleClear
|
|
19429
|
-
}, texts.table3.editing.clearChangesConfirmationDialog.confirm))))));
|
|
19430
|
-
}
|
|
19431
19603
|
|
|
19432
|
-
const COMPLETE_INDICATOR_DELAY = 3000;
|
|
19433
19604
|
function SaveStatus(props) {
|
|
19434
19605
|
const {
|
|
19435
19606
|
rowId,
|
|
@@ -19439,18 +19610,7 @@ function SaveStatus(props) {
|
|
|
19439
19610
|
texts
|
|
19440
19611
|
} = useLocalization();
|
|
19441
19612
|
const tableMeta = table.options.meta;
|
|
19442
|
-
const status = tableMeta.editing.
|
|
19443
|
-
React__default.useEffect(() => {
|
|
19444
|
-
let timeout;
|
|
19445
|
-
if (status === 'complete') {
|
|
19446
|
-
timeout = setTimeout(() => {
|
|
19447
|
-
tableMeta.editing.setRowSaveStatus(rowId, undefined);
|
|
19448
|
-
}, COMPLETE_INDICATOR_DELAY);
|
|
19449
|
-
}
|
|
19450
|
-
return () => {
|
|
19451
|
-
clearTimeout(timeout);
|
|
19452
|
-
};
|
|
19453
|
-
}, [status]);
|
|
19613
|
+
const status = tableMeta.editing.getRowStatus(rowId);
|
|
19454
19614
|
const className = cn('col-span-full sticky ml-auto right-0 top-0 -mb-[100%] z-10 h-8 bg-[inherit] flex items-center px-1.5 shadow-[-6px_0px_6px_var(--table-row-actions-shadow)]', {
|
|
19455
19615
|
'mt-0.5': tableMeta.rowHeight.height === 'short',
|
|
19456
19616
|
'mt-1': tableMeta.rowHeight.height === 'medium',
|
|
@@ -19461,7 +19621,7 @@ function SaveStatus(props) {
|
|
|
19461
19621
|
className: "!contents"
|
|
19462
19622
|
}, /*#__PURE__*/React__default.createElement("span", {
|
|
19463
19623
|
className: className
|
|
19464
|
-
}, status === '
|
|
19624
|
+
}, status === 'saving' ? (/*#__PURE__*/React__default.createElement(Tooltip, {
|
|
19465
19625
|
title: texts.table3.editing.saving.progress
|
|
19466
19626
|
}, /*#__PURE__*/React__default.createElement(Spinner, {
|
|
19467
19627
|
delay: 0,
|
|
@@ -19499,15 +19659,46 @@ function Row$2(props) {
|
|
|
19499
19659
|
}
|
|
19500
19660
|
}
|
|
19501
19661
|
}, [tableMeta.editing.isEditing, isActiveRow]);
|
|
19662
|
+
const rowStatus = tableMeta.editing.getRowStatus(row.id);
|
|
19663
|
+
// discard new row
|
|
19664
|
+
const [showDiscardDialog, setShowDiscardDialog] = React__default.useState(false);
|
|
19665
|
+
function handleDiscard() {
|
|
19666
|
+
tableMeta.editing.discardChanges(row.id, table);
|
|
19667
|
+
requestAnimationFrame(() => {
|
|
19668
|
+
if (isTemporaryRow(row.id)) {
|
|
19669
|
+
var _tableMeta$editing$cr;
|
|
19670
|
+
(_tableMeta$editing$cr = tableMeta.editing.createRowButtonRef.current) === null || _tableMeta$editing$cr === void 0 ? void 0 : _tableMeta$editing$cr.focus();
|
|
19671
|
+
} else {
|
|
19672
|
+
focusManager.focusFirst();
|
|
19673
|
+
}
|
|
19674
|
+
});
|
|
19675
|
+
}
|
|
19676
|
+
function handleKeyDown(event) {
|
|
19677
|
+
if (props.onKeyDown) {
|
|
19678
|
+
props.onKeyDown(event);
|
|
19679
|
+
}
|
|
19680
|
+
if (event.isDefaultPrevented() || event.isPropagationStopped()) {
|
|
19681
|
+
return;
|
|
19682
|
+
}
|
|
19683
|
+
if (event.key === 'Escape' && tableMeta.editing.hasChanges(row.id) && !isElementTriggeredFromContainer(event.target, event.currentTarget)) {
|
|
19684
|
+
event.preventDefault();
|
|
19685
|
+
setShowDiscardDialog(true);
|
|
19686
|
+
}
|
|
19687
|
+
}
|
|
19502
19688
|
const attributes = {
|
|
19503
|
-
'data-row-editing-invalid': tableMeta.editing.
|
|
19504
|
-
'data-row-editing-status':
|
|
19505
|
-
onFocus: handleFocus
|
|
19689
|
+
'data-row-editing-invalid': tableMeta.editing.hasRowErrors(row.id) ? !tableMeta.editing.hasRowErrorsShownInAlert(row.id) ? 'unseen' : true : undefined,
|
|
19690
|
+
'data-row-editing-status': rowStatus,
|
|
19691
|
+
onFocus: handleFocus,
|
|
19692
|
+
onKeyDown: handleKeyDown
|
|
19506
19693
|
};
|
|
19507
|
-
return /*#__PURE__*/React__default.createElement(DisplayRow, Object.assign({}, props, attributes),
|
|
19694
|
+
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(DisplayRow, Object.assign({}, props, attributes), rowStatus === 'saving' || rowStatus === 'saved' ? /*#__PURE__*/React__default.createElement(SaveStatus, {
|
|
19508
19695
|
rowId: row.id,
|
|
19509
19696
|
table: table
|
|
19510
|
-
}) : null)
|
|
19697
|
+
}) : null), /*#__PURE__*/React__default.createElement(DiscardChangesConfirmationDialog, {
|
|
19698
|
+
open: showDiscardDialog,
|
|
19699
|
+
onChange: setShowDiscardDialog,
|
|
19700
|
+
onDiscard: handleDiscard
|
|
19701
|
+
}));
|
|
19511
19702
|
}
|
|
19512
19703
|
|
|
19513
19704
|
const RENDERERS$1 = {
|
|
@@ -19515,29 +19706,46 @@ const RENDERERS$1 = {
|
|
|
19515
19706
|
cell: Cell$5
|
|
19516
19707
|
};
|
|
19517
19708
|
function useTable3(props, ref) {
|
|
19518
|
-
const editing = useTableEditing(props.enableEditing, props.onEditingSave, props.onEditingChange, props.validator);
|
|
19709
|
+
const editing = useTableEditing(props.enableEditing, props.onEditingSave, props.onEditingChange, props.rowIdentityAccessor, props.validator);
|
|
19519
19710
|
const creationEnabled = editing.isEnabled && !!props.onEditingCreate;
|
|
19711
|
+
// this gives me the performance heeby jeebies, but can't think of a better way to internalise the state
|
|
19712
|
+
const data = React__default.useMemo(() => {
|
|
19713
|
+
if (editing.isEditing && editing.temporaryRows.length) {
|
|
19714
|
+
var _props$data;
|
|
19715
|
+
return editing.temporaryRows.concat((_props$data = props.data) !== null && _props$data !== void 0 ? _props$data : []);
|
|
19716
|
+
}
|
|
19717
|
+
return props.data;
|
|
19718
|
+
}, [JSON.stringify(props.data), editing.temporaryRows.length]);
|
|
19520
19719
|
const extendedProps = {
|
|
19521
19720
|
...props,
|
|
19721
|
+
data,
|
|
19522
19722
|
enableRowActions: editing.isEditing ? true : props.enableRowActions,
|
|
19523
|
-
rowActions: editing.isEditing ? [(_, rowId) => (/*#__PURE__*/React__default.createElement(EditingActionMenu, {
|
|
19723
|
+
rowActions: editing.isEditing ? [(_, rowId, table) => (/*#__PURE__*/React__default.createElement(EditingActionMenu, {
|
|
19524
19724
|
hasChanges: editing.hasChanges(rowId),
|
|
19525
19725
|
hasErrors: editing.hasRowErrors(rowId),
|
|
19526
|
-
|
|
19527
|
-
onEditingSave: ()
|
|
19528
|
-
|
|
19726
|
+
onDiscard: () => editing.discardChanges(rowId, table),
|
|
19727
|
+
onEditingSave: function () {
|
|
19728
|
+
try {
|
|
19729
|
+
return Promise.resolve(editing.saveChanges(table, rowId)).then(function () {});
|
|
19730
|
+
} catch (e) {
|
|
19731
|
+
return Promise.reject(e);
|
|
19732
|
+
}
|
|
19733
|
+
},
|
|
19529
19734
|
isLastRow: !creationEnabled && table.meta.rowActive.rowActiveIndex === table.meta.length - 1
|
|
19530
19735
|
}))] : props.rowActions
|
|
19531
19736
|
};
|
|
19532
19737
|
const meta = {
|
|
19533
19738
|
editing
|
|
19534
19739
|
};
|
|
19535
|
-
const
|
|
19740
|
+
const options = {
|
|
19741
|
+
virtualiserPaddingEndOffset: props.enableEditing && props.onEditingCreate ? 1 : 0
|
|
19742
|
+
};
|
|
19743
|
+
const table = useTable(extendedProps, ref, RENDERERS$1, meta, options);
|
|
19536
19744
|
// listeners
|
|
19537
19745
|
useTableEditingListener(table.instance, table.ref);
|
|
19538
19746
|
React__default.useEffect(() => {
|
|
19539
19747
|
if (table.ref.current) {
|
|
19540
|
-
table.ref.current.instance.toggleEditing = enabled => table.meta.editing.toggleEditing(enabled !== null && enabled !== void 0 ? enabled : editing => !editing);
|
|
19748
|
+
table.ref.current.instance.toggleEditing = enabled => table.meta.editing.toggleEditing(enabled !== null && enabled !== void 0 ? enabled : editing => !editing, table.instance);
|
|
19541
19749
|
}
|
|
19542
19750
|
}, [table.ref.current]);
|
|
19543
19751
|
return table;
|
|
@@ -19556,7 +19764,7 @@ function Alert$1(props) {
|
|
|
19556
19764
|
const validationTexts = texts.table3.editing.validation;
|
|
19557
19765
|
const tableMeta = table.options.meta;
|
|
19558
19766
|
const [showFilterResetDialog, setShowFilterResetDialog] = React__default.useState(false);
|
|
19559
|
-
const pendingChangesWithErrors = tableMeta.editing.
|
|
19767
|
+
const pendingChangesWithErrors = tableMeta.editing.getErrorsShownInAlert();
|
|
19560
19768
|
function scrollToRow(rowIndex) {
|
|
19561
19769
|
tableMeta.rowActive.setRowActiveIndex(rowIndex);
|
|
19562
19770
|
scrollToIndex(rowIndex, {
|
|
@@ -19575,38 +19783,43 @@ function Alert$1(props) {
|
|
|
19575
19783
|
const title = (pendingChangesWithErrors.length === 1 ? validationTexts.alert.titleOne : validationTexts.alert.titlePlural).replace('[COUNT]', String(pendingChangesWithErrors.length));
|
|
19576
19784
|
// generate links to each invalid row, to go into the error message
|
|
19577
19785
|
const links = [];
|
|
19578
|
-
const
|
|
19579
|
-
|
|
19786
|
+
const visibleColumns = table.getVisibleFlatColumns().map(c => c.id);
|
|
19787
|
+
const rowIdentityColumn = tableMeta.rowIdentityAccessor && visibleColumns.includes(String(tableMeta.rowIdentityAccessor)) ? table.getColumn(String(tableMeta.rowIdentityAccessor)) : undefined;
|
|
19788
|
+
pendingChangesWithErrors.forEach((pendingChangeWithError, index) => {
|
|
19580
19789
|
// if appropriate, concatenate the item with the text "and"
|
|
19581
19790
|
if (pendingChangesWithErrors.length > 1 && index === pendingChangesWithErrors.length - 1) {
|
|
19582
19791
|
// Add space before and after `messageAnd` text
|
|
19583
19792
|
links.push(` ${validationTexts.alert.messageAnd} `);
|
|
19584
19793
|
}
|
|
19585
|
-
const rowIndex = table.getRowModel().rows.findIndex(row => row.id ===
|
|
19794
|
+
const rowIndex = table.getRowModel().rows.findIndex(row => row.id === pendingChangeWithError.rowId);
|
|
19586
19795
|
const handleClick = () => {
|
|
19796
|
+
// if row is visible
|
|
19587
19797
|
if (rowIndex > -1) {
|
|
19588
19798
|
scrollToRow(rowIndex);
|
|
19589
|
-
}
|
|
19590
|
-
|
|
19799
|
+
}
|
|
19800
|
+
// if row is filtered out
|
|
19801
|
+
else {
|
|
19802
|
+
setShowFilterResetDialog(pendingChangeWithError.rowId);
|
|
19591
19803
|
}
|
|
19592
19804
|
};
|
|
19593
19805
|
let tooltip;
|
|
19594
|
-
if (
|
|
19595
|
-
tooltip =
|
|
19806
|
+
if (pendingChangeWithError.errors.row) {
|
|
19807
|
+
tooltip = pendingChangeWithError.errors.row;
|
|
19596
19808
|
} else {
|
|
19597
19809
|
var _table$getAllColumns$, _table$getAllColumns$2;
|
|
19598
|
-
const firstCellErrorColumnId = Object.keys(
|
|
19810
|
+
const firstCellErrorColumnId = Object.keys(pendingChangeWithError.errors.cells)[0];
|
|
19599
19811
|
const columnName = (_table$getAllColumns$ = table.getAllColumns().find(column => column.id === firstCellErrorColumnId)) === null || _table$getAllColumns$ === void 0 ? void 0 : (_table$getAllColumns$2 = _table$getAllColumns$.columnDef.meta) === null || _table$getAllColumns$2 === void 0 ? void 0 : _table$getAllColumns$2.header;
|
|
19600
|
-
tooltip = `${columnName}: ${
|
|
19812
|
+
tooltip = `${columnName}: ${pendingChangeWithError.errors.cells[firstCellErrorColumnId]}`;
|
|
19601
19813
|
}
|
|
19814
|
+
const row = table.getRow(pendingChangeWithError.rowId).original;
|
|
19602
19815
|
links.push(/*#__PURE__*/React__default.createElement(Tooltip, {
|
|
19603
|
-
key:
|
|
19816
|
+
key: pendingChangeWithError.rowId,
|
|
19604
19817
|
title: tooltip
|
|
19605
19818
|
}, /*#__PURE__*/React__default.createElement("span", {
|
|
19606
19819
|
className: "text-blue",
|
|
19607
19820
|
onClick: handleClick,
|
|
19608
19821
|
role: "button"
|
|
19609
|
-
}, rowIdentityColumn ?
|
|
19822
|
+
}, rowIdentityColumn ? row[rowIdentityColumn.id] : rowIndex + 1)));
|
|
19610
19823
|
// if appropriate, concatenate the item with the text ","
|
|
19611
19824
|
if (pendingChangesWithErrors.length > 2 && index < pendingChangesWithErrors.length - 2) {
|
|
19612
19825
|
links.push(', ');
|
|
@@ -19662,89 +19875,6 @@ function FilterResetDialog(props) {
|
|
|
19662
19875
|
}, texts.table3.editing.validation.resetFiltersDialog.confirm)))));
|
|
19663
19876
|
}
|
|
19664
19877
|
|
|
19665
|
-
function CreateNewRowButton(props) {
|
|
19666
|
-
const {
|
|
19667
|
-
onEditingCreate,
|
|
19668
|
-
scrollToIndex,
|
|
19669
|
-
table,
|
|
19670
|
-
tableMeta
|
|
19671
|
-
} = props;
|
|
19672
|
-
const {
|
|
19673
|
-
texts
|
|
19674
|
-
} = useLocalization();
|
|
19675
|
-
const rows = table.getCoreRowModel().rows.filter(row => row.original !== undefined);
|
|
19676
|
-
const [rowCreated, setRowCreated] = React__default.useState({
|
|
19677
|
-
rowFinder: undefined
|
|
19678
|
-
});
|
|
19679
|
-
const handleKeyDown = event => {
|
|
19680
|
-
if (!tableMeta.editing.hasChanges() && event.key === 'Tab') {
|
|
19681
|
-
tableMeta.editing.saveChanges();
|
|
19682
|
-
}
|
|
19683
|
-
};
|
|
19684
|
-
const handleCreate = function () {
|
|
19685
|
-
try {
|
|
19686
|
-
if (!onEditingCreate) {
|
|
19687
|
-
return Promise.resolve();
|
|
19688
|
-
}
|
|
19689
|
-
const createdRow = rows.find(row => {
|
|
19690
|
-
var _rowCreated$rowFinder;
|
|
19691
|
-
return rowCreated === null || rowCreated === void 0 ? void 0 : (_rowCreated$rowFinder = rowCreated.rowFinder) === null || _rowCreated$rowFinder === void 0 ? void 0 : _rowCreated$rowFinder.call(rowCreated, row.original);
|
|
19692
|
-
});
|
|
19693
|
-
const _temp = function () {
|
|
19694
|
-
if (createdRow) {
|
|
19695
|
-
return Promise.resolve(tableMeta.editing.saveChanges()).then(function () {
|
|
19696
|
-
if (!tableMeta.editing.hasRowErrors(createdRow.id)) {
|
|
19697
|
-
const rowFinder = onEditingCreate();
|
|
19698
|
-
setRowCreated({
|
|
19699
|
-
rowFinder
|
|
19700
|
-
});
|
|
19701
|
-
}
|
|
19702
|
-
});
|
|
19703
|
-
} else {
|
|
19704
|
-
const rowFinder = onEditingCreate();
|
|
19705
|
-
setRowCreated({
|
|
19706
|
-
rowFinder
|
|
19707
|
-
});
|
|
19708
|
-
}
|
|
19709
|
-
}();
|
|
19710
|
-
return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
|
|
19711
|
-
} catch (e) {
|
|
19712
|
-
return Promise.reject(e);
|
|
19713
|
-
}
|
|
19714
|
-
};
|
|
19715
|
-
React__default.useEffect(() => {
|
|
19716
|
-
if (typeof (rowCreated === null || rowCreated === void 0 ? void 0 : rowCreated.rowFinder) === 'function') {
|
|
19717
|
-
const createdRow = rows.find(row => {
|
|
19718
|
-
var _rowCreated$rowFinder2;
|
|
19719
|
-
return rowCreated === null || rowCreated === void 0 ? void 0 : (_rowCreated$rowFinder2 = rowCreated.rowFinder) === null || _rowCreated$rowFinder2 === void 0 ? void 0 : _rowCreated$rowFinder2.call(rowCreated, row.original);
|
|
19720
|
-
});
|
|
19721
|
-
if (createdRow) {
|
|
19722
|
-
const rowInTable = table.getRowModel().rows.filter(row => row.original !== undefined).find(row => {
|
|
19723
|
-
var _rowCreated$rowFinder3;
|
|
19724
|
-
return rowCreated === null || rowCreated === void 0 ? void 0 : (_rowCreated$rowFinder3 = rowCreated.rowFinder) === null || _rowCreated$rowFinder3 === void 0 ? void 0 : _rowCreated$rowFinder3.call(rowCreated, row.original);
|
|
19725
|
-
});
|
|
19726
|
-
if (rowInTable) {
|
|
19727
|
-
tableMeta.editing.toggleEditing(true);
|
|
19728
|
-
tableMeta.rowActive.setRowActiveIndex(createdRow.index);
|
|
19729
|
-
scrollToIndex(createdRow.index);
|
|
19730
|
-
requestAnimationFrame(() => animateCreateRow(createdRow.id));
|
|
19731
|
-
}
|
|
19732
|
-
requestAnimationFrame(() => tableMeta.editing.addCreatedRowChangeset(createdRow));
|
|
19733
|
-
}
|
|
19734
|
-
}
|
|
19735
|
-
}, [rowCreated]);
|
|
19736
|
-
return /*#__PURE__*/React__default.createElement("tr", {
|
|
19737
|
-
onClick: handleCreate,
|
|
19738
|
-
className: "border-grey-300 hover:bg-grey-100 group !sticky bottom-10 left-0 z-[21] !block cursor-pointer border-t"
|
|
19739
|
-
}, /*#__PURE__*/React__default.createElement("td", {
|
|
19740
|
-
className: "!border-t-0 !bg-transparent"
|
|
19741
|
-
}, /*#__PURE__*/React__default.createElement(Button$1, {
|
|
19742
|
-
onKeyDown: handleKeyDown,
|
|
19743
|
-
className: "group-hover:bg-grey-200 sticky left-0",
|
|
19744
|
-
appearance: "transparent"
|
|
19745
|
-
}, "+ ", texts.table3.editing.buttons.create.label)));
|
|
19746
|
-
}
|
|
19747
|
-
|
|
19748
19878
|
function Editing(props) {
|
|
19749
19879
|
const {
|
|
19750
19880
|
scrollToIndex,
|
|
@@ -19770,21 +19900,193 @@ function Editing(props) {
|
|
|
19770
19900
|
(_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.click();
|
|
19771
19901
|
});
|
|
19772
19902
|
const handleChange = enabled => {
|
|
19773
|
-
tableMeta.
|
|
19903
|
+
if (enabled && tableMeta.rowActive.rowActiveIndex === undefined) {
|
|
19904
|
+
tableMeta.rowActive.setRowActiveIndex(0);
|
|
19905
|
+
}
|
|
19774
19906
|
requestAnimationFrame(() => {
|
|
19775
19907
|
var _tableMeta$rowActive$;
|
|
19776
|
-
|
|
19908
|
+
// wait for an active row to be set so that we don't trigger save
|
|
19909
|
+
tableMeta.editing.toggleEditing(enabled, table);
|
|
19910
|
+
scrollToIndex((_tableMeta$rowActive$ = tableMeta.rowActive.rowActiveIndex) !== null && _tableMeta$rowActive$ !== void 0 ? _tableMeta$rowActive$ : 0);
|
|
19777
19911
|
});
|
|
19778
19912
|
};
|
|
19779
19913
|
return /*#__PURE__*/React__default.createElement(Tooltip, {
|
|
19780
19914
|
title: tooltip
|
|
19781
19915
|
}, /*#__PURE__*/React__default.createElement(ModeSwitch, {
|
|
19916
|
+
"data-table": "editing-toggle",
|
|
19782
19917
|
checked: tableMeta.editing.isEditing,
|
|
19783
19918
|
onChange: handleChange,
|
|
19784
19919
|
ref: ref
|
|
19785
19920
|
}));
|
|
19786
19921
|
}
|
|
19787
19922
|
|
|
19923
|
+
function CreateNewRow(props) {
|
|
19924
|
+
var _temporaryRows$0$tabl, _temporaryRows$, _table$getState$colum;
|
|
19925
|
+
const {
|
|
19926
|
+
buttonRef,
|
|
19927
|
+
onEditingCreate: handleEditingCreate,
|
|
19928
|
+
table,
|
|
19929
|
+
tableMeta
|
|
19930
|
+
} = props;
|
|
19931
|
+
const {
|
|
19932
|
+
texts
|
|
19933
|
+
} = useLocalization();
|
|
19934
|
+
const temporaryRows = tableMeta.editing.temporaryRows;
|
|
19935
|
+
const temporaryRowId = (_temporaryRows$0$tabl = (_temporaryRows$ = temporaryRows[0]) === null || _temporaryRows$ === void 0 ? void 0 : _temporaryRows$[tableMeta.rowIdentityAccessor]) !== null && _temporaryRows$0$tabl !== void 0 ? _temporaryRows$0$tabl : '';
|
|
19936
|
+
const isDisabled = !!table.getState().globalFilter || !!((_table$getState$colum = table.getState().columnFilters) !== null && _table$getState$colum !== void 0 && _table$getState$colum.length) || !!temporaryRowId && !!tableMeta.editing.hasRowErrors(temporaryRowId);
|
|
19937
|
+
const isSaving = !!temporaryRowId && tableMeta.editing.getRowStatus(temporaryRowId) === 'saving';
|
|
19938
|
+
const handleCreate = function (event) {
|
|
19939
|
+
try {
|
|
19940
|
+
// prevent save being triggered by click outside - TODO: investigate why the button triggers clickoutside
|
|
19941
|
+
event === null || event === void 0 ? void 0 : event.stopPropagation();
|
|
19942
|
+
if (!handleEditingCreate || isDisabled) {
|
|
19943
|
+
return Promise.resolve();
|
|
19944
|
+
}
|
|
19945
|
+
return Promise.resolve(tableMeta.editing.saveChanges(table)).then(function (saved) {
|
|
19946
|
+
if (!saved) {
|
|
19947
|
+
return;
|
|
19948
|
+
}
|
|
19949
|
+
try {
|
|
19950
|
+
const changeset = handleEditingCreate();
|
|
19951
|
+
if (changeset) {
|
|
19952
|
+
// change the row before reating because it triggers a save
|
|
19953
|
+
// saving would trigger the validation flow and immediately make the row red
|
|
19954
|
+
tableMeta.rowActive.setRowActiveIndex(tableMeta.length);
|
|
19955
|
+
requestAnimationFrame(function () {
|
|
19956
|
+
try {
|
|
19957
|
+
tableMeta.editing.toggleEditing(true, table);
|
|
19958
|
+
return Promise.resolve(tableMeta.editing.createRow(changeset)).then(function (rowId) {
|
|
19959
|
+
tableMeta.editing.setLastFocusedCellIndex(0);
|
|
19960
|
+
try {
|
|
19961
|
+
const row = table.getRow(rowId);
|
|
19962
|
+
row.pin('bottom');
|
|
19963
|
+
} catch {
|
|
19964
|
+
//
|
|
19965
|
+
}
|
|
19966
|
+
});
|
|
19967
|
+
} catch (e) {
|
|
19968
|
+
return Promise.reject(e);
|
|
19969
|
+
}
|
|
19970
|
+
});
|
|
19971
|
+
}
|
|
19972
|
+
} catch (error) {
|
|
19973
|
+
console.error(error);
|
|
19974
|
+
}
|
|
19975
|
+
});
|
|
19976
|
+
} catch (e) {
|
|
19977
|
+
return Promise.reject(e);
|
|
19978
|
+
}
|
|
19979
|
+
};
|
|
19980
|
+
let tooltip;
|
|
19981
|
+
if (isSaving) {
|
|
19982
|
+
tooltip = texts.table3.editing.buttons.create.saving;
|
|
19983
|
+
} else if (isDisabled) {
|
|
19984
|
+
tooltip = texts.table3.editing.buttons.create.disabled;
|
|
19985
|
+
}
|
|
19986
|
+
return /*#__PURE__*/React__default.createElement("tr", {
|
|
19987
|
+
"data-row-create": true,
|
|
19988
|
+
className: "border-grey-300 group/row",
|
|
19989
|
+
tabIndex: -1
|
|
19990
|
+
}, /*#__PURE__*/React__default.createElement("td", {
|
|
19991
|
+
className: "!bg-grey-50 col-span-full !border-b-0 !px-1"
|
|
19992
|
+
}, /*#__PURE__*/React__default.createElement(Button$1, {
|
|
19993
|
+
appearance: "transparent",
|
|
19994
|
+
className: "group-hover:bg-grey-200 sticky left-[4px]",
|
|
19995
|
+
disabled: isDisabled,
|
|
19996
|
+
onClick: handleCreate,
|
|
19997
|
+
ref: buttonRef,
|
|
19998
|
+
tooltip: tooltip
|
|
19999
|
+
}, /*#__PURE__*/React__default.createElement(Icon, {
|
|
20000
|
+
name: "circle-plus"
|
|
20001
|
+
}), texts.table3.editing.buttons.create.label)));
|
|
20002
|
+
}
|
|
20003
|
+
|
|
20004
|
+
function TemporaryRow(props) {
|
|
20005
|
+
var _tableRef$current, _tableRef$current2;
|
|
20006
|
+
const {
|
|
20007
|
+
createRowButtonRef,
|
|
20008
|
+
table,
|
|
20009
|
+
tableMeta,
|
|
20010
|
+
tableRef
|
|
20011
|
+
} = props;
|
|
20012
|
+
const isScrolled = tableRef.current ? ((_tableRef$current = tableRef.current) === null || _tableRef$current === void 0 ? void 0 : _tableRef$current.scrollHeight) > ((_tableRef$current2 = tableRef.current) === null || _tableRef$current2 === void 0 ? void 0 : _tableRef$current2.clientHeight) : false;
|
|
20013
|
+
const handleKeyDown = function (event) {
|
|
20014
|
+
try {
|
|
20015
|
+
const _temp2 = function () {
|
|
20016
|
+
if (event.key === 'ArrowDown') {
|
|
20017
|
+
event.preventDefault();
|
|
20018
|
+
const _temp = function () {
|
|
20019
|
+
if (!isElementTriggeredFromContainer(event.target, event.currentTarget)) {
|
|
20020
|
+
return Promise.resolve(tableMeta.editing.saveChanges(table)).then(function (saved) {
|
|
20021
|
+
if (saved) {
|
|
20022
|
+
var _createRowButtonRef$c;
|
|
20023
|
+
(_createRowButtonRef$c = createRowButtonRef.current) === null || _createRowButtonRef$c === void 0 ? void 0 : _createRowButtonRef$c.focus();
|
|
20024
|
+
}
|
|
20025
|
+
});
|
|
20026
|
+
}
|
|
20027
|
+
}();
|
|
20028
|
+
if (_temp && _temp.then) return _temp.then(function () {});
|
|
20029
|
+
} else if (event.key === 'ArrowUp') {
|
|
20030
|
+
event.preventDefault();
|
|
20031
|
+
event.stopPropagation();
|
|
20032
|
+
if (tableRef.current) {
|
|
20033
|
+
var _tableRef$current$que, _tableRef$current$que2, _tableRef$current$que3;
|
|
20034
|
+
const availableRows = Array.from((_tableRef$current$que = tableRef.current.querySelectorAll(`tbody tr:not([data-row-id^='${TEMPORARY_ROW_ID_PREFIX}'])`)) !== null && _tableRef$current$que !== void 0 ? _tableRef$current$que : []);
|
|
20035
|
+
const footerHeight = (_tableRef$current$que2 = (_tableRef$current$que3 = tableRef.current.querySelector('tfoot')) === null || _tableRef$current$que3 === void 0 ? void 0 : _tableRef$current$que3.getBoundingClientRect().height) !== null && _tableRef$current$que2 !== void 0 ? _tableRef$current$que2 : 0;
|
|
20036
|
+
const newRowHeight = event.currentTarget.getBoundingClientRect().height;
|
|
20037
|
+
const visibleHeight = tableRef.current.clientHeight - footerHeight - newRowHeight;
|
|
20038
|
+
const tableTopOffset = tableRef.current.getBoundingClientRect().top;
|
|
20039
|
+
let nextRowIndex;
|
|
20040
|
+
// iterate available rows in reverse order, since we're working at the bottom
|
|
20041
|
+
for (let index = availableRows.length - 1; index >= 0; index--) {
|
|
20042
|
+
const rowRect = availableRows[index].getBoundingClientRect();
|
|
20043
|
+
const topPlusHalfRow = rowRect.top + rowRect.height / 2;
|
|
20044
|
+
if (topPlusHalfRow - tableTopOffset <= visibleHeight) {
|
|
20045
|
+
nextRowIndex = index;
|
|
20046
|
+
break;
|
|
20047
|
+
}
|
|
20048
|
+
}
|
|
20049
|
+
if (nextRowIndex) {
|
|
20050
|
+
tableMeta.rowActive.setRowActiveIndex(Number(availableRows[nextRowIndex < 0 ? 0 : nextRowIndex].getAttribute('data-row-index')));
|
|
20051
|
+
}
|
|
20052
|
+
}
|
|
20053
|
+
}
|
|
20054
|
+
}();
|
|
20055
|
+
return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
|
|
20056
|
+
} catch (e) {
|
|
20057
|
+
return Promise.reject(e);
|
|
20058
|
+
}
|
|
20059
|
+
};
|
|
20060
|
+
const handleKeyDownCapture = event => {
|
|
20061
|
+
if (event.key === 'ArrowLeft' && tableMeta.editing.lastFocusedCellIndex === 0) {
|
|
20062
|
+
event.preventDefault();
|
|
20063
|
+
event.stopPropagation();
|
|
20064
|
+
} else if (event.key === 'ArrowRight' && tableMeta.editing.lastFocusedCellIndex) {
|
|
20065
|
+
if (tableMeta.editing.lastFocusedCellIndex === table.getVisibleFlatColumns().length - 1) {
|
|
20066
|
+
event.preventDefault();
|
|
20067
|
+
event.stopPropagation();
|
|
20068
|
+
}
|
|
20069
|
+
}
|
|
20070
|
+
};
|
|
20071
|
+
const className = cn('group/row border-grey-300 !sticky z-[21]', {
|
|
20072
|
+
'bottom-20': tableMeta.footer.isEnabled,
|
|
20073
|
+
'bottom-10': !tableMeta.footer.isEnabled,
|
|
20074
|
+
'border-b border-t shadow-[0px_-5px_20px_0px_rgba(0,0,0,0.1)] border-t-grey-500/[0.75]': isScrolled
|
|
20075
|
+
});
|
|
20076
|
+
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, table.getBottomRows().map(row => (/*#__PURE__*/React__default.createElement(Row, {
|
|
20077
|
+
key: row.id,
|
|
20078
|
+
cellRenderer: RENDERERS$1.cell,
|
|
20079
|
+
index: tableMeta.length,
|
|
20080
|
+
measureRow: () => null,
|
|
20081
|
+
renderer: RENDERERS$1.row,
|
|
20082
|
+
row: row,
|
|
20083
|
+
table: table,
|
|
20084
|
+
className: className,
|
|
20085
|
+
onKeyDown: handleKeyDown,
|
|
20086
|
+
onKeyDownCapture: handleKeyDownCapture
|
|
20087
|
+
}))));
|
|
20088
|
+
}
|
|
20089
|
+
|
|
19788
20090
|
function Column$3(_) {
|
|
19789
20091
|
return null;
|
|
19790
20092
|
}
|
|
@@ -19800,8 +20102,18 @@ const BaseTable3 = /*#__PURE__*/fixedForwardRef(function BaseTable3(props, ref)
|
|
|
19800
20102
|
'data-table-editing-mode': (_table3$meta$editing = table3.meta.editing) !== null && _table3$meta$editing !== void 0 && _table3$meta$editing.isEditing ? (_table3$meta$editing2 = table3.meta.editing) !== null && _table3$meta$editing2 !== void 0 && _table3$meta$editing2.isDetailedMode ? 'detailed' : 'normal' : undefined,
|
|
19801
20103
|
enableHorizontalArrowKeyNavigation: table3.meta.editing.isEditing
|
|
19802
20104
|
};
|
|
19803
|
-
const hasAlertErrors = table3.meta.editing.
|
|
19804
|
-
const
|
|
20105
|
+
const hasAlertErrors = table3.meta.editing.isEditing && table3.meta.editing.getErrorsShownInAlert().length;
|
|
20106
|
+
const hasCreateWorkflow = table3.meta.editing.isEnabled && props.onEditingCreate;
|
|
20107
|
+
let footerRows;
|
|
20108
|
+
if (hasCreateWorkflow) {
|
|
20109
|
+
footerRows = /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(CreateNewRow, {
|
|
20110
|
+
buttonRef: table3.meta.editing.createRowButtonRef,
|
|
20111
|
+
onEditingCreate: props.onEditingCreate,
|
|
20112
|
+
table: table3.instance,
|
|
20113
|
+
tableMeta: table3.meta,
|
|
20114
|
+
tableRef: table3.ref
|
|
20115
|
+
}));
|
|
20116
|
+
}
|
|
19805
20117
|
return /*#__PURE__*/React__default.createElement(Table, null, /*#__PURE__*/React__default.createElement(Table.Toolbar, {
|
|
19806
20118
|
table: table3
|
|
19807
20119
|
}, table3.meta.editing.isEnabled ? (/*#__PURE__*/React__default.createElement(Editing, {
|
|
@@ -19814,13 +20126,14 @@ const BaseTable3 = /*#__PURE__*/fixedForwardRef(function BaseTable3(props, ref)
|
|
|
19814
20126
|
tableRef: table3.ref
|
|
19815
20127
|
})) : null, /*#__PURE__*/React__default.createElement(Table.Grid, Object.assign({}, gridAttributes, {
|
|
19816
20128
|
"data-taco": "table3",
|
|
20129
|
+
rowsForFooter: footerRows,
|
|
19817
20130
|
table: table3
|
|
19818
|
-
}),
|
|
20131
|
+
}), hasCreateWorkflow ? (/*#__PURE__*/React__default.createElement(TemporaryRow, {
|
|
20132
|
+
createRowButtonRef: table3.meta.editing.createRowButtonRef,
|
|
19819
20133
|
table: table3.instance,
|
|
19820
20134
|
tableMeta: table3.meta,
|
|
19821
|
-
|
|
19822
|
-
|
|
19823
|
-
}))));
|
|
20135
|
+
tableRef: table3.ref
|
|
20136
|
+
})) : null));
|
|
19824
20137
|
});
|
|
19825
20138
|
const Table3 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
|
|
19826
20139
|
const stringifiedChildren = String(props.children);
|