@economic/taco 2.45.0-alpha.17 → 2.45.0-alpha.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/components/Listbox/util.d.ts +1 -1
  2. package/dist/components/Report/Report.d.ts +2 -2
  3. package/dist/components/SearchInput2/SearchInput2.d.ts +2 -0
  4. package/dist/components/Table3/Table3.d.ts +5 -2
  5. package/dist/components/Table3/components/Row/Editing/CreateNewRow.d.ts +0 -1
  6. package/dist/components/Table3/features/useEditingState.d.ts +23 -18
  7. package/dist/components/Table3/features/useTableEditing.d.ts +24 -20
  8. package/dist/components/Table3/types.d.ts +2 -0
  9. package/dist/esm/index.css +6 -0
  10. package/dist/esm/packages/taco/src/charts/components/Donut/DonutChart.js.map +1 -1
  11. package/dist/esm/packages/taco/src/charts/components/Donut/Legend.js +1 -0
  12. package/dist/esm/packages/taco/src/charts/components/Donut/Legend.js.map +1 -1
  13. package/dist/esm/packages/taco/src/charts/components/Legend.js +1 -0
  14. package/dist/esm/packages/taco/src/charts/components/Legend.js.map +1 -1
  15. package/dist/esm/packages/taco/src/charts/components/Tooltip.js.map +1 -1
  16. package/dist/esm/packages/taco/src/charts/utils/color.js.map +1 -1
  17. package/dist/esm/packages/taco/src/components/Accordion/Accordion.js.map +1 -1
  18. package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js.map +1 -1
  19. package/dist/esm/packages/taco/src/components/Datepicker/Datepicker.js +13 -0
  20. package/dist/esm/packages/taco/src/components/Datepicker/Datepicker.js.map +1 -1
  21. package/dist/esm/packages/taco/src/components/Dialog/components/Content.js +1 -1
  22. package/dist/esm/packages/taco/src/components/Dialog/components/Content.js.map +1 -1
  23. package/dist/esm/packages/taco/src/components/Drawer/components/Content.js +2 -2
  24. package/dist/esm/packages/taco/src/components/Drawer/components/Content.js.map +1 -1
  25. package/dist/esm/packages/taco/src/components/Listbox/util.js.map +1 -1
  26. package/dist/esm/packages/taco/src/components/RadioGroup/RadioGroup.js.map +1 -1
  27. package/dist/esm/packages/taco/src/components/Report/Report.js +4 -1
  28. package/dist/esm/packages/taco/src/components/Report/Report.js.map +1 -1
  29. package/dist/esm/packages/taco/src/components/SearchInput2/SearchInput2.js +6 -3
  30. package/dist/esm/packages/taco/src/components/SearchInput2/SearchInput2.js.map +1 -1
  31. package/dist/esm/packages/taco/src/components/Select2/Select2.js.map +1 -1
  32. package/dist/esm/packages/taco/src/components/Select2/components/Create.js.map +1 -1
  33. package/dist/esm/packages/taco/src/components/Select2/components/Trigger.js.map +1 -1
  34. package/dist/esm/packages/taco/src/components/Table/hooks/plugins/useRowActions.js +1 -1
  35. package/dist/esm/packages/taco/src/components/Table/hooks/plugins/useRowSelect.js.map +1 -1
  36. package/dist/esm/packages/taco/src/components/Table3/Table3.js +3 -2
  37. package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
  38. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +12 -2
  39. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
  40. package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js +15 -9
  41. package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js.map +1 -1
  42. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js +2 -3
  43. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js.map +1 -1
  44. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js +3 -2
  45. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js.map +1 -1
  46. package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js +62 -70
  47. package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js.map +1 -1
  48. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +24 -21
  49. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
  50. package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js +15 -12
  51. package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js.map +1 -1
  52. package/dist/esm/packages/taco/src/components/Table3/useTable3.js +2 -2
  53. package/dist/esm/packages/taco/src/components/Table3/useTable3.js.map +1 -1
  54. package/dist/esm/packages/taco/src/components/Tag/Tag.js +1 -1
  55. package/dist/esm/packages/taco/src/components/Tag/Tag.js.map +1 -1
  56. package/dist/esm/packages/taco/src/index.js +1 -0
  57. package/dist/esm/packages/taco/src/index.js.map +1 -1
  58. package/dist/esm/packages/taco/src/primitives/Collection/components/Root.js +5 -3
  59. package/dist/esm/packages/taco/src/primitives/Collection/components/Root.js.map +1 -1
  60. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Selection.js +7 -4
  61. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Selection.js.map +1 -1
  62. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Summary.js +7 -6
  63. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Summary.js.map +1 -1
  64. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js +24 -22
  65. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js.map +1 -1
  66. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/Row.js +41 -4
  67. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/Row.js.map +1 -1
  68. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Print/Print.js +3 -1
  69. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Print/Print.js.map +1 -1
  70. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Search/Search.js +26 -3
  71. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Search/Search.js.map +1 -1
  72. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableGlobalShortcuts.js +2 -2
  73. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableGlobalShortcuts.js.map +1 -1
  74. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +40 -13
  75. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
  76. package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js +1 -1
  77. package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js.map +1 -1
  78. package/dist/esm/packages/taco/src/primitives/Table/types.js.map +1 -1
  79. package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader.js +13 -12
  80. package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader.js.map +1 -1
  81. package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader2.js +223 -0
  82. package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader2.js.map +1 -0
  83. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js +1 -1
  84. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js.map +1 -1
  85. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableSearch.js +3 -2
  86. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableSearch.js.map +1 -1
  87. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableServerLoading.js +6 -2
  88. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableServerLoading.js.map +1 -1
  89. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableDataListener.js +3 -4
  90. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableDataListener.js.map +1 -1
  91. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableFilterListener.js +3 -1
  92. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableFilterListener.js.map +1 -1
  93. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.js +4 -4
  94. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.js.map +1 -1
  95. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableSearchListener.js +14 -13
  96. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableSearchListener.js.map +1 -1
  97. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.js +7 -3
  98. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.js.map +1 -1
  99. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js +4 -4
  100. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js.map +1 -1
  101. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/columns.js +4 -1
  102. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/columns.js.map +1 -1
  103. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/search.js.map +1 -1
  104. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +8 -2
  105. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
  106. package/dist/esm/packages/taco/src/utils/dom.js.map +1 -1
  107. package/dist/hooks/useLazyDebouncedEffect.d.ts +2 -0
  108. package/dist/index.css +6 -0
  109. package/dist/index.d.ts +1 -0
  110. package/dist/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.d.ts +2 -2
  111. package/dist/primitives/Table/Core/components/Row/Row.d.ts +2 -0
  112. package/dist/primitives/Table/Core/features/useTableRenderer.d.ts +1 -1
  113. package/dist/primitives/Table/types.d.ts +10 -6
  114. package/dist/primitives/Table/useTableDataLoader.d.ts +2 -2
  115. package/dist/primitives/Table/useTableDataLoader2.d.ts +23 -0
  116. package/dist/primitives/Table/useTableManager/features/useTableSearch.d.ts +4 -2
  117. package/dist/primitives/Table/useTableManager/features/useTableServerLoading.d.ts +4 -1
  118. package/dist/primitives/Table/useTableManager/listeners/useTableDataListener.d.ts +1 -1
  119. package/dist/primitives/Table/useTableManager/listeners/useTableSearchListener.d.ts +1 -2
  120. package/dist/primitives/Table/useTableManager/util/columns.d.ts +2 -1
  121. package/dist/taco.cjs.development.js +630 -267
  122. package/dist/taco.cjs.development.js.map +1 -1
  123. package/dist/taco.cjs.production.min.js +1 -1
  124. package/dist/taco.cjs.production.min.js.map +1 -1
  125. package/dist/utils/dom.d.ts +2 -2
  126. package/package.json +4 -4
@@ -18,6 +18,7 @@ function reducer(state, action) {
18
18
  {
19
19
  const {
20
20
  columnId,
21
+ index,
21
22
  row,
22
23
  value
23
24
  } = payload;
@@ -27,7 +28,8 @@ function reducer(state, action) {
27
28
  ...state.changes,
28
29
  rows: setWith(state.changes.rows, `${rowId}.${columnId}`, value, Object),
29
30
  originals: setWith(state.changes.originals, rowId, row, Object)
30
- }
31
+ },
32
+ indexes: setWith(state.indexes, rowId, index, Object)
31
33
  };
32
34
  }
33
35
  case 'removeCellValue':
