@economic/taco 2.45.3 → 2.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/components/Provider/Localization.d.ts +2 -0
  2. package/dist/components/Report/Report.d.ts +1 -1
  3. package/dist/components/Table3/Table3.d.ts +2 -14
  4. package/dist/components/Table3/components/Columns/Internal/EditingActionsMenu.d.ts +1 -2
  5. package/dist/components/Table3/components/Editing/DiscardChangesConfirmationDialog.d.ts +7 -0
  6. package/dist/components/Table3/components/Row/Editing/CreateNewRow.d.ts +14 -0
  7. package/dist/components/Table3/components/Row/Editing/TemporaryRow.d.ts +11 -0
  8. package/dist/components/Table3/features/useEditingState.d.ts +29 -0
  9. package/dist/components/Table3/features/useTableEditing.d.ts +26 -36
  10. package/dist/components/Table3/listeners/useTableEditingListener.d.ts +1 -1
  11. package/dist/components/Table3/types.d.ts +24 -8
  12. package/dist/components/Table3/useTable3.d.ts +6 -0
  13. package/dist/components/Table3/util/editing.d.ts +7 -1
  14. package/dist/esm/index.css +28 -4
  15. package/dist/esm/packages/taco/src/components/ModeSwitch/ModeSwitch.js +2 -2
  16. package/dist/esm/packages/taco/src/components/ModeSwitch/ModeSwitch.js.map +1 -1
  17. package/dist/esm/packages/taco/src/components/Provider/Localization.js +5 -3
  18. package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
  19. package/dist/esm/packages/taco/src/components/Select2/Select2.js +1 -1
  20. package/dist/esm/packages/taco/src/components/Select2/Select2.js.map +1 -1
  21. package/dist/esm/packages/taco/src/components/Switch/Switch.js +1 -1
  22. package/dist/esm/packages/taco/src/components/Switch/Switch.js.map +1 -1
  23. package/dist/esm/packages/taco/src/components/Table3/Table3.js +14 -6
  24. package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
  25. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.js +1 -2
  26. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.js.map +1 -1
  27. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +25 -15
  28. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
  29. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Internal/EditingActionsMenu.js +5 -37
  30. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Internal/EditingActionsMenu.js.map +1 -1
  31. package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js +17 -12
  32. package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js.map +1 -1
  33. package/dist/esm/packages/taco/src/components/Table3/components/Editing/DiscardChangesConfirmationDialog.js +34 -0
  34. package/dist/esm/packages/taco/src/components/Table3/components/Editing/DiscardChangesConfirmationDialog.js.map +1 -0
  35. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js +103 -0
  36. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js.map +1 -0
  37. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/SaveStatus.js +2 -14
  38. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/SaveStatus.js.map +1 -1
  39. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js +96 -0
  40. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js.map +1 -0
  41. package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js +39 -6
  42. package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js.map +1 -1
  43. package/dist/esm/packages/taco/src/components/Table3/components/Toolbar/Editing/Editing.js +4 -17
  44. package/dist/esm/packages/taco/src/components/Table3/components/Toolbar/Editing/Editing.js.map +1 -1
  45. package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js +519 -0
  46. package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js.map +1 -0
  47. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +29 -406
  48. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
  49. package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js +44 -33
  50. package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js.map +1 -1
  51. package/dist/esm/packages/taco/src/components/Table3/useTable3.js +27 -9
  52. package/dist/esm/packages/taco/src/components/Table3/useTable3.js.map +1 -1
  53. package/dist/esm/packages/taco/src/components/Table3/util/editing.js +11 -23
  54. package/dist/esm/packages/taco/src/components/Table3/util/editing.js.map +1 -1
  55. package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js +1 -3
  56. package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js.map +1 -1
  57. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.js +9 -3
  58. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.js.map +1 -1
  59. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Actions.js +9 -7
  60. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Actions.js.map +1 -1
  61. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Footer.js.map +1 -1
  62. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.js +1 -1
  63. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.js.map +1 -1
  64. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/Row.js +4 -2
  65. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/Row.js.map +1 -1
  66. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/RowContext.js +2 -1
  67. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/RowContext.js.map +1 -1
  68. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +29 -7
  69. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
  70. package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js +2 -2
  71. package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js.map +1 -1
  72. package/dist/esm/packages/taco/src/primitives/Table/types.js.map +1 -1
  73. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowSelection.js +2 -1
  74. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowSelection.js.map +1 -1
  75. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js +1 -1
  76. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js.map +1 -1
  77. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +11 -0
  78. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
  79. package/dist/esm/packages/taco/src/utils/dom.js +7 -4
  80. package/dist/esm/packages/taco/src/utils/dom.js.map +1 -1
  81. package/dist/index.css +28 -4
  82. package/dist/primitives/Table/Core/components/Columns/Internal/Actions.d.ts +3 -1
  83. package/dist/primitives/Table/Core/components/Footer/Footer.d.ts +2 -2
  84. package/dist/primitives/Table/Core/components/Row/RowContext.d.ts +1 -0
  85. package/dist/primitives/Table/Core/features/useTableRenderer.d.ts +2 -2
  86. package/dist/primitives/Table/Core/types.d.ts +4 -0
  87. package/dist/primitives/Table/Core/useTable.d.ts +2 -2
  88. package/dist/primitives/Table/types.d.ts +1 -1
  89. package/dist/primitives/Table/useTableManager/useTableManager.d.ts +1 -1
  90. package/dist/taco.cjs.development.js +982 -661
  91. package/dist/taco.cjs.development.js.map +1 -1
  92. package/dist/taco.cjs.production.min.js +1 -1
  93. package/dist/taco.cjs.production.min.js.map +1 -1
  94. package/dist/utils/dom.d.ts +1 -0
  95. package/package.json +2 -2
  96. package/dist/components/Table3/components/Row/Editing/CreateRowButton.d.ts +0 -11
  97. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateRowButton.js +0 -90
  98. package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateRowButton.js.map +0 -1
