@economic/taco 2.44.5-create.5 → 2.44.5-create.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. package/dist/components/Provider/Localization.d.ts +0 -2
  2. package/dist/components/Report/Report.d.ts +1 -1
  3. package/dist/components/Table3/Table3.d.ts +14 -2
  4. package/dist/components/Table3/components/Columns/Internal/EditingActionsMenu.d.ts +2 -1
  5. package/dist/components/Table3/components/Row/Editing/CreateRowButton.d.ts +11 -0
  6. package/dist/components/Table3/features/useTableEditing.d.ts +36 -25
  7. package/dist/components/Table3/types.d.ts +8 -23
  8. package/dist/components/Table3/useTable3.d.ts +0 -6
  9. package/dist/components/Table3/util/editing.d.ts +1 -2
  10. package/dist/esm/index.css +2 -6
  11. package/dist/esm/packages/taco/src/components/ModeSwitch/ModeSwitch.js +2 -2
  12. package/dist/esm/packages/taco/src/components/ModeSwitch/ModeSwitch.js.map +1 -1
  13. package/dist/esm/packages/taco/src/components/Provider/Localization.js +3 -5
  14. package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
  15. package/dist/esm/packages/taco/src/components/Switch/Switch.js +1 -1
  16. package/dist/esm/packages/taco/src/components/Switch/Switch.js.map +1 -1
  17. package/dist/esm/packages/taco/src/components/Table3/Table3.js +7 -19
  18. package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
  19. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +22 -21
  20. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
  21. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Internal/EditingActionsMenu.js +37 -5
  22. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Internal/EditingActionsMenu.js.map +1 -1
  23. package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js +12 -17
  24. package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js.map +1 -1
  25. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateRowButton.js +90 -0
  26. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateRowButton.js.map +1 -0
  27. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/SaveStatus.js +14 -2
  28. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/SaveStatus.js.map +1 -1
  29. package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js +6 -39
  30. package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js.map +1 -1
  31. package/dist/esm/packages/taco/src/components/Table3/components/Toolbar/Editing/Editing.js +2 -7
  32. package/dist/esm/packages/taco/src/components/Table3/components/Toolbar/Editing/Editing.js.map +1 -1
  33. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +406 -19
  34. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
  35. package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js +32 -37
  36. package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js.map +1 -1
  37. package/dist/esm/packages/taco/src/components/Table3/useTable3.js +8 -25
  38. package/dist/esm/packages/taco/src/components/Table3/useTable3.js.map +1 -1
  39. package/dist/esm/packages/taco/src/components/Table3/util/editing.js +24 -4
  40. package/dist/esm/packages/taco/src/components/Table3/util/editing.js.map +1 -1
  41. package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js +4 -3
  42. package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js.map +1 -1
  43. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.js +3 -9
  44. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.js.map +1 -1
  45. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Actions.js +3 -6
  46. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Actions.js.map +1 -1
  47. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Footer.js +1 -1
  48. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Footer.js.map +1 -1
  49. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.js +1 -1
  50. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.js.map +1 -1
  51. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/components/FilterValue.js +8 -1
  52. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/components/FilterValue.js.map +1 -1
  53. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +6 -23
  54. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
  55. package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js +2 -2
  56. package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js.map +1 -1
  57. package/dist/esm/packages/taco/src/primitives/Table/types.js.map +1 -1
  58. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js +1 -1
  59. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js.map +1 -1
  60. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +0 -11
  61. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
  62. package/dist/esm/packages/taco/src/utils/dom.js +4 -7
  63. package/dist/esm/packages/taco/src/utils/dom.js.map +1 -1
  64. package/dist/index.css +2 -6
  65. package/dist/primitives/Table/Core/Table.d.ts +0 -1
  66. package/dist/primitives/Table/Core/components/Columns/Internal/Actions.d.ts +1 -3
  67. package/dist/primitives/Table/Core/components/Footer/Footer.d.ts +2 -2
  68. package/dist/primitives/Table/Core/features/useTableRenderer.d.ts +2 -2
  69. package/dist/primitives/Table/Core/features/useTableStyle.d.ts +1 -1
  70. package/dist/primitives/Table/Core/types.d.ts +0 -3
  71. package/dist/primitives/Table/Core/useTable.d.ts +2 -2
  72. package/dist/primitives/Table/types.d.ts +2 -2
  73. package/dist/primitives/Table/useTableManager/useTableManager.d.ts +1 -1
  74. package/dist/taco.cjs.development.js +627 -904
  75. package/dist/taco.cjs.development.js.map +1 -1
  76. package/dist/taco.cjs.production.min.js +1 -1
  77. package/dist/taco.cjs.production.min.js.map +1 -1
  78. package/dist/utils/dom.d.ts +0 -1
  79. package/package.json +1 -1
  80. package/dist/components/Table3/components/Editing/DiscardChangesConfirmationDialog.d.ts +0 -7
  81. package/dist/components/Table3/components/Row/Editing/CreateNewRow.d.ts +0 -13
  82. package/dist/components/Table3/components/Row/Editing/TemporaryRow.d.ts +0 -11
  83. package/dist/components/Table3/features/useEditingState.d.ts +0 -28
  84. package/dist/esm/packages/taco/src/components/Table3/components/Editing/DiscardChangesConfirmationDialog.js +0 -34
  85. package/dist/esm/packages/taco/src/components/Table3/components/Editing/DiscardChangesConfirmationDialog.js.map +0 -1
  86. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js +0 -88
  87. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js.map +0 -1
  88. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js +0 -95
  89. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js.map +0 -1
  90. package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js +0 -512
  91. package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js.map +0 -1