@@ -61,6 +63,7 @@ function reducer(state, action) {
61
63
  {
62
64
  const {
63
65
  cellErrors,
66
+ index,
64
67
  moveReasons,
65
68
  original,
66
69
  value
@@ -70,12 +73,13 @@ function reducer(state, action) {
70
73
  changes: {
71
74
  ...state.changes,
72
75
  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),
76
+ errors: setWith(state.changes.errors, `${rowId}.cells`, cellErrors !== null && cellErrors !== void 0 ? cellErrors : state.changes.errors[rowId], Object),
74
77
  originals: setWith(state.changes.originals, rowId, original !== null && original !== void 0 ? original : state.changes.originals[rowId], Object),
75
78
  moveReasons: setWith(state.changes.moveReasons, rowId, moveReasons !== null && moveReasons !== void 0 ? moveReasons : state.changes.moveReasons[rowId], Object),
76
79
  // status can be undefined, so don't use ??
77
80
  status: setWith(state.changes.status, rowId, undefined, Object)
78
- }
81
+ },
82
+ indexes: setWith(state.indexes, rowId, index, Object)
79
83
  };
80
84
  }
81
85
  case 'removeRow':
@@ -93,6 +97,7 @@ function reducer(state, action) {
93
97
  originals: omit(state.changes.originals, rowId),
94
98
  status: omit(state.changes.status, rowId)
95
99
  },
100
+ indexes: omit(state.indexes, rowId),
96
101
  temporaryRows: state.temporaryRows.filter(row => row[rowIdentityAccessor] !== rowId)
97
102
  };
98
103
  }
@@ -125,6 +130,7 @@ function reducer(state, action) {
125
130
  case 'insertTemporaryRow':
126
131
  {
127
132
  const {
133
+ index,
128
134
  value
129
135
  } = payload;
130
136
  return {
@@ -134,14 +140,36 @@ function reducer(state, action) {
134
140
  ...state.changes,
135
141
  rows: setWith(state.changes.rows, rowId, value, Object),
136
142
  originals: setWith(state.changes.originals, rowId, value, Object)
137
- }
143
+ },
144
+ indexes: setWith(state.indexes, rowId, index, Object)
138
145
  };
139
146
  }
140
147
  default:
141
148
  return state;
142
149
  }
143
150
  }
