@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.
- package/dist/components/Provider/Localization.d.ts +2 -0
- package/dist/components/Report/Report.d.ts +1 -1
- package/dist/components/Table3/Table3.d.ts +2 -14
- package/dist/components/Table3/components/Columns/Internal/EditingActionsMenu.d.ts +1 -2
- package/dist/components/Table3/components/Editing/DiscardChangesConfirmationDialog.d.ts +7 -0
- package/dist/components/Table3/components/Row/Editing/CreateNewRow.d.ts +14 -0
- package/dist/components/Table3/components/Row/Editing/TemporaryRow.d.ts +11 -0
- package/dist/components/Table3/features/useEditingState.d.ts +29 -0
- package/dist/components/Table3/features/useTableEditing.d.ts +26 -36
- package/dist/components/Table3/listeners/useTableEditingListener.d.ts +1 -1
- package/dist/components/Table3/types.d.ts +24 -8
- package/dist/components/Table3/useTable3.d.ts +6 -0
- package/dist/components/Table3/util/editing.d.ts +7 -1
- package/dist/esm/index.css +28 -4
- package/dist/esm/packages/taco/src/components/ModeSwitch/ModeSwitch.js +2 -2
- package/dist/esm/packages/taco/src/components/ModeSwitch/ModeSwitch.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Provider/Localization.js +5 -3
- package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Select2/Select2.js +1 -1
- package/dist/esm/packages/taco/src/components/Select2/Select2.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Switch/Switch.js +1 -1
- package/dist/esm/packages/taco/src/components/Switch/Switch.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/Table3.js +14 -6
- package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.js +1 -2
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +25 -15
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Internal/EditingActionsMenu.js +5 -37
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Internal/EditingActionsMenu.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js +17 -12
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/DiscardChangesConfirmationDialog.js +34 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/DiscardChangesConfirmationDialog.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js +103 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateNewRow.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/SaveStatus.js +2 -14
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/SaveStatus.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js +96 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/TemporaryRow.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js +39 -6
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Toolbar/Editing/Editing.js +4 -17
- package/dist/esm/packages/taco/src/components/Table3/components/Toolbar/Editing/Editing.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js +519 -0
- package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +29 -406
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js +44 -33
- package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/useTable3.js +27 -9
- package/dist/esm/packages/taco/src/components/Table3/useTable3.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/util/editing.js +11 -23
- package/dist/esm/packages/taco/src/components/Table3/util/editing.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js +1 -3
- package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.js +9 -3
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Actions.js +9 -7
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Actions.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Footer/Footer.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/Row.js +4 -2
- 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/Row/RowContext.js +2 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/RowContext.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +29 -7
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js +2 -2
- package/dist/esm/packages/taco/src/primitives/Table/Core/useTable.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/types.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowSelection.js +2 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowSelection.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +11 -0
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
- package/dist/esm/packages/taco/src/utils/dom.js +7 -4
- package/dist/esm/packages/taco/src/utils/dom.js.map +1 -1
- package/dist/index.css +28 -4
- package/dist/primitives/Table/Core/components/Columns/Internal/Actions.d.ts +3 -1
- package/dist/primitives/Table/Core/components/Footer/Footer.d.ts +2 -2
- package/dist/primitives/Table/Core/components/Row/RowContext.d.ts +1 -0
- package/dist/primitives/Table/Core/features/useTableRenderer.d.ts +2 -2
- package/dist/primitives/Table/Core/types.d.ts +4 -0
- package/dist/primitives/Table/Core/useTable.d.ts +2 -2
- package/dist/primitives/Table/types.d.ts +1 -1
- package/dist/primitives/Table/useTableManager/useTableManager.d.ts +1 -1
- package/dist/taco.cjs.development.js +982 -661
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/dist/utils/dom.d.ts +1 -0
- package/package.json +2 -2
- package/dist/components/Table3/components/Row/Editing/CreateRowButton.d.ts +0 -11
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateRowButton.js +0 -90
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Editing/CreateRowButton.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Row.js","sources":["../../../../../../../../../src/components/Table3/components/Row/Row.tsx"],"sourcesContent":["import React from 'react';\nimport { TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { DisplayRow, DisplayRowProps } from '../../../../primitives/Table/Core/components/Row/BuiltIns/DisplayRow';\nimport { SaveStatus } from './Editing/SaveStatus';\nimport { useAugmentedFocusManager } from '../../../../primitives/Table/Core/components/Body/util';\nimport { setDataFocusAttribute } from '../../../../utils/dom';\n\nexport function Row<TType = unknown>(props: DisplayRowProps<TType>) {\n const { row, index, table } = props;\n const focusManager = useAugmentedFocusManager();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === index;\n\n React.useEffect(() => {\n if (tableMeta.editing.isEditing && isActiveRow && tableMeta.editing.lastFocusedCellIndex === undefined) {\n setDataFocusAttribute(focusManager.focusFirst());\n }\n }, [tableMeta.editing.isEditing, tableMeta.rowActive.rowActiveIndex, tableMeta.editing.lastFocusedCellIndex]);\n\n const handleFocus = React.useCallback(\n (event: React.FocusEvent<HTMLTableRowElement>) => {\n if (tableMeta.editing.isEditing) {\n const cellIndex = Number(event.target.closest('td')?.getAttribute('data-cell-index') ?? undefined);\n\n if (!isNaN(cellIndex)) {\n tableMeta.editing.setLastFocusedCellIndex(Number(cellIndex));\n }\n }\n },\n [tableMeta.editing.isEditing, isActiveRow]\n );\n\n const
|
|
1
|
+
{"version":3,"file":"Row.js","sources":["../../../../../../../../../src/components/Table3/components/Row/Row.tsx"],"sourcesContent":["import React from 'react';\nimport { TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { DisplayRow, DisplayRowProps } from '../../../../primitives/Table/Core/components/Row/BuiltIns/DisplayRow';\nimport { SaveStatus } from './Editing/SaveStatus';\nimport { useAugmentedFocusManager } from '../../../../primitives/Table/Core/components/Body/util';\nimport { isElementTriggeredFromContainer, setDataFocusAttribute } from '../../../../utils/dom';\nimport { DiscardChangesConfirmationDialog } from '../Editing/DiscardChangesConfirmationDialog';\nimport { isTemporaryRow } from '../../util/editing';\n\nexport function Row<TType = unknown>(props: DisplayRowProps<TType>) {\n const { row, index, table } = props;\n const focusManager = useAugmentedFocusManager();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === index;\n\n React.useEffect(() => {\n if (tableMeta.editing.isEditing && isActiveRow && tableMeta.editing.lastFocusedCellIndex === undefined) {\n setDataFocusAttribute(focusManager.focusFirst());\n }\n }, [tableMeta.editing.isEditing, tableMeta.rowActive.rowActiveIndex, tableMeta.editing.lastFocusedCellIndex]);\n\n const handleFocus = React.useCallback(\n (event: React.FocusEvent<HTMLTableRowElement>) => {\n if (tableMeta.editing.isEditing) {\n const cellIndex = Number(event.target.closest('td')?.getAttribute('data-cell-index') ?? undefined);\n\n if (!isNaN(cellIndex)) {\n tableMeta.editing.setLastFocusedCellIndex(Number(cellIndex));\n }\n }\n },\n [tableMeta.editing.isEditing, isActiveRow]\n );\n\n const rowStatus = tableMeta.editing.getRowStatus(row.id);\n\n // discard new row\n const [showDiscardDialog, setShowDiscardDialog] = React.useState(false);\n\n function handleDiscard() {\n tableMeta.editing.discardChanges(row.id, table);\n requestAnimationFrame(() => {\n if (isTemporaryRow(row.id)) {\n tableMeta.editing.createRowButtonRef.current?.focus();\n } else {\n focusManager.focusFirst();\n }\n });\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLTableRowElement>) {\n if (props.onKeyDown) {\n props.onKeyDown(event);\n }\n\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return;\n }\n\n if (\n event.key === 'Escape' &&\n tableMeta.editing.hasChanges(row.id) &&\n !isElementTriggeredFromContainer(event.target as HTMLElement, event.currentTarget)\n ) {\n event.preventDefault();\n setShowDiscardDialog(true);\n }\n }\n\n const attributes = {\n 'data-row-editing-invalid': tableMeta.editing.hasRowErrors(row.id)\n ? !tableMeta.editing.hasRowErrorsShownInAlert(row.id)\n ? 'unseen'\n : true\n : undefined,\n 'data-row-editing-status': rowStatus,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n };\n\n return (\n <>\n <DisplayRow<TType> {...props} {...attributes}>\n {rowStatus === 'saving' || rowStatus === 'saved' ? <SaveStatus rowId={row.id} table={table} /> : null}\n </DisplayRow>\n <DiscardChangesConfirmationDialog\n open={showDiscardDialog}\n onChange={setShowDiscardDialog}\n onDiscard={handleDiscard}\n />\n </>\n );\n}\n"],"names":["Row","props","row","index","table","focusManager","useAugmentedFocusManager","tableMeta","options","meta","isActiveRow","rowActive","rowActiveIndex","React","useEffect","editing","isEditing","lastFocusedCellIndex","undefined","setDataFocusAttribute","focusFirst","handleFocus","useCallback","event","_event$target$closest","_event$target$closest2","cellIndex","Number","target","closest","getAttribute","isNaN","setLastFocusedCellIndex","rowStatus","getRowStatus","id","showDiscardDialog","setShowDiscardDialog","useState","handleDiscard","discardChanges","requestAnimationFrame","isTemporaryRow","_tableMeta$editing$cr","createRowButtonRef","current","focus","handleKeyDown","onKeyDown","isDefaultPrevented","isPropagationStopped","key","hasChanges","isElementTriggeredFromContainer","currentTarget","preventDefault","attributes","hasRowErrors","hasRowErrorsShownInAlert","onFocus","DisplayRow","SaveStatus","rowId","DiscardChangesConfirmationDialog","open","onChange","onDiscard"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React__default from 'react';
|
|
2
|
-
import { useGlobalKeyDown } from '../../../../../hooks/useGlobalKeyDown.js';
|
|
3
2
|
import { Tooltip } from '../../../../Tooltip/Tooltip.js';
|
|
4
3
|
import { useLocalization } from '../../../../Provider/Localization.js';
|
|
5
4
|
import { Shortcut } from '../../../../Shortcut/Shortcut.js';
|
|
6
5
|
import { ModeSwitch } from '../../../../ModeSwitch/ModeSwitch.js';
|
|
6
|
+
import { shortcut } from '../../../util/editing.js';
|
|
7
7
|
|
|
8
8
|
function Editing(props) {
|
|
9
9
|
const {
|
|
@@ -15,30 +15,17 @@ function Editing(props) {
|
|
|
15
15
|
} = useLocalization();
|
|
16
16
|
const ref = React__default.useRef(null);
|
|
17
17
|
const tableMeta = table.options.meta;
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
meta: true,
|
|
21
|
-
shift: false
|
|
18
|
+
const handleChange = enabled => {
|
|
19
|
+
tableMeta.editing.toggleEditing(enabled, table, scrollToIndex);
|
|
22
20
|
};
|
|
23
21
|
const tooltip = /*#__PURE__*/React__default.createElement(React__default.Fragment, null, texts.table3.editing.buttons.edit.tooltip, /*#__PURE__*/React__default.createElement(Shortcut, {
|
|
24
22
|
className: "ml-2",
|
|
25
23
|
keys: shortcut
|
|
26
24
|
}));
|
|
27
|
-
useGlobalKeyDown(shortcut, event => {
|
|
28
|
-
var _ref$current;
|
|
29
|
-
event.preventDefault();
|
|
30
|
-
(_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.click();
|
|
31
|
-
});
|
|
32
|
-
const handleChange = enabled => {
|
|
33
|
-
tableMeta.editing.toggleEditing(enabled);
|
|
34
|
-
requestAnimationFrame(() => {
|
|
35
|
-
var _tableMeta$rowActive$;
|
|
36
|
-
return scrollToIndex((_tableMeta$rowActive$ = tableMeta.rowActive.rowActiveIndex) !== null && _tableMeta$rowActive$ !== void 0 ? _tableMeta$rowActive$ : 0);
|
|
37
|
-
});
|
|
38
|
-
};
|
|
39
25
|
return /*#__PURE__*/React__default.createElement(Tooltip, {
|
|
40
26
|
title: tooltip
|
|
41
27
|
}, /*#__PURE__*/React__default.createElement(ModeSwitch, {
|
|
28
|
+
"data-table": "editing-toggle",
|
|
42
29
|
checked: tableMeta.editing.isEditing,
|
|
43
30
|
onChange: handleChange,
|
|
44
31
|
ref: ref
|
package/dist/esm/packages/taco/src/components/Table3/components/Toolbar/Editing/Editing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Editing.js","sources":["../../../../../../../../../../src/components/Table3/components/Toolbar/Editing/Editing.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { useLocalization } from '../../../../Provider/Localization';\nimport { Tooltip } from '../../../../Tooltip/Tooltip';\nimport { ModeSwitch } from '../../../../ModeSwitch/ModeSwitch';\nimport {
|
|
1
|
+
{"version":3,"file":"Editing.js","sources":["../../../../../../../../../../src/components/Table3/components/Toolbar/Editing/Editing.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { useLocalization } from '../../../../Provider/Localization';\nimport { Tooltip } from '../../../../Tooltip/Tooltip';\nimport { ModeSwitch } from '../../../../ModeSwitch/ModeSwitch';\nimport { Shortcut } from '../../../../Shortcut/Shortcut';\nimport { shortcut } from '../../../util/editing';\n\ntype EditingProps<TType = unknown> = React.HTMLAttributes<HTMLButtonElement> & {\n scrollToIndex: any;\n table: ReactTable<TType>;\n};\n\nexport function Editing<TType = unknown>(props: EditingProps<TType>) {\n const { scrollToIndex, table } = props;\n const { texts } = useLocalization();\n const ref = React.useRef<HTMLButtonElement>(null);\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n\n const handleChange = (enabled: boolean) => {\n tableMeta.editing.toggleEditing(enabled, table, scrollToIndex);\n };\n\n const tooltip = (\n <>\n {texts.table3.editing.buttons.edit.tooltip}\n <Shortcut className=\"ml-2\" keys={shortcut} />\n </>\n );\n\n return (\n <Tooltip title={tooltip}>\n <ModeSwitch data-table=\"editing-toggle\" checked={tableMeta.editing.isEditing} onChange={handleChange} ref={ref} />\n </Tooltip>\n );\n}\n"],"names":["Editing","props","scrollToIndex","table","texts","useLocalization","ref","React","useRef","tableMeta","options","meta","handleChange","enabled","editing","toggleEditing","tooltip","table3","buttons","edit","Shortcut","className","keys","shortcut","Tooltip","title","ModeSwitch","checked","isEditing","onChange"],"mappings":";;;;;;;SAagBA,OAAOA,CAAkBC,KAA0B;EAC/D,MAAM;IAAEC,aAAa;IAAEC;GAAO,GAAGF,KAAK;EACtC,MAAM;IAAEG;GAAO,GAAGC,eAAe,EAAE;EACnC,MAAMC,GAAG,GAAGC,cAAK,CAACC,MAAM,CAAoB,IAAI,CAAC;EACjD,MAAMC,SAAS,GAAGN,KAAK,CAACO,OAAO,CAACC,IAA6B;EAE7D,MAAMC,YAAY,GAAIC,OAAgB;IAClCJ,SAAS,CAACK,OAAO,CAACC,aAAa,CAACF,OAAO,EAAEV,KAAK,EAAED,aAAa,CAAC;GACjE;EAED,MAAMc,OAAO,gBACTT,4DACKH,KAAK,CAACa,MAAM,CAACH,OAAO,CAACI,OAAO,CAACC,IAAI,CAACH,OAAO,eAC1CT,6BAACa,QAAQ;IAACC,SAAS,EAAC,MAAM;IAACC,IAAI,EAAEC;IAAY,CAEpD;EAED,oBACIhB,6BAACiB,OAAO;IAACC,KAAK,EAAET;kBACZT,6BAACmB,UAAU;kBAAY,gBAAgB;IAACC,OAAO,EAAElB,SAAS,CAACK,OAAO,CAACc,SAAS;IAAEC,QAAQ,EAAEjB,YAAY;IAAEN,GAAG,EAAEA;IAAO,CAC5G;AAElB;;;;"}
|
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { useLocalization } from '../../Provider/Localization.js';
|
|
3
|
+
import { v4 } from 'uuid';
|
|
4
|
+
import { _forOf, _catch } from '../../../../../../node_modules/babel-plugin-transform-async-to-promises/helpers.mjs.js';
|
|
5
|
+
import { isTemporaryRow, willRowMove, TEMPORARY_ROW_ID_PREFIX } from '../util/editing.js';
|
|
6
|
+
import omit from 'lodash-es/omit';
|
|
7
|
+
import setWith from 'lodash-es/setWith';
|
|
8
|
+
|
|
9
|
+
const DELAY_BEFORE_REMOVING_SAVE_STATUS = 3000;
|
|
10
|
+
function reducer(state, action) {
|
|
11
|
+
const {
|
|
12
|
+
type,
|
|
13
|
+
rowId,
|
|
14
|
+
payload
|
|
15
|
+
} = action;
|
|
16
|
+
switch (type) {
|
|
17
|
+
case 'setCellValue':
|
|
18
|
+
{
|
|
19
|
+
const {
|
|
20
|
+
columnId,
|
|
21
|
+
row,
|
|
22
|
+
value
|
|
23
|
+
} = payload;
|
|
24
|
+
return {
|
|
25
|
+
...state,
|
|
26
|
+
changes: {
|
|
27
|
+
...state.changes,
|
|
28
|
+
rows: setWith(state.changes.rows, `${rowId}.${columnId}`, value, Object),
|
|
29
|
+
originals: setWith(state.changes.originals, rowId, row, Object)
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
case 'removeCellValue':
|
|
34
|
+
{
|
|
35
|
+
const {
|
|
36
|
+
columnId,
|
|
37
|
+
rowIdentityAccessor
|
|
38
|
+
} = payload;
|
|
39
|
+
const changes = omit(state.changes.rows, `${rowId}.${columnId}`);
|
|
40
|
+
// if there are no changes left, remove the row
|
|
41
|
+
if (!Object.keys(changes[rowId]).length) {
|
|
42
|
+
return reducer(state, {
|
|
43
|
+
type: 'removeRow',
|
|
44
|
+
rowId,
|
|
45
|
+
payload: {
|
|
46
|
+
rowIdentityAccessor
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
...state,
|
|
52
|
+
changes: {
|
|
53
|
+
...state.changes,
|
|
54
|
+
rows: omit(state.changes.rows, `${rowId}.${columnId}`),
|
|
55
|
+
errors: omit(state.changes.errors, `${rowId}.cells.${columnId}`),
|
|
56
|
+
moveReasons: omit(state.changes.moveReasons, `${rowId}.${columnId}`)
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
case 'updateRow':
|
|
61
|
+
{
|
|
62
|
+
const {
|
|
63
|
+
cellErrors,
|
|
64
|
+
moveReasons,
|
|
65
|
+
original,
|
|
66
|
+
value
|
|
67
|
+
} = payload;
|
|
68
|
+
return {
|
|
69
|
+
...state,
|
|
70
|
+
changes: {
|
|
71
|
+
...state.changes,
|
|
72
|
+
rows: setWith(state.changes.rows, rowId, value, Object),
|
|
73
|
+
errors: setWith(state.changes.errors, `${rowId}.cells`, cellErrors !== null && cellErrors !== void 0 ? cellErrors : state.changes.errors.cells[rowId], Object),
|
|
74
|
+
originals: setWith(state.changes.originals, rowId, original !== null && original !== void 0 ? original : state.changes.originals[rowId], Object),
|
|
75
|
+
moveReasons: setWith(state.changes.moveReasons, rowId, moveReasons !== null && moveReasons !== void 0 ? moveReasons : state.changes.moveReasons[rowId], Object),
|
|
76
|
+
// status can be undefined, so don't use ??
|
|
77
|
+
status: setWith(state.changes.status, rowId, undefined, Object)
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
case 'removeRow':
|
|
82
|
+
{
|
|
83
|
+
const {
|
|
84
|
+
rowIdentityAccessor
|
|
85
|
+
} = payload;
|
|
86
|
+
return {
|
|
87
|
+
...state,
|
|
88
|
+
changes: {
|
|
89
|
+
...state.changes,
|
|
90
|
+
rows: omit(state.changes.rows, rowId),
|
|
91
|
+
errors: omit(state.changes.errors, rowId),
|
|
92
|
+
moveReasons: omit(state.changes.moveReasons, rowId),
|
|
93
|
+
originals: omit(state.changes.originals, rowId),
|
|
94
|
+
status: omit(state.changes.status, rowId)
|
|
95
|
+
},
|
|
96
|
+
temporaryRows: state.temporaryRows.filter(row => row[rowIdentityAccessor] !== rowId)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
case 'setRowStatus':
|
|
100
|
+
{
|
|
101
|
+
const {
|
|
102
|
+
status
|
|
103
|
+
} = payload;
|
|
104
|
+
return {
|
|
105
|
+
...state,
|
|
106
|
+
changes: {
|
|
107
|
+
...state.changes,
|
|
108
|
+
status: status ? setWith(state.changes.status, rowId, status, Object) : omit(state.changes.status, rowId)
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
case 'setRowErrors':
|
|
113
|
+
{
|
|
114
|
+
const {
|
|
115
|
+
...errors
|
|
116
|
+
} = payload;
|
|
117
|
+
return {
|
|
118
|
+
...state,
|
|
119
|
+
changes: {
|
|
120
|
+
...state.changes,
|
|
121
|
+
errors: setWith(state.changes.errors, rowId, errors, Object)
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
case 'createRow':
|
|
126
|
+
{
|
|
127
|
+
const {
|
|
128
|
+
value
|
|
129
|
+
} = payload;
|
|
130
|
+
return {
|
|
131
|
+
...state,
|
|
132
|
+
temporaryRows: state.temporaryRows.concat(value),
|
|
133
|
+
changes: {
|
|
134
|
+
...state.changes,
|
|
135
|
+
rows: setWith(state.changes.rows, rowId, value, Object),
|
|
136
|
+
originals: setWith(state.changes.originals, rowId, value, Object)
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
default:
|
|
141
|
+
return state;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, validator) {
|
|
145
|
+
const saveChanges = function (table, rowId = undefined) {
|
|
146
|
+
try {
|
|
147
|
+
let _exit = false;
|
|
148
|
+
if (!handleSave) {
|
|
149
|
+
console.warn('Tried to save, but Table has no onEditingSave handler');
|
|
150
|
+
return Promise.resolve(false);
|
|
151
|
+
}
|
|
152
|
+
// sometimes we only want to save one row
|
|
153
|
+
const changes = rowId ? {
|
|
154
|
+
[rowId]: state.changes.rows[rowId]
|
|
155
|
+
} : state.changes.rows;
|
|
156
|
+
let completed = true;
|
|
157
|
+
const _temp9 = _forOf(Object.keys(changes), function (rowId) {
|
|
158
|
+
const status = getRowStatus(rowId);
|
|
159
|
+
return _catch(function () {
|
|
160
|
+
function _temp8(_result) {
|
|
161
|
+
return _exit ? _result : Promise.resolve(handleSave(changeSet)).then(function () {
|
|
162
|
+
// cleanup changes, we don't need them after saving
|
|
163
|
+
discardChanges(rowId, table);
|
|
164
|
+
// show the saved status, then remove it after a delay
|
|
165
|
+
setRowStatus(rowId, 'saved');
|
|
166
|
+
setTimeout(() => {
|
|
167
|
+
setRowStatus(rowId, undefined);
|
|
168
|
+
}, DELAY_BEFORE_REMOVING_SAVE_STATUS);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// don't try to save if - already saving, or there are known errors
|
|
172
|
+
if (status === 'saving' || status === 'errored') {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
setRowStatus(rowId, 'saving');
|
|
176
|
+
const changeSet = {
|
|
177
|
+
...state.changes.originals[rowId],
|
|
178
|
+
...changes[rowId]
|
|
179
|
+
};
|
|
180
|
+
// if we had to create a temporary id, delete it first - it's our data, not theirs
|
|
181
|
+
if (isTemporaryRow(changeSet[rowIdentityAccessor])) {
|
|
182
|
+
delete changeSet[rowIdentityAccessor];
|
|
183
|
+
}
|
|
184
|
+
// re-run validation, maybe a cell is already invalid but has never been blurred
|
|
185
|
+
const _temp7 = function () {
|
|
186
|
+
if (validator) {
|
|
187
|
+
return Promise.resolve(validator(changeSet)).then(function (errors) {
|
|
188
|
+
if (errors && Object.keys(errors).length) {
|
|
189
|
+
throw errors;
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}();
|
|
194
|
+
return _temp7 && _temp7.then ? _temp7.then(_temp8) : _temp8(_temp7); // send new data to the server
|
|
195
|
+
}, function (error) {
|
|
196
|
+
var _error$response;
|
|
197
|
+
if (error instanceof ReferenceError || error instanceof TypeError || (error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) >= 500) {
|
|
198
|
+
console.error(error);
|
|
199
|
+
}
|
|
200
|
+
// the onEditingSave handler should throw errors when something fails, e.g. validation, network errors etc
|
|
201
|
+
// this code handles those errors and maps them either to row errors or cell specific errors
|
|
202
|
+
let rowError;
|
|
203
|
+
let cellErrors;
|
|
204
|
+
if (typeof error === 'string') {
|
|
205
|
+
rowError = error;
|
|
206
|
+
} else if (error instanceof Error) {
|
|
207
|
+
var _error$response2;
|
|
208
|
+
rowError = error.message;
|
|
209
|
+
// most of our apis return error objects within this shape
|
|
210
|
+
if (typeof ((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data) === 'object') {
|
|
211
|
+
var _error$response3;
|
|
212
|
+
cellErrors = (_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data;
|
|
213
|
+
}
|
|
214
|
+
} else if (typeof error === 'object') {
|
|
215
|
+
cellErrors = error;
|
|
216
|
+
}
|
|
217
|
+
if (rowError || cellErrors) {
|
|
218
|
+
dispatch({
|
|
219
|
+
type: 'setRowErrors',
|
|
220
|
+
rowId,
|
|
221
|
+
payload: {
|
|
222
|
+
row: rowError,
|
|
223
|
+
cells: cellErrors,
|
|
224
|
+
shouldShowErrorAlert: true
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
setRowStatus(rowId, 'errored');
|
|
229
|
+
completed = false;
|
|
230
|
+
});
|
|
231
|
+
}, function () {
|
|
232
|
+
return _exit;
|
|
233
|
+
});
|
|
234
|
+
return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(function (_result3) {
|
|
235
|
+
return _exit ? _result3 : completed;
|
|
236
|
+
}) : _exit ? _temp9 : completed);
|
|
237
|
+
} catch (e) {
|
|
238
|
+
return Promise.reject(e);
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
const onCellChanged = function (cell, rowIndex, shouldRunUpdaters = true) {
|
|
242
|
+
try {
|
|
243
|
+
function _temp6() {
|
|
244
|
+
var _state$changes$errors11;
|
|
245
|
+
function _temp4() {
|
|
246
|
+
// only set errors and move reasons for the cells we're currently acting on
|
|
247
|
+
// why? because the UX is not good if we set them for cells the user hasn't touched yet
|
|
248
|
+
const cellsToActOn = [cell.column.id, ...Object.keys(updatesForOtherCells)];
|
|
249
|
+
const allCells = cell.row._getAllCellsByColumnId();
|
|
250
|
+
cellsToActOn.forEach(accessor => {
|
|
251
|
+
if (validationErrors[accessor]) {
|
|
252
|
+
nextCellErrors[accessor] = validationErrors[accessor];
|
|
253
|
+
// don't show move indicator for cells with errors, they aren't valid and can't be saved
|
|
254
|
+
delete nextMoveReasons[accessor];
|
|
255
|
+
} else {
|
|
256
|
+
var _allCells$accessor;
|
|
257
|
+
// there isn't any error in this run, remove any error set in state
|
|
258
|
+
delete nextCellErrors[accessor];
|
|
259
|
+
if ((_allCells$accessor = allCells[accessor]) !== null && _allCells$accessor !== void 0 && _allCells$accessor.column.getIsSorted()) {
|
|
260
|
+
// run row move determination
|
|
261
|
+
const reason = willRowMove(cell, nextChanges[accessor], rowIndex, localization);
|
|
262
|
+
// if the row will move based on this change save why, otherwise delete any existing state
|
|
263
|
+
if (reason) {
|
|
264
|
+
nextMoveReasons[accessor] = reason;
|
|
265
|
+
} else {
|
|
266
|
+
delete nextMoveReasons[accessor];
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
dispatch({
|
|
272
|
+
type: 'updateRow',
|
|
273
|
+
rowId: cell.row.id,
|
|
274
|
+
payload: {
|
|
275
|
+
cellErrors: nextCellErrors,
|
|
276
|
+
moveReasons: nextMoveReasons,
|
|
277
|
+
value: nextChanges
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
// create a projection of the next state, so we can act against it
|
|
282
|
+
const nextChanges = {
|
|
283
|
+
...state.changes.rows[cell.row.id],
|
|
284
|
+
...updatesForOtherCells
|
|
285
|
+
};
|
|
286
|
+
const nextMoveReasons = {
|
|
287
|
+
...state.changes.moveReasons[cell.row.id]
|
|
288
|
+
};
|
|
289
|
+
const nextCellErrors = {
|
|
290
|
+
...((_state$changes$errors11 = state.changes.errors[cell.row.id]) === null || _state$changes$errors11 === void 0 ? void 0 : _state$changes$errors11.cells)
|
|
291
|
+
};
|
|
292
|
+
// run validation
|
|
293
|
+
let validationErrors = {};
|
|
294
|
+
const _temp3 = function () {
|
|
295
|
+
if (validator) {
|
|
296
|
+
const nextRowValue = {
|
|
297
|
+
...state.changes.originals[cell.row.id],
|
|
298
|
+
...changes,
|
|
299
|
+
...updatesForOtherCells
|
|
300
|
+
};
|
|
301
|
+
return Promise.resolve(validator(nextRowValue)).then(function (_validator2) {
|
|
302
|
+
validationErrors = _validator2 !== null && _validator2 !== void 0 ? _validator2 : {};
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
}();
|
|
306
|
+
return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
|
|
307
|
+
}
|
|
308
|
+
const changes = state.changes.rows[cell.row.id];
|
|
309
|
+
if (!changes) {
|
|
310
|
+
return Promise.resolve();
|
|
311
|
+
}
|
|
312
|
+
let updatesForOtherCells = {};
|
|
313
|
+
// run the updater handler if there is one, to see if there are any other cells to update
|
|
314
|
+
const _temp5 = function () {
|
|
315
|
+
if (typeof handleChange === 'function' && shouldRunUpdaters) {
|
|
316
|
+
const previousRowValue = {
|
|
317
|
+
...state.changes.originals[cell.row.id]
|
|
318
|
+
};
|
|
319
|
+
const nextRowValue = {
|
|
320
|
+
...state.changes.originals[cell.row.id],
|
|
321
|
+
...changes
|
|
322
|
+
};
|
|
323
|
+
return Promise.resolve(handleChange(cell.column.id, changes[cell.column.id], nextRowValue, previousRowValue)).then(function (_handleChange) {
|
|
324
|
+
updatesForOtherCells = _handleChange !== null && _handleChange !== void 0 ? _handleChange : {};
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
}();
|
|
328
|
+
return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
|
|
329
|
+
} catch (e) {
|
|
330
|
+
return Promise.reject(e);
|
|
331
|
+
}
|
|
332
|
+
}; // general
|
|
333
|
+
// 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
|
+
const localization = useLocalization();
|
|
365
|
+
const [state, dispatch] = React__default.useReducer(reducer, {
|
|
366
|
+
changes: {
|
|
367
|
+
rows: {},
|
|
368
|
+
errors: {},
|
|
369
|
+
moveReasons: {},
|
|
370
|
+
originals: {},
|
|
371
|
+
status: {}
|
|
372
|
+
},
|
|
373
|
+
temporaryRows: []
|
|
374
|
+
});
|
|
375
|
+
function getRowValue(rowId) {
|
|
376
|
+
var _state$changes$rows$r, _state$changes$rows;
|
|
377
|
+
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;
|
|
378
|
+
}
|
|
379
|
+
function getRowMoveReason(rowId) {
|
|
380
|
+
var _Object$values$, _state$changes$moveRe, _state$changes$moveRe2;
|
|
381
|
+
return (_Object$values$ = Object.values((_state$changes$moveRe = (_state$changes$moveRe2 = state.changes.moveReasons) === null || _state$changes$moveRe2 === void 0 ? void 0 : _state$changes$moveRe2[rowId]) !== null && _state$changes$moveRe !== void 0 ? _state$changes$moveRe : {})[0]) !== null && _Object$values$ !== void 0 ? _Object$values$ : undefined;
|
|
382
|
+
}
|
|
383
|
+
function hasRowErrors(rowId) {
|
|
384
|
+
var _state$changes$errors, _state$changes$errors2, _state$changes$errors3;
|
|
385
|
+
return !!((_state$changes$errors = state.changes.errors[rowId]) !== null && _state$changes$errors !== void 0 && _state$changes$errors.row) || !!Object.keys((_state$changes$errors2 = (_state$changes$errors3 = state.changes.errors[rowId]) === null || _state$changes$errors3 === void 0 ? void 0 : _state$changes$errors3.cells) !== null && _state$changes$errors2 !== void 0 ? _state$changes$errors2 : {}).length;
|
|
386
|
+
}
|
|
387
|
+
function hasRowErrorsShownInAlert(rowId) {
|
|
388
|
+
var _state$changes$errors4;
|
|
389
|
+
return hasRowErrors(rowId) && !!((_state$changes$errors4 = state.changes.errors[rowId]) !== null && _state$changes$errors4 !== void 0 && _state$changes$errors4.shouldShowErrorAlert);
|
|
390
|
+
}
|
|
391
|
+
function hasTemporaryRowErrors() {
|
|
392
|
+
var _state$temporaryRows, _state$changes$errors5, _state$changes$errors6, _state$changes$errors7;
|
|
393
|
+
const newRow = (_state$temporaryRows = state.temporaryRows) === null || _state$temporaryRows === void 0 ? void 0 : _state$temporaryRows[0];
|
|
394
|
+
if (!newRow) {
|
|
395
|
+
return false;
|
|
396
|
+
}
|
|
397
|
+
const rowId = newRow[rowIdentityAccessor];
|
|
398
|
+
return !!((_state$changes$errors5 = state.changes.errors[rowId]) !== null && _state$changes$errors5 !== void 0 && _state$changes$errors5.row) || !!Object.keys((_state$changes$errors6 = (_state$changes$errors7 = state.changes.errors[rowId]) === null || _state$changes$errors7 === void 0 ? void 0 : _state$changes$errors7.cells) !== null && _state$changes$errors6 !== void 0 ? _state$changes$errors6 : {}).length;
|
|
399
|
+
}
|
|
400
|
+
function getRowStatus(rowId) {
|
|
401
|
+
return state.changes.status[rowId];
|
|
402
|
+
}
|
|
403
|
+
function setRowStatus(rowId, status) {
|
|
404
|
+
dispatch({
|
|
405
|
+
type: 'setRowStatus',
|
|
406
|
+
rowId,
|
|
407
|
+
payload: {
|
|
408
|
+
status
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
function createRow(data) {
|
|
413
|
+
const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${v4()}`;
|
|
414
|
+
const value = {
|
|
415
|
+
...data,
|
|
416
|
+
[rowIdentityAccessor]: newRowId
|
|
417
|
+
};
|
|
418
|
+
dispatch({
|
|
419
|
+
type: 'createRow',
|
|
420
|
+
rowId: newRowId,
|
|
421
|
+
payload: {
|
|
422
|
+
value
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
return newRowId;
|
|
426
|
+
}
|
|
427
|
+
// cells
|
|
428
|
+
function setCellValue(cell, value) {
|
|
429
|
+
const rowId = cell.row.id;
|
|
430
|
+
const columnId = cell.column.id;
|
|
431
|
+
// update if the change is different to the original value
|
|
432
|
+
if (value !== cell.row.original[columnId]) {
|
|
433
|
+
dispatch({
|
|
434
|
+
type: 'setCellValue',
|
|
435
|
+
rowId,
|
|
436
|
+
payload: {
|
|
437
|
+
columnId,
|
|
438
|
+
row: cell.row.original,
|
|
439
|
+
value
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
// otherwise remove any previous change - no point saving the same value
|
|
444
|
+
else if (cell.row.id in state.changes.rows) {
|
|
445
|
+
dispatch({
|
|
446
|
+
type: 'removeCellValue',
|
|
447
|
+
rowId,
|
|
448
|
+
payload: {
|
|
449
|
+
columnId,
|
|
450
|
+
rowIdentityAccessor
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
function getCellValue(cell) {
|
|
456
|
+
var _state$changes$rows2, _state$changes$rows2$;
|
|
457
|
+
return (_state$changes$rows2 = state.changes.rows) === null || _state$changes$rows2 === void 0 ? void 0 : (_state$changes$rows2$ = _state$changes$rows2[cell.row.id]) === null || _state$changes$rows2$ === void 0 ? void 0 : _state$changes$rows2$[cell.column.id];
|
|
458
|
+
}
|
|
459
|
+
function getCellError(cell) {
|
|
460
|
+
var _state$changes$errors8, _state$changes$errors9, _state$changes$errors10;
|
|
461
|
+
return (_state$changes$errors8 = state.changes.errors) === null || _state$changes$errors8 === void 0 ? void 0 : (_state$changes$errors9 = _state$changes$errors8[cell.row.id]) === null || _state$changes$errors9 === void 0 ? void 0 : (_state$changes$errors10 = _state$changes$errors9.cells) === null || _state$changes$errors10 === void 0 ? void 0 : _state$changes$errors10[cell.column.id];
|
|
462
|
+
}
|
|
463
|
+
function getErrorsShownInAlert() {
|
|
464
|
+
const rowsWithErrors = Object.keys(state.changes.errors);
|
|
465
|
+
if (!rowsWithErrors.length) {
|
|
466
|
+
return [];
|
|
467
|
+
}
|
|
468
|
+
return rowsWithErrors.filter(hasRowErrorsShownInAlert).map(rowId => ({
|
|
469
|
+
rowId,
|
|
470
|
+
changes: state.changes.rows[rowId],
|
|
471
|
+
errors: state.changes.errors[rowId]
|
|
472
|
+
}));
|
|
473
|
+
}
|
|
474
|
+
function hasSaved() {
|
|
475
|
+
return !!Object.values(state.changes.status).filter(value => value === 'saved').length;
|
|
476
|
+
}
|
|
477
|
+
function hasChanges(rowId) {
|
|
478
|
+
return rowId ? !!state.changes.rows[rowId] : !!Object.keys(state.changes.rows).length;
|
|
479
|
+
}
|
|
480
|
+
function discardChanges(rowId, table) {
|
|
481
|
+
// remove any new rows from pinned state before discarding them
|
|
482
|
+
table.resetRowPinning(true);
|
|
483
|
+
dispatch({
|
|
484
|
+
type: 'removeRow',
|
|
485
|
+
rowId,
|
|
486
|
+
payload: {
|
|
487
|
+
rowIdentityAccessor
|
|
488
|
+
}
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
return {
|
|
492
|
+
// row
|
|
493
|
+
setRowValue,
|
|
494
|
+
getRowValue,
|
|
495
|
+
getRowMoveReason,
|
|
496
|
+
hasRowErrors,
|
|
497
|
+
hasRowErrorsShownInAlert,
|
|
498
|
+
hasTemporaryRowErrors,
|
|
499
|
+
getRowStatus,
|
|
500
|
+
setRowStatus,
|
|
501
|
+
// cells
|
|
502
|
+
setCellValue,
|
|
503
|
+
getCellValue,
|
|
504
|
+
getCellError,
|
|
505
|
+
onCellChanged,
|
|
506
|
+
// general
|
|
507
|
+
getErrorsShownInAlert,
|
|
508
|
+
hasChanges,
|
|
509
|
+
saveChanges,
|
|
510
|
+
discardChanges,
|
|
511
|
+
hasSaved,
|
|
512
|
+
// new rows
|
|
513
|
+
createRow,
|
|
514
|
+
temporaryRows: state.temporaryRows
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
export { usePendingChangesState };
|
|
519
|
+
//# sourceMappingURL=useEditingState.js.map
|