@@ -1,512 +0,0 @@
1
- import React__default from 'react';
2
- import { useLocalization } from '../../Provider/Localization.js';
3
- import { v4 } from 'uuid';
4
- import { _forOf, _catch } from '../../../../../../node_modules/babel-plugin-transform-async-to-promises/helpers.mjs.js';
5
- import omit from 'lodash-es/omit';
6
- import setWith from 'lodash-es/setWith';
7
- import { isTemporaryRow, willRowMove, TEMPORARY_ROW_ID_PREFIX } from '../util/editing.js';
8
-
9
- const DELAY_BEFORE_REMOVING_SAVE_STATUS = 3000;
10
- function reducer(state, action) {
11
- const {
12
- type,
13
- rowId,
14
- payload
15
- } = action;
16
- switch (type) {
17
- case 'setCellValue':
18
- {
19
- const {
20
- columnId,
21
- row,
22
- value
23
- } = payload;
24
- return {
25
- ...state,
26
- changes: {
27
- ...state.changes,
28
- rows: setWith(state.changes.rows, `${rowId}.${columnId}`, value, Object),
29
- originals: setWith(state.changes.originals, rowId, row, Object)
30
- }
31
- };
32
- }
33
- case 'removeCellValue':
34
- {
35
- const {
36
- columnId,
37
- rowIdentityAccessor
38
- } = payload;
39
- const changes = omit(state.changes.rows, `${rowId}.${columnId}`);
40
- // if there are no changes left, remove the row
41
- if (!Object.keys(changes[rowId]).length) {
42
- return reducer(state, {
43
- type: 'removeRow',
44
- rowId,
45
- payload: {
46
- rowIdentityAccessor
47
- }
48
- });
49
- }
50
- return {
51
- ...state,
52
- changes: {
53
- ...state.changes,
54
- rows: omit(state.changes.rows, `${rowId}.${columnId}`),
55
- errors: omit(state.changes.errors, `${rowId}.cells.${columnId}`),
56
- moveReasons: omit(state.changes.moveReasons, `${rowId}.${columnId}`)
57
- }
58
- };
59
- }
60
- case 'updateRow':
61
- {
62
- const {
63
- cellErrors,
64
- moveReasons,
65
- original,
66
- value
67
- } = payload;
68
- return {
69
- ...state,
70
- changes: {
71
- ...state.changes,
72
- rows: setWith(state.changes.rows, rowId, value, Object),
73
- errors: setWith(state.changes.errors, `${rowId}.cells`, cellErrors !== null && cellErrors !== void 0 ? cellErrors : state.changes.errors.cells[rowId], Object),
74
- originals: setWith(state.changes.originals, rowId, original !== null && original !== void 0 ? original : state.changes.originals[rowId], Object),
75
- moveReasons: setWith(state.changes.moveReasons, rowId, moveReasons !== null && moveReasons !== void 0 ? moveReasons : state.changes.moveReasons[rowId], Object),
76
- // status can be undefined, so don't use ??
77
- status: setWith(state.changes.status, rowId, undefined, Object)
78
- }
79
- };
80
- }
81
- case 'removeRow':
82
- {
83
- const {
84
- rowIdentityAccessor
85
- } = payload;
86
- return {
87
- ...state,
88
- changes: {
89
- ...state.changes,
90
- rows: omit(state.changes.rows, rowId),
91
- errors: omit(state.changes.errors, rowId),
92
- moveReasons: omit(state.changes.moveReasons, rowId),
93
- originals: omit(state.changes.originals, rowId),
94
- status: omit(state.changes.status, rowId)
95
- },
96
- temporaryRows: state.temporaryRows.filter(row => row[rowIdentityAccessor] !== rowId)
97
- };
98
- }
99
- case 'setRowStatus':
100
- {
101
- const {
102
- status
103
- } = payload;
104
- return {
105
- ...state,
106
- changes: {
107
- ...state.changes,
108
- status: status ? setWith(state.changes.status, rowId, status, Object) : omit(state.changes.status, rowId)
109
- }
110
- };
111
- }
112
- case 'setRowErrors':
113
- {
114
- const {
115
- ...errors
116
- } = payload;
117
- return {
118
- ...state,
119
- changes: {
120
- ...state.changes,
121
- errors: setWith(state.changes.errors, rowId, errors, Object)
122
- }
123
- };
124
- }
125
- case 'createRow':
126
- {
127
- const {
128
- value
129
- } = payload;
130
- return {
131
- ...state,
132
- temporaryRows: state.temporaryRows.concat(value),
133
- changes: {
134
- ...state.changes,
135
- rows: setWith(state.changes.rows, rowId, value, Object),
136
- originals: setWith(state.changes.originals, rowId, value, Object)
137
- }
138
- };
139
- }
140
- default:
141
- return state;
142
- }
143
- }
144
- function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, validator) {
145
- const saveChanges = function (table, rowId = undefined) {
146
- try {
147
- let _exit = false;
148
- if (!handleSave) {
149
- console.warn('Tried to save, but Table has no onEditingSave handler');
150
- return Promise.resolve(false);
151
- }
152
- // sometimes we only want to save one row
153
- const changes = rowId ? {
154
- [rowId]: state.changes.rows[rowId]
155
- } : state.changes.rows;
156
- let completed = true;
157
- const _temp9 = _forOf(Object.keys(changes), function (rowId) {
158
- const status = getRowStatus(rowId);
159
- return _catch(function () {
160
- function _temp8(_result) {
161
- return _exit ? _result : Promise.resolve(handleSave(changeSet)).then(function () {
162
- // cleanup changes, we don't need them after saving
163
- discardChanges(rowId, table);
164
- // show the saved status, then remove it after a delay
165
- setRowStatus(rowId, 'saved');
166
- setTimeout(() => {
167
- setRowStatus(rowId, undefined);
168
- }, DELAY_BEFORE_REMOVING_SAVE_STATUS);
169
- });
170
- }
171
- // don't try to save if - already saving, or there are known errors
172
- if (status === 'saving' || status === 'errored') {
173
- return;
174
- }
175
- setRowStatus(rowId, 'saving');
176
- const changeSet = {
177
- ...state.changes.originals[rowId],
178
- ...changes[rowId]
179
- };
180
- // if we had to create a temporary id, delete it first - it's our data, not theirs
181
- if (isTemporaryRow(changeSet[rowIdentityAccessor])) {
182
- delete changeSet[rowIdentityAccessor];
183
- }
184
- // re-run validation, maybe a cell is already invalid but has never been blurred
185
- const _temp7 = function () {
186
- if (validator) {
187
- return Promise.resolve(validator(changeSet)).then(function (errors) {
188
- if (errors && Object.keys(errors).length) {
189
- throw errors;
190
- }
191
- });
192
- }
193
- }();
194
- return _temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7); // send new data to the server
195
- }, function (error) {
196
- var _error$response;
197
- 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) {
198
- console.error(error);
199
- }
200
- // the onEditingSave handler should throw errors when something fails, e.g. validation, network errors etc
201
- // this code handles those errors and maps them either to row errors or cell specific errors
202
- let rowError;
203
- let cellErrors;
204
- if (typeof error === 'string') {
205
- rowError = error;
206
- } else if (error instanceof Error) {
207
- var _error$response2;
208
- rowError = error.message;
209
- // most of our apis return error objects within this shape
210
- if (typeof ((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data) === 'object') {
211
- var _error$response3;
212
- cellErrors = (_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data;
213
- }
214
- } else if (typeof error === 'object') {
215
- cellErrors = error;
216
- }
217
- if (rowError || cellErrors) {
218
- dispatch({
219
- type: 'setRowErrors',
220
- rowId,
221
- payload: {
222
- row: rowError,
223
- cells: cellErrors,
224
- shouldShowErrorAlert: true
225
- }
226
- });
227
- }
228
- setRowStatus(rowId, 'errored');
229
- completed = false;
230
- });
231
- }, function () {
232
- return _exit;
233
- });
234
- return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(function (_result3) {
235
- return _exit ? _result3 : completed;
236
- }) : _exit ? _temp9 : completed);
237
- } catch (e) {
238
- return Promise.reject(e);
239
- }
240
- };
241
- const onCellChanged = function (cell, rowIndex) {
242
- try {
243
- function _temp6() {
244
- var _state$changes$errors8;
245
- function _temp4() {
246
- // only set errors and move reasons for the cells we're currently acting on
247
- // why? because the UX is not good if we set them for cells the user hasn't touched yet
248
- const cellsToActOn = [cell.column.id, ...Object.keys(updatesForOtherCells)];
249
- const allCells = cell.row._getAllCellsByColumnId();
250
- cellsToActOn.forEach(accessor => {
251
- if (validationErrors[accessor]) {
252
- nextCellErrors[accessor] = validationErrors[accessor];
253
- // don't show move indicator for cells with errors, they aren't valid and can't be saved
254
- delete nextMoveReasons[accessor];
255
- } else {
256
- var _allCells$accessor;
257
- // there isn't any error in this run, remove any error set in state
258
- delete nextCellErrors[accessor];
259
- if ((_allCells$accessor = allCells[accessor]) !== null && _allCells$accessor !== void 0 && _allCells$accessor.column.getIsSorted()) {
260
- // run row move determination
261
- const reason = willRowMove(cell, nextChanges[accessor], rowIndex, localization);
262
- // if the row will move based on this change save why, otherwise delete any existing state
263
- if (reason) {
264
- nextMoveReasons[accessor] = reason;
265
- } else {
266
- delete nextMoveReasons[accessor];
267
- }
268
- }
269
- }
270
- });
271
- dispatch({
272
- type: 'updateRow',
273
- rowId: cell.row.id,
274
- payload: {
275
- cellErrors: nextCellErrors,
276
- moveReasons: nextMoveReasons,
277
- value: nextChanges
278
- }
279
- });
280
- }
281
- // create a projection of the next state, so we can act against it
282
- const nextChanges = {
283
- ...state.changes.rows[cell.row.id],
284
- ...updatesForOtherCells
285
- };
286
- const nextMoveReasons = {
287
- ...state.changes.moveReasons[cell.row.id]
288
- };
289
- const nextCellErrors = {
290
- ...((_state$changes$errors8 = state.changes.errors[cell.row.id]) === null || _state$changes$errors8 === void 0 ? void 0 : _state$changes$errors8.cells)
291
- };
292
- // run validation
293
- let validationErrors = {};
294
- const _temp3 = function () {
295
- if (validator) {
296
- const nextRowValue = {
297
- ...state.changes.originals[cell.row.id],
298
- ...changes,
299
- ...updatesForOtherCells
300
- };
301
- return Promise.resolve(validator(nextRowValue)).then(function (_validator2) {
302
- validationErrors = _validator2 !== null && _validator2 !== void 0 ? _validator2 : {};
303
- });
304
- }
305
- }();
306
- return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
307
- }
308
- const changes = state.changes.rows[cell.row.id];
309
- if (!changes) {
310
- return Promise.resolve();
311
- }
312
- let updatesForOtherCells = {};
313
- // run the updater handler if there is one, to see if there are any other cells to update
314
- const _temp5 = function () {
315
- if (typeof handleChange === 'function') {
316
- const previousRowValue = {
317
- ...state.changes.originals[cell.row.id]
318
- };
319
- const nextRowValue = {
320
- ...state.changes.originals[cell.row.id],
321
- ...changes
322
- };
323
- return Promise.resolve(handleChange(cell.column.id, changes[cell.column.id], nextRowValue, previousRowValue)).then(function (_handleChange) {
324
- updatesForOtherCells = _handleChange !== null && _handleChange !== void 0 ? _handleChange : {};
325
- });
326
- }
327
- }();
328
- return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
329
- } catch (e) {
330
- return Promise.reject(e);
331
- }
332
- }; // general
333
- const createRow = function (data) {
334
- try {
335
- const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${v4()}`;
336
- const value = {
337
- ...data,
338
- [rowIdentityAccessor]: newRowId
339
- };
340
- dispatch({
341
- type: 'createRow',
342
- rowId: newRowId,
343
- payload: {
344
- value
345
- }
346
- });
347
- return Promise.resolve(newRowId);
348
- } catch (e) {
349
- return Promise.reject(e);
350
- }
351
- }; // cells
352
- // rows
353
- const setRowValue = function (rowId, original, value) {
354
- try {
355
- function _temp2() {
356
- dispatch({
357
- type: 'updateRow',
358
- rowId,
359
- payload: {
360
- cellErrors,
361
- original,
362
- value
363
- }
364
- });
365
- }
366
- let cellErrors;
367
- const _temp = function () {
368
- if (validator) {
369
- const row = {
370
- ...original,
371
- ...value
372
- };
373
- return Promise.resolve(validator(row)).then(function (_validator) {
374
- cellErrors = _validator !== null && _validator !== void 0 ? _validator : {};
375
- });
376
- }
377
- }();
378
- return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
379
- } catch (e) {
380
- return Promise.reject(e);
381
- }
382
- };
383
- const localization = useLocalization();
384
- const [state, dispatch] = React__default.useReducer(reducer, {
385
- changes: {
386
- rows: {},
387
- errors: {},
388
- moveReasons: {},
389
- originals: {},
390
- status: {}
391
- },
392
- temporaryRows: []
393
- });
394
- function getRowValue(rowId) {
395
- var _state$changes$rows$r, _state$changes$rows;
396
- 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;
397
- }
398
- function getRowMoveReason(rowId) {
399
- var _Object$values$, _state$changes$moveRe, _state$changes$moveRe2;
400
- 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;
401
- }
402
- function hasRowErrors(rowId) {
403
- var _state$changes$errors, _state$changes$errors2, _state$changes$errors3;
404
- 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;
405
- }
406
- function hasRowErrorsShownInAlert(rowId) {
407
- var _state$changes$errors4;
408
- return hasRowErrors(rowId) && !!((_state$changes$errors4 = state.changes.errors[rowId]) !== null && _state$changes$errors4 !== void 0 && _state$changes$errors4.shouldShowErrorAlert);
409
- }
410
- function getRowStatus(rowId) {
411
- return state.changes.status[rowId];
412
- }
413
- function setRowStatus(rowId, status) {
414
- dispatch({
415
- type: 'setRowStatus',
416
- rowId,
417
- payload: {
418
- status
419
- }
420
- });
421
- }
422
- function setCellValue(cell, value) {
423
- const rowId = cell.row.id;
424
- const columnId = cell.column.id;
425
- // update if the change is different to the original value
426
- if (value !== cell.row.original[columnId]) {
427
- dispatch({
428
- type: 'setCellValue',
429
- rowId,
430
- payload: {
431
- columnId,
432
- row: cell.row.original,
433
- value
434
- }
435
- });
436
- }
437
- // otherwise remove any previous change - no point saving the same value
438
- else if (cell.row.id in state.changes.rows) {
439
- dispatch({
440
- type: 'removeCellValue',
441
- rowId,
442
- payload: {
443
- columnId,
444
- rowIdentityAccessor
445
- }
446
- });
447
- }
448
- }
449
- function getCellValue(cell) {
450
- var _state$changes$rows2, _state$changes$rows2$;
451
- 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];
452
- }
453
- function getCellError(cell) {
454
- var _state$changes$errors5, _state$changes$errors6, _state$changes$errors7;
455
- 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];
456
- }
457
- function getErrorsShownInAlert() {
458
- const rowsWithErrors = Object.keys(state.changes.errors);
459
- if (!rowsWithErrors.length) {
460
- return [];
461
- }
462
- return rowsWithErrors.filter(hasRowErrorsShownInAlert).map(rowId => ({
463
- rowId,
464
- changes: state.changes.rows[rowId],
465
- errors: state.changes.errors[rowId]
466
- }));
467
- }
468
- function hasSaved() {
469
- return !!Object.values(state.changes.status).filter(value => value === 'saved').length;
470
- }
471
- function hasChanges(rowId) {
472
- return rowId ? !!state.changes.rows[rowId] : !!Object.keys(state.changes.rows).length;
473
- }
474
- function discardChanges(rowId, table) {
475
- // remove any new rows from pinned state before discarding them
476
- table.resetRowPinning(true);
477
- dispatch({
478
- type: 'removeRow',
479
- rowId,
480
- payload: {
481
- rowIdentityAccessor
482
- }
483
- });
484
- }
485
- return {
486
- // row
487
- setRowValue,
488
- getRowValue,
489
- getRowMoveReason,
490
- hasRowErrors,
491
- hasRowErrorsShownInAlert,
492
- getRowStatus,
493
- setRowStatus,
494
- // cells
495
- setCellValue,
496
- getCellValue,
497
- getCellError,
498
- onCellChanged,
499
- // general
500
- getErrorsShownInAlert,
501
- hasChanges,
502
- saveChanges,
503
- discardChanges,
504
- hasSaved,
505
- // new rows
506
- createRow,
507
- temporaryRows: state.temporaryRows
508
- };
509
- }
510
-
511
- export { usePendingChangesState };
512
- //# sourceMappingURL=useEditingState.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useEditingState.js","sources":["../../../../../../../../src/components/Table3/features/useEditingState.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, Cell as ReactTableCell } from '@tanstack/react-table';\nimport { v4 as uuid } from 'uuid';\nimport omit from 'lodash/omit';\nimport setWith from 'lodash/setWith';\nimport { Table3EditingChangeHandler, Table3EditingSaveHandler, Table3EditingValidatorFn } from '../types';\nimport { isTemporaryRow, TEMPORARY_ROW_ID_PREFIX, willRowMove } from '../util/editing';\nimport { useLocalization } from '../../Provider/Localization';\n\nconst DELAY_BEFORE_REMOVING_SAVE_STATUS = 3000;\n\ntype EditingError = {\n row: string;\n cells: Record<string, string>;\n shouldShowErrorAlert: boolean;\n};\ntype EditingRowMoveReason = Record<string, 'search' | 'sorting' | 'filter'>;\ntype EditingSaveState = 'saving' | 'saved' | 'errored';\ntype EditingChangeset<TType = unknown> = Partial<TType>;\ntype EditingState<TType = unknown> = {\n changes: {\n rows: Record<string, EditingChangeset<TType>>;\n errors: Record<string, EditingError>;\n moveReasons: Record<string, EditingRowMoveReason>;\n originals: Record<string, TType>;\n status: Record<string, EditingSaveState>;\n };\n temporaryRows: TType[];\n};\ntype EditingStateAction = {\n type:\n | 'setCellValue'\n | 'removeCellValue'\n | 'updateRow'\n | 'mergeRowValue'\n | 'removeRow'\n | 'setRowStatus'\n | 'setRowErrors'\n | 'createRow';\n rowId: string;\n payload?: any;\n};\n\nfunction reducer<TType = unknown>(state: EditingState<TType>, action: EditingStateAction) {\n const { type, rowId, payload } = action;\n\n switch (type) {\n case 'setCellValue': {\n const { columnId, row, value } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, `${rowId}.${columnId}`, value, Object),\n originals: setWith(state.changes.originals, rowId, row, Object),\n },\n };\n }\n\n case 'removeCellValue': {\n const { columnId, rowIdentityAccessor } = payload;\n const changes = omit(state.changes.rows, `${rowId}.${columnId}`);\n\n // if there are no changes left, remove the row\n if (!Object.keys(changes[rowId]).length) {\n return reducer(state, { type: 'removeRow', rowId, payload: { rowIdentityAccessor } });\n }\n\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: omit(state.changes.rows, `${rowId}.${columnId}`),\n errors: omit(state.changes.errors, `${rowId}.cells.${columnId}`),\n moveReasons: omit(state.changes.moveReasons, `${rowId}.${columnId}`),\n },\n };\n }\n\n case 'updateRow': {\n const { cellErrors, moveReasons, original, value } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, rowId, value, Object),\n errors: setWith(\n state.changes.errors,\n `${rowId}.cells`,\n cellErrors ?? state.changes.errors.cells[rowId],\n Object\n ),\n originals: setWith(state.changes.originals, rowId, original ?? state.changes.originals[rowId], Object),\n moveReasons: setWith(\n state.changes.moveReasons,\n rowId,\n moveReasons ?? state.changes.moveReasons[rowId],\n Object\n ),\n // status can be undefined, so don't use ??\n status: setWith(state.changes.status, rowId, undefined, Object),\n },\n };\n }\n\n case 'removeRow': {\n const { rowIdentityAccessor } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: omit(state.changes.rows, rowId),\n errors: omit(state.changes.errors, rowId),\n moveReasons: omit(state.changes.moveReasons, rowId),\n originals: omit(state.changes.originals, rowId),\n status: omit(state.changes.status, rowId),\n },\n temporaryRows: state.temporaryRows.filter(row => row[rowIdentityAccessor] !== rowId),\n };\n }\n\n case 'setRowStatus': {\n const { status } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n status: status ? setWith(state.changes.status, rowId, status, Object) : omit(state.changes.status, rowId),\n },\n };\n }\n\n case 'setRowErrors': {\n const { ...errors } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n errors: setWith(state.changes.errors, rowId, errors, Object),\n },\n };\n }\n\n case 'createRow': {\n const { value } = payload;\n return {\n ...state,\n temporaryRows: state.temporaryRows.concat(value),\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, rowId, value, Object),\n originals: setWith(state.changes.originals, rowId, value, Object),\n },\n };\n }\n\n default:\n return state;\n }\n}\n\nexport function usePendingChangesState<TType = unknown>(\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n rowIdentityAccessor: keyof TType,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n const localization = useLocalization();\n const [state, dispatch] = React.useReducer(reducer, {\n changes: { rows: {}, errors: {}, moveReasons: {}, originals: {}, status: {} },\n temporaryRows: [],\n });\n\n // rows\n async function setRowValue<T extends TType>(rowId: string, original: T, value: Partial<T>) {\n let cellErrors;\n\n if (validator) {\n const row = { ...original, ...value } as T;\n cellErrors = ((await validator(row)) ?? {}) as Record<string, string>;\n }\n\n dispatch({\n type: 'updateRow',\n rowId,\n payload: { cellErrors, original, value },\n });\n }\n\n function getRowValue(rowId: string) {\n return state.changes.rows?.[rowId] ?? undefined;\n }\n\n function getRowMoveReason(rowId: string) {\n return Object.values(state.changes.moveReasons?.[rowId] ?? {})[0] ?? undefined;\n }\n\n function hasRowErrors(rowId: string) {\n return !!state.changes.errors[rowId]?.row || !!Object.keys(state.changes.errors[rowId]?.cells ?? {}).length;\n }\n\n function hasRowErrorsShownInAlert(rowId: string) {\n return hasRowErrors(rowId) && !!state.changes.errors[rowId]?.shouldShowErrorAlert;\n }\n\n function getRowStatus(rowId: string) {\n return state.changes.status[rowId];\n }\n\n function setRowStatus(rowId: string, status: EditingSaveState | undefined) {\n dispatch({\n type: 'setRowStatus',\n rowId,\n payload: {\n status,\n },\n });\n }\n\n async function createRow<T extends TType>(data: Partial<T>) {\n const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${uuid()}`;\n const value: Partial<TType> = {\n ...data,\n [rowIdentityAccessor]: newRowId,\n };\n\n dispatch({\n type: 'createRow',\n rowId: newRowId,\n payload: { value },\n });\n\n return newRowId;\n }\n\n // cells\n function setCellValue<T extends TType>(cell: ReactTableCell<T, unknown>, value: unknown) {\n const rowId = cell.row.id;\n const columnId = cell.column.id;\n\n // update if the change is different to the original value\n if (value !== cell.row.original[columnId]) {\n dispatch({\n type: 'setCellValue',\n rowId,\n payload: {\n columnId,\n row: cell.row.original,\n value,\n },\n });\n }\n // otherwise remove any previous change - no point saving the same value\n else if (cell.row.id in state.changes.rows) {\n dispatch({\n type: 'removeCellValue',\n rowId,\n payload: {\n columnId,\n rowIdentityAccessor,\n },\n });\n }\n }\n\n function getCellValue<T extends TType>(cell: ReactTableCell<T, unknown>): unknown | undefined {\n return state.changes.rows?.[cell.row.id]?.[cell.column.id];\n }\n\n function getCellError<T extends TType>(cell: ReactTableCell<T, unknown>): string | undefined {\n return state.changes.errors?.[cell.row.id]?.cells?.[cell.column.id];\n }\n\n async function onCellChanged<T extends TType>(cell: ReactTableCell<T, unknown>, rowIndex: number) {\n const changes = state.changes.rows[cell.row.id];\n\n if (!changes) {\n return;\n }\n\n let updatesForOtherCells: Partial<T> = {};\n\n // run the updater handler if there is one, to see if there are any other cells to update\n if (typeof handleChange === 'function') {\n const previousRowValue = {\n ...state.changes.originals[cell.row.id],\n //...getRowChangeset(updatersRef.current[cell.row.id], rowIdentityAccessor),\n };\n const nextRowValue = {\n ...state.changes.originals[cell.row.id],\n ...changes,\n };\n updatesForOtherCells = ((await handleChange(\n cell.column.id,\n changes[cell.column.id],\n nextRowValue,\n previousRowValue\n )) ?? {}) as Partial<T>;\n }\n\n // create a projection of the next state, so we can act against it\n const nextChanges = { ...state.changes.rows[cell.row.id], ...updatesForOtherCells };\n const nextMoveReasons: EditingRowMoveReason = { ...state.changes.moveReasons[cell.row.id] };\n const nextCellErrors: Record<string, string> = { ...state.changes.errors[cell.row.id]?.cells };\n\n // run validation\n let validationErrors: Record<string, string> = {};\n\n if (validator) {\n const nextRowValue = { ...state.changes.originals[cell.row.id], ...changes, ...updatesForOtherCells };\n validationErrors = ((await validator(nextRowValue)) ?? {}) as Record<string, string>;\n }\n\n // only set errors and move reasons for the cells we're currently acting on\n // why? because the UX is not good if we set them for cells the user hasn't touched yet\n const cellsToActOn = [cell.column.id, ...Object.keys(updatesForOtherCells)];\n const allCells = cell.row._getAllCellsByColumnId();\n\n cellsToActOn.forEach(accessor => {\n if (validationErrors[accessor]) {\n nextCellErrors[accessor] = validationErrors[accessor];\n // don't show move indicator for cells with errors, they aren't valid and can't be saved\n delete nextMoveReasons[accessor];\n } else {\n // there isn't any error in this run, remove any error set in state\n delete nextCellErrors[accessor];\n\n if (allCells[accessor]?.column.getIsSorted()) {\n // run row move determination\n const reason = willRowMove(cell, nextChanges[accessor], rowIndex, localization);\n\n // if the row will move based on this change save why, otherwise delete any existing state\n if (reason) {\n nextMoveReasons[accessor] = reason;\n } else {\n delete nextMoveReasons[accessor];\n }\n }\n }\n });\n\n dispatch({\n type: 'updateRow',\n rowId: cell.row.id,\n payload: {\n cellErrors: nextCellErrors,\n moveReasons: nextMoveReasons,\n value: nextChanges,\n },\n });\n }\n\n // general\n function getErrorsShownInAlert<T extends TType>() {\n const rowsWithErrors = Object.keys(state.changes.errors);\n\n if (!rowsWithErrors.length) {\n return [];\n }\n\n return rowsWithErrors.filter(hasRowErrorsShownInAlert).map(rowId => ({\n rowId,\n changes: state.changes.rows[rowId] as EditingChangeset<T>,\n errors: state.changes.errors[rowId],\n }));\n }\n\n function hasSaved() {\n return !!Object.values(state.changes.status).filter(value => value === 'saved').length;\n }\n\n function hasChanges(rowId?: string) {\n return rowId ? !!state.changes.rows[rowId] : !!Object.keys(state.changes.rows).length;\n }\n\n async function saveChanges<T extends TType>(table: ReactTable<T>, rowId: string | undefined = undefined): Promise<boolean> {\n if (!handleSave) {\n console.warn('Tried to save, but Table has no onEditingSave handler');\n return false;\n }\n\n // sometimes we only want to save one row\n const changes = rowId ? { [rowId]: state.changes.rows[rowId] } : state.changes.rows;\n\n let completed = true;\n\n for (const rowId of Object.keys(changes)) {\n const status = getRowStatus(rowId);\n\n try {\n // don't try to save if - already saving, or there are known errors\n if (status === 'saving' || status === 'errored') {\n continue;\n }\n\n setRowStatus(rowId, 'saving');\n\n const changeSet = { ...state.changes.originals[rowId], ...changes[rowId] };\n\n // if we had to create a temporary id, delete it first - it's our data, not theirs\n if (isTemporaryRow(changeSet[rowIdentityAccessor as string])) {\n delete changeSet[rowIdentityAccessor];\n }\n\n // re-run validation, maybe a cell is already invalid but has never been blurred\n if (validator) {\n const errors = await validator(changeSet);\n\n if (errors && Object.keys(errors).length) {\n throw errors;\n }\n }\n\n // send new data to the server\n await handleSave(changeSet);\n\n // cleanup changes, we don't need them after saving\n discardChanges(rowId, table);\n\n // show the saved status, then remove it after a delay\n setRowStatus(rowId, 'saved');\n setTimeout(() => {\n setRowStatus(rowId, undefined);\n }, DELAY_BEFORE_REMOVING_SAVE_STATUS);\n } catch (error) {\n if (error instanceof ReferenceError || error instanceof TypeError || (error as any)?.response?.status >= 500) {\n console.error(error);\n }\n\n // the onEditingSave handler should throw errors when something fails, e.g. validation, network errors etc\n // this code handles those errors and maps them either to row errors or cell specific errors\n let rowError: string | undefined;\n let cellErrors;\n\n if (typeof error === 'string') {\n rowError = error;\n } else if (error instanceof Error) {\n rowError = error.message;\n\n // most of our apis return error objects within this shape\n if (typeof (error as any).response?.data === 'object') {\n cellErrors = (error as any).response?.data;\n }\n } else if (typeof error === 'object') {\n cellErrors = error;\n }\n\n if (rowError || cellErrors) {\n dispatch({\n type: 'setRowErrors',\n rowId,\n payload: {\n row: rowError,\n cells: cellErrors,\n shouldShowErrorAlert: true,\n },\n });\n }\n\n setRowStatus(rowId, 'errored');\n completed = false;\n }\n }\n\n return completed;\n }\n\n function discardChanges<T extends TType>(rowId: string, table: ReactTable<T>) {\n // remove any new rows from pinned state before discarding them\n table.resetRowPinning(true);\n\n dispatch({\n type: 'removeRow',\n rowId,\n payload: { rowIdentityAccessor },\n });\n }\n\n return {\n // row\n setRowValue,\n getRowValue,\n getRowMoveReason,\n hasRowErrors,\n hasRowErrorsShownInAlert,\n getRowStatus,\n setRowStatus,\n // cells\n setCellValue,\n getCellValue,\n getCellError,\n onCellChanged,\n // general\n getErrorsShownInAlert,\n hasChanges,\n saveChanges,\n discardChanges,\n hasSaved,\n // new rows\n createRow,\n temporaryRows: state.temporaryRows,\n };\n}\n"],"names":["DELAY_BEFORE_REMOVING_SAVE_STATUS","reducer","state","action","type","rowId","payload","columnId","row","value","changes","rows","setWith","Object","originals","rowIdentityAccessor","omit","keys","length","errors","moveReasons","cellErrors","original","cells","status","undefined","temporaryRows","filter","concat","usePendingChangesState","handleSave","handleChange","validator","saveChanges","table","console","warn","Promise","resolve","completed","_temp9","_forOf","getRowStatus","_catch","_temp8","_result","_exit","changeSet","then","discardChanges","setRowStatus","setTimeout","isTemporaryRow","_temp7","error","_error$response","ReferenceError","TypeError","response","rowError","Error","_error$response2","message","data","_error$response3","dispatch","shouldShowErrorAlert","_result3","e","reject","onCellChanged","cell","rowIndex","cellsToActOn","column","id","updatesForOtherCells","allCells","_getAllCellsByColumnId","forEach","accessor","validationErrors","nextCellErrors","nextMoveReasons","_allCells$accessor","getIsSorted","reason","willRowMove","nextChanges","localization","_state$changes$errors8","_temp3","nextRowValue","_validator2","_temp4","_temp5","previousRowValue","_handleChange","_temp6","createRow","newRowId","TEMPORARY_ROW_ID_PREFIX","uuid","setRowValue","_temp","_validator","_temp2","useLocalization","React","useReducer","getRowValue","_state$changes$rows$r","_state$changes$rows","getRowMoveReason","_Object$values$","values","_state$changes$moveRe","_state$changes$moveRe2","hasRowErrors","_state$changes$errors","_state$changes$errors2","_state$changes$errors3","hasRowErrorsShownInAlert","_state$changes$errors4","setCellValue","getCellValue","_state$changes$rows2","_state$changes$rows2$","getCellError","_state$changes$errors5","_state$changes$errors6","_state$changes$errors7","getErrorsShownInAlert","rowsWithErrors","map","hasSaved","hasChanges","resetRowPinning"],"mappings":"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"}