144
- function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, validator) {
151
+ function usePendingChangesState(handleSave, handleChange, handleDiscard, rowIdentityAccessor, validator) {
152
+ const discardChanges = function (rowId, table) {
153
+ try {
154
+ // remove any new rows from pinned state before discarding them
155
+ table.resetRowPinning(true);
156
+ dispatch({
157
+ type: 'removeRow',
158
+ rowId,
159
+ payload: {
160
+ rowIdentityAccessor
161
+ }
162
+ });
163
+ const _temp8 = function () {
164
+ if (typeof handleDiscard === 'function') {
165
+ return Promise.resolve(handleDiscard()).then(function () {});
166
+ }
167
+ }();
168
+ return Promise.resolve(_temp8 && _temp8.then ? _temp8.then(function () {}) : void 0);
169
+ } catch (e) {
170
+ return Promise.reject(e);
171
+ }
172
+ };
145
173
  const saveChanges = function (table, rowId = undefined) {
146
174
  try {
147
175
  let _exit = false;
@@ -154,19 +182,20 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
154
182
  [rowId]: state.changes.rows[rowId]
155
183
  } : state.changes.rows;
156
184
  let completed = true;
157
- const _temp9 = _forOf(Object.keys(changes), function (rowId) {
185
+ const _temp7 = _forOf(Object.keys(changes), function (rowId) {
158
186
  const status = getRowStatus(rowId);
159
187
  return _catch(function () {
160
188
  var _changes$rowId;
161
- function _temp8(_result) {
189
+ function _temp6(_result) {
162
190
  return _exit ? _result : Promise.resolve(handleSave(changeSet)).then(function () {
163
191
  // cleanup changes, we don't need them after saving
164
- discardChanges(rowId, table);
165
- // show the saved status, then remove it after a delay
166
- setRowStatus(rowId, 'saved');
167
- setTimeout(() => {
168
- setRowStatus(rowId, undefined);
169
- }, DELAY_BEFORE_REMOVING_SAVE_STATUS);
192
+ return Promise.resolve(discardChanges(rowId, table)).then(function () {
193
+ // show the saved status, then remove it after a delay
194
+ setRowStatus(rowId, 'saved');
195
+ setTimeout(() => {
196
+ setRowStatus(rowId, undefined);
197
+ }, DELAY_BEFORE_REMOVING_SAVE_STATUS);
198
+ });
170
199
  });
171
200
  }
172
201
  const rowChanges = (_changes$rowId = changes[rowId]) !== null && _changes$rowId !== void 0 ? _changes$rowId : {};
@@ -184,7 +213,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
184
213
  delete changeSet[rowIdentityAccessor];
185
214
  }
186
215
  // re-run validation, maybe a cell is already invalid but has never been blurred
187
- const _temp7 = function () {
216
+ const _temp5 = function () {
188
217
  if (validator) {
189
218
  return Promise.resolve(validator(changeSet)).then(function (errors) {
190
219
  if (errors && Object.keys(errors).length) {
@@ -193,7 +222,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
193
222
  });
194
223
  }
195
224
  }();
196
- return _temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7); // send new data to the server
225
+ return _temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5); // send new data to the server
197
226
  }, function (error) {
198
227
  var _error$response;
199
228
  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) {
@@ -233,18 +262,18 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
233
262
  }, function () {
234
263
  return _exit;
235
264
  });
236
- return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(function (_result3) {
265
+ return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(function (_result3) {
237
266
  return _exit ? _result3 : completed;
238
- }) : _exit ? _temp9 : completed);
267
+ }) : _exit ? _temp7 : completed);
239
268
  } catch (e) {
240
269
  return Promise.reject(e);
241
270
  }
242
271
  };
243
272
  const onCellChanged = function (cell, rowIndex, nextValue, shouldRunUpdaters = true) {
244
273
  try {
245
- function _temp6() {
274
+ function _temp4() {
246
275
  var _state$changes$errors11;
247
- function _temp4() {
276
+ function _temp2() {
248
277
  // only set errors and move reasons for the cells we're currently acting on
249
278
  // why? because the UX is not good if we set them for cells the user hasn't touched yet
250
279
  const cellsToActOn = [cell.column.id, ...Object.keys(updatesForOtherCells)];
@@ -275,6 +304,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
275
304
  rowId: cell.row.id,
276
305
  payload: {
277
306
  cellErrors: nextCellErrors,
307
+ index: rowIndex,
278
308
  moveReasons: nextMoveReasons,
279
309
  value: nextChanges
280
310
  }
@@ -293,7 +323,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
293
323
  };
294
324
  // run validation - if there are changes, and if there is an original stored
295
325
  let validationErrors = {};
296
- const _temp3 = function () {
326
+ const _temp = function () {
297
327
  if (validator && Object.keys(nextChanges).length && state.changes.originals[cell.row.id]) {
298
328
  // merge with the original so we get a full row
299
329
  const nextRowValue = {
@@ -301,12 +331,12 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
301
331
  ...changes,
302
332
  ...updatesForOtherCells
303
333
  };
304
- return Promise.resolve(validator(nextRowValue)).then(function (_validator2) {
305
- validationErrors = _validator2 !== null && _validator2 !== void 0 ? _validator2 : {};
334
+ return Promise.resolve(validator(nextRowValue)).then(function (_validator) {
335
+ validationErrors = _validator !== null && _validator !== void 0 ? _validator : {};
306
336
  });
307
337
  }
308
338
  }();
309
- return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
339
+ return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
310
340
  }
311
341
  const changes = nextValue !== undefined ? {
312
342
  ...state.changes.rows[cell.row.id],
@@ -319,7 +349,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
319
349
  }
320
350
  let updatesForOtherCells = {};
321
351
  // run the updater handler if there is one, to see if there are any other cells to update
322
- const _temp5 = function () {
352
+ const _temp3 = function () {
323
353
  if (typeof handleChange === 'function' && shouldRunUpdaters) {
324
354
  const previousRowValue = {
325
355
  ...state.changes.originals[cell.row.id]
@@ -333,42 +363,11 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
333
363
  });
334
364
  }
335
365
  }();
336
- return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
366
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
337
367
  } catch (e) {
338
368
  return Promise.reject(e);
339
369
  }
340
370
  }; // general
341
- // rows
342
- const setRowValue = function (rowId, original, value) {
343
- try {
344
- function _temp2() {
345
- dispatch({
346
- type: 'updateRow',
347
- rowId,
348
- payload: {
349
- cellErrors,
350
- original,
351
- value
352
- }
353
- });
354
- }
355
- let cellErrors;
356
- const _temp = function () {
357
- if (validator) {
358
- const row = {
359
- ...original,
360
- ...value
361
- };
362
- return Promise.resolve(validator(row)).then(function (_validator) {
363
- cellErrors = _validator !== null && _validator !== void 0 ? _validator : {};
364
- });
365
- }
366
- }();
367
- return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
368
- } catch (e) {
369
- return Promise.reject(e);
370
- }
371
- };
372
371
  const localization = useLocalization();
373
372
  const [state, dispatch] = React__default.useReducer(reducer, {
374
373
  changes: {
@@ -378,8 +377,10 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
378
377
  originals: {},
379
378
  status: {}
380
379
  },
380
+ indexes: {},
381
381
  temporaryRows: []
382
382
  });
383
+ // rows
383
384
  function getRowValue(rowId) {
384
385
  var _state$changes$rows$r, _state$changes$rows;
385
386
  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;
@@ -417,7 +418,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
417
418
  }
418
419
  });
419
420
  }
420
- function insertTemporaryRow(data) {
421
+ function insertTemporaryRow(data, rowIndex) {
421
422
  const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${v4()}`;
422
423
  const value = {
423
424
  ...data,
@@ -427,13 +428,14 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
427
428
  type: 'insertTemporaryRow',
428
429
  rowId: newRowId,
429
430
  payload: {
431
+ index: rowIndex,
430
432
  value
431
433
  }
432
434
  });
433
435
  return newRowId;
434
436
  }
435
437
  // cells
436
- function setCellValue(cell, value) {
438
+ function setCellValue(cell, rowIndex, value) {
437
439
  const rowId = cell.row.id;
438
440
  const columnId = cell.column.id;
439
441
  // update if the change is different to the original value
@@ -443,6 +445,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
443
445
  rowId,
444
446
  payload: {
445
447
  columnId,
448
+ index: rowIndex,
446
449
  row: cell.row.original,
447
450
  value
448
451
  }
@@ -475,6 +478,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
475
478
  }
476
479
  return rowsWithErrors.filter(hasRowErrorsShownInAlert).map(rowId => ({
477
480
  rowId,
481
+ index: state.indexes[rowId],
478
482
  changes: state.changes.rows[rowId],
479
483
  errors: state.changes.errors[rowId]
480
484
  }));
@@ -485,20 +489,8 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
485
489
  function hasChanges(rowId) {
486
490
  return rowId ? !!state.changes.rows[rowId] : !!Object.keys(state.changes.rows).length;
487
491
  }
488
- function discardChanges(rowId, table) {
489
- // remove any new rows from pinned state before discarding them
490
- table.resetRowPinning(true);
491
- dispatch({
492
- type: 'removeRow',
493
- rowId,
494
- payload: {
495
- rowIdentityAccessor
496
- }
497
- });
498
- }
499
492
  return {
500
493
  // row
501
- setRowValue,
502
494
  getRowValue,
503
495
  getRowMoveReason,
504
496
  hasRowErrors,
@@ -1 +1 @@
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 | 'insertTemporaryRow';\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 'insertTemporaryRow': {\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 hasTemporaryRowErrors<T extends TType>() {\n const newRow = state.temporaryRows?.[0] as T | undefined;\n\n if (!newRow) {\n return false;\n }\n\n const rowId = newRow[rowIdentityAccessor as string];\n return !!state.changes.errors[rowId]?.row || !!Object.keys(state.changes.errors[rowId]?.cells ?? {}).length;\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 function insertTemporaryRow<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: 'insertTemporaryRow',\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>(\n cell: ReactTableCell<T, unknown>,\n rowIndex: number,\n nextValue,\n shouldRunUpdaters = true\n ) {\n const changes =\n nextValue !== undefined\n ? { ...state.changes.rows[cell.row.id], [cell.column.id]: nextValue }\n : { ...state.changes.rows[cell.row.id] };\n\n if (!Object.keys(changes).length) {\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' && shouldRunUpdaters) {\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 = { ...changes, ...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 - if there are changes, and if there is an original stored\n let validationErrors: Record<string, string> = {};\n\n if (validator && Object.keys(nextChanges).length && state.changes.originals[cell.row.id]) {\n // merge with the original so we get a full row\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 const rowChanges = changes[rowId] ?? {};\n\n // don't try to save if - already saving, or there are known errors\n if (!Object.keys(rowChanges).length || status === 'saving' || status === 'errored') {\n continue;\n }\n\n setRowStatus(rowId, 'saving');\n\n const changeSet = { ...state.changes.originals[rowId], ...rowChanges };\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 hasTemporaryRowErrors,\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 insertTemporaryRow,\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","_changes$rowId","_temp8","_result","_exit","changeSet","then","discardChanges","setRowStatus","setTimeout","rowChanges","isTemporaryRow","_temp7","error","_error$response","ReferenceError","TypeError","response","rowError","Error","_error$response2","message","data","_error$response3","dispatch","shouldShowErrorAlert","_result3","e","reject","onCellChanged","cell","rowIndex","nextValue","shouldRunUpdaters","cellsToActOn","column","id","updatesForOtherCells","allCells","_getAllCellsByColumnId","forEach","accessor","validationErrors","nextCellErrors","nextMoveReasons","_allCells$accessor","getIsSorted","reason","willRowMove","nextChanges","localization","_state$changes$errors11","_temp3","nextRowValue","_validator2","_temp4","_temp5","previousRowValue","_handleChange","_temp6","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","hasTemporaryRowErrors","newRow","_state$temporaryRows","_state$changes$errors5","_state$changes$errors6","_state$changes$errors7","insertTemporaryRow","newRowId","TEMPORARY_ROW_ID_PREFIX","uuid","setCellValue","getCellValue","_state$changes$rows2","_state$changes$rows2$","getCellError","_state$changes$errors8","_state$changes$errors9","_state$changes$errors10","getErrorsShownInAlert","rowsWithErrors","map","hasSaved","hasChanges","resetRowPinning"],"mappings":"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"}
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 {\n Table3EditingChangeHandler,\n Table3EditingDiscardHandler,\n Table3EditingSaveHandler,\n Table3EditingValidatorFn,\n} 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 // we store row indexes because due to server loading, we don't always have all data available\n // so we can't determine an index from a row id\n // note: if the row click button in the error Alert is removed, indexes can be removed here\n indexes: Record<string, number>;\n temporaryRows: TType[];\n};\ntype EditingStateAction = {\n type:\n | 'setCellValue'\n | 'removeCellValue'\n | 'updateRow'\n | 'mergeRowValue'\n | 'removeRow'\n | 'setRowStatus'\n | 'setRowErrors'\n | 'insertTemporaryRow';\n rowId: string;\n payload?: any;\n};\n\nfunction reducer<TType = unknown>(state: EditingState<TType>, action: EditingStateAction): EditingState {\n const { type, rowId, payload } = action;\n\n switch (type) {\n case 'setCellValue': {\n const { columnId, index, 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 indexes: setWith(state.indexes, rowId, index, Object),\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, index, 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(state.changes.errors, `${rowId}.cells`, cellErrors ?? state.changes.errors[rowId], Object),\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 indexes: setWith(state.indexes, rowId, index, Object),\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 indexes: omit(state.indexes, rowId),\n temporaryRows: state.temporaryRows.filter(row => (row as any)[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 'insertTemporaryRow': {\n const { index, 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 indexes: setWith(state.indexes, rowId, index, Object),\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 handleDiscard: Table3EditingDiscardHandler | 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 indexes: {},\n temporaryRows: [],\n });\n\n // rows\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 hasTemporaryRowErrors<T extends TType>() {\n const newRow = state.temporaryRows?.[0] as T | undefined;\n\n if (!newRow) {\n return false;\n }\n\n const rowId = newRow[rowIdentityAccessor as keyof TType];\n return (\n !!state.changes.errors[rowId as unknown as string]?.row ||\n !!Object.keys(state.changes.errors[rowId as unknown as string]?.cells ?? {}).length\n );\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 function insertTemporaryRow<T extends TType>(data: Partial<T>, rowIndex: number) {\n const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${uuid()}`;\n const value: Partial<TType> = {\n ...data,\n [rowIdentityAccessor]: newRowId,\n };\n\n dispatch({\n type: 'insertTemporaryRow',\n rowId: newRowId,\n payload: { index: rowIndex, value },\n });\n\n return newRowId;\n }\n\n // cells\n function setCellValue<T extends TType>(cell: ReactTableCell<T, unknown>, rowIndex: number, 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 as keyof TType]) {\n dispatch({\n type: 'setCellValue',\n rowId,\n payload: {\n columnId,\n index: rowIndex,\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] as Partial<TType>)?.[cell.column.id as keyof TType];\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>(\n cell: ReactTableCell<T, unknown>,\n rowIndex: number,\n nextValue: any,\n shouldRunUpdaters = true\n ) {\n const changes: Partial<TType> =\n nextValue !== undefined\n ? { ...state.changes.rows[cell.row.id], [cell.column.id]: nextValue }\n : { ...state.changes.rows[cell.row.id] };\n\n if (!Object.keys(changes).length) {\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' && shouldRunUpdaters) {\n const previousRowValue = {\n ...(state.changes.originals[cell.row.id] as TType),\n //...getRowChangeset(updatersRef.current[cell.row.id], rowIdentityAccessor),\n };\n const nextRowValue = {\n ...(state.changes.originals[cell.row.id] as TType),\n ...changes,\n };\n updatesForOtherCells = ((await handleChange(\n cell.column.id,\n changes[cell.column.id as keyof TType],\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 = { ...changes, ...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 - if there are changes, and if there is an original stored\n let validationErrors: Record<string, string> = {};\n\n if (validator && Object.keys(nextChanges).length && state.changes.originals[cell.row.id]) {\n // merge with the original so we get a full row\n const nextRowValue = { ...(state.changes.originals[cell.row.id] as TType), ...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 as keyof TType], 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 index: rowIndex,\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 index: state.indexes[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 const rowChanges = changes[rowId] ?? {};\n\n // don't try to save if - already saving, or there are known errors\n if (!Object.keys(rowChanges).length || status === 'saving' || status === 'errored') {\n continue;\n }\n\n setRowStatus(rowId, 'saving');\n\n const changeSet = { ...(state.changes.originals[rowId] as TType), ...rowChanges };\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 unknown 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 await 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 async 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 if (typeof handleDiscard === 'function') {\n await handleDiscard();\n }\n }\n\n return {\n // row\n getRowValue,\n getRowMoveReason,\n hasRowErrors,\n hasRowErrorsShownInAlert,\n hasTemporaryRowErrors,\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 insertTemporaryRow,\n temporaryRows: state.temporaryRows,\n };\n}\n"],"names":["DELAY_BEFORE_REMOVING_SAVE_STATUS","reducer","state","action","type","rowId","payload","columnId","index","row","value","changes","rows","setWith","Object","originals","indexes","rowIdentityAccessor","omit","keys","length","errors","moveReasons","cellErrors","original","status","undefined","temporaryRows","filter","concat","usePendingChangesState","handleSave","handleChange","handleDiscard","validator","discardChanges","table","resetRowPinning","dispatch","_temp8","Promise","resolve","then","e","reject","saveChanges","console","warn","completed","_temp7","_forOf","getRowStatus","_catch","_changes$rowId","_temp6","_result","_exit","changeSet","setRowStatus","setTimeout","rowChanges","isTemporaryRow","_temp5","error","_error$response","ReferenceError","TypeError","response","rowError","Error","_error$response2","message","data","_error$response3","cells","shouldShowErrorAlert","_result3","onCellChanged","cell","rowIndex","nextValue","shouldRunUpdaters","cellsToActOn","column","id","updatesForOtherCells","allCells","_getAllCellsByColumnId","forEach","accessor","validationErrors","nextCellErrors","nextMoveReasons","_allCells$accessor","getIsSorted","reason","willRowMove","nextChanges","localization","_state$changes$errors11","_temp","nextRowValue","_validator","_temp2","_temp3","previousRowValue","_handleChange","_temp4","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","hasTemporaryRowErrors","newRow","_state$temporaryRows","_state$changes$errors5","_state$changes$errors6","_state$changes$errors7","insertTemporaryRow","newRowId","TEMPORARY_ROW_ID_PREFIX","uuid","setCellValue","getCellValue","_state$changes$rows2","_state$changes$rows2$","getCellError","_state$changes$errors8","_state$changes$errors9","_state$changes$errors10","getErrorsShownInAlert","rowsWithErrors","map","hasSaved","hasChanges"],"mappings":";;;;;;;;AAcA,MAAMA,iCAAiC,GAAG,IAAI;AAsC9C,SAASC,OAAOA,CAAkBC,KAA0B,EAAEC,MAA0B;EACpF,MAAM;IAAEC,IAAI;IAAEC,KAAK;IAAEC;GAAS,GAAGH,MAAM;EAEvC,QAAQC,IAAI;IACR,KAAK,cAAc;MAAE;QACjB,MAAM;UAAEG,QAAQ;UAAEC,KAAK;UAAEC,GAAG;UAAEC;SAAO,GAAGJ,OAAO;QAC/C,OAAO;UACH,GAAGJ,KAAK;UACRS,OAAO,EAAE;YACL,GAAGT,KAAK,CAACS,OAAO;YAChBC,IAAI,EAAEC,OAAO,CAACX,KAAK,CAACS,OAAO,CAACC,IAAI,EAAE,GAAGP,KAAK,IAAIE,QAAQ,EAAE,EAAEG,KAAK,EAAEI,MAAM,CAAC;YACxEC,SAAS,EAAEF,OAAO,CAACX,KAAK,CAACS,OAAO,CAACI,SAAS,EAAEV,KAAK,EAAEI,GAAG,EAAEK,MAAM;WACjE;UACDE,OAAO,EAAEH,OAAO,CAACX,KAAK,CAACc,OAAO,EAAEX,KAAK,EAAEG,KAAK,EAAEM,MAAM;SACvD;;IAGL,KAAK,iBAAiB;MAAE;QACpB,MAAM;UAAEP,QAAQ;UAAEU;SAAqB,GAAGX,OAAO;QACjD,MAAMK,OAAO,GAAGO,IAAI,CAAChB,KAAK,CAACS,OAAO,CAACC,IAAI,EAAE,GAAGP,KAAK,IAAIE,QAAQ,EAAE,CAAC;;QAGhE,IAAI,CAACO,MAAM,CAACK,IAAI,CAACR,OAAO,CAACN,KAAK,CAAC,CAAC,CAACe,MAAM,EAAE;UACrC,OAAOnB,OAAO,CAACC,KAAK,EAAE;YAAEE,IAAI,EAAE,WAAW;YAAEC,KAAK;YAAEC,OAAO,EAAE;cAAEW;;WAAuB,CAAC;;QAGzF,OAAO;UACH,GAAGf,KAAK;UACRS,OAAO,EAAE;YACL,GAAGT,KAAK,CAACS,OAAO;YAChBC,IAAI,EAAEM,IAAI,CAAChB,KAAK,CAACS,OAAO,CAACC,IAAI,EAAE,GAAGP,KAAK,IAAIE,QAAQ,EAAE,CAAC;YACtDc,MAAM,EAAEH,IAAI,CAAChB,KAAK,CAACS,OAAO,CAACU,MAAM,EAAE,GAAGhB,KAAK,UAAUE,QAAQ,EAAE,CAAC;YAChEe,WAAW,EAAEJ,IAAI,CAAChB,KAAK,CAACS,OAAO,CAACW,WAAW,EAAE,GAAGjB,KAAK,IAAIE,QAAQ,EAAE;;SAE1E;;IAGL,KAAK,WAAW;MAAE;QACd,MAAM;UAAEgB,UAAU;UAAEf,KAAK;UAAEc,WAAW;UAAEE,QAAQ;UAAEd;SAAO,GAAGJ,OAAO;QACnE,OAAO;UACH,GAAGJ,KAAK;UACRS,OAAO,EAAE;YACL,GAAGT,KAAK,CAACS,OAAO;YAChBC,IAAI,EAAEC,OAAO,CAACX,KAAK,CAACS,OAAO,CAACC,IAAI,EAAEP,KAAK,EAAEK,KAAK,EAAEI,MAAM,CAAC;YACvDO,MAAM,EAAER,OAAO,CAACX,KAAK,CAACS,OAAO,CAACU,MAAM,EAAE,GAAGhB,KAAK,QAAQ,EAAEkB,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAIrB,KAAK,CAACS,OAAO,CAACU,MAAM,CAAChB,KAAK,CAAC,EAAES,MAAM,CAAC;YAC1GC,SAAS,EAAEF,OAAO,CAACX,KAAK,CAACS,OAAO,CAACI,SAAS,EAAEV,KAAK,EAAEmB,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAItB,KAAK,CAACS,OAAO,CAACI,SAAS,CAACV,KAAK,CAAC,EAAES,MAAM,CAAC;YACtGQ,WAAW,EAAET,OAAO,CAChBX,KAAK,CAACS,OAAO,CAACW,WAAW,EACzBjB,KAAK,EACLiB,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAIpB,KAAK,CAACS,OAAO,CAACW,WAAW,CAACjB,KAAK,CAAC,EAC/CS,MAAM,CACT;;YAEDW,MAAM,EAAEZ,OAAO,CAACX,KAAK,CAACS,OAAO,CAACc,MAAM,EAAEpB,KAAK,EAAEqB,SAAS,EAAEZ,MAAM;WACjE;UACDE,OAAO,EAAEH,OAAO,CAACX,KAAK,CAACc,OAAO,EAAEX,KAAK,EAAEG,KAAK,EAAEM,MAAM;SACvD;;IAGL,KAAK,WAAW;MAAE;QACd,MAAM;UAAEG;SAAqB,GAAGX,OAAO;QACvC,OAAO;UACH,GAAGJ,KAAK;UACRS,OAAO,EAAE;YACL,GAAGT,KAAK,CAACS,OAAO;YAChBC,IAAI,EAAEM,IAAI,CAAChB,KAAK,CAACS,OAAO,CAACC,IAAI,EAAEP,KAAK,CAAC;YACrCgB,MAAM,EAAEH,IAAI,CAAChB,KAAK,CAACS,OAAO,CAACU,MAAM,EAAEhB,KAAK,CAAC;YACzCiB,WAAW,EAAEJ,IAAI,CAAChB,KAAK,CAACS,OAAO,CAACW,WAAW,EAAEjB,KAAK,CAAC;YACnDU,SAAS,EAAEG,IAAI,CAAChB,KAAK,CAACS,OAAO,CAACI,SAAS,EAAEV,KAAK,CAAC;YAC/CoB,MAAM,EAAEP,IAAI,CAAChB,KAAK,CAACS,OAAO,CAACc,MAAM,EAAEpB,KAAK;WAC3C;UACDW,OAAO,EAAEE,IAAI,CAAChB,KAAK,CAACc,OAAO,EAAEX,KAAK,CAAC;UACnCsB,aAAa,EAAEzB,KAAK,CAACyB,aAAa,CAACC,MAAM,CAACnB,GAAG,IAAKA,GAAW,CAACQ,mBAAmB,CAAC,KAAKZ,KAAK;SAC/F;;IAGL,KAAK,cAAc;MAAE;QACjB,MAAM;UAAEoB;SAAQ,GAAGnB,OAAO;QAC1B,OAAO;UACH,GAAGJ,KAAK;UACRS,OAAO,EAAE;YACL,GAAGT,KAAK,CAACS,OAAO;YAChBc,MAAM,EAAEA,MAAM,GAAGZ,OAAO,CAACX,KAAK,CAACS,OAAO,CAACc,MAAM,EAAEpB,KAAK,EAAEoB,MAAM,EAAEX,MAAM,CAAC,GAAGI,IAAI,CAAChB,KAAK,CAACS,OAAO,CAACc,MAAM,EAAEpB,KAAK;;SAE/G;;IAGL,KAAK,cAAc;MAAE;QACjB,MAAM;UAAE,GAAGgB;SAAQ,GAAGf,OAAO;QAC7B,OAAO;UACH,GAAGJ,KAAK;UACRS,OAAO,EAAE;YACL,GAAGT,KAAK,CAACS,OAAO;YAChBU,MAAM,EAAER,OAAO,CAACX,KAAK,CAACS,OAAO,CAACU,MAAM,EAAEhB,KAAK,EAAEgB,MAAM,EAAEP,MAAM;;SAElE;;IAGL,KAAK,oBAAoB;MAAE;QACvB,MAAM;UAAEN,KAAK;UAAEE;SAAO,GAAGJ,OAAO;QAChC,OAAO;UACH,GAAGJ,KAAK;UACRyB,aAAa,EAAEzB,KAAK,CAACyB,aAAa,CAACE,MAAM,CAACnB,KAAK,CAAC;UAChDC,OAAO,EAAE;YACL,GAAGT,KAAK,CAACS,OAAO;YAChBC,IAAI,EAAEC,OAAO,CAACX,KAAK,CAACS,OAAO,CAACC,IAAI,EAAEP,KAAK,EAAEK,KAAK,EAAEI,MAAM,CAAC;YACvDC,SAAS,EAAEF,OAAO,CAACX,KAAK,CAACS,OAAO,CAACI,SAAS,EAAEV,KAAK,EAAEK,KAAK,EAAEI,MAAM;WACnE;UACDE,OAAO,EAAEH,OAAO,CAACX,KAAK,CAACc,OAAO,EAAEX,KAAK,EAAEG,KAAK,EAAEM,MAAM;SACvD;;IAGL;MACI,OAAOZ,KAAK;;AAExB;SAEgB4B,sBAAsBA,CAClCC,UAAuD,EACvDC,YAA2D,EAC3DC,aAAsD,EACtDhB,mBAAgC,EAChCiB,SAAsD;QA4TvCC,cAAc,aAAkB9B,KAAa,EAAE+B,KAAoB;IAAA;;MAE9EA,KAAK,CAACC,eAAe,CAAC,IAAI,CAAC;MAE3BC,QAAQ,CAAC;QACLlC,IAAI,EAAE,WAAW;QACjBC,KAAK;QACLC,OAAO,EAAE;UAAEW;;OACd,CAAC;MAAC,MAAAsB,MAAA;QAAA,IAEC,OAAON,aAAa,KAAK,UAAU;UAAA,OAAAO,OAAA,CAAAC,OAAA,CAC7BR,aAAa,EAAE,EAAAS,IAAA;;;MAAA,OAAAF,OAAA,CAAAC,OAAA,CAAAF,MAAA,IAAAA,MAAA,CAAAG,IAAA,GAAAH,MAAA,CAAAG,IAAA;KAE5B,QAAAC,CAAA;MAAA,OAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA;;;EAAA,MA3GcE,WAAW,aAAkBT,KAAoB,EAAE/B,QAA4BqB,SAAS;IAAA;;MACnG,IAAI,CAACK,UAAU,EAAE;QACbe,OAAO,CAACC,IAAI,CAAC,uDAAuD,CAAC;QACrE,OAAAP,OAAA,CAAAC,OAAA,CAAO,KAAK;;;MAIhB,MAAM9B,OAAO,GAAGN,KAAK,GAAG;QAAE,CAACA,KAAK,GAAGH,KAAK,CAACS,OAAO,CAACC,IAAI,CAACP,KAAK;OAAG,GAAGH,KAAK,CAACS,OAAO,CAACC,IAAI;MAEnF,IAAIoC,SAAS,GAAG,IAAI;MAAC,MAAAC,MAAA,GAAAC,MAAA,CAEDpC,MAAM,CAACK,IAAI,CAACR,OAAO,CAAC,YAA7BN,KAAK,EAA0B;QACtC,MAAMoB,MAAM,GAAG0B,YAAY,CAAC9C,KAAK,CAAC;QAAC,OAAA+C,MAAA,aAE/B;UAAA,IAAAC,cAAA;UAAA,SAAAC,OAAAC,OAAA;YAAA,OAAAC,KAAA,GAAAD,OAAA,GAAAf,OAAA,CAAAC,OAAA,CA2BMV,UAAU,CAAC0B,SAAS,CAAC,EAAAf,IAAA;;cAE3B,OAAAF,OAAA,CAAAC,OAAA,CACMN,cAAc,CAAC9B,KAAK,EAAE+B,KAAK,CAAC,EAAAM,IAAA;;gBAGlCgB,YAAY,CAACrD,KAAK,EAAE,OAAO,CAAC;gBAC5BsD,UAAU,CAAC;kBACPD,YAAY,CAACrD,KAAK,EAAEqB,SAAS,CAAC;iBACjC,EAAE1B,iCAAiC,CAAC;;;;UAnCrC,MAAM4D,UAAU,IAAAP,cAAA,GAAG1C,OAAO,CAACN,KAAK,CAAC,cAAAgD,cAAA,cAAAA,cAAA,GAAI,EAAE;;UAGvC,IAAI,CAACvC,MAAM,CAACK,IAAI,CAACyC,UAAU,CAAC,CAACxC,MAAM,IAAIK,MAAM,KAAK,QAAQ,IAAIA,MAAM,KAAK,SAAS,EAAE;YAAA;;UAIpFiC,YAAY,CAACrD,KAAK,EAAE,QAAQ,CAAC;UAE7B,MAAMoD,SAAS,GAAG;YAAE,GAAIvD,KAAK,CAACS,OAAO,CAACI,SAAS,CAACV,KAAK,CAAW;YAAE,GAAGuD;WAAY;;UAGjF,IAAIC,cAAc,CAACJ,SAAS,CAACxC,mBAAmB,CAAsB,CAAC,EAAE;YACrE,OAAOwC,SAAS,CAACxC,mBAAmB,CAAC;;;UAGzC,MAAA6C,MAAA;YAAA,IACI5B,SAAS;cAAA,OAAAM,OAAA,CAAAC,OAAA,CACYP,SAAS,CAACuB,SAAS,CAAC,EAAAf,IAAA,WAAnCrB,MAAM;gBAAA,IAERA,MAAM,IAAIP,MAAM,CAACK,IAAI,CAACE,MAAM,CAAC,CAACD,MAAM;kBACpC,MAAMC,MAAM;;;;;UAAC,OAAAyC,MAAA,IAAAA,MAAA,CAAApB,IAAA,GAAAoB,MAAA,CAAApB,IAAA,CAAAY,MAAA,IAAAA,MAAA,CAAAQ,MAAA;SAexB,YAAQC,KAAK,EAAE;UAAA,IAAAC,eAAA;UACZ,IAAID,KAAK,YAAYE,cAAc,IAAIF,KAAK,YAAYG,SAAS,IAAK,CAAAH,KAAa,aAAbA,KAAa,wBAAAC,eAAA,GAAbD,KAAa,CAAEI,QAAQ,cAAAH,eAAA,uBAAvBA,eAAA,CAAyBvC,MAAM,KAAI,GAAG,EAAE;YAC1GqB,OAAO,CAACiB,KAAK,CAACA,KAAK,CAAC;;;;UAKxB,IAAIK,QAA4B;UAChC,IAAI7C,UAAU;UAEd,IAAI,OAAOwC,KAAK,KAAK,QAAQ,EAAE;YAC3BK,QAAQ,GAAGL,KAAK;WACnB,MAAM,IAAIA,KAAK,YAAYM,KAAK,EAAE;YAAA,IAAAC,gBAAA;YAC/BF,QAAQ,GAAGL,KAAK,CAACQ,OAAO;;YAGxB,IAAI,SAAAD,gBAAA,GAAQP,KAAa,CAACI,QAAQ,cAAAG,gBAAA,uBAAtBA,gBAAA,CAAwBE,IAAI,MAAK,QAAQ,EAAE;cAAA,IAAAC,gBAAA;cACnDlD,UAAU,IAAAkD,gBAAA,GAAIV,KAAa,CAACI,QAAQ,cAAAM,gBAAA,uBAAtBA,gBAAA,CAAwBD,IAAI;;WAEjD,MAAM,IAAI,OAAOT,KAAK,KAAK,QAAQ,EAAE;YAClCxC,UAAU,GAAGwC,KAAK;;UAGtB,IAAIK,QAAQ,IAAI7C,UAAU,EAAE;YACxBe,QAAQ,CAAC;cACLlC,IAAI,EAAE,cAAc;cACpBC,KAAK;cACLC,OAAO,EAAE;gBACLG,GAAG,EAAE2D,QAAQ;gBACbM,KAAK,EAAEnD,UAAU;gBACjBoD,oBAAoB,EAAE;;aAE7B,CAAC;;UAGNjB,YAAY,CAACrD,KAAK,EAAE,SAAS,CAAC;UAC9B2C,SAAS,GAAG,KAAK;SACpB;OACJ;QAAA,OAAAQ,KAAA;;MAAA,OAAAhB,OAAA,CAAAC,OAAA,CAAAQ,MAAA,IAAAA,MAAA,CAAAP,IAAA,GAAAO,MAAA,CAAAP,IAAA,WAAAkC,QAAA;QAAA,OAAApB,KAAA,GAAAoB,QAAA,GAEM5B,SAAS;WAAAQ,KAAA,GAAAP,MAAA,GAATD,SAAS;KACnB,QAAAL,CAAA;MAAA,OAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA;;;EAAA,MA7MckC,aAAa,aACxBC,IAAgC,EAChCC,QAAgB,EAChBC,SAAc,EACdC,iBAAiB,GAAG,IAAI;IAAA;;;;;;UA+CxB,MAAMC,YAAY,GAAG,CAACJ,IAAI,CAACK,MAAM,CAACC,EAAE,EAAE,GAAGtE,MAAM,CAACK,IAAI,CAACkE,oBAAoB,CAAC,CAAC;UAC3E,MAAMC,QAAQ,GAAGR,IAAI,CAACrE,GAAG,CAAC8E,sBAAsB,EAAE;UAElDL,YAAY,CAACM,OAAO,CAACC,QAAQ;YACzB,IAAIC,gBAAgB,CAACD,QAAQ,CAAC,EAAE;cAC5BE,cAAc,CAACF,QAAQ,CAAC,GAAGC,gBAAgB,CAACD,QAAQ,CAAC;;cAErD,OAAOG,eAAe,CAACH,QAAQ,CAAC;aACnC,MAAM;cAAA,IAAAI,kBAAA;;cAEH,OAAOF,cAAc,CAACF,QAAQ,CAAC;cAE/B,KAAAI,kBAAA,GAAIP,QAAQ,CAACG,QAAQ,CAAC,cAAAI,kBAAA,eAAlBA,kBAAA,CAAoBV,MAAM,CAACW,WAAW,EAAE,EAAE;;gBAE1C,MAAMC,MAAM,GAAGC,WAAW,CAAClB,IAAI,EAAEmB,WAAW,CAACR,QAAuB,CAAC,EAAEV,QAAQ,EAAEmB,YAAY,CAAC;;gBAG9F,IAAIH,MAAM,EAAE;kBACRH,eAAe,CAACH,QAAQ,CAAC,GAAGM,MAAM;iBACrC,MAAM;kBACH,OAAOH,eAAe,CAACH,QAAQ,CAAC;;;;WAI/C,CAAC;UAEFnD,QAAQ,CAAC;YACLlC,IAAI,EAAE,WAAW;YACjBC,KAAK,EAAEyE,IAAI,CAACrE,GAAG,CAAC2E,EAAE;YAClB9E,OAAO,EAAE;cACLiB,UAAU,EAAEoE,cAAc;cAC1BnF,KAAK,EAAEuE,QAAQ;cACfzD,WAAW,EAAEsE,eAAe;cAC5BlF,KAAK,EAAEuF;;WAEd,CAAC;;;QAlDF,MAAMA,WAAW,GAAG;UAAE,GAAGtF,OAAO;UAAE,GAAG0E;SAAsB;QAC3D,MAAMO,eAAe,GAAyB;UAAE,GAAG1F,KAAK,CAACS,OAAO,CAACW,WAAW,CAACwD,IAAI,CAACrE,GAAG,CAAC2E,EAAE;SAAG;QAC3F,MAAMO,cAAc,GAA2B;UAAE,KAAAQ,uBAAA,GAAGjG,KAAK,CAACS,OAAO,CAACU,MAAM,CAACyD,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC,cAAAe,uBAAA,uBAAjCA,uBAAA,CAAmCzB,KAAK;SAAE;;QAG9F,IAAIgB,gBAAgB,GAA2B,EAAE;QAAC,MAAAU,KAAA;UAAA,IAE9ClE,SAAS,IAAIpB,MAAM,CAACK,IAAI,CAAC8E,WAAW,CAAC,CAAC7E,MAAM,IAAIlB,KAAK,CAACS,OAAO,CAACI,SAAS,CAAC+D,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC;;YAEpF,MAAMiB,YAAY,GAAG;cAAE,GAAInG,KAAK,CAACS,OAAO,CAACI,SAAS,CAAC+D,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAW;cAAE,GAAGzE,OAAO;cAAE,GAAG0E;aAAsB;YAAC,OAAA7C,OAAA,CAAAC,OAAA,CACtFP,SAAS,CAACmE,YAAY,CAAC,EAAA3D,IAAA,WAAA4D,UAAA;cAAlDZ,gBAAgB,GAAAY,UAAA,aAAAA,UAAA,cAAAA,UAAA,GAAuC,EAA6B;;;;QAAC,OAAAF,KAAA,IAAAA,KAAA,CAAA1D,IAAA,GAAA0D,KAAA,CAAA1D,IAAA,CAAA6D,MAAA,IAAAA,MAAA,CAAAH,KAAA;;MAxCzF,MAAMzF,OAAO,GACTqE,SAAS,KAAKtD,SAAS,GACjB;QAAE,GAAGxB,KAAK,CAACS,OAAO,CAACC,IAAI,CAACkE,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC;QAAE,CAACN,IAAI,CAACK,MAAM,CAACC,EAAE,GAAGJ;OAAW,GACnE;QAAE,GAAG9E,KAAK,CAACS,OAAO,CAACC,IAAI,CAACkE,IAAI,CAACrE,GAAG,CAAC2E,EAAE;OAAG;MAEhD,IAAI,CAACtE,MAAM,CAACK,IAAI,CAACR,OAAO,CAAC,CAACS,MAAM,EAAE;QAC9B,OAAAoB,OAAA,CAAAC,OAAA;;MAGJ,IAAI4C,oBAAoB,GAAe,EAAE;;MAEzC,MAAAmB,MAAA;QAAA,IACI,OAAOxE,YAAY,KAAK,UAAU,IAAIiD,iBAAiB;UACvD,MAAMwB,gBAAgB,GAAG;YACrB,GAAIvG,KAAK,CAACS,OAAO,CAACI,SAAS,CAAC+D,IAAI,CAACrE,GAAG,CAAC2E,EAAE;WAE1C;UACD,MAAMiB,YAAY,GAAG;YACjB,GAAInG,KAAK,CAACS,OAAO,CAACI,SAAS,CAAC+D,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAW;YAClD,GAAGzE;WACN;UAAC,OAAA6B,OAAA,CAAAC,OAAA,CAC6BT,YAAY,CACvC8C,IAAI,CAACK,MAAM,CAACC,EAAE,EACdzE,OAAO,CAACmE,IAAI,CAACK,MAAM,CAACC,EAAiB,CAAC,EACtCiB,YAAY,EACZI,gBAAgB,CACnB,EAAA/D,IAAA,WAAAgE,aAAA;YALDrB,oBAAoB,GAAAqB,aAAA,aAAAA,aAAA,cAAAA,aAAA,GAKd,EAAiB;;;;MAAC,OAAAlE,OAAA,CAAAC,OAAA,CAAA+D,MAAA,IAAAA,MAAA,CAAA9D,IAAA,GAAA8D,MAAA,CAAA9D,IAAA,CAAAiE,MAAA,IAAAA,MAAA,CAAAH,MAAA;KAuD/B,QAAA7D,CAAA;MAAA,OAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA;;;EAlMD,MAAMuD,YAAY,GAAGU,eAAe,EAAE;EACtC,MAAM,CAAC1G,KAAK,EAAEoC,QAAQ,CAAC,GAAGuE,cAAK,CAACC,UAAU,CAAC7G,OAAO,EAAE;IAChDU,OAAO,EAAE;MAAEC,IAAI,EAAE,EAAE;MAAES,MAAM,EAAE,EAAE;MAAEC,WAAW,EAAE,EAAE;MAAEP,SAAS,EAAE,EAAE;MAAEU,MAAM,EAAE;KAAI;IAC7ET,OAAO,EAAE,EAAE;IACXW,aAAa,EAAE;GAClB,CAAC;;EAGF,SAASoF,WAAWA,CAAC1G,KAAa;;IAC9B,QAAA2G,qBAAA,IAAAC,mBAAA,GAAO/G,KAAK,CAACS,OAAO,CAACC,IAAI,cAAAqG,mBAAA,uBAAlBA,mBAAA,CAAqB5G,KAAK,CAAC,cAAA2G,qBAAA,cAAAA,qBAAA,GAAItF,SAAS;;EAGnD,SAASwF,gBAAgBA,CAAC7G,KAAa;;IACnC,QAAA8G,eAAA,GAAOrG,MAAM,CAACsG,MAAM,EAAAC,qBAAA,IAAAC,sBAAA,GAACpH,KAAK,CAACS,OAAO,CAACW,WAAW,cAAAgG,sBAAA,uBAAzBA,sBAAA,CAA4BjH,KAAK,CAAC,cAAAgH,qBAAA,cAAAA,qBAAA,GAAI,EAAE,CAAC,CAAC,CAAC,CAAC,cAAAF,eAAA,cAAAA,eAAA,GAAIzF,SAAS;;EAGlF,SAAS6F,YAAYA,CAAClH,KAAa;;IAC/B,OAAO,CAAC,GAAAmH,qBAAA,GAACtH,KAAK,CAACS,OAAO,CAACU,MAAM,CAAChB,KAAK,CAAC,cAAAmH,qBAAA,eAA3BA,qBAAA,CAA6B/G,GAAG,KAAI,CAAC,CAACK,MAAM,CAACK,IAAI,EAAAsG,sBAAA,IAAAC,sBAAA,GAACxH,KAAK,CAACS,OAAO,CAACU,MAAM,CAAChB,KAAK,CAAC,cAAAqH,sBAAA,uBAA3BA,sBAAA,CAA6BhD,KAAK,cAAA+C,sBAAA,cAAAA,sBAAA,GAAI,EAAE,CAAC,CAACrG,MAAM;;EAG/G,SAASuG,wBAAwBA,CAACtH,KAAa;;IAC3C,OAAOkH,YAAY,CAAClH,KAAK,CAAC,IAAI,CAAC,GAAAuH,sBAAA,GAAC1H,KAAK,CAACS,OAAO,CAACU,MAAM,CAAChB,KAAK,CAAC,cAAAuH,sBAAA,eAA3BA,sBAAA,CAA6BjD,oBAAoB;;EAGrF,SAASkD,qBAAqBA;;IAC1B,MAAMC,MAAM,IAAAC,oBAAA,GAAG7H,KAAK,CAACyB,aAAa,cAAAoG,oBAAA,uBAAnBA,oBAAA,CAAsB,CAAC,CAAkB;IAExD,IAAI,CAACD,MAAM,EAAE;MACT,OAAO,KAAK;;IAGhB,MAAMzH,KAAK,GAAGyH,MAAM,CAAC7G,mBAAkC,CAAC;IACxD,OACI,CAAC,GAAA+G,sBAAA,GAAC9H,KAAK,CAACS,OAAO,CAACU,MAAM,CAAChB,KAA0B,CAAC,cAAA2H,sBAAA,eAAhDA,sBAAA,CAAkDvH,GAAG,KACvD,CAAC,CAACK,MAAM,CAACK,IAAI,EAAA8G,sBAAA,IAAAC,sBAAA,GAAChI,KAAK,CAACS,OAAO,CAACU,MAAM,CAAChB,KAA0B,CAAC,cAAA6H,sBAAA,uBAAhDA,sBAAA,CAAkDxD,KAAK,cAAAuD,sBAAA,cAAAA,sBAAA,GAAI,EAAE,CAAC,CAAC7G,MAAM;;EAI3F,SAAS+B,YAAYA,CAAC9C,KAAa;IAC/B,OAAOH,KAAK,CAACS,OAAO,CAACc,MAAM,CAACpB,KAAK,CAAC;;EAGtC,SAASqD,YAAYA,CAACrD,KAAa,EAAEoB,MAAoC;IACrEa,QAAQ,CAAC;MACLlC,IAAI,EAAE,cAAc;MACpBC,KAAK;MACLC,OAAO,EAAE;QACLmB;;KAEP,CAAC;;EAGN,SAAS0G,kBAAkBA,CAAkB3D,IAAgB,EAAEO,QAAgB;IAC3E,MAAMqD,QAAQ,GAAG,GAAGC,uBAAuB,GAAGC,EAAI,EAAE,EAAE;IACtD,MAAM5H,KAAK,GAAmB;MAC1B,GAAG8D,IAAI;MACP,CAACvD,mBAAmB,GAAGmH;KAC1B;IAED9F,QAAQ,CAAC;MACLlC,IAAI,EAAE,oBAAoB;MAC1BC,KAAK,EAAE+H,QAAQ;MACf9H,OAAO,EAAE;QAAEE,KAAK,EAAEuE,QAAQ;QAAErE;;KAC/B,CAAC;IAEF,OAAO0H,QAAQ;;;EAInB,SAASG,YAAYA,CAAkBzD,IAAgC,EAAEC,QAAgB,EAAErE,KAAc;IACrG,MAAML,KAAK,GAAGyE,IAAI,CAACrE,GAAG,CAAC2E,EAAE;IACzB,MAAM7E,QAAQ,GAAGuE,IAAI,CAACK,MAAM,CAACC,EAAE;;IAG/B,IAAI1E,KAAK,KAAKoE,IAAI,CAACrE,GAAG,CAACe,QAAQ,CAACjB,QAAuB,CAAC,EAAE;MACtD+B,QAAQ,CAAC;QACLlC,IAAI,EAAE,cAAc;QACpBC,KAAK;QACLC,OAAO,EAAE;UACLC,QAAQ;UACRC,KAAK,EAAEuE,QAAQ;UACftE,GAAG,EAAEqE,IAAI,CAACrE,GAAG,CAACe,QAAQ;UACtBd;;OAEP,CAAC;;;SAGD,IAAIoE,IAAI,CAACrE,GAAG,CAAC2E,EAAE,IAAIlF,KAAK,CAACS,OAAO,CAACC,IAAI,EAAE;MACxC0B,QAAQ,CAAC;QACLlC,IAAI,EAAE,iBAAiB;QACvBC,KAAK;QACLC,OAAO,EAAE;UACLC,QAAQ;UACRU;;OAEP,CAAC;;;EAIV,SAASuH,YAAYA,CAAkB1D,IAAgC;;IACnE,QAAA2D,oBAAA,GAAQvI,KAAK,CAACS,OAAO,CAACC,IAAI,cAAA6H,oBAAA,wBAAAC,qBAAA,GAAlBD,oBAAA,CAAqB3D,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAoB,cAAAsD,qBAAA,uBAApDA,qBAAA,CAAuD5D,IAAI,CAACK,MAAM,CAACC,EAAiB,CAAC;;EAGjG,SAASuD,YAAYA,CAAkB7D,IAAgC;;IACnE,QAAA8D,sBAAA,GAAO1I,KAAK,CAACS,OAAO,CAACU,MAAM,cAAAuH,sBAAA,wBAAAC,sBAAA,GAApBD,sBAAA,CAAuB9D,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC,cAAAyD,sBAAA,wBAAAC,uBAAA,GAAnCD,sBAAA,CAAqCnE,KAAK,cAAAoE,uBAAA,uBAA1CA,uBAAA,CAA6ChE,IAAI,CAACK,MAAM,CAACC,EAAE,CAAC;;EA6FvE,SAAS2D,qBAAqBA;IAC1B,MAAMC,cAAc,GAAGlI,MAAM,CAACK,IAAI,CAACjB,KAAK,CAACS,OAAO,CAACU,MAAM,CAAC;IAExD,IAAI,CAAC2H,cAAc,CAAC5H,MAAM,EAAE;MACxB,OAAO,EAAE;;IAGb,OAAO4H,cAAc,CAACpH,MAAM,CAAC+F,wBAAwB,CAAC,CAACsB,GAAG,CAAC5I,KAAK,KAAK;MACjEA,KAAK;MACLG,KAAK,EAAEN,KAAK,CAACc,OAAO,CAACX,KAAK,CAAC;MAC3BM,OAAO,EAAET,KAAK,CAACS,OAAO,CAACC,IAAI,CAACP,KAAK,CAAwB;MACzDgB,MAAM,EAAEnB,KAAK,CAACS,OAAO,CAACU,MAAM,CAAChB,KAAK;KACrC,CAAC,CAAC;;EAGP,SAAS6I,QAAQA;IACb,OAAO,CAAC,CAACpI,MAAM,CAACsG,MAAM,CAAClH,KAAK,CAACS,OAAO,CAACc,MAAM,CAAC,CAACG,MAAM,CAAClB,KAAK,IAAIA,KAAK,KAAK,OAAO,CAAC,CAACU,MAAM;;EAG1F,SAAS+H,UAAUA,CAAC9I,KAAc;IAC9B,OAAOA,KAAK,GAAG,CAAC,CAACH,KAAK,CAACS,OAAO,CAACC,IAAI,CAACP,KAAK,CAAC,GAAG,CAAC,CAACS,MAAM,CAACK,IAAI,CAACjB,KAAK,CAACS,OAAO,CAACC,IAAI,CAAC,CAACQ,MAAM;;EAgHzF,OAAO;;IAEH2F,WAAW;IACXG,gBAAgB;IAChBK,YAAY;IACZI,wBAAwB;IACxBE,qBAAqB;IACrB1E,YAAY;IACZO,YAAY;;IAEZ6E,YAAY;IACZC,YAAY;IACZG,YAAY;IACZ9D,aAAa;;IAEbkE,qBAAqB;IACrBI,UAAU;IACVtG,WAAW;IACXV,cAAc;IACd+G,QAAQ;;IAERf,kBAAkB;IAClBxG,aAAa,EAAEzB,KAAK,CAACyB;GACxB;AACL;;;;"}
@@ -2,8 +2,8 @@ import React__default from 'react';
2
2
  import { isTemporaryRow } from '../util/editing.js';
3
3
  import { usePendingChangesState } from './useEditingState.js';
4
4
 
5
- function useTableEditing(isEnabled = false, handleSave, handleChange, handleCreate, rowIdentityAccessor, validator) {
6
- const createRow = function (table, scrollToIndex, row) {
5
+ function useTableEditing(isEnabled = false, handleSave, handleChange, handleCreate, handleDiscard, rowIdentityAccessor, validator) {
6
+ const createRow = function (table, row) {
7
7
  try {
8
8
  let _exit = false;
9
9
  function _temp2(_result) {
@@ -11,23 +11,28 @@ function useTableEditing(isEnabled = false, handleSave, handleChange, handleCrea
11
11
  const changeset = row !== null && row !== void 0 ? row : handleCreate();
12
12
  try {
13
13
  if (changeset) {
14
- const newRowId = pendingChangesFns.insertTemporaryRow(changeset);
15
- // reset before changing row otherwise the cell changes and validation might run
16
- setLastFocusedCellIndex(undefined);
17
14
  // set the active row to the new row before toggling editing on
18
15
  const temporaryRows = tableMeta.editing.temporaryRows;
19
16
  const nextRowIndex = temporaryRows.length ? tableMeta.length + 1 : tableMeta.length;
20
- tableMeta.rowActive.setRowActiveIndex(nextRowIndex);
17
+ const newRowId = pendingChangesFns.insertTemporaryRow(changeset, nextRowIndex);
18
+ // prep the row
19
+ table.setRowPinning(currentState => {
20
+ var _ref, _currentState$bottom;
21
+ return {
22
+ ...currentState,
23
+ bottom: (_ref = (_currentState$bottom = currentState.bottom) !== null && _currentState$bottom !== void 0 ? _currentState$bottom : []) === null || _ref === void 0 ? void 0 : _ref.concat(newRowId)
24
+ };
25
+ });
26
+ // prep editing mode
27
+ toggleDetailedMode(false);
28
+ setLastFocusedCellIndex(undefined);
21
29
  // wait until set states have run
22
30
  requestAnimationFrame(() => {
23
- toggleEditing(true, table, scrollToIndex, false);
24
- table.setRowPinning(currentState => {
25
- var _ref, _currentState$bottom;
26
- return {
27
- ...currentState,
28
- bottom: (_ref = (_currentState$bottom = currentState.bottom) !== null && _currentState$bottom !== void 0 ? _currentState$bottom : []) === null || _ref === void 0 ? void 0 : _ref.concat(newRowId)
29
- };
30
- });
31
+ tableMeta.rowActive.setRowActiveIndex(nextRowIndex);
32
+ table.resetRowSelection();
33
+ if (!tableMeta.editing.isEditing) {
34
+ setEditing(true);
35
+ }
31
36
  });
32
37
  }
33
38
  } catch (error) {
@@ -40,8 +45,7 @@ function useTableEditing(isEnabled = false, handleSave, handleChange, handleCrea
40
45
  const tableMeta = table.options.meta;
41
46
  const _temp = function () {
42
47
  if (tableMeta.rowActive.rowActiveIndex !== undefined) {
43
- var _table$getRowModel$ro2;
44
- return Promise.resolve(tableMeta.editing.saveChanges(table, (_table$getRowModel$ro2 = table.getRowModel().rows[tableMeta.rowActive.rowActiveIndex]) === null || _table$getRowModel$ro2 === void 0 ? void 0 : _table$getRowModel$ro2.id)).then(function (saved) {
48
+ return Promise.resolve(tableMeta.editing.saveChanges(table)).then(function (saved) {
45
49
  if (!saved) {
46
50
  _exit = true;
47
51
  }
@@ -61,13 +65,14 @@ function useTableEditing(isEnabled = false, handleSave, handleChange, handleCrea
61
65
  const createRowButtonRef = React__default.useRef(null);
62
66
  // store the last focused cell, so that up/down arrow key navigation remains in the same column
63
67
  const [lastFocusedCellIndex, setLastFocusedCellIndex] = React__default.useState(undefined);
64
- const pendingChangesFns = usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, validator);
65
- function toggleEditing(enabled, table, scrollToIndex, doSave = true) {
68
+ const pendingChangesFns = usePendingChangesState(handleSave, handleChange, handleDiscard, rowIdentityAccessor, validator);
69
+ function toggleEditing(enabled, table, scrollToIndex) {
66
70
  const tableMeta = table.options.meta;
67
71
  if (enabled) {
68
72
  var _tableMeta$rowActive$, _table$getRowModel$ro;
69
73
  const index = (_tableMeta$rowActive$ = tableMeta.rowActive.rowActiveIndex) !== null && _tableMeta$rowActive$ !== void 0 ? _tableMeta$rowActive$ : 0;
70
74
  if (tableMeta.rowActive.rowActiveIndex === undefined) {
75
+ console.log('edit toggle active', index);
71
76
  tableMeta.rowActive.setRowActiveIndex(index);
72
77
  }
73
78
  if (!isTemporaryRow((_table$getRowModel$ro = table.getRowModel().rows[index]) === null || _table$getRowModel$ro === void 0 ? void 0 : _table$getRowModel$ro.id)) {
@@ -80,9 +85,7 @@ function useTableEditing(isEnabled = false, handleSave, handleChange, handleCrea
80
85
  setLastFocusedCellIndex(undefined);
81
86
  }
82
87
  setEditing(enabled);
83
- if (doSave) {
84
- pendingChangesFns.saveChanges(table);
85
- }
88
+ pendingChangesFns.saveChanges(table);
86
89
  }
87
90
  return {
88
91
  isEnabled,