@economic/taco 2.46.9 → 2.47.0-server-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Report/Report.d.ts +1 -1
- package/dist/components/SearchInput2/SearchInput2.d.ts +2 -0
- package/dist/components/Table3/components/Row/Editing/CreateNewRow.d.ts +1 -2
- package/dist/components/Table3/components/Row/Editing/TemporaryRow.d.ts +1 -0
- package/dist/components/Table3/features/useEditingState.d.ts +11 -11
- package/dist/components/Table3/features/useTableEditing.d.ts +13 -13
- package/dist/components/Table3/util/editing.d.ts +3 -0
- package/dist/esm/index.css +2 -2
- package/dist/esm/node_modules/babel-plugin-transform-async-to-promises/helpers.mjs.js +17 -17
- package/dist/esm/node_modules/babel-plugin-transform-async-to-promises/helpers.mjs.js.map +1 -1
- package/dist/esm/packages/taco/src/charts/components/Donut/Legend.js +1 -0
- package/dist/esm/packages/taco/src/charts/components/Donut/Legend.js.map +1 -1
- package/dist/esm/packages/taco/src/charts/components/Legend.js +1 -0
- package/dist/esm/packages/taco/src/charts/components/Legend.js.map +1 -1
- package/dist/esm/packages/taco/src/components/SearchInput2/SearchInput2.js +6 -3
- package/dist/esm/packages/taco/src/components/SearchInput2/SearchInput2.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table/hooks/plugins/useRowActions.js +1 -1
- package/dist/esm/packages/taco/src/components/Table3/Table3.js +14 -4
- package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js +14 -9
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js +2 -4
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js +5 -4
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js +32 -51
- package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +5 -3
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js +15 -12
- package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/util/editing.js +9 -1
- package/dist/esm/packages/taco/src/components/Table3/util/editing.js.map +1 -1
- package/dist/esm/packages/taco/src/index.js +1 -0
- package/dist/esm/packages/taco/src/index.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js +2 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Expansion.js +4 -0
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Expansion.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Selection.js +7 -4
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Selection.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Footer.js +7 -2
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Footer.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Summary.js +7 -5
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Summary.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js +24 -22
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/Row.js +41 -4
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/Row.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Print/Print.js +3 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Print/Print.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Search/Search.js +26 -3
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Search/Search.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableGlobalShortcuts.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableGlobalShortcuts.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +36 -9
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/types.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader.js +5 -7
- package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader2.js +249 -0
- package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader2.js.map +1 -0
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowExpansion.js +2 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowExpansion.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableSearch.js +3 -2
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableSearch.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableServerLoading.js +4 -2
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableServerLoading.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableFilterListener.js +3 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableFilterListener.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.js +4 -4
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableSearchListener.js +14 -13
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableSearchListener.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.js +7 -3
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js +4 -4
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/columns.js +4 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/columns.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/presets.js +7 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/presets.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +6 -0
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
- package/dist/hooks/useLazyDebouncedEffect.d.ts +2 -0
- package/dist/index.css +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/primitives/Table/Core/Table.d.ts +1 -0
- package/dist/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.d.ts +2 -2
- package/dist/primitives/Table/Core/components/Row/Row.d.ts +2 -0
- package/dist/primitives/Table/Core/features/useTableRenderer.d.ts +1 -1
- package/dist/primitives/Table/types.d.ts +11 -6
- package/dist/primitives/Table/useTableDataLoader2.d.ts +23 -0
- package/dist/primitives/Table/useTableManager/features/useTableRowExpansion.d.ts +2 -1
- package/dist/primitives/Table/useTableManager/features/useTableSearch.d.ts +4 -2
- package/dist/primitives/Table/useTableManager/features/useTableServerLoading.d.ts +3 -1
- package/dist/primitives/Table/useTableManager/listeners/useTableSearchListener.d.ts +1 -2
- package/dist/primitives/Table/useTableManager/util/columns.d.ts +2 -1
- package/dist/taco.cjs.development.js +607 -229
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/package.json +2 -3
@@ -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
|
@@ -75,7 +78,8 @@ function reducer(state, action) {
|
|
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,7 +140,8 @@ 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:
|
@@ -154,10 +161,10 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
154
161
|
[rowId]: state.changes.rows[rowId]
|
155
162
|
} : state.changes.rows;
|
156
163
|
let completed = true;
|
157
|
-
const
|
164
|
+
const _temp7 = _forOf(Object.keys(changes), function (rowId) {
|
158
165
|
const status = getRowStatus(rowId);
|
159
166
|
return _catch(function () {
|
160
|
-
function
|
167
|
+
function _temp6(_result) {
|
161
168
|
return _exit ? _result : Promise.resolve(handleSave(changeSet)).then(function () {
|
162
169
|
// cleanup changes, we don't need them after saving
|
163
170
|
discardChanges(rowId, table);
|
@@ -182,7 +189,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
182
189
|
delete changeSet[rowIdentityAccessor];
|
183
190
|
}
|
184
191
|
// re-run validation, maybe a cell is already invalid but has never been blurred
|
185
|
-
const
|
192
|
+
const _temp5 = function () {
|
186
193
|
if (validator) {
|
187
194
|
return Promise.resolve(validator(changeSet)).then(function (errors) {
|
188
195
|
if (errors && Object.keys(errors).length) {
|
@@ -191,7 +198,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
191
198
|
});
|
192
199
|
}
|
193
200
|
}();
|
194
|
-
return
|
201
|
+
return _temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5); // send new data to the server
|
195
202
|
}, function (error) {
|
196
203
|
var _error$response;
|
197
204
|
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) {
|
@@ -231,18 +238,18 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
231
238
|
}, function () {
|
232
239
|
return _exit;
|
233
240
|
});
|
234
|
-
return Promise.resolve(
|
241
|
+
return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(function (_result3) {
|
235
242
|
return _exit ? _result3 : completed;
|
236
|
-
}) : _exit ?
|
243
|
+
}) : _exit ? _temp7 : completed);
|
237
244
|
} catch (e) {
|
238
245
|
return Promise.reject(e);
|
239
246
|
}
|
240
247
|
};
|
241
248
|
const onCellChanged = function (cell, rowIndex, shouldRunUpdaters = true) {
|
242
249
|
try {
|
243
|
-
function
|
250
|
+
function _temp4() {
|
244
251
|
var _state$changes$errors11;
|
245
|
-
function
|
252
|
+
function _temp2() {
|
246
253
|
// only set errors and move reasons for the cells we're currently acting on
|
247
254
|
// why? because the UX is not good if we set them for cells the user hasn't touched yet
|
248
255
|
const cellsToActOn = [cell.column.id, ...Object.keys(updatesForOtherCells)];
|
@@ -273,6 +280,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
273
280
|
rowId: cell.row.id,
|
274
281
|
payload: {
|
275
282
|
cellErrors: nextCellErrors,
|
283
|
+
index: rowIndex,
|
276
284
|
moveReasons: nextMoveReasons,
|
277
285
|
value: nextChanges
|
278
286
|
}
|
@@ -291,19 +299,19 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
291
299
|
};
|
292
300
|
// run validation
|
293
301
|
let validationErrors = {};
|
294
|
-
const
|
302
|
+
const _temp = function () {
|
295
303
|
if (validator) {
|
296
304
|
const nextRowValue = {
|
297
305
|
...state.changes.originals[cell.row.id],
|
298
306
|
...changes,
|
299
307
|
...updatesForOtherCells
|
300
308
|
};
|
301
|
-
return Promise.resolve(validator(nextRowValue)).then(function (
|
302
|
-
validationErrors =
|
309
|
+
return Promise.resolve(validator(nextRowValue)).then(function (_validator) {
|
310
|
+
validationErrors = _validator !== null && _validator !== void 0 ? _validator : {};
|
303
311
|
});
|
304
312
|
}
|
305
313
|
}();
|
306
|
-
return
|
314
|
+
return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
|
307
315
|
}
|
308
316
|
const changes = state.changes.rows[cell.row.id];
|
309
317
|
if (!changes) {
|
@@ -311,7 +319,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
311
319
|
}
|
312
320
|
let updatesForOtherCells = {};
|
313
321
|
// run the updater handler if there is one, to see if there are any other cells to update
|
314
|
-
const
|
322
|
+
const _temp3 = function () {
|
315
323
|
if (typeof handleChange === 'function' && shouldRunUpdaters) {
|
316
324
|
const previousRowValue = {
|
317
325
|
...state.changes.originals[cell.row.id]
|
@@ -325,42 +333,11 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
325
333
|
});
|
326
334
|
}
|
327
335
|
}();
|
328
|
-
return Promise.resolve(
|
336
|
+
return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3));
|
329
337
|
} catch (e) {
|
330
338
|
return Promise.reject(e);
|
331
339
|
}
|
332
340
|
}; // general
|
333
|
-
// rows
|
334
|
-
const setRowValue = function (rowId, original, value) {
|
335
|
-
try {
|
336
|
-
function _temp2() {
|
337
|
-
dispatch({
|
338
|
-
type: 'updateRow',
|
339
|
-
rowId,
|
340
|
-
payload: {
|
341
|
-
cellErrors,
|
342
|
-
original,
|
343
|
-
value
|
344
|
-
}
|
345
|
-
});
|
346
|
-
}
|
347
|
-
let cellErrors;
|
348
|
-
const _temp = function () {
|
349
|
-
if (validator) {
|
350
|
-
const row = {
|
351
|
-
...original,
|
352
|
-
...value
|
353
|
-
};
|
354
|
-
return Promise.resolve(validator(row)).then(function (_validator) {
|
355
|
-
cellErrors = _validator !== null && _validator !== void 0 ? _validator : {};
|
356
|
-
});
|
357
|
-
}
|
358
|
-
}();
|
359
|
-
return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
|
360
|
-
} catch (e) {
|
361
|
-
return Promise.reject(e);
|
362
|
-
}
|
363
|
-
};
|
364
341
|
const localization = useLocalization();
|
365
342
|
const [state, dispatch] = React__default.useReducer(reducer, {
|
366
343
|
changes: {
|
@@ -370,8 +347,10 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
370
347
|
originals: {},
|
371
348
|
status: {}
|
372
349
|
},
|
350
|
+
indexes: {},
|
373
351
|
temporaryRows: []
|
374
352
|
});
|
353
|
+
// rows
|
375
354
|
function getRowValue(rowId) {
|
376
355
|
var _state$changes$rows$r, _state$changes$rows;
|
377
356
|
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;
|
@@ -409,7 +388,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
409
388
|
}
|
410
389
|
});
|
411
390
|
}
|
412
|
-
function insertTemporaryRow(data) {
|
391
|
+
function insertTemporaryRow(data, rowIndex) {
|
413
392
|
const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${v4()}`;
|
414
393
|
const value = {
|
415
394
|
...data,
|
@@ -419,13 +398,14 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
419
398
|
type: 'insertTemporaryRow',
|
420
399
|
rowId: newRowId,
|
421
400
|
payload: {
|
401
|
+
index: rowIndex,
|
422
402
|
value
|
423
403
|
}
|
424
404
|
});
|
425
405
|
return newRowId;
|
426
406
|
}
|
427
407
|
// cells
|
428
|
-
function setCellValue(cell, value) {
|
408
|
+
function setCellValue(cell, rowIndex, value) {
|
429
409
|
const rowId = cell.row.id;
|
430
410
|
const columnId = cell.column.id;
|
431
411
|
// update if the change is different to the original value
|
@@ -435,6 +415,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
435
415
|
rowId,
|
436
416
|
payload: {
|
437
417
|
columnId,
|
418
|
+
index: rowIndex,
|
438
419
|
row: cell.row.original,
|
439
420
|
value
|
440
421
|
}
|
@@ -467,6 +448,7 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
467
448
|
}
|
468
449
|
return rowsWithErrors.filter(hasRowErrorsShownInAlert).map(rowId => ({
|
469
450
|
rowId,
|
451
|
+
index: state.indexes[rowId],
|
470
452
|
changes: state.changes.rows[rowId],
|
471
453
|
errors: state.changes.errors[rowId]
|
472
454
|
}));
|
@@ -490,7 +472,6 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
490
472
|
}
|
491
473
|
return {
|
492
474
|
// row
|
493
|
-
setRowValue,
|
494
475
|
getRowValue,
|
495
476
|
getRowMoveReason,
|
496
477
|
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>(cell: ReactTableCell<T, unknown>, rowIndex: number, shouldRunUpdaters = true) {\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' && 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 = { ...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 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","_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","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 { 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 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) {\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(\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 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[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 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 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>, 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]) {\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]?.[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, shouldRunUpdaters = true) {\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' && 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 = { ...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 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 // 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 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","cells","status","undefined","temporaryRows","filter","concat","usePendingChangesState","handleSave","handleChange","validator","saveChanges","table","console","warn","Promise","resolve","completed","_temp7","_forOf","getRowStatus","_catch","_temp6","_result","_exit","changeSet","then","discardChanges","setRowStatus","setTimeout","isTemporaryRow","_temp5","error","_error$response","ReferenceError","TypeError","response","rowError","Error","_error$response2","message","data","_error$response3","dispatch","shouldShowErrorAlert","_result3","e","reject","onCellChanged","cell","rowIndex","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","resetRowPinning"],"mappings":"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"}
|
@@ -16,11 +16,11 @@ function useTableEditing(isEnabled = false, handleSave, handleChange, handleCrea
|
|
16
16
|
const changeset = row !== null && row !== void 0 ? row : handleCreate();
|
17
17
|
try {
|
18
18
|
if (changeset) {
|
19
|
-
const rowId = pendingChangesFns.insertTemporaryRow(changeset);
|
20
|
-
table.getRow(rowId).pin('bottom');
|
21
19
|
// set the active row to the new row before toggling editing on
|
22
20
|
const temporaryRows = tableMeta.editing.temporaryRows;
|
23
21
|
const nextRowIndex = temporaryRows.length ? tableMeta.length + 1 : tableMeta.length;
|
22
|
+
const rowId = pendingChangesFns.insertTemporaryRow(changeset, nextRowIndex);
|
23
|
+
table.getRow(rowId).pin('bottom');
|
24
24
|
tableMeta.rowActive.setRowActiveIndex(nextRowIndex);
|
25
25
|
toggleEditing(true, table, scrollToIndex);
|
26
26
|
setLastFocusedCellIndex(undefined);
|
@@ -58,7 +58,9 @@ function useTableEditing(isEnabled = false, handleSave, handleChange, handleCrea
|
|
58
58
|
tableMeta.rowActive.setRowActiveIndex(index);
|
59
59
|
}
|
60
60
|
setEditing(enabled);
|
61
|
-
|
61
|
+
const row = (_table$getRowModel$ro = table.getRowModel().rows[index]) === null || _table$getRowModel$ro === void 0 ? void 0 : _table$getRowModel$ro.id;
|
62
|
+
if (row && !isTemporaryRow(row)) {
|
63
|
+
console.log('hmm');
|
62
64
|
scrollToIndex(index);
|
63
65
|
}
|
64
66
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useTableEditing.js","sources":["../../../../../../../../src/components/Table3/features/useTableEditing.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport {\n Table3EditingChangeHandler,\n Table3EditingCreateHandler,\n Table3EditingSaveHandler,\n Table3EditingValidatorFn,\n} from '../types';\nimport { usePendingChangesState } from './useEditingState';\nimport { isTemporaryRow } from '../util/editing';\n\nexport function useTableEditing<TType = unknown>(\n isEnabled = false,\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n handleCreate: Table3EditingCreateHandler<TType> | undefined,\n rowIdentityAccessor: keyof TType | undefined,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n // used to switch the table into editing mode\n const [isEditing, setEditing] = React.useState(false);\n\n // used to switch the editing between \"detailed\" mode\n const [isDetailedMode, toggleDetailedMode] = React.useState(false);\n\n // used to contain ref to the create button\n const createRowButtonRef = React.useRef<HTMLButtonElement>(null);\n\n // store the last focused cell, so that up/down arrow key navigation remains in the same column\n const [lastFocusedCellIndex, setLastFocusedCellIndex] = React.useState<number | undefined>(undefined);\n\n const pendingChangesFns = usePendingChangesState<TType>(\n handleSave,\n handleChange,\n rowIdentityAccessor as keyof TType,\n validator\n );\n\n function toggleEditing<T extends TType>(\n enabled: React.SetStateAction<boolean>,\n table: ReactTable<T>,\n scrollToIndex: (index: number) => void\n ) {\n if (!enabled) {\n // save\n pendingChangesFns.saveChanges(table);\n // reset detailed mode\n toggleDetailedMode(false);\n // reset the last index back to the first focusable element, when editing gets turned off\n setLastFocusedCellIndex(undefined);\n }\n\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const index = tableMeta.rowActive.rowActiveIndex ?? 0;\n\n if (tableMeta.rowActive.rowActiveIndex === undefined) {\n tableMeta.rowActive.setRowActiveIndex(index);\n }\n\n setEditing(enabled);\n\n
|
1
|
+
{"version":3,"file":"useTableEditing.js","sources":["../../../../../../../../src/components/Table3/features/useTableEditing.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport {\n Table3EditingChangeHandler,\n Table3EditingCreateHandler,\n Table3EditingSaveHandler,\n Table3EditingValidatorFn,\n} from '../types';\nimport { usePendingChangesState } from './useEditingState';\nimport { isTemporaryRow } from '../util/editing';\n\nexport function useTableEditing<TType = unknown>(\n isEnabled = false,\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n handleCreate: Table3EditingCreateHandler<TType> | undefined,\n rowIdentityAccessor: keyof TType | undefined,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n // used to switch the table into editing mode\n const [isEditing, setEditing] = React.useState(false);\n\n // used to switch the editing between \"detailed\" mode\n const [isDetailedMode, toggleDetailedMode] = React.useState(false);\n\n // used to contain ref to the create button\n const createRowButtonRef = React.useRef<HTMLButtonElement>(null);\n\n // store the last focused cell, so that up/down arrow key navigation remains in the same column\n const [lastFocusedCellIndex, setLastFocusedCellIndex] = React.useState<number | undefined>(undefined);\n\n const pendingChangesFns = usePendingChangesState<TType>(\n handleSave,\n handleChange,\n rowIdentityAccessor as keyof TType,\n validator\n );\n\n function toggleEditing<T extends TType>(\n enabled: React.SetStateAction<boolean>,\n table: ReactTable<T>,\n scrollToIndex: (index: number) => void\n ) {\n if (!enabled) {\n // save\n pendingChangesFns.saveChanges(table);\n // reset detailed mode\n toggleDetailedMode(false);\n // reset the last index back to the first focusable element, when editing gets turned off\n setLastFocusedCellIndex(undefined);\n }\n\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const index = tableMeta.rowActive.rowActiveIndex ?? 0;\n\n if (tableMeta.rowActive.rowActiveIndex === undefined) {\n tableMeta.rowActive.setRowActiveIndex(index);\n }\n\n setEditing(enabled);\n\n const row = table.getRowModel().rows[index]?.id;\n\n if (row && !isTemporaryRow(row)) {\n console.log('hmm');\n scrollToIndex(index);\n }\n }\n\n async function createRow<T extends TType>(table: ReactTable<T>, scrollToIndex: (index: number) => void, row?: Partial<T>) {\n if (!handleCreate) {\n return;\n }\n\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const saved = await tableMeta.editing.saveChanges(table);\n\n if (!saved) {\n return;\n }\n\n const changeset = row ?? handleCreate();\n\n try {\n if (changeset) {\n // set the active row to the new row before toggling editing on\n const temporaryRows = tableMeta.editing.temporaryRows as TType[];\n const nextRowIndex = temporaryRows.length ? tableMeta.length + 1 : tableMeta.length;\n const rowId = pendingChangesFns.insertTemporaryRow(changeset, nextRowIndex);\n table.getRow(rowId).pin('bottom');\n\n tableMeta.rowActive.setRowActiveIndex(nextRowIndex);\n\n toggleEditing(true, table, scrollToIndex);\n setLastFocusedCellIndex(undefined);\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n return {\n isEnabled,\n isEditing,\n isDetailedMode,\n toggleDetailedMode: isEnabled ? toggleDetailedMode : () => undefined,\n toggleEditing: isEnabled ? toggleEditing : () => undefined,\n lastFocusedCellIndex,\n setLastFocusedCellIndex,\n createRow,\n createRowButtonRef,\n ...pendingChangesFns,\n };\n}\n"],"names":["useTableEditing","isEnabled","handleSave","handleChange","handleCreate","rowIdentityAccessor","validator","createRow","table","scrollToIndex","row","Promise","resolve","tableMeta","options","meta","editing","saveChanges","then","saved","changeset","temporaryRows","nextRowIndex","length","rowId","pendingChangesFns","insertTemporaryRow","getRow","pin","rowActive","setRowActiveIndex","toggleEditing","setLastFocusedCellIndex","undefined","error","console","e","reject","isEditing","setEditing","React","useState","isDetailedMode","toggleDetailedMode","createRowButtonRef","useRef","lastFocusedCellIndex","usePendingChangesState","enabled","index","_tableMeta$rowActive$","rowActiveIndex","_table$getRowModel$ro","getRowModel","rows","id","isTemporaryRow","log"],"mappings":"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"}
|
@@ -55,18 +55,21 @@ function useTableEditingListener(table, tableRef, scrollToIndex) {
|
|
55
55
|
document.addEventListener('click', onClickOutside);
|
56
56
|
return () => document.removeEventListener('click', onClickOutside);
|
57
57
|
}, [tableMeta.editing.isEditing, tableMeta.editing.saveChanges]);
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
58
|
+
/*
|
59
|
+
const rows = table.getRowModel().rows;
|
60
|
+
// make sure pending changes are removed for rows that no longer exist
|
61
|
+
useLazyEffect(() => {
|
62
|
+
const pendingChanges = tableMeta.editing.getErrorsShownInAlert();
|
63
|
+
pendingChanges.forEach(pendingChange => {
|
64
|
+
try {
|
65
|
+
table.getRow(pendingChange.rowId);
|
66
|
+
} catch {
|
67
|
+
// TODO: this has the potential to remove changes for "unloaded" rows in server loading
|
68
|
+
//tableMeta.editing.discardChanges(pendingChange.rowId, table);
|
69
|
+
}
|
70
|
+
});
|
71
|
+
}, [rows.length]);
|
72
|
+
*/
|
70
73
|
// shortcuts
|
71
74
|
useGlobalKeyDown(tableMeta.editing.isEnabled ? shortcut : undefined, event => {
|
72
75
|
event.preventDefault();
|
package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useTableEditingListener.js","sources":["../../../../../../../../src/components/Table3/listeners/useTableEditingListener.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { useLazyEffect } from '../../../hooks/useLazyEffect';\nimport { isElementInsideOrTriggeredFromContainer } from '../../../utils/dom';\nimport { TableRef } from '../../../primitives/Table/types';\nimport { resetHighlightedColumnIndexes } from '../../../primitives/Table/useTableManager/util/search';\nimport { useLocalization } from '../../Provider/Localization';\nimport { useGlobalKeyDown } from '../../../hooks/useGlobalKeyDown';\nimport { shortcut } from '../util/editing';\n\nexport function useTableEditingListener<TType = unknown>(\n table: ReactTable<TType>,\n tableRef: React.RefObject<TableRef>,\n scrollToIndex: (index: number) => void\n) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const localization = useLocalization();\n\n // save when the row changes\n // store the last row active index, otherwise everytime tableMeta.editing.saveChanges changes the hook runs again\n const lastRowActiveIndexRef = React.useRef<number | undefined>(tableMeta.rowActive.rowActiveIndex);\n\n useLazyEffect(() => {\n if (tableMeta.rowActive.rowActiveIndex !== lastRowActiveIndexRef.current) {\n lastRowActiveIndexRef.current = tableMeta.rowActive.rowActiveIndex;\n\n if (tableMeta.editing.isEditing && lastRowActiveIndexRef.current !== undefined) {\n tableMeta.editing.saveChanges(table);\n }\n }\n }, [tableMeta.rowActive.rowActiveIndex]);\n\n // show a warning if the user navigates away without triggering save, such as using the browser back/forward button\n const hasChanges = tableMeta.editing.hasChanges();\n\n React.useEffect(() => {\n function showUnsavedChangesWarning(event: BeforeUnloadEvent) {\n if (tableMeta.editing.isEditing && hasChanges) {\n event.returnValue = true;\n return true;\n }\n\n return false;\n }\n\n window.addEventListener('beforeunload', showUnsavedChangesWarning);\n\n return () => {\n window.removeEventListener('beforeunload', showUnsavedChangesWarning);\n };\n }, [tableMeta.editing.isEditing, hasChanges]);\n\n const hasSavedChanges = tableMeta.editing.hasSaved();\n\n useLazyEffect(() => {\n if (hasSavedChanges) {\n resetHighlightedColumnIndexes(table.getState().globalFilter, table, localization);\n }\n }, [hasSavedChanges]);\n\n React.useEffect(() => {\n const onClickOutside = (event: MouseEvent) => {\n if (tableMeta.editing.isEditing) {\n const element = event.target as Element;\n const isTableOrIsInsideTable =\n element.tagName === 'TABLE' ||\n element.tagName === 'TBODY' ||\n element.getAttribute('data-taco') === 'backdrop' ||\n element.getAttribute('data-table') === 'editing-toggle' ||\n !document.body.contains(element) ||\n isElementInsideOrTriggeredFromContainer(element, tableRef.current);\n\n // users can click the white space below rows which could be inside the table, but a valid scenario to save\n if (!isTableOrIsInsideTable) {\n tableMeta.editing.saveChanges(table);\n }\n }\n };\n\n document.addEventListener('click', onClickOutside);\n\n return () => document.removeEventListener('click', onClickOutside);\n }, [tableMeta.editing.isEditing, tableMeta.editing.saveChanges]);\n\n const rows = table.getRowModel().rows;\n\n // make sure pending changes are removed for rows that no longer exist\n useLazyEffect(() => {\n const pendingChanges = tableMeta.editing.getErrorsShownInAlert();\n\n pendingChanges.forEach(pendingChange => {\n try {\n table.getRow(pendingChange.rowId);\n } catch {\n tableMeta.editing.discardChanges(pendingChange.rowId, table);\n }\n });\n }, [rows.length]);\n\n // shortcuts\n useGlobalKeyDown(tableMeta.editing.isEnabled ? shortcut : undefined, (event: KeyboardEvent) => {\n event.preventDefault();\n tableMeta.editing.toggleEditing(!tableMeta.editing.isEditing, table, scrollToIndex);\n });\n\n useGlobalKeyDown(tableMeta.editing.isEditing ? { key: 's', meta: true, shift: false } : undefined, event => {\n event.preventDefault();\n tableMeta.editing.saveChanges(table);\n });\n}\n"],"names":["useTableEditingListener","table","tableRef","scrollToIndex","tableMeta","options","meta","localization","useLocalization","lastRowActiveIndexRef","React","useRef","rowActive","rowActiveIndex","useLazyEffect","current","editing","isEditing","undefined","saveChanges","hasChanges","useEffect","showUnsavedChangesWarning","event","returnValue","window","addEventListener","removeEventListener","hasSavedChanges","hasSaved","resetHighlightedColumnIndexes","getState","globalFilter","onClickOutside","element","target","isTableOrIsInsideTable","tagName","getAttribute","document","body","contains","isElementInsideOrTriggeredFromContainer","
|
1
|
+
{"version":3,"file":"useTableEditingListener.js","sources":["../../../../../../../../src/components/Table3/listeners/useTableEditingListener.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { useLazyEffect } from '../../../hooks/useLazyEffect';\nimport { isElementInsideOrTriggeredFromContainer } from '../../../utils/dom';\nimport { TableRef } from '../../../primitives/Table/types';\nimport { resetHighlightedColumnIndexes } from '../../../primitives/Table/useTableManager/util/search';\nimport { useLocalization } from '../../Provider/Localization';\nimport { useGlobalKeyDown } from '../../../hooks/useGlobalKeyDown';\nimport { shortcut } from '../util/editing';\n\nexport function useTableEditingListener<TType = unknown>(\n table: ReactTable<TType>,\n tableRef: React.RefObject<TableRef>,\n scrollToIndex: (index: number) => void\n) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const localization = useLocalization();\n\n // save when the row changes\n // store the last row active index, otherwise everytime tableMeta.editing.saveChanges changes the hook runs again\n const lastRowActiveIndexRef = React.useRef<number | undefined>(tableMeta.rowActive.rowActiveIndex);\n\n useLazyEffect(() => {\n if (tableMeta.rowActive.rowActiveIndex !== lastRowActiveIndexRef.current) {\n lastRowActiveIndexRef.current = tableMeta.rowActive.rowActiveIndex;\n\n if (tableMeta.editing.isEditing && lastRowActiveIndexRef.current !== undefined) {\n tableMeta.editing.saveChanges(table);\n }\n }\n }, [tableMeta.rowActive.rowActiveIndex]);\n\n // show a warning if the user navigates away without triggering save, such as using the browser back/forward button\n const hasChanges = tableMeta.editing.hasChanges();\n\n React.useEffect(() => {\n function showUnsavedChangesWarning(event: BeforeUnloadEvent) {\n if (tableMeta.editing.isEditing && hasChanges) {\n event.returnValue = true;\n return true;\n }\n\n return false;\n }\n\n window.addEventListener('beforeunload', showUnsavedChangesWarning);\n\n return () => {\n window.removeEventListener('beforeunload', showUnsavedChangesWarning);\n };\n }, [tableMeta.editing.isEditing, hasChanges]);\n\n const hasSavedChanges = tableMeta.editing.hasSaved();\n\n useLazyEffect(() => {\n if (hasSavedChanges) {\n resetHighlightedColumnIndexes(table.getState().globalFilter, table, localization);\n }\n }, [hasSavedChanges]);\n\n React.useEffect(() => {\n const onClickOutside = (event: MouseEvent) => {\n if (tableMeta.editing.isEditing) {\n const element = event.target as Element;\n const isTableOrIsInsideTable =\n element.tagName === 'TABLE' ||\n element.tagName === 'TBODY' ||\n element.getAttribute('data-taco') === 'backdrop' ||\n element.getAttribute('data-table') === 'editing-toggle' ||\n !document.body.contains(element) ||\n isElementInsideOrTriggeredFromContainer(element, tableRef.current);\n\n // users can click the white space below rows which could be inside the table, but a valid scenario to save\n if (!isTableOrIsInsideTable) {\n tableMeta.editing.saveChanges(table);\n }\n }\n };\n\n document.addEventListener('click', onClickOutside);\n\n return () => document.removeEventListener('click', onClickOutside);\n }, [tableMeta.editing.isEditing, tableMeta.editing.saveChanges]);\n\n /*\n const rows = table.getRowModel().rows;\n\n // make sure pending changes are removed for rows that no longer exist\n useLazyEffect(() => {\n const pendingChanges = tableMeta.editing.getErrorsShownInAlert();\n\n pendingChanges.forEach(pendingChange => {\n try {\n table.getRow(pendingChange.rowId);\n } catch {\n // TODO: this has the potential to remove changes for \"unloaded\" rows in server loading\n //tableMeta.editing.discardChanges(pendingChange.rowId, table);\n }\n });\n }, [rows.length]);\n */\n\n // shortcuts\n useGlobalKeyDown(tableMeta.editing.isEnabled ? shortcut : undefined, (event: KeyboardEvent) => {\n event.preventDefault();\n tableMeta.editing.toggleEditing(!tableMeta.editing.isEditing, table, scrollToIndex);\n });\n\n useGlobalKeyDown(tableMeta.editing.isEditing ? { key: 's', meta: true, shift: false } : undefined, event => {\n event.preventDefault();\n tableMeta.editing.saveChanges(table);\n });\n}\n"],"names":["useTableEditingListener","table","tableRef","scrollToIndex","tableMeta","options","meta","localization","useLocalization","lastRowActiveIndexRef","React","useRef","rowActive","rowActiveIndex","useLazyEffect","current","editing","isEditing","undefined","saveChanges","hasChanges","useEffect","showUnsavedChangesWarning","event","returnValue","window","addEventListener","removeEventListener","hasSavedChanges","hasSaved","resetHighlightedColumnIndexes","getState","globalFilter","onClickOutside","element","target","isTableOrIsInsideTable","tagName","getAttribute","document","body","contains","isElementInsideOrTriggeredFromContainer","useGlobalKeyDown","isEnabled","shortcut","preventDefault","toggleEditing","key","shift"],"mappings":";;;;;;;;SAUgBA,uBAAuBA,CACnCC,KAAwB,EACxBC,QAAmC,EACnCC,aAAsC;EAEtC,MAAMC,SAAS,GAAGH,KAAK,CAACI,OAAO,CAACC,IAA6B;EAC7D,MAAMC,YAAY,GAAGC,eAAe,EAAE;;;EAItC,MAAMC,qBAAqB,GAAGC,cAAK,CAACC,MAAM,CAAqBP,SAAS,CAACQ,SAAS,CAACC,cAAc,CAAC;EAElGC,aAAa,CAAC;IACV,IAAIV,SAAS,CAACQ,SAAS,CAACC,cAAc,KAAKJ,qBAAqB,CAACM,OAAO,EAAE;MACtEN,qBAAqB,CAACM,OAAO,GAAGX,SAAS,CAACQ,SAAS,CAACC,cAAc;MAElE,IAAIT,SAAS,CAACY,OAAO,CAACC,SAAS,IAAIR,qBAAqB,CAACM,OAAO,KAAKG,SAAS,EAAE;QAC5Ed,SAAS,CAACY,OAAO,CAACG,WAAW,CAAClB,KAAK,CAAC;;;GAG/C,EAAE,CAACG,SAAS,CAACQ,SAAS,CAACC,cAAc,CAAC,CAAC;;EAGxC,MAAMO,UAAU,GAAGhB,SAAS,CAACY,OAAO,CAACI,UAAU,EAAE;EAEjDV,cAAK,CAACW,SAAS,CAAC;IACZ,SAASC,yBAAyBA,CAACC,KAAwB;MACvD,IAAInB,SAAS,CAACY,OAAO,CAACC,SAAS,IAAIG,UAAU,EAAE;QAC3CG,KAAK,CAACC,WAAW,GAAG,IAAI;QACxB,OAAO,IAAI;;MAGf,OAAO,KAAK;;IAGhBC,MAAM,CAACC,gBAAgB,CAAC,cAAc,EAAEJ,yBAAyB,CAAC;IAElE,OAAO;MACHG,MAAM,CAACE,mBAAmB,CAAC,cAAc,EAAEL,yBAAyB,CAAC;KACxE;GACJ,EAAE,CAAClB,SAAS,CAACY,OAAO,CAACC,SAAS,EAAEG,UAAU,CAAC,CAAC;EAE7C,MAAMQ,eAAe,GAAGxB,SAAS,CAACY,OAAO,CAACa,QAAQ,EAAE;EAEpDf,aAAa,CAAC;IACV,IAAIc,eAAe,EAAE;MACjBE,6BAA6B,CAAC7B,KAAK,CAAC8B,QAAQ,EAAE,CAACC,YAAY,EAAE/B,KAAK,EAAEM,YAAY,CAAC;;GAExF,EAAE,CAACqB,eAAe,CAAC,CAAC;EAErBlB,cAAK,CAACW,SAAS,CAAC;IACZ,MAAMY,cAAc,GAAIV,KAAiB;MACrC,IAAInB,SAAS,CAACY,OAAO,CAACC,SAAS,EAAE;QAC7B,MAAMiB,OAAO,GAAGX,KAAK,CAACY,MAAiB;QACvC,MAAMC,sBAAsB,GACxBF,OAAO,CAACG,OAAO,KAAK,OAAO,IAC3BH,OAAO,CAACG,OAAO,KAAK,OAAO,IAC3BH,OAAO,CAACI,YAAY,CAAC,WAAW,CAAC,KAAK,UAAU,IAChDJ,OAAO,CAACI,YAAY,CAAC,YAAY,CAAC,KAAK,gBAAgB,IACvD,CAACC,QAAQ,CAACC,IAAI,CAACC,QAAQ,CAACP,OAAO,CAAC,IAChCQ,uCAAuC,CAACR,OAAO,EAAEhC,QAAQ,CAACa,OAAO,CAAC;;QAGtE,IAAI,CAACqB,sBAAsB,EAAE;UACzBhC,SAAS,CAACY,OAAO,CAACG,WAAW,CAAClB,KAAK,CAAC;;;KAG/C;IAEDsC,QAAQ,CAACb,gBAAgB,CAAC,OAAO,EAAEO,cAAc,CAAC;IAElD,OAAO,MAAMM,QAAQ,CAACZ,mBAAmB,CAAC,OAAO,EAAEM,cAAc,CAAC;GACrE,EAAE,CAAC7B,SAAS,CAACY,OAAO,CAACC,SAAS,EAAEb,SAAS,CAACY,OAAO,CAACG,WAAW,CAAC,CAAC;;;;;;;;;;;;;;;;;EAqBhEwB,gBAAgB,CAACvC,SAAS,CAACY,OAAO,CAAC4B,SAAS,GAAGC,QAAQ,GAAG3B,SAAS,EAAGK,KAAoB;IACtFA,KAAK,CAACuB,cAAc,EAAE;IACtB1C,SAAS,CAACY,OAAO,CAAC+B,aAAa,CAAC,CAAC3C,SAAS,CAACY,OAAO,CAACC,SAAS,EAAEhB,KAAK,EAAEE,aAAa,CAAC;GACtF,CAAC;EAEFwC,gBAAgB,CAACvC,SAAS,CAACY,OAAO,CAACC,SAAS,GAAG;IAAE+B,GAAG,EAAE,GAAG;IAAE1C,IAAI,EAAE,IAAI;IAAE2C,KAAK,EAAE;GAAO,GAAG/B,SAAS,EAAEK,KAAK;IACpGA,KAAK,CAACuB,cAAc,EAAE;IACtB1C,SAAS,CAACY,OAAO,CAACG,WAAW,CAAClB,KAAK,CAAC;GACvC,CAAC;AACN;;;;"}
|
@@ -92,6 +92,14 @@ const shortcut = {
|
|
92
92
|
meta: true,
|
93
93
|
shift: false
|
94
94
|
};
|
95
|
+
function isTableScrolled(ref) {
|
96
|
+
if (ref.current) {
|
97
|
+
var _ref$current, _ref$current$querySel, _ref$current2, _ref$current2$querySe;
|
98
|
+
const height = parseFloat(((_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : (_ref$current$querySel = _ref$current.querySelector('tbody')) === null || _ref$current$querySel === void 0 ? void 0 : _ref$current$querySel.style.height) || '0') + parseFloat(((_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : (_ref$current2$querySe = _ref$current2.querySelector('tbody')) === null || _ref$current2$querySe === void 0 ? void 0 : _ref$current2$querySe.style.paddingBottom) || '0');
|
99
|
+
return height > ref.current.scrollHeight;
|
100
|
+
}
|
101
|
+
return false;
|
102
|
+
}
|
95
103
|
|
96
|
-
export { TEMPORARY_ROW_ID_PREFIX, isTemporaryRow, shortcut, willRowMove };
|
104
|
+
export { TEMPORARY_ROW_ID_PREFIX, isTableScrolled, isTemporaryRow, shortcut, willRowMove };
|
97
105
|
//# sourceMappingURL=editing.js.map
|