@@ -0,0 +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 | 'createRow';\n rowId: string;\n payload?: any;\n};\n\nfunction reducer<TType = unknown>(state: EditingState<TType>, action: EditingStateAction) {\n const { type, rowId, payload } = action;\n\n switch (type) {\n case 'setCellValue': {\n const { columnId, row, value } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, `${rowId}.${columnId}`, value, Object),\n originals: setWith(state.changes.originals, rowId, row, Object),\n },\n };\n }\n\n case 'removeCellValue': {\n const { columnId, rowIdentityAccessor } = payload;\n const changes = omit(state.changes.rows, `${rowId}.${columnId}`);\n\n // if there are no changes left, remove the row\n if (!Object.keys(changes[rowId]).length) {\n return reducer(state, { type: 'removeRow', rowId, payload: { rowIdentityAccessor } });\n }\n\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: omit(state.changes.rows, `${rowId}.${columnId}`),\n errors: omit(state.changes.errors, `${rowId}.cells.${columnId}`),\n moveReasons: omit(state.changes.moveReasons, `${rowId}.${columnId}`),\n },\n };\n }\n\n case 'updateRow': {\n const { cellErrors, moveReasons, original, value } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, rowId, value, Object),\n errors: setWith(\n state.changes.errors,\n `${rowId}.cells`,\n cellErrors ?? state.changes.errors.cells[rowId],\n Object\n ),\n originals: setWith(state.changes.originals, rowId, original ?? state.changes.originals[rowId], Object),\n moveReasons: setWith(\n state.changes.moveReasons,\n rowId,\n moveReasons ?? state.changes.moveReasons[rowId],\n Object\n ),\n // status can be undefined, so don't use ??\n status: setWith(state.changes.status, rowId, undefined, Object),\n },\n };\n }\n\n case 'removeRow': {\n const { rowIdentityAccessor } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: omit(state.changes.rows, rowId),\n errors: omit(state.changes.errors, rowId),\n moveReasons: omit(state.changes.moveReasons, rowId),\n originals: omit(state.changes.originals, rowId),\n status: omit(state.changes.status, rowId),\n },\n temporaryRows: state.temporaryRows.filter(row => row[rowIdentityAccessor] !== rowId),\n };\n }\n\n case 'setRowStatus': {\n const { status } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n status: status ? setWith(state.changes.status, rowId, status, Object) : omit(state.changes.status, rowId),\n },\n };\n }\n\n case 'setRowErrors': {\n const { ...errors } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n errors: setWith(state.changes.errors, rowId, errors, Object),\n },\n };\n }\n\n case 'createRow': {\n const { value } = payload;\n return {\n ...state,\n temporaryRows: state.temporaryRows.concat(value),\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, rowId, value, Object),\n originals: setWith(state.changes.originals, rowId, value, Object),\n },\n };\n }\n\n default:\n return state;\n }\n}\n\nexport function usePendingChangesState<TType = unknown>(\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n rowIdentityAccessor: keyof TType,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n const localization = useLocalization();\n const [state, dispatch] = React.useReducer(reducer, {\n changes: { rows: {}, errors: {}, moveReasons: {}, originals: {}, status: {} },\n temporaryRows: [],\n });\n\n // rows\n async function setRowValue<T extends TType>(rowId: string, original: T, value: Partial<T>) {\n let cellErrors;\n\n if (validator) {\n const row = { ...original, ...value } as T;\n cellErrors = ((await validator(row)) ?? {}) as Record<string, string>;\n }\n\n dispatch({\n type: 'updateRow',\n rowId,\n payload: { cellErrors, original, value },\n });\n }\n\n function getRowValue(rowId: string) {\n return state.changes.rows?.[rowId] ?? undefined;\n }\n\n function getRowMoveReason(rowId: string) {\n return Object.values(state.changes.moveReasons?.[rowId] ?? {})[0] ?? undefined;\n }\n\n function hasRowErrors(rowId: string) {\n return !!state.changes.errors[rowId]?.row || !!Object.keys(state.changes.errors[rowId]?.cells ?? {}).length;\n }\n\n function hasRowErrorsShownInAlert(rowId: string) {\n return hasRowErrors(rowId) && !!state.changes.errors[rowId]?.shouldShowErrorAlert;\n }\n\n function 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 createRow<T extends TType>(data: Partial<T>) {\n const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${uuid()}`;\n const value: Partial<TType> = {\n ...data,\n [rowIdentityAccessor]: newRowId,\n };\n\n dispatch({\n type: 'createRow',\n rowId: newRowId,\n payload: { value },\n });\n\n return newRowId;\n }\n\n // cells\n function setCellValue<T extends TType>(cell: ReactTableCell<T, unknown>, value: unknown) {\n const rowId = cell.row.id;\n const columnId = cell.column.id;\n\n // update if the change is different to the original value\n if (value !== cell.row.original[columnId]) {\n dispatch({\n type: 'setCellValue',\n rowId,\n payload: {\n columnId,\n row: cell.row.original,\n value,\n },\n });\n }\n // otherwise remove any previous change - no point saving the same value\n else if (cell.row.id in state.changes.rows) {\n dispatch({\n type: 'removeCellValue',\n rowId,\n payload: {\n columnId,\n rowIdentityAccessor,\n },\n });\n }\n }\n\n function getCellValue<T extends TType>(cell: ReactTableCell<T, unknown>): unknown | undefined {\n return state.changes.rows?.[cell.row.id]?.[cell.column.id];\n }\n\n function getCellError<T extends TType>(cell: ReactTableCell<T, unknown>): string | undefined {\n return state.changes.errors?.[cell.row.id]?.cells?.[cell.column.id];\n }\n\n async function onCellChanged<T extends TType>(cell: ReactTableCell<T, unknown>, rowIndex: number, 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 createRow,\n temporaryRows: state.temporaryRows,\n };\n}\n"],"names":["DELAY_BEFORE_REMOVING_SAVE_STATUS","reducer","state","action","type","rowId","payload","columnId","row","value","changes","rows","setWith","Object","originals","rowIdentityAccessor","omit","keys","length","errors","moveReasons","cellErrors","original","cells","status","undefined","temporaryRows","filter","concat","usePendingChangesState","handleSave","handleChange","validator","saveChanges","table","console","warn","Promise","resolve","completed","_temp9","_forOf","getRowStatus","_catch","_temp8","_result","_exit","changeSet","then","discardChanges","setRowStatus","setTimeout","isTemporaryRow","_temp7","error","_error$response","ReferenceError","TypeError","response","rowError","Error","_error$response2","message","data","_error$response3","dispatch","shouldShowErrorAlert","_result3","e","reject","onCellChanged","cell","rowIndex","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","createRow","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,29 +1,37 @@
1
1
  import React__default from 'react';
2
- import { useGlobalKeyDown } from '../../../hooks/useGlobalKeyDown.js';
3
- import { useLocalization } from '../../Provider/Localization.js';
4
- import { _forOf, _catch } from '../../../../../../node_modules/babel-plugin-transform-async-to-promises/helpers.mjs.js';
5
- import { willRowMove } from '../util/editing.js';
6
- import { debounce } from 'lodash-es';
2
+ import { isTemporaryRow } from '../util/editing.js';
3
+ import { usePendingChangesState } from './useEditingState.js';
7
4
 
8
- function useTableEditing(isEnabled = false, handleSave, handleChange, validator) {
5
+ function useTableEditing(isEnabled = false, handleSave, handleChange, rowIdentityAccessor, validator) {
9
6
  // used to switch the table into editing mode
10
- const [isEditing, toggleEditing] = React__default.useState(false);
7
+ const [isEditing, setEditing] = React__default.useState(false);
11
8
  // used to switch the editing between "detailed" mode
12
9
  const [isDetailedMode, toggleDetailedMode] = React__default.useState(false);
10
+ // used to contain ref to the create button
11
+ const createRowButtonRef = React__default.useRef(null);
13
12
  // store the last focused cell, so that up/down arrow key navigation remains in the same column
14
- const [lastFocusedCellIndex, setLastFocusedCellIndex] = useLastFocusedCellIndex();
15
- // store pending changes for each row
16
- // changes are saved as soon as the active row changes, so in most cases this will only contain the active row's changes
17
- // but not always - if validation or server requests fail when saving, those rows remain until the failure is resolved
18
- const pendingChangesFns = usePendingChanges(isEnabled, handleSave, handleChange, validator);
19
- useGlobalKeyDown(isEnabled && isEditing ? {
20
- key: 's',
21
- meta: true,
22
- shift: false
23
- } : undefined, event => {
24
- event.preventDefault();
25
- pendingChangesFns.saveChanges();
26
- });
13
+ const [lastFocusedCellIndex, setLastFocusedCellIndex] = React__default.useState(undefined);
14
+ const pendingChangesFns = usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, validator);
15
+ function toggleEditing(enabled, table, scrollToIndex) {
16
+ var _tableMeta$rowActive$, _table$getRowModel$ro;
17
+ if (!enabled) {
18
+ // save
19
+ pendingChangesFns.saveChanges(table);
20
+ // reset detailed mode
21
+ toggleDetailedMode(false);
22
+ // reset the last index back to the first focusable element, when editing gets turned off
23
+ setLastFocusedCellIndex(undefined);
24
+ }
25
+ const tableMeta = table.options.meta;
26
+ const index = (_tableMeta$rowActive$ = tableMeta.rowActive.rowActiveIndex) !== null && _tableMeta$rowActive$ !== void 0 ? _tableMeta$rowActive$ : 0;
27
+ if (tableMeta.rowActive.rowActiveIndex === undefined) {
28
+ tableMeta.rowActive.setRowActiveIndex(index);
29
+ }
30
+ setEditing(enabled);
31
+ if (!isTemporaryRow((_table$getRowModel$ro = table.getRowModel().rows[index]) === null || _table$getRowModel$ro === void 0 ? void 0 : _table$getRowModel$ro.id)) {
32
+ scrollToIndex(index);
33
+ }
34
+ }
27
35
  return {
28
36
  isEnabled,
29
37
  isEditing,
@@ -32,395 +40,10 @@ function useTableEditing(isEnabled = false, handleSave, handleChange, validator)
32
40
  toggleEditing: isEnabled ? toggleEditing : () => undefined,
33
41
  lastFocusedCellIndex,
34
42
  setLastFocusedCellIndex,
43
+ createRowButtonRef,
35
44
  ...pendingChangesFns
36
45
  };
37
46
  }
38
- function usePendingChanges(isEnabled, handleSave, handleChange, validator) {
39
- const saveChanges = function (rowId = undefined) {
40
- try {
41
- let _exit = false;
42
- if (!handleSave) {
43
- console.warn('Tried to save, but Table has no onEditingSave handler');
44
- return Promise.resolve();
45
- }
46
- // we save back to pendingChanges, so make a copy of it's state when save was triggered
47
- const changesToSave = rowId ? {
48
- [rowId]: pendingChanges[rowId]
49
- } : {
50
- ...pendingChanges
51
- };
52
- const changes = Object.keys(changesToSave);
53
- return Promise.resolve(function () {
54
- if (changes.length) {
55
- return _forOf(changes, function (rowId) {
56
- const pendingChange = changesToSave[rowId];
57
- const changeSet = getChangesetFromChanges(pendingChange);
58
- return _catch(function () {
59
- function _temp3(_result) {
60
- return _exit ? _result : Promise.resolve(handleSave(changeSet)).then(function () {
61
- // cleanup changes, we don't need them after saving
62
- resetChanges(rowId);
63
- setRowSaveStatus(rowId, 'complete');
64
- });
65
- }
66
- if (getRowSaveStatus(rowId) === 'pending') {
67
- _exit = true;
68
- return;
69
- }
70
- // set saving = true
71
- setRowSaveStatus(rowId, 'pending');
72
- // re-run validation, maybe a cell is already invalid but has never been blurred
73
- const _temp2 = function () {
74
- if (validator) {
75
- return Promise.resolve(validator(changeSet)).then(function (errors) {
76
- if (errors && Object.keys(errors).length) {
77
- throw errors;
78
- }
79
- });
80
- }
81
- }();
82
- return _temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2); // send new data to the server
83
- }, function (error) {
84
- // the onEditingSave handler should throw errors when something fails, e.g. validation, network errors etc
85
- // this code handles those errors and maps them either to row errors or cell specific errors
86
- let rowError;
87
- let cellErrors;
88
- if (typeof error === 'string') {
89
- rowError = error;
90
- } else if (error instanceof Error) {
91
- var _error$response;
92
- rowError = error.message;
93
- // most of our apis return error objects within this shape
94
- if (typeof ((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) === 'object') {
95
- var _error$response2;
96
- cellErrors = (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data;
97
- }
98
- } else if (typeof error === 'object') {
99
- cellErrors = error;
100
- }
101
- if (rowError || cellErrors) {
102
- setPendingChanges(currentChanges => {
103
- const nextChanges = {
104
- ...currentChanges
105
- };
106
- nextChanges[rowId]._meta.errors = {
107
- row: rowError,
108
- cells: cellErrors,
109
- shouldShowErrorAlert: true
110
- };
111
- return nextChanges;
112
- });
113
- }
114
- setRowSaveStatus(rowId, undefined);
115
- });
116
- }, function () {
117
- return _exit;
118
- });
119
- }
120
- }());
121
- } catch (e) {
122
- return Promise.reject(e);
123
- }
124
- };
125
- const validateCell = function (cell) {
126
- try {
127
- if (!validator || !isEnabled) {
128
- return Promise.resolve();
129
- }
130
- const changeSet = getChangesetFromChanges(pendingChanges[cell.row.id]);
131
- // only validate if the cell being blurred actually has any changes
132
- const _temp = function () {
133
- if (cell.column.id in changeSet) {
134
- return Promise.resolve(validator(changeSet)).then(function (errors) {
135
- setPendingChanges(currentChanges => {
136
- const nextChanges = {
137
- ...currentChanges
138
- };
139
- nextChanges[cell.row.id]._meta = {
140
- ...nextChanges[cell.row.id]._meta,
141
- errors: {
142
- ...nextChanges[cell.row.id]._meta.errors,
143
- cells: errors,
144
- shouldShowErrorAlert: !Object.keys(errors).length ? false : nextChanges[cell.row.id]._meta.errors.shouldShowErrorAlert
145
- }
146
- };
147
- return nextChanges;
148
- });
149
- });
150
- }
151
- }();
152
- return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
153
- } catch (e) {
154
- return Promise.reject(e);
155
- }
156
- };
157
- const setCellValue = function (cell, change, rowIndex) {
158
- try {
159
- const changes = {
160
- [cell.column.id]: change
161
- };
162
- setPendingChanges(currentChanges => {
163
- const nextChanges = createPendingChangesSetter(currentChanges, cell.row, rowIndex, changes, localization);
164
- pendingChangesUpdater.syncCellChanges(nextChanges);
165
- return nextChanges;
166
- });
167
- pendingChangesUpdater.runCellUpdates(changes, cell, rowIndex);
168
- return Promise.resolve();
169
- } catch (e) {
170
- return Promise.reject(e);
171
- }
172
- };
173
- const addCreatedRowChangeset = function (row) {
174
- try {
175
- const cells = row.getAllCells();
176
- setPendingChanges(currentChanges => {
177
- return cells.reduce((changes, cell) => {
178
- if (cell.getValue()) {
179
- var _currentChanges$cell$, _currentChanges$cell$2, _currentChanges$cell$3;
180
- return {
181
- ...changes,
182
- [cell.row.id]: {
183
- ...changes[cell.row.id],
184
- [cell.column.id]: cell.getValue(),
185
- _meta: {
186
- ...((_currentChanges$cell$ = currentChanges[cell.row.id]) === null || _currentChanges$cell$ === void 0 ? void 0 : _currentChanges$cell$._meta),
187
- original: cell.row.original,
188
- moveReason: {
189
- ...((_currentChanges$cell$2 = currentChanges[cell.row.id]) === null || _currentChanges$cell$2 === void 0 ? void 0 : _currentChanges$cell$2._meta.moveReason)
190
- },
191
- errors: {
192
- ...((_currentChanges$cell$3 = currentChanges[cell.row.id]) === null || _currentChanges$cell$3 === void 0 ? void 0 : _currentChanges$cell$3._meta.errors)
193
- }
194
- }
195
- }
196
- };
197
- } else {
198
- return changes;
199
- }
200
- }, currentChanges);
201
- });
202
- return Promise.resolve();
203
- } catch (e) {
204
- return Promise.reject(e);
205
- }
206
- };
207
- const localization = useLocalization();
208
- const [pendingChanges, setPendingChanges] = React__default.useState({});
209
- // we maintain save status as separate state because 'complete' needs to briefly show after pendingChanges are deleted
210
- const [saveStates, setSaveState] = React__default.useState({});
211
- function getCellValue(cell) {
212
- var _pendingChanges$cell$;
213
- return (_pendingChanges$cell$ = pendingChanges[cell.row.id]) === null || _pendingChanges$cell$ === void 0 ? void 0 : _pendingChanges$cell$[cell.column.id];
214
- }
215
- function getCellError(cell) {
216
- var _pendingChanges$cell$2, _pendingChanges$cell$3, _pendingChanges$cell$4;
217
- return (_pendingChanges$cell$2 = pendingChanges[cell.row.id]) === null || _pendingChanges$cell$2 === void 0 ? void 0 : (_pendingChanges$cell$3 = _pendingChanges$cell$2._meta.errors) === null || _pendingChanges$cell$3 === void 0 ? void 0 : (_pendingChanges$cell$4 = _pendingChanges$cell$3.cells) === null || _pendingChanges$cell$4 === void 0 ? void 0 : _pendingChanges$cell$4[cell.column.id];
218
- }
219
- const pendingChangesUpdater = usePendingChangesUpdater(handleChange, setPendingChanges);
220
- function hasRowErrors(rowId) {
221
- var _pendingChanges$rowId, _pendingChanges$rowId2, _pendingChanges$rowId3, _pendingChanges$rowId4, _pendingChanges$rowId5;
222
- if (!isEnabled) {
223
- return false;
224
- }
225
- return !!((_pendingChanges$rowId = pendingChanges[rowId]) !== null && _pendingChanges$rowId !== void 0 && (_pendingChanges$rowId2 = _pendingChanges$rowId._meta.errors) !== null && _pendingChanges$rowId2 !== void 0 && _pendingChanges$rowId2.row) || !!Object.keys((_pendingChanges$rowId3 = (_pendingChanges$rowId4 = pendingChanges[rowId]) === null || _pendingChanges$rowId4 === void 0 ? void 0 : (_pendingChanges$rowId5 = _pendingChanges$rowId4._meta.errors) === null || _pendingChanges$rowId5 === void 0 ? void 0 : _pendingChanges$rowId5.cells) !== null && _pendingChanges$rowId3 !== void 0 ? _pendingChanges$rowId3 : {}).length;
226
- }
227
- function hasRowErrorsSeen(rowId) {
228
- var _pendingChanges$rowId6;
229
- if (!isEnabled) {
230
- return false;
231
- }
232
- return hasRowErrors(rowId) && !!((_pendingChanges$rowId6 = pendingChanges[rowId]._meta.errors) !== null && _pendingChanges$rowId6 !== void 0 && _pendingChanges$rowId6.shouldShowErrorAlert);
233
- }
234
- function getRowPendingChange(rowId) {
235
- const rowPendingChanges = pendingChanges[rowId];
236
- if (rowPendingChanges) {
237
- const {
238
- _meta,
239
- ...pendingChange
240
- } = rowPendingChanges;
241
- return pendingChange;
242
- }
243
- return undefined;
244
- }
245
- function getRowSaveStatus(rowId) {
246
- if (!isEnabled) {
247
- return false;
248
- }
249
- return saveStates[rowId];
250
- }
251
- function setRowSaveStatus(rowId, status) {
252
- setSaveState(currentStates => {
253
- const nextStates = {
254
- ...currentStates
255
- };
256
- if (status) {
257
- nextStates[rowId] = status;
258
- } else {
259
- delete nextStates[rowId];
260
- }
261
- return nextStates;
262
- });
263
- }
264
- function getRowMoveReason(rowId) {
265
- var _pendingChanges$rowId7;
266
- return (_pendingChanges$rowId7 = pendingChanges[rowId]) !== null && _pendingChanges$rowId7 !== void 0 && _pendingChanges$rowId7._meta.moveReason ? Object.values(pendingChanges[rowId]._meta.moveReason)[0] : undefined;
267
- }
268
- function hasChanges(rowId) {
269
- if (!isEnabled) {
270
- return false;
271
- }
272
- return rowId ? !!pendingChanges[rowId] : !!Object.keys(pendingChanges).length;
273
- }
274
- function hasAlertErrors() {
275
- if (!isEnabled) {
276
- return false;
277
- }
278
- return !!getAlertErrors().length;
279
- }
280
- function getAlertErrors() {
281
- return Object.keys(pendingChanges).filter(hasRowErrorsSeen).map(rowId => ({
282
- rowId,
283
- pendingChange: pendingChanges[rowId]
284
- }));
285
- }
286
- function resetChanges(rowId) {
287
- setPendingChanges(currentChanges => {
288
- const nextChanges = {
289
- ...currentChanges
290
- };
291
- delete nextChanges[rowId];
292
- return nextChanges;
293
- });
294
- }
295
- function getCompletedRowsCount() {
296
- return Object.values(saveStates).filter(value => value === 'complete').length;
297
- }
298
- return {
299
- getCellValue,
300
- getCellError,
301
- setCellValue,
302
- validateCell,
303
- addCreatedRowChangeset,
304
- hasChanges,
305
- hasAlertErrors,
306
- getAlertErrors,
307
- saveChanges,
308
- resetChanges,
309
- hasRowErrors,
310
- hasRowErrorsSeen,
311
- getRowPendingChange,
312
- getRowSaveStatus,
313
- setRowSaveStatus,
314
- getRowMoveReason,
315
- getCompletedRowsCount
316
- };
317
- }
318
- function useLastFocusedCellIndex() {
319
- // store the last focused cell, so that up/down arrow key navigation remains in the same column
320
- const lastFocusedCellIndexRef = React__default.useRef(undefined);
321
- const setLastFocusedCellIndex = React__default.useCallback(index => {
322
- lastFocusedCellIndexRef.current = index;
323
- }, []);
324
- return [lastFocusedCellIndexRef.current, setLastFocusedCellIndex];
325
- }
326
- function usePendingChangesUpdater(handleChange, setPendingChanges) {
327
- const localization = useLocalization();
328
- const updatersRef = React__default.useRef({});
329
- const runCellUpdates = React__default.useCallback(debounce(function (changes, cell, rowIndex) {
330
- try {
331
- const _temp4 = function () {
332
- if (typeof handleChange === 'function') {
333
- const previousValues = {
334
- ...cell.row.original,
335
- ...getChangesetFromChanges(updatersRef.current[cell.row.id])
336
- };
337
- const nextValues = {
338
- ...previousValues,
339
- ...changes
340
- };
341
- return Promise.resolve(handleChange(cell.column.id, changes[cell.column.id], nextValues, previousValues)).then(function (updates) {
342
- if (updates && Object.keys(updates).length) {
343
- setPendingChanges(currentChanges => createPendingChangesSetter(currentChanges, cell.row, rowIndex, updates, localization));
344
- }
345
- });
346
- }
347
- }();
348
- return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(function () {}) : void 0);
349
- } catch (e) {
350
- return Promise.reject(e);
351
- }
352
- }, 250), []);
353
- function syncCellChanges(changes) {
354
- updatersRef.current = changes;
355
- }
356
- return {
357
- syncCellChanges,
358
- runCellUpdates
359
- };
360
- }
361
- function createPendingChangesSetter(currentChanges, row, rowIndex, changes, localization) {
362
- var _currentChanges$row$i, _currentChanges$row$i2, _currentChanges$row$i3;
363
- // prepare
364
- const nextChanges = {
365
- ...currentChanges
366
- };
367
- const rowChanges = {
368
- ...currentChanges[row.id],
369
- _meta: {
370
- ...((_currentChanges$row$i = currentChanges[row.id]) === null || _currentChanges$row$i === void 0 ? void 0 : _currentChanges$row$i._meta),
371
- original: row.original,
372
- moveReason: {
373
- ...((_currentChanges$row$i2 = currentChanges[row.id]) === null || _currentChanges$row$i2 === void 0 ? void 0 : _currentChanges$row$i2._meta.moveReason)
374
- },
375
- errors: {
376
- ...((_currentChanges$row$i3 = currentChanges[row.id]) === null || _currentChanges$row$i3 === void 0 ? void 0 : _currentChanges$row$i3._meta.errors)
377
- }
378
- }
379
- };
380
- // run changes
381
- const cells = row._getAllCellsByColumnId();
382
- for (const [accessor, change] of Object.entries(changes)) {
383
- // update if the change is different to the original (saved) value,
384
- // otherwise remove any change - no point saving the same value
385
- if (change !== row.original[accessor]) {
386
- rowChanges[accessor] = change;
387
- // consumers sometimes include properties in onEditingChange that aren't rendered as columns, we need to guard against that.
388
- // eslint-disable-next-line no-prototype-builtins
389
- if (cells.hasOwnProperty(accessor)) {
390
- // determine if the row will move position based on this change, and save why it will move
391
- const reason = willRowMove(cells[accessor], change, rowIndex, localization);
392
- if (reason) {
393
- rowChanges._meta.moveReason[accessor] = reason;
394
- } else {
395
- delete rowChanges._meta.moveReason[accessor];
396
- }
397
- }
398
- } else {
399
- delete rowChanges[accessor];
400
- delete rowChanges._meta.moveReason[accessor];
401
- }
402
- }
403
- // set changes
404
- // or delete if there are no changes left, so that we don't store changes with unchanged data
405
- if (Object.keys(rowChanges).filter(k => k !== '_meta').length) {
406
- nextChanges[row.id] = rowChanges;
407
- } else {
408
- delete nextChanges[row.id];
409
- }
410
- return nextChanges;
411
- }
412
- function getChangesetFromChanges(changes) {
413
- // extract the original data from the row changes
414
- const {
415
- _meta,
416
- ...changeset
417
- } = changes !== null && changes !== void 0 ? changes : {};
418
- // and mix them in with the changes, ready to send to the server
419
- return {
420
- ...(_meta === null || _meta === void 0 ? void 0 : _meta.original),
421
- ...changeset
422
- };
423
- }
424
47
 
425
48
  export { useTableEditing };
426
49
  //# sourceMappingURL=useTableEditing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTableEditing.js","sources":["../../../../../../../../src/components/Table3/features/useTableEditing.ts"],"sourcesContent":["import React from 'react';\nimport { Cell as ReactTableCell, Row as ReactTableRow } from '@tanstack/react-table';\nimport { Table3EditingChangeHandler, Table3EditingSaveHandler, Table3EditingValidatorFn } from '../types';\nimport { useGlobalKeyDown } from '../../../hooks/useGlobalKeyDown';\nimport { willRowMove } from '../util/editing';\nimport { debounce } from 'lodash';\nimport { Localization, useLocalization } from '../../Provider/Localization';\n\nexport function useTableEditing<TType = unknown>(\n isEnabled = false,\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n // used to switch the table into editing mode\n const [isEditing, toggleEditing] = React.useState(false);\n\n // used to switch the editing between \"detailed\" mode\n const [isDetailedMode, toggleDetailedMode] = React.useState(false);\n\n // store the last focused cell, so that up/down arrow key navigation remains in the same column\n const [lastFocusedCellIndex, setLastFocusedCellIndex] = useLastFocusedCellIndex();\n\n // store pending changes for each row\n // changes are saved as soon as the active row changes, so in most cases this will only contain the active row's changes\n // but not always - if validation or server requests fail when saving, those rows remain until the failure is resolved\n const pendingChangesFns = usePendingChanges<TType>(isEnabled, handleSave, handleChange, validator);\n\n useGlobalKeyDown(isEnabled && isEditing ? { key: 's', meta: true, shift: false } : undefined, event => {\n event.preventDefault();\n pendingChangesFns.saveChanges();\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 ...pendingChangesFns,\n };\n}\n\ntype SaveState = 'pending' | 'complete';\nexport type PendingChange<TType = unknown> = Partial<TType> & {\n _meta: {\n original: TType;\n moveReason: Record<string, 'search' | 'sorting' | 'filter'>;\n errors: {\n row: string;\n cells: Record<string, string>;\n shouldShowErrorAlert: boolean;\n };\n status?: SaveState;\n };\n};\n\ntype PendingChanges<TType = unknown> = Record<string, PendingChange<TType>>;\nfunction usePendingChanges<TType = unknown>(\n isEnabled: boolean,\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n const localization = useLocalization();\n const [pendingChanges, setPendingChanges] = React.useState<PendingChanges<TType>>({});\n // we maintain save status as separate state because 'complete' needs to briefly show after pendingChanges are deleted\n const [saveStates, setSaveState] = React.useState<Record<string, SaveState>>({});\n\n function getCellValue<T extends TType>(cell: ReactTableCell<T, unknown>): unknown | undefined {\n return pendingChanges[cell.row.id]?.[cell.column.id];\n }\n\n function getCellError<T extends TType>(cell: ReactTableCell<T, unknown>): string | undefined {\n return pendingChanges[cell.row.id]?._meta.errors?.cells?.[cell.column.id];\n }\n\n async function addCreatedRowChangeset(row) {\n const cells = row.getAllCells();\n\n setPendingChanges(currentChanges => {\n return cells.reduce((changes, cell) => {\n if (cell.getValue()) {\n return {\n ...changes,\n [cell.row.id]: {\n ...changes[cell.row.id],\n [cell.column.id]: cell.getValue(),\n _meta: {\n ...currentChanges[cell.row.id]?._meta,\n original: cell.row.original,\n moveReason: {\n ...currentChanges[cell.row.id]?._meta.moveReason,\n },\n errors: {\n ...currentChanges[cell.row.id]?._meta.errors,\n },\n },\n },\n };\n } else {\n return changes;\n }\n }, currentChanges);\n });\n }\n const pendingChangesUpdater = usePendingChangesUpdater(handleChange, setPendingChanges);\n\n async function setCellValue<T extends TType>(cell: ReactTableCell<T, unknown>, change: unknown, rowIndex: number) {\n const changes = {\n [cell.column.id]: change,\n } as Partial<T>;\n\n setPendingChanges(currentChanges => {\n const nextChanges = createPendingChangesSetter<T>(\n currentChanges as PendingChanges<T>,\n cell.row,\n rowIndex,\n changes,\n localization\n );\n pendingChangesUpdater.syncCellChanges(nextChanges);\n return nextChanges;\n });\n pendingChangesUpdater.runCellUpdates<T>(changes, cell, rowIndex);\n }\n\n async function validateCell<T extends TType>(cell: ReactTableCell<T, unknown>) {\n if (!validator || !isEnabled) {\n return;\n }\n\n const changeSet = getChangesetFromChanges(pendingChanges[cell.row.id]);\n\n // only validate if the cell being blurred actually has any changes\n if (cell.column.id in changeSet) {\n const errors = ((await validator(changeSet)) ?? {}) as Record<string, string>;\n\n setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n nextChanges[cell.row.id]._meta = {\n ...nextChanges[cell.row.id]._meta,\n errors: {\n ...nextChanges[cell.row.id]._meta.errors,\n cells: errors,\n shouldShowErrorAlert: !Object.keys(errors).length\n ? false\n : nextChanges[cell.row.id]._meta.errors.shouldShowErrorAlert,\n },\n };\n return nextChanges;\n });\n }\n }\n\n function hasRowErrors(rowId: string) {\n if (!isEnabled) {\n return false;\n }\n\n return (\n !!pendingChanges[rowId]?._meta.errors?.row || !!Object.keys(pendingChanges[rowId]?._meta.errors?.cells ?? {}).length\n );\n }\n\n function hasRowErrorsSeen(rowId: string) {\n if (!isEnabled) {\n return false;\n }\n\n return hasRowErrors(rowId) && !!pendingChanges[rowId]._meta.errors?.shouldShowErrorAlert;\n }\n function getRowPendingChange(rowId: string) {\n const rowPendingChanges = pendingChanges[rowId];\n\n if (rowPendingChanges) {\n const { _meta, ...pendingChange } = rowPendingChanges;\n\n return pendingChange;\n }\n\n return undefined;\n }\n\n function getRowSaveStatus(rowId: string) {\n if (!isEnabled) {\n return false;\n }\n\n return saveStates[rowId];\n }\n\n function setRowSaveStatus(rowId: string, status: 'pending' | 'complete' | undefined) {\n setSaveState(currentStates => {\n const nextStates = { ...currentStates };\n\n if (status) {\n nextStates[rowId] = status;\n } else {\n delete nextStates[rowId];\n }\n\n return nextStates;\n });\n }\n\n function getRowMoveReason(rowId: string) {\n return pendingChanges[rowId]?._meta.moveReason ? Object.values(pendingChanges[rowId]._meta.moveReason)[0] : undefined;\n }\n\n function hasChanges(rowId?: string) {\n if (!isEnabled) {\n return false;\n }\n\n return rowId ? !!pendingChanges[rowId] : !!Object.keys(pendingChanges).length;\n }\n\n function hasAlertErrors() {\n if (!isEnabled) {\n return false;\n }\n return !!getAlertErrors().length;\n }\n\n function getAlertErrors<T extends TType>() {\n return Object.keys(pendingChanges)\n .filter(hasRowErrorsSeen)\n .map(rowId => ({ rowId, pendingChange: pendingChanges[rowId] as PendingChange<T> }));\n }\n\n function resetChanges(rowId: string) {\n setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n delete nextChanges[rowId];\n return nextChanges;\n });\n }\n\n async function saveChanges(rowId: string | undefined = undefined) {\n if (!handleSave) {\n console.warn('Tried to save, but Table has no onEditingSave handler');\n return;\n }\n\n // we save back to pendingChanges, so make a copy of it's state when save was triggered\n const changesToSave = rowId ? { [rowId]: pendingChanges[rowId] } : { ...pendingChanges };\n const changes = Object.keys(changesToSave);\n\n if (changes.length) {\n for (const rowId of changes) {\n const pendingChange = changesToSave[rowId];\n\n const changeSet = getChangesetFromChanges(pendingChange);\n try {\n if (getRowSaveStatus(rowId) === 'pending') return;\n\n // set saving = true\n setRowSaveStatus(rowId, 'pending');\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 // send new data to the server\n await handleSave(changeSet);\n\n // cleanup changes, we don't need them after saving\n resetChanges(rowId);\n setRowSaveStatus(rowId, 'complete');\n } catch (error) {\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;\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 setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n nextChanges[rowId]._meta.errors = {\n row: rowError,\n cells: cellErrors,\n shouldShowErrorAlert: true,\n };\n return nextChanges;\n });\n }\n\n setRowSaveStatus(rowId, undefined);\n }\n }\n }\n }\n\n function getCompletedRowsCount() {\n return Object.values(saveStates).filter(value => value === 'complete').length;\n }\n\n return {\n getCellValue,\n getCellError,\n setCellValue,\n validateCell,\n addCreatedRowChangeset,\n hasChanges,\n hasAlertErrors,\n getAlertErrors,\n saveChanges,\n resetChanges,\n hasRowErrors,\n hasRowErrorsSeen,\n getRowPendingChange,\n getRowSaveStatus,\n setRowSaveStatus,\n getRowMoveReason,\n getCompletedRowsCount,\n };\n}\n\nfunction useLastFocusedCellIndex(): [number | undefined, (index: number | undefined) => void] {\n // store the last focused cell, so that up/down arrow key navigation remains in the same column\n const lastFocusedCellIndexRef = React.useRef<number | undefined>(undefined);\n const setLastFocusedCellIndex = React.useCallback((index: number | undefined) => {\n lastFocusedCellIndexRef.current = index;\n }, []);\n\n return [lastFocusedCellIndexRef.current, setLastFocusedCellIndex];\n}\n\nfunction usePendingChangesUpdater<TType = unknown>(\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n setPendingChanges: React.Dispatch<React.SetStateAction<PendingChanges<TType>>>\n) {\n const localization = useLocalization();\n const updatersRef = React.useRef<PendingChanges<TType>>({});\n\n const runCellUpdates = React.useCallback(\n debounce(async function <T extends TType>(changes: Partial<T>, cell: ReactTableCell<T, unknown>, rowIndex: number) {\n if (typeof handleChange === 'function') {\n const previousValues = {\n ...cell.row.original,\n ...getChangesetFromChanges(updatersRef.current[cell.row.id]),\n };\n const nextValues = {\n ...previousValues,\n ...changes,\n };\n const updates = await handleChange(cell.column.id, changes[cell.column.id], nextValues, previousValues);\n\n if (updates && Object.keys(updates).length) {\n setPendingChanges(currentChanges =>\n createPendingChangesSetter(currentChanges, cell.row, rowIndex, updates, localization)\n );\n }\n }\n }, 250),\n []\n ) as unknown as <T extends TType>(changes: Partial<T>, cell: ReactTableCell<T, unknown>, rowIndex: number) => Promise<void>;\n\n function syncCellChanges<T extends TType>(changes: PendingChanges<T>) {\n updatersRef.current = changes;\n }\n\n return {\n syncCellChanges,\n runCellUpdates,\n };\n}\n\nfunction createPendingChangesSetter<TType = unknown>(\n currentChanges: PendingChanges<TType>,\n row: ReactTableRow<TType>,\n rowIndex: number,\n changes: Partial<TType>,\n localization: Localization\n) {\n // prepare\n const nextChanges: PendingChanges<TType> = { ...currentChanges };\n const rowChanges = {\n ...currentChanges[row.id],\n _meta: {\n ...currentChanges[row.id]?._meta,\n original: row.original,\n moveReason: {\n ...currentChanges[row.id]?._meta.moveReason,\n },\n errors: {\n ...currentChanges[row.id]?._meta.errors,\n },\n },\n } as PendingChange<TType>;\n\n // run changes\n const cells = row._getAllCellsByColumnId();\n\n for (const [accessor, change] of Object.entries(changes)) {\n // update if the change is different to the original (saved) value,\n // otherwise remove any change - no point saving the same value\n if (change !== row.original[accessor]) {\n rowChanges[accessor] = change;\n\n // consumers sometimes include properties in onEditingChange that aren't rendered as columns, we need to guard against that.\n // eslint-disable-next-line no-prototype-builtins\n if (cells.hasOwnProperty(accessor)) {\n // determine if the row will move position based on this change, and save why it will move\n const reason = willRowMove(cells[accessor], change, rowIndex, localization);\n\n if (reason) {\n rowChanges._meta.moveReason[accessor] = reason;\n } else {\n delete rowChanges._meta.moveReason[accessor];\n }\n }\n } else {\n delete rowChanges[accessor];\n delete rowChanges._meta.moveReason[accessor];\n }\n }\n\n // set changes\n // or delete if there are no changes left, so that we don't store changes with unchanged data\n if (Object.keys(rowChanges).filter(k => k !== '_meta').length) {\n nextChanges[row.id] = rowChanges;\n } else {\n delete nextChanges[row.id];\n }\n\n return nextChanges;\n}\n\nfunction getChangesetFromChanges<TType = unknown>(changes: PendingChange<TType>): TType {\n // extract the original data from the row changes\n const { _meta, ...changeset } = changes ?? {};\n // and mix them in with the changes, ready to send to the server\n return { ..._meta?.original, ...changeset };\n}\n"],"names":["useTableEditing","isEnabled","handleSave","handleChange","validator","isEditing","toggleEditing","React","useState","isDetailedMode","toggleDetailedMode","lastFocusedCellIndex","setLastFocusedCellIndex","useLastFocusedCellIndex","pendingChangesFns","usePendingChanges","useGlobalKeyDown","key","meta","shift","undefined","event","preventDefault","saveChanges","rowId","console","warn","Promise","resolve","changesToSave","pendingChanges","changes","Object","keys","length","_forOf","pendingChange","changeSet","getChangesetFromChanges","_catch","_temp3","_result","_exit","then","resetChanges","setRowSaveStatus","getRowSaveStatus","_temp2","errors","error","rowError","cellErrors","Error","_error$response","message","response","data","_error$response2","setPendingChanges","currentChanges","nextChanges","_meta","row","cells","shouldShowErrorAlert","e","reject","validateCell","cell","id","_temp","column","setCellValue","change","rowIndex","createPendingChangesSetter","localization","pendingChangesUpdater","syncCellChanges","runCellUpdates","addCreatedRowChangeset","getAllCells","reduce","getValue","_currentChanges$cell$","_currentChanges$cell$2","_currentChanges$cell$3","original","moveReason","useLocalization","saveStates","setSaveState","getCellValue","_pendingChanges$cell$","getCellError","_pendingChanges$cell$2","_pendingChanges$cell$3","_pendingChanges$cell$4","usePendingChangesUpdater","hasRowErrors","_pendingChanges$rowId","_pendingChanges$rowId2","_pendingChanges$rowId3","_pendingChanges$rowId4","_pendingChanges$rowId5","hasRowErrorsSeen","_pendingChanges$rowId6","getRowPendingChange","rowPendingChanges","status","currentStates","nextStates","getRowMoveReason","_pendingChanges$rowId7","values","hasChanges","hasAlertErrors","getAlertErrors","filter","map","getCompletedRowsCount","value","lastFocusedCellIndexRef","useRef","useCallback","index","current","updatersRef","debounce","previousValues","nextValues","updates","_temp4","rowChanges","_currentChanges$row$i","_currentChanges$row$i2","_currentChanges$row$i3","_getAllCellsByColumnId","accessor","entries","hasOwnProperty","reason","willRowMove","k","changeset"],"mappings":"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"}
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 { Table3EditingChangeHandler, Table3EditingSaveHandler, Table3EditingValidatorFn } 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 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 if (!isTemporaryRow(table.getRowModel().rows[index]?.id)) {\n scrollToIndex(index);\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 createRowButtonRef,\n ...pendingChangesFns,\n };\n}\n"],"names":["useTableEditing","isEnabled","handleSave","handleChange","rowIdentityAccessor","validator","isEditing","setEditing","React","useState","isDetailedMode","toggleDetailedMode","createRowButtonRef","useRef","lastFocusedCellIndex","setLastFocusedCellIndex","undefined","pendingChangesFns","usePendingChangesState","toggleEditing","enabled","table","scrollToIndex","saveChanges","tableMeta","options","meta","index","_tableMeta$rowActive$","rowActive","rowActiveIndex","setRowActiveIndex","isTemporaryRow","_table$getRowModel$ro","getRowModel","rows","id"],"mappings":";;;;SAMgBA,eAAeA,CAC3BC,SAAS,GAAG,KAAK,EACjBC,UAAuD,EACvDC,YAA2D,EAC3DC,mBAA4C,EAC5CC,SAAsD;;EAGtD,MAAM,CAACC,SAAS,EAAEC,UAAU,CAAC,GAAGC,cAAK,CAACC,QAAQ,CAAC,KAAK,CAAC;;EAGrD,MAAM,CAACC,cAAc,EAAEC,kBAAkB,CAAC,GAAGH,cAAK,CAACC,QAAQ,CAAC,KAAK,CAAC;;EAGlE,MAAMG,kBAAkB,GAAGJ,cAAK,CAACK,MAAM,CAAoB,IAAI,CAAC;;EAGhE,MAAM,CAACC,oBAAoB,EAAEC,uBAAuB,CAAC,GAAGP,cAAK,CAACC,QAAQ,CAAqBO,SAAS,CAAC;EAErG,MAAMC,iBAAiB,GAAGC,sBAAsB,CAC5ChB,UAAU,EACVC,YAAY,EACZC,mBAAkC,EAClCC,SAAS,CACZ;EAED,SAASc,aAAaA,CAClBC,OAAsC,EACtCC,KAAoB,EACpBC,aAAsC;;IAEtC,IAAI,CAACF,OAAO,EAAE;;MAEVH,iBAAiB,CAACM,WAAW,CAACF,KAAK,CAAC;;MAEpCV,kBAAkB,CAAC,KAAK,CAAC;;MAEzBI,uBAAuB,CAACC,SAAS,CAAC;;IAGtC,MAAMQ,SAAS,GAAGH,KAAK,CAACI,OAAO,CAACC,IAA6B;IAC7D,MAAMC,KAAK,IAAAC,qBAAA,GAAGJ,SAAS,CAACK,SAAS,CAACC,cAAc,cAAAF,qBAAA,cAAAA,qBAAA,GAAI,CAAC;IAErD,IAAIJ,SAAS,CAACK,SAAS,CAACC,cAAc,KAAKd,SAAS,EAAE;MAClDQ,SAAS,CAACK,SAAS,CAACE,iBAAiB,CAACJ,KAAK,CAAC;;IAGhDpB,UAAU,CAACa,OAAO,CAAC;IAEnB,IAAI,CAACY,cAAc,EAAAC,qBAAA,GAACZ,KAAK,CAACa,WAAW,EAAE,CAACC,IAAI,CAACR,KAAK,CAAC,cAAAM,qBAAA,uBAA/BA,qBAAA,CAAiCG,EAAE,CAAC,EAAE;MACtDd,aAAa,CAACK,KAAK,CAAC;;;EAI5B,OAAO;IACH1B,SAAS;IACTK,SAAS;IACTI,cAAc;IACdC,kBAAkB,EAAEV,SAAS,GAAGU,kBAAkB,GAAG,MAAMK,SAAS;IACpEG,aAAa,EAAElB,SAAS,GAAGkB,aAAa,GAAG,MAAMH,SAAS;IAC1DF,oBAAoB;IACpBC,uBAAuB;IACvBH,kBAAkB;IAClB,GAAGK;GACN;AACL;;;;"}