@economic/taco 2.49.0-server.1 → 2.49.0-server.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Table3/features/useEditingState.d.ts +3 -3
- package/dist/components/Table3/features/useTableEditing.d.ts +3 -3
- package/dist/components/Table3/types.d.ts +2 -0
- package/dist/esm/packages/taco/src/components/Menu/components/Content.js +6 -1
- package/dist/esm/packages/taco/src/components/Menu/components/Content.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +6 -6
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js +1 -0
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js +29 -18
- package/dist/esm/packages/taco/src/components/Table3/features/useEditingState.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +6 -7
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/useTable3.js +1 -1
- package/dist/esm/packages/taco/src/components/Table3/useTable3.js.map +1 -1
- package/dist/esm/packages/taco/src/hooks/useGlobalKeyDown.js +2 -2
- package/dist/esm/packages/taco/src/hooks/useGlobalKeyDown.js.map +1 -1
- package/dist/esm/packages/taco/src/index.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Button.js +6 -1
- package/dist/esm/packages/taco/src/primitives/Button.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Selection.js +1 -2
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Selection.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Search/Search.js +1 -2
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Search/Search.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/types.js +1 -7
- package/dist/esm/packages/taco/src/primitives/Table/types.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableServerLoading.js +17 -10
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableServerLoading.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableSearchListener.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableSearchListener.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/utils/keyboard.js +2 -5
- package/dist/esm/packages/taco/src/utils/keyboard.js.map +1 -1
- package/dist/hooks/useGlobalKeyDown.d.ts +1 -1
- package/dist/primitives/Table/types.d.ts +0 -5
- package/dist/primitives/Table/useTableManager/features/useTableServerLoading.d.ts +3 -3
- package/dist/taco.cjs.development.js +80 -59
- 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/keyboard.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Table as ReactTable, Cell as ReactTableCell } from '@tanstack/react-table';
|
|
2
|
-
import { Table3EditingChangeHandler, Table3EditingSaveHandler, Table3EditingValidatorFn } from '../types';
|
|
2
|
+
import { Table3EditingChangeHandler, Table3EditingDiscardHandler, Table3EditingSaveHandler, Table3EditingValidatorFn } from '../types';
|
|
3
3
|
declare type EditingSaveState = 'saving' | 'saved' | 'errored';
|
|
4
|
-
export declare function usePendingChangesState<TType = unknown>(handleSave: Table3EditingSaveHandler<TType> | undefined, handleChange: Table3EditingChangeHandler<TType> | undefined, rowIdentityAccessor: keyof TType, validator: Table3EditingValidatorFn<TType> | undefined): {
|
|
4
|
+
export declare function usePendingChangesState<TType = unknown>(handleSave: Table3EditingSaveHandler<TType> | undefined, handleChange: Table3EditingChangeHandler<TType> | undefined, handleDiscard: Table3EditingDiscardHandler | undefined, rowIdentityAccessor: keyof TType, validator: Table3EditingValidatorFn<TType> | undefined): {
|
|
5
5
|
getRowValue: (rowId: string) => any;
|
|
6
6
|
getRowMoveReason: (rowId: string) => unknown;
|
|
7
7
|
hasRowErrors: (rowId: string) => boolean;
|
|
@@ -21,7 +21,7 @@ export declare function usePendingChangesState<TType = unknown>(handleSave: Tabl
|
|
|
21
21
|
}[];
|
|
22
22
|
hasChanges: (rowId?: string | undefined) => boolean;
|
|
23
23
|
saveChanges: <T_6 extends TType>(table: ReactTable<T_6>, rowId?: string | undefined) => Promise<boolean>;
|
|
24
|
-
discardChanges: <T_7 extends TType>(rowId: string, table: ReactTable<T_7>) => void
|
|
24
|
+
discardChanges: <T_7 extends TType>(rowId: string, table: ReactTable<T_7>) => Promise<void>;
|
|
25
25
|
hasSaved: () => boolean;
|
|
26
26
|
insertTemporaryRow: <T_8 extends TType>(data: Partial<T_8>, rowIndex: number) => string;
|
|
27
27
|
temporaryRows: any;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Table as ReactTable } from '@tanstack/react-table';
|
|
3
|
-
import { Table3EditingChangeHandler, Table3EditingCreateHandler, Table3EditingSaveHandler, Table3EditingValidatorFn } from '../types';
|
|
4
|
-
export declare function useTableEditing<TType = unknown>(isEnabled: boolean | undefined, handleSave: Table3EditingSaveHandler<TType> | undefined, handleChange: Table3EditingChangeHandler<TType> | undefined, handleCreate: Table3EditingCreateHandler<TType> | undefined, rowIdentityAccessor: keyof TType | undefined, validator: Table3EditingValidatorFn<TType> | undefined): {
|
|
3
|
+
import { Table3EditingChangeHandler, Table3EditingCreateHandler, Table3EditingDiscardHandler, Table3EditingSaveHandler, Table3EditingValidatorFn } from '../types';
|
|
4
|
+
export declare function useTableEditing<TType = unknown>(isEnabled: boolean | undefined, handleSave: Table3EditingSaveHandler<TType> | undefined, handleChange: Table3EditingChangeHandler<TType> | undefined, handleCreate: Table3EditingCreateHandler<TType> | undefined, handleDiscard: Table3EditingDiscardHandler | undefined, rowIdentityAccessor: keyof TType | undefined, validator: Table3EditingValidatorFn<TType> | undefined): {
|
|
5
5
|
getRowValue: (rowId: string) => any;
|
|
6
6
|
getRowMoveReason: (rowId: string) => unknown;
|
|
7
7
|
hasRowErrors: (rowId: string) => boolean;
|
|
@@ -21,7 +21,7 @@ export declare function useTableEditing<TType = unknown>(isEnabled: boolean | un
|
|
|
21
21
|
}[];
|
|
22
22
|
hasChanges: (rowId?: string | undefined) => boolean;
|
|
23
23
|
saveChanges: <T_6 extends TType>(table: ReactTable<T_6>, rowId?: string | undefined) => Promise<boolean>;
|
|
24
|
-
discardChanges: <T_7 extends TType>(rowId: string, table: ReactTable<T_7>) => void
|
|
24
|
+
discardChanges: <T_7 extends TType>(rowId: string, table: ReactTable<T_7>) => Promise<void>;
|
|
25
25
|
hasSaved: () => boolean;
|
|
26
26
|
insertTemporaryRow: <T_8 extends TType>(data: Partial<T_8>, rowIndex: number) => string;
|
|
27
27
|
temporaryRows: any;
|
|
@@ -7,6 +7,7 @@ export declare type Table3Ref = TableRef & {
|
|
|
7
7
|
};
|
|
8
8
|
export declare type Table3EditingChangeHandler<TType = unknown> = (accessor: string, value: unknown, row: TType, prevRow: TType) => Promise<Partial<TType>> | undefined;
|
|
9
9
|
export declare type Table3EditingCreateHandler<TType = unknown> = () => Partial<TType>;
|
|
10
|
+
export declare type Table3EditingDiscardHandler = () => Partial<void>;
|
|
10
11
|
export declare type Table3EditingSaveHandler<TType = unknown> = (row: TType) => Promise<void>;
|
|
11
12
|
export declare type Table3EditingValidatorFn<TType = unknown> = (row: TType) => Promise<Partial<Record<keyof TType, string>> | undefined> | Partial<Record<keyof TType, string>> | undefined;
|
|
12
13
|
export interface Table3FeatureProps<TType = unknown> extends TableFeatureProps<TType> {
|
|
@@ -15,6 +16,7 @@ export interface Table3FeatureProps<TType = unknown> extends TableFeatureProps<T
|
|
|
15
16
|
export interface Table3CommonProps<TType = unknown> extends Table3FeatureProps<TType> {
|
|
16
17
|
onEditingChange?: Table3EditingChangeHandler<TType>;
|
|
17
18
|
onEditingCreate?: Table3EditingCreateHandler<TType>;
|
|
19
|
+
onEditingDiscard?: Table3EditingDiscardHandler;
|
|
18
20
|
validator?: Table3EditingValidatorFn<TType>;
|
|
19
21
|
}
|
|
20
22
|
export interface Table3WithoutEditingWithClientProps<TType = unknown> extends Table3CommonProps<TType>, TableClientProps<TType> {
|
|
@@ -33,12 +33,17 @@ var Content = /*#__PURE__*/forwardRef(function MenuContent(props, ref) {
|
|
|
33
33
|
if (child.props.shortcut) {
|
|
34
34
|
shortcuts.push(createShortcutKeyDownHandler(child.props.shortcut, function (event) {
|
|
35
35
|
event.preventDefault();
|
|
36
|
+
var dialog = document.querySelector('[role="dialog"]');
|
|
37
|
+
// Don't trigger the shortcut if it is outside of the dialog
|
|
38
|
+
if (dialog && !(dialog !== null && dialog !== void 0 && dialog.contains(internalRef.current))) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
36
41
|
menu === null || menu === void 0 ? void 0 : menu.open();
|
|
37
42
|
setTimeout(function () {
|
|
38
43
|
var _childrenRefs$current, _childrenRefs$current2;
|
|
39
44
|
return (_childrenRefs$current = childrenRefs.current[index]) === null || _childrenRefs$current === void 0 ? void 0 : (_childrenRefs$current2 = _childrenRefs$current.current) === null || _childrenRefs$current2 === void 0 ? void 0 : _childrenRefs$current2.click();
|
|
40
45
|
}, 1);
|
|
41
|
-
}
|
|
46
|
+
}));
|
|
42
47
|
}
|
|
43
48
|
});
|
|
44
49
|
shortcuts.forEach(function (handler) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Content.js","sources":["../../../../../../../../src/components/Menu/components/Content.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport cn from 'clsx';\nimport { Align, Placement } from '../../../types';\nimport { useMergedRef } from '../../../hooks/useMergedRef';\nimport { useCurrentMenu } from '../Context';\nimport { createShortcutKeyDownHandler } from '../../../utils/keyboard';\nimport { MenuItemProps } from './Item';\n\nexport type MenuContentProps = Omit<DropdownMenuPrimitive.DropdownMenuContentProps, 'children' | 'side'> & {\n align?: Align;\n children: React.ReactNode;\n /** Set the position of the Menu relative to its trigger. Default value is `bottom` */\n placement?: Placement;\n};\n\nexport const Content = React.forwardRef(function MenuContent(props: MenuContentProps, ref: React.Ref<HTMLDivElement>) {\n const internalRef = useMergedRef<any>(ref);\n const menu = useCurrentMenu();\n const { align = 'start', children, placement: side, ...otherProps } = props;\n const className = cn('border border-transparent rounded block outline-none p-1 yt-shadow wcag-white', props.className);\n\n // attach refs to each child\n const childrenRefs = React.useRef<React.RefObject<HTMLDivElement>[]>([]);\n const childrenWithRefs = (React.Children.toArray(props.children) as React.ReactElement<MenuItemProps & { ref: any }>[])\n .filter(child => !!child) // remove falsey children\n .map((child, index) => {\n childrenRefs.current[index] = React.createRef<HTMLDivElement>();\n return React.cloneElement(child, { ref: childrenRefs.current[index] });\n });\n\n // register any shortcuts attached to children\n React.useEffect(() => {\n const shortcuts: ((event: KeyboardEvent) => void)[] = [];\n childrenWithRefs.forEach((child, index) => {\n if (child.props.shortcut) {\n shortcuts.push(\n createShortcutKeyDownHandler(
|
|
1
|
+
{"version":3,"file":"Content.js","sources":["../../../../../../../../src/components/Menu/components/Content.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport cn from 'clsx';\nimport { Align, Placement } from '../../../types';\nimport { useMergedRef } from '../../../hooks/useMergedRef';\nimport { useCurrentMenu } from '../Context';\nimport { createShortcutKeyDownHandler } from '../../../utils/keyboard';\nimport { MenuItemProps } from './Item';\n\nexport type MenuContentProps = Omit<DropdownMenuPrimitive.DropdownMenuContentProps, 'children' | 'side'> & {\n align?: Align;\n children: React.ReactNode;\n /** Set the position of the Menu relative to its trigger. Default value is `bottom` */\n placement?: Placement;\n};\n\nexport const Content = React.forwardRef(function MenuContent(props: MenuContentProps, ref: React.Ref<HTMLDivElement>) {\n const internalRef = useMergedRef<any>(ref);\n const menu = useCurrentMenu();\n const { align = 'start', children, placement: side, ...otherProps } = props;\n const className = cn('border border-transparent rounded block outline-none p-1 yt-shadow wcag-white', props.className);\n\n // attach refs to each child\n const childrenRefs = React.useRef<React.RefObject<HTMLDivElement>[]>([]);\n const childrenWithRefs = (React.Children.toArray(props.children) as React.ReactElement<MenuItemProps & { ref: any }>[])\n .filter(child => !!child) // remove falsey children\n .map((child, index) => {\n childrenRefs.current[index] = React.createRef<HTMLDivElement>();\n return React.cloneElement(child, { ref: childrenRefs.current[index] });\n });\n\n // register any shortcuts attached to children\n React.useEffect(() => {\n const shortcuts: ((event: KeyboardEvent) => void)[] = [];\n childrenWithRefs.forEach((child, index) => {\n if (child.props.shortcut) {\n shortcuts.push(\n createShortcutKeyDownHandler(child.props.shortcut, event => {\n event.preventDefault();\n\n const dialog = document.querySelector('[role=\"dialog\"]');\n\n // Don't trigger the shortcut if it is outside of the dialog\n if (dialog && !dialog?.contains(internalRef.current)) {\n return;\n }\n\n menu?.open();\n setTimeout(() => childrenRefs.current[index]?.current?.click(), 1);\n })\n );\n }\n });\n\n shortcuts.forEach(handler => document.addEventListener('keydown', handler));\n\n return () => {\n shortcuts.forEach(handler => document.removeEventListener('keydown', handler));\n };\n }, [childrenWithRefs]);\n\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n {...otherProps}\n align={align}\n className={className}\n data-taco=\"menu\"\n side={side}\n sideOffset={3}\n style={{ minWidth: menu?.minWidth }}\n ref={internalRef}>\n {childrenWithRefs}\n </DropdownMenuPrimitive.Content>\n </DropdownMenuPrimitive.Portal>\n );\n});\n"],"names":["Content","React","MenuContent","props","ref","internalRef","useMergedRef","menu","useCurrentMenu","_props$align","align","side","placement","otherProps","_objectWithoutPropertiesLoose","_excluded","className","cn","childrenRefs","childrenWithRefs","toArray","children","filter","child","map","index","current","shortcuts","forEach","shortcut","push","createShortcutKeyDownHandler","event","preventDefault","dialog","document","querySelector","contains","open","setTimeout","_childrenRefs$current","_childrenRefs$current2","click","handler","addEventListener","removeEventListener","DropdownMenuPrimitive","sideOffset","style","minWidth"],"mappings":"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"}
|
package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js
CHANGED
|
@@ -36,7 +36,7 @@ function EditingControlCell(props) {
|
|
|
36
36
|
var _cellRef$current;
|
|
37
37
|
return typeof type === 'function' && !!((_cellRef$current = cellRef.current) !== null && _cellRef$current !== void 0 && _cellRef$current.querySelector('[data-taco="Select2"],[data-taco="switch"],[data-taco="checkbox"]'));
|
|
38
38
|
}, [cellRef.current]);
|
|
39
|
-
var handleChange = function
|
|
39
|
+
var handleChange = React__default.useCallback(function (nextValue) {
|
|
40
40
|
if (nextValue !== value) {
|
|
41
41
|
tableMeta.editing.setCellValue(cell, rowIndex, nextValue);
|
|
42
42
|
if (hasNonTextControl) {
|
|
@@ -45,17 +45,17 @@ function EditingControlCell(props) {
|
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
};
|
|
49
|
-
function blur() {
|
|
48
|
+
}, [hasNonTextControl, cell.row.id, cell.column.id, cell.row.original, rowIndex, value]);
|
|
49
|
+
var blur = React__default.useCallback(function blur() {
|
|
50
50
|
tableMeta.editing.toggleDetailedMode(false);
|
|
51
51
|
tableMeta.editing.onCellChanged(cell, rowIndex, undefined, !hasNonTextControl);
|
|
52
|
-
}
|
|
53
|
-
var handleBlur = function
|
|
52
|
+
}, [hasNonTextControl, cell.row.id, cell.column.id, cell.row.original, rowIndex]);
|
|
53
|
+
var handleBlur = React__default.useCallback(function (event) {
|
|
54
54
|
if (isElementInsideOrTriggeredFromContainer(event.relatedTarget, event.currentTarget)) {
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
57
57
|
blur();
|
|
58
|
-
};
|
|
58
|
+
}, [blur]);
|
|
59
59
|
// ensure that blur runs when the cell gets unmounted (when vertically arrow key navigating)
|
|
60
60
|
React__default.useEffect(function () {
|
|
61
61
|
var ref = cellRef.current;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditingControlCell.js","sources":["../../../../../../../../../../src/components/Table3/components/Columns/Cell/EditingControlCell.tsx"],"sourcesContent":["import React from 'react';\nimport { TableMeta as ReactTableMeta, ColumnMeta as ReactTableColumnMeta } from '@tanstack/react-table';\nimport { isDate } from 'date-fns';\nimport { Datepicker } from '../../../../Datepicker/Datepicker';\nimport { Switch } from '../../../../Switch/Switch';\nimport { Input } from '../../../../Input/Input';\nimport { TableColumnDataType, TableColumnRendererControl, TableFontSize } from '../../../../../primitives/Table/types';\nimport * as date from '../../../../../utils/date';\nimport { RowMoveIndicator } from './Editing/RowMoveIndicator';\nimport { TextareaWithAutosizing } from './Editing/TextareaWithAutosizing';\nimport { Field } from '../../../../Field/Field';\nimport { isElementInsideOrTriggeredFromContainer } from '../../../../../utils/dom';\nimport { TableCellRendererProps } from '../../../../../primitives/Table/Core/types';\nimport { RowContext } from '../../../../../primitives/Table/Core/components/Row/RowContext';\nimport { getCellAttributes } from '../../../../../primitives/Table/Core/components/Columns/Cell/util';\nimport { useEditingCellAutofocus } from './util';\nimport { isPressingMetaKey } from '../../../../../utils/keyboard';\nimport { Checkbox } from '../../../../Checkbox/Checkbox';\n\nexport function EditingControlCell<TType = unknown>(props: TableCellRendererProps<TType>) {\n const { cell, cellRef, isHighlighted, index } = props;\n const { rowIndex } = React.useContext(RowContext);\n const { table } = cell.getContext();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const columnMeta = cell.column.columnDef.meta as ReactTableColumnMeta<TType, unknown>;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;\n const type = columnMeta.control ?? 'input';\n const handleFocus = useEditingCellAutofocus<TType>(props);\n const value = cell.getValue();\n\n // some controls, like select2, should trigger cell changed (validation, updates) as the value changes\n const hasNonTextControl = React.useMemo(() => {\n return (\n typeof type === 'function' &&\n !!cellRef.current?.querySelector('[data-taco=\"Select2\"],[data-taco=\"switch\"],[data-taco=\"checkbox\"]')\n );\n }, [cellRef.current]);\n\n const handleChange = (nextValue: unknown) => {\n if (nextValue !== value) {\n tableMeta.editing.setCellValue(cell, rowIndex, nextValue);\n\n if (hasNonTextControl) {\n requestAnimationFrame(() => tableMeta.editing.onCellChanged(cell, rowIndex, nextValue));\n }\n }\n };\n\n function blur() {\n tableMeta.editing.toggleDetailedMode(false);\n tableMeta.editing.onCellChanged(cell, rowIndex, undefined, !hasNonTextControl);\n }\n\n const handleBlur = (event: React.FocusEvent) => {\n if (isElementInsideOrTriggeredFromContainer(event.relatedTarget, event.currentTarget)) {\n return;\n }\n blur();\n };\n\n // ensure that blur runs when the cell gets unmounted (when vertically arrow key navigating)\n React.useEffect(() => {\n const ref = cellRef.current;\n\n return () => {\n if (document.activeElement === ref || isElementInsideOrTriggeredFromContainer(document.activeElement, ref)) {\n blur();\n }\n };\n }, []);\n\n const error = tableMeta.editing.getCellError<TType>(cell);\n\n const controlProps = {\n dataType: columnMeta.dataType,\n fontSize: tableMeta.fontSize.size,\n id: cell.column.id,\n invalid: !!error,\n isDetailedMode: tableMeta.editing.isDetailedMode,\n isTruncated: !!columnMeta.enableTruncate,\n onBlur: handleBlur,\n onChange: handleChange,\n row: cell.row.original,\n rowPendingChanges: tableMeta.editing.getRowValue(cell.row.id),\n tabIndex: isActiveRow ? 0 : -1,\n toggleDetailedMode: tableMeta.editing.toggleDetailedMode,\n type,\n value,\n };\n\n const cellAttributes = {\n ...getCellAttributes(cell, index, isHighlighted),\n 'data-cell-editing-invalid': error ? true : undefined,\n 'data-taco': 'cell-control',\n onFocus: handleFocus,\n ref: cellRef,\n tabIndex: -1,\n };\n\n return (\n <td {...cellAttributes}>\n <Field invalid={!!error} message={error}>\n <MemoedEditingCell<TType> {...controlProps} />\n </Field>\n {\n // we show row move indicator here within the cell rather than the row because it is\n // an editing only feature, and we don't want to leak editing into the shared row component\n }\n <RowMoveIndicator cell={cell} cellRef={cellRef} isActiveRow={isActiveRow} />\n </td>\n );\n}\n\ntype MemoedEditingCellProps<TType = unknown, TValue = unknown> = {\n dataType?: TableColumnDataType;\n fontSize: TableFontSize;\n id: string;\n invalid: boolean;\n isDetailedMode: boolean;\n isTruncated: boolean;\n onBlur: (event: React.FocusEvent) => void;\n onChange: (value: TValue) => void;\n row: TType;\n rowPendingChanges: Partial<TType> | undefined;\n tabIndex?: number;\n toggleDetailedMode: (detailed: React.SetStateAction<boolean>) => void;\n type: TableColumnRendererControl<TType>;\n value: TValue;\n};\n\nconst MemoedEditingCell = React.memo(function MemoedEditingCell<TType = unknown>(props: MemoedEditingCellProps<TType>) {\n const {\n dataType,\n fontSize,\n id,\n invalid,\n isDetailedMode,\n isTruncated,\n onBlur,\n onChange,\n row,\n rowPendingChanges,\n tabIndex = -1,\n toggleDetailedMode,\n type = 'input',\n value,\n } = props;\n const controlRef = React.useRef<HTMLElement>(null);\n const currentValue = row[id];\n const commonProps = {\n onBlur,\n ref: controlRef,\n tabIndex,\n };\n\n if (typeof type === 'function') {\n const controlFnProps = {\n ...commonProps,\n invalid,\n setValue: onChange,\n value,\n };\n\n return type(controlFnProps, { ...row, ...rowPendingChanges });\n }\n\n if (type === 'switch') {\n return (\n <Switch\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.RefObject<HTMLButtonElement>}\n />\n );\n }\n\n if (type === 'checkbox') {\n return (\n <Checkbox\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.RefObject<HTMLButtonElement>}\n />\n );\n }\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n\n if (target.readOnly) {\n return;\n }\n\n // prevent active row navigation while in detailed mode\n if (\n isDetailedMode &&\n (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'ArrowLeft' || event.key === 'ArrowRight')\n ) {\n event.stopPropagation();\n }\n\n // enter or exit detail mode when pressing enter\n if (event.key === 'Enter') {\n // textareas support shift and enter, don't prevent default in that case\n if (event.shiftKey && isDetailedMode) {\n return;\n }\n\n event.preventDefault();\n\n if (isDetailedMode) {\n target.select?.();\n } else {\n target.setSelectionRange?.(target.value?.length, target.value?.length);\n }\n\n toggleDetailedMode(editing => !editing);\n return;\n }\n\n // reset the value, or exit edit mode when pressing escape\n if (event.key === 'Escape') {\n if (isDetailedMode) {\n event.preventDefault();\n toggleDetailedMode(false);\n\n if (value !== currentValue) {\n props.onChange(currentValue);\n }\n\n // have to let onChange run before selecting, otherwise the value changes\n requestAnimationFrame(() => target.select?.());\n }\n\n return;\n }\n\n // toggle into detailed mode when actually inputting something\n if (!isPressingMetaKey(event) && (/^[a-z0-9]$/i.test(event.key) || event.key === 'Backspace')) {\n toggleDetailedMode(true);\n }\n };\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (!isDetailedMode) {\n event.target.select();\n }\n };\n\n if (type === 'datepicker') {\n const valueAsDate = date.parse(value as Date | string | undefined);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDate = (event as any).detail as Date;\n\n if (!valueAsDate || !newDate || (isDate(valueAsDate) && isDate(newDate) && !date.isWeakEqual(valueAsDate, newDate))) {\n props.onChange(newDate);\n }\n };\n\n return (\n <Datepicker\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n ref={controlRef as React.RefObject<HTMLInputElement>}\n value={valueAsDate}\n />\n );\n }\n\n if (type === 'textarea') {\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange(event.target.value);\n };\n\n return (\n <TextareaWithAutosizing\n {...commonProps}\n fontSize={fontSize}\n invalid={invalid}\n isTruncated={isTruncated}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n ref={controlRef as React.RefObject<HTMLTextAreaElement>}\n value={String(value ?? '')}\n />\n );\n }\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange(dataType === 'number' && event.target.value ? Number.parseInt(event.target.value) : event.target.value);\n };\n\n return (\n <Input\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n ref={controlRef as React.RefObject<HTMLInputElement>}\n type={dataType === 'number' ? 'number' : undefined}\n value={dataType === 'number' ? (value as number) : String(value ?? '')}\n />\n );\n}) as <TType = unknown>(props: MemoedEditingCellProps<TType>) => JSX.Element;\n"],"names":["EditingControlCell","props","cell","cellRef","isHighlighted","index","_React$useContext","React","useContext","RowContext","rowIndex","_cell$getContext","getContext","table","tableMeta","options","meta","columnMeta","column","columnDef","isActiveRow","rowActive","rowActiveIndex","type","_columnMeta$control","control","handleFocus","useEditingCellAutofocus","value","getValue","hasNonTextControl","useMemo","_cellRef$current","current","querySelector","handleChange","nextValue","editing","setCellValue","requestAnimationFrame","onCellChanged","blur","toggleDetailedMode","undefined","handleBlur","event","isElementInsideOrTriggeredFromContainer","relatedTarget","currentTarget","useEffect","ref","document","activeElement","error","getCellError","controlProps","dataType","fontSize","size","id","invalid","isDetailedMode","isTruncated","enableTruncate","onBlur","onChange","row","original","rowPendingChanges","getRowValue","tabIndex","cellAttributes","_extends","getCellAttributes","onFocus","Field","message","MemoedEditingCell","RowMoveIndicator","memo","_props$tabIndex","_props$type","controlRef","useRef","currentValue","commonProps","controlFnProps","setValue","Switch","checked","Boolean","Checkbox","handleInputKeyDown","target","readOnly","key","stopPropagation","shiftKey","preventDefault","_target$select","select","call","_target$setSelectionR","_target$value","_target$value2","setSelectionRange","length","_target$select2","isPressingMetaKey","test","valueAsDate","date","newDate","detail","isDate","Datepicker","onKeyDown","TextareaWithAutosizing","String","Number","parseInt","Input"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditingControlCell.js","sources":["../../../../../../../../../../src/components/Table3/components/Columns/Cell/EditingControlCell.tsx"],"sourcesContent":["import React from 'react';\nimport { TableMeta as ReactTableMeta, ColumnMeta as ReactTableColumnMeta } from '@tanstack/react-table';\nimport { isDate } from 'date-fns';\nimport { Datepicker } from '../../../../Datepicker/Datepicker';\nimport { Switch } from '../../../../Switch/Switch';\nimport { Input } from '../../../../Input/Input';\nimport { TableColumnDataType, TableColumnRendererControl, TableFontSize } from '../../../../../primitives/Table/types';\nimport * as date from '../../../../../utils/date';\nimport { RowMoveIndicator } from './Editing/RowMoveIndicator';\nimport { TextareaWithAutosizing } from './Editing/TextareaWithAutosizing';\nimport { Field } from '../../../../Field/Field';\nimport { isElementInsideOrTriggeredFromContainer } from '../../../../../utils/dom';\nimport { TableCellRendererProps } from '../../../../../primitives/Table/Core/types';\nimport { RowContext } from '../../../../../primitives/Table/Core/components/Row/RowContext';\nimport { getCellAttributes } from '../../../../../primitives/Table/Core/components/Columns/Cell/util';\nimport { useEditingCellAutofocus } from './util';\nimport { isPressingMetaKey } from '../../../../../utils/keyboard';\nimport { Checkbox } from '../../../../Checkbox/Checkbox';\n\nexport function EditingControlCell<TType = unknown>(props: TableCellRendererProps<TType>) {\n const { cell, cellRef, isHighlighted, index } = props;\n const { rowIndex } = React.useContext(RowContext);\n const { table } = cell.getContext();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const columnMeta = cell.column.columnDef.meta as ReactTableColumnMeta<TType, unknown>;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;\n const type = columnMeta.control ?? 'input';\n const handleFocus = useEditingCellAutofocus<TType>(props);\n const value = cell.getValue();\n\n // some controls, like select2, should trigger cell changed (validation, updates) as the value changes\n const hasNonTextControl = React.useMemo(() => {\n return (\n typeof type === 'function' &&\n !!cellRef.current?.querySelector('[data-taco=\"Select2\"],[data-taco=\"switch\"],[data-taco=\"checkbox\"]')\n );\n }, [cellRef.current]);\n\n const handleChange = React.useCallback(\n (nextValue: unknown) => {\n if (nextValue !== value) {\n tableMeta.editing.setCellValue(cell, rowIndex, nextValue);\n\n if (hasNonTextControl) {\n requestAnimationFrame(() => tableMeta.editing.onCellChanged(cell, rowIndex, nextValue));\n }\n }\n },\n [hasNonTextControl, cell.row.id, cell.column.id, cell.row.original, rowIndex, value]\n );\n\n const blur = React.useCallback(\n function blur() {\n tableMeta.editing.toggleDetailedMode(false);\n tableMeta.editing.onCellChanged(cell, rowIndex, undefined, !hasNonTextControl);\n },\n [hasNonTextControl, cell.row.id, cell.column.id, cell.row.original, rowIndex]\n );\n\n const handleBlur = React.useCallback(\n (event: React.FocusEvent) => {\n if (isElementInsideOrTriggeredFromContainer(event.relatedTarget, event.currentTarget)) {\n return;\n }\n blur();\n },\n [blur]\n );\n\n // ensure that blur runs when the cell gets unmounted (when vertically arrow key navigating)\n React.useEffect(() => {\n const ref = cellRef.current;\n\n return () => {\n if (document.activeElement === ref || isElementInsideOrTriggeredFromContainer(document.activeElement, ref)) {\n blur();\n }\n };\n }, []);\n\n const error = tableMeta.editing.getCellError<TType>(cell);\n\n const controlProps = {\n dataType: columnMeta.dataType,\n fontSize: tableMeta.fontSize.size,\n id: cell.column.id,\n invalid: !!error,\n isDetailedMode: tableMeta.editing.isDetailedMode,\n isTruncated: !!columnMeta.enableTruncate,\n onBlur: handleBlur,\n onChange: handleChange,\n row: cell.row.original,\n rowPendingChanges: tableMeta.editing.getRowValue(cell.row.id),\n tabIndex: isActiveRow ? 0 : -1,\n toggleDetailedMode: tableMeta.editing.toggleDetailedMode,\n type,\n value,\n };\n\n const cellAttributes = {\n ...getCellAttributes(cell, index, isHighlighted),\n 'data-cell-editing-invalid': error ? true : undefined,\n 'data-taco': 'cell-control',\n onFocus: handleFocus,\n ref: cellRef,\n tabIndex: -1,\n };\n\n return (\n <td {...cellAttributes}>\n <Field invalid={!!error} message={error}>\n <MemoedEditingCell<TType> {...controlProps} />\n </Field>\n {\n // we show row move indicator here within the cell rather than the row because it is\n // an editing only feature, and we don't want to leak editing into the shared row component\n }\n <RowMoveIndicator cell={cell} cellRef={cellRef} isActiveRow={isActiveRow} />\n </td>\n );\n}\n\ntype MemoedEditingCellProps<TType = unknown, TValue = unknown> = {\n dataType?: TableColumnDataType;\n fontSize: TableFontSize;\n id: string;\n invalid: boolean;\n isDetailedMode: boolean;\n isTruncated: boolean;\n onBlur: (event: React.FocusEvent) => void;\n onChange: (value: TValue) => void;\n row: TType;\n rowPendingChanges: Partial<TType> | undefined;\n tabIndex?: number;\n toggleDetailedMode: (detailed: React.SetStateAction<boolean>) => void;\n type: TableColumnRendererControl<TType>;\n value: TValue;\n};\n\nconst MemoedEditingCell = React.memo(function MemoedEditingCell<TType = unknown>(props: MemoedEditingCellProps<TType>) {\n const {\n dataType,\n fontSize,\n id,\n invalid,\n isDetailedMode,\n isTruncated,\n onBlur,\n onChange,\n row,\n rowPendingChanges,\n tabIndex = -1,\n toggleDetailedMode,\n type = 'input',\n value,\n } = props;\n const controlRef = React.useRef<HTMLElement>(null);\n const currentValue = row[id];\n const commonProps = {\n onBlur,\n ref: controlRef,\n tabIndex,\n };\n\n if (typeof type === 'function') {\n const controlFnProps = {\n ...commonProps,\n invalid,\n setValue: onChange,\n value,\n };\n\n return type(controlFnProps, { ...row, ...rowPendingChanges });\n }\n\n if (type === 'switch') {\n return (\n <Switch\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.RefObject<HTMLButtonElement>}\n />\n );\n }\n\n if (type === 'checkbox') {\n return (\n <Checkbox\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.RefObject<HTMLButtonElement>}\n />\n );\n }\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n\n if (target.readOnly) {\n return;\n }\n\n // prevent active row navigation while in detailed mode\n if (\n isDetailedMode &&\n (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'ArrowLeft' || event.key === 'ArrowRight')\n ) {\n event.stopPropagation();\n }\n\n // enter or exit detail mode when pressing enter\n if (event.key === 'Enter') {\n // textareas support shift and enter, don't prevent default in that case\n if (event.shiftKey && isDetailedMode) {\n return;\n }\n\n event.preventDefault();\n\n if (isDetailedMode) {\n target.select?.();\n } else {\n target.setSelectionRange?.(target.value?.length, target.value?.length);\n }\n\n toggleDetailedMode(editing => !editing);\n return;\n }\n\n // reset the value, or exit edit mode when pressing escape\n if (event.key === 'Escape') {\n if (isDetailedMode) {\n event.preventDefault();\n toggleDetailedMode(false);\n\n if (value !== currentValue) {\n props.onChange(currentValue);\n }\n\n // have to let onChange run before selecting, otherwise the value changes\n requestAnimationFrame(() => target.select?.());\n }\n\n return;\n }\n\n // toggle into detailed mode when actually inputting something\n if (!isPressingMetaKey(event) && (/^[a-z0-9]$/i.test(event.key) || event.key === 'Backspace')) {\n toggleDetailedMode(true);\n }\n };\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (!isDetailedMode) {\n event.target.select();\n }\n };\n\n if (type === 'datepicker') {\n const valueAsDate = date.parse(value as Date | string | undefined);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDate = (event as any).detail as Date;\n\n if (!valueAsDate || !newDate || (isDate(valueAsDate) && isDate(newDate) && !date.isWeakEqual(valueAsDate, newDate))) {\n props.onChange(newDate);\n }\n };\n\n return (\n <Datepicker\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n ref={controlRef as React.RefObject<HTMLInputElement>}\n value={valueAsDate}\n />\n );\n }\n\n if (type === 'textarea') {\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange(event.target.value);\n };\n\n return (\n <TextareaWithAutosizing\n {...commonProps}\n fontSize={fontSize}\n invalid={invalid}\n isTruncated={isTruncated}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n ref={controlRef as React.RefObject<HTMLTextAreaElement>}\n value={String(value ?? '')}\n />\n );\n }\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange(dataType === 'number' && event.target.value ? Number.parseInt(event.target.value) : event.target.value);\n };\n\n return (\n <Input\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n ref={controlRef as React.RefObject<HTMLInputElement>}\n type={dataType === 'number' ? 'number' : undefined}\n value={dataType === 'number' ? (value as number) : String(value ?? '')}\n />\n );\n}) as <TType = unknown>(props: MemoedEditingCellProps<TType>) => JSX.Element;\n"],"names":["EditingControlCell","props","cell","cellRef","isHighlighted","index","_React$useContext","React","useContext","RowContext","rowIndex","_cell$getContext","getContext","table","tableMeta","options","meta","columnMeta","column","columnDef","isActiveRow","rowActive","rowActiveIndex","type","_columnMeta$control","control","handleFocus","useEditingCellAutofocus","value","getValue","hasNonTextControl","useMemo","_cellRef$current","current","querySelector","handleChange","useCallback","nextValue","editing","setCellValue","requestAnimationFrame","onCellChanged","row","id","original","blur","toggleDetailedMode","undefined","handleBlur","event","isElementInsideOrTriggeredFromContainer","relatedTarget","currentTarget","useEffect","ref","document","activeElement","error","getCellError","controlProps","dataType","fontSize","size","invalid","isDetailedMode","isTruncated","enableTruncate","onBlur","onChange","rowPendingChanges","getRowValue","tabIndex","cellAttributes","_extends","getCellAttributes","onFocus","Field","message","MemoedEditingCell","RowMoveIndicator","memo","_props$tabIndex","_props$type","controlRef","useRef","currentValue","commonProps","controlFnProps","setValue","Switch","checked","Boolean","Checkbox","handleInputKeyDown","target","readOnly","key","stopPropagation","shiftKey","preventDefault","_target$select","select","call","_target$setSelectionR","_target$value","_target$value2","setSelectionRange","length","_target$select2","isPressingMetaKey","test","valueAsDate","date","newDate","detail","isDate","Datepicker","onKeyDown","TextareaWithAutosizing","String","Number","parseInt","Input"],"mappings":"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"}
|
|
@@ -55,6 +55,7 @@ function Alert(props) {
|
|
|
55
55
|
// Add space before and after `messageAnd` text
|
|
56
56
|
links.push(" " + validationTexts.alert.messageAnd + " ");
|
|
57
57
|
}
|
|
58
|
+
// note: if this row click functionality is removed, indexes can be removed from useEditingState
|
|
58
59
|
var handleClick = function handleClick() {
|
|
59
60
|
// if row is visible
|
|
60
61
|
if (pendingChangeWithError.index > -1) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.js","sources":["../../../../../../../../../src/components/Table3/components/Editing/Alert.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { ScrollToOptions as ReactVirtualScrollToOptions } from '@tanstack/react-virtual';\nimport { Alert as BaseAlert, AlertProps as BaseAlertProps } from '../../../Alert/Alert';\nimport { TableRef } from '../../../../primitives/Table/types';\nimport { Tooltip } from '../../../Tooltip/Tooltip';\nimport { useLocalization } from '../../../Provider/Localization';\nimport { Dialog, DialogProps } from '../../../Dialog/Dialog';\nimport { Group } from '../../../Group/Group';\nimport { Button } from '../../../Button/Button';\n\ntype AlertProps<TType = unknown> = Omit<BaseAlertProps, 'children'> & {\n scrollToIndex: (index: number, options: ReactVirtualScrollToOptions) => void;\n table: ReactTable<TType>;\n tableRef: React.RefObject<TableRef>;\n};\n\nexport function Alert<TType = unknown>(props: AlertProps<TType>) {\n const { scrollToIndex, table, tableRef, ...attributes } = props;\n const { texts } = useLocalization();\n const validationTexts = texts.table3.editing.validation;\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const [showFilterResetDialog, setShowFilterResetDialog] = React.useState<number | false>(false);\n const pendingChangesWithErrors = tableMeta.editing.getErrorsShownInAlert<TType>();\n\n function scrollToRow(rowIndex: number) {\n tableMeta.rowActive.setRowActiveIndex(rowIndex);\n scrollToIndex(rowIndex, { align: 'center' });\n\n requestAnimationFrame(() => {\n const cell = tableRef.current?.querySelector(\n 'tbody > tr[data-row-active=\"true\"] > td[data-cell-editing-invalid=\"true\"]'\n );\n\n if (cell) {\n (cell as HTMLElement).focus?.();\n }\n });\n }\n\n // generate the \"N unsaved entries\" title\n const title = (\n pendingChangesWithErrors.length === 1 ? validationTexts.alert.titleOne : validationTexts.alert.titlePlural\n ).replace('[COUNT]', String(pendingChangesWithErrors.length));\n\n // generate links to each invalid row, to go into the error message\n const links: React.ReactNode[] = [];\n const visibleColumns = table.getVisibleFlatColumns().map(c => c.id);\n const rowIdentityColumn =\n tableMeta.rowIdentityAccessor && visibleColumns.includes(String(tableMeta.rowIdentityAccessor))\n ? // table.getColumn(columName) throw error in strict dev mode. Related thread: https://github.com/TanStack/table/discussions/5505\n table.getAllColumns().find(x => x.id === String(tableMeta.rowIdentityAccessor))\n : undefined;\n\n pendingChangesWithErrors.forEach((pendingChangeWithError, index) => {\n // if appropriate, concatenate the item with the text \"and\"\n if (pendingChangesWithErrors.length > 1 && index === pendingChangesWithErrors.length - 1) {\n // Add space before and after `messageAnd` text\n links.push(` ${validationTexts.alert.messageAnd} `);\n }\n pendingChangeWithError;\n\n const handleClick = () => {\n // if row is visible\n if (pendingChangeWithError.index > -1) {\n scrollToRow(pendingChangeWithError.index);\n tableMeta.rowActive.setRowActiveIndex(pendingChangeWithError.index);\n }\n // if row is filtered out\n else {\n setShowFilterResetDialog(pendingChangeWithError.index);\n }\n };\n\n let tooltip;\n\n if (pendingChangeWithError.errors.row) {\n tooltip = pendingChangeWithError.errors.row;\n } else {\n const firstCellErrorColumnId = Object.keys(pendingChangeWithError.errors.cells)[0];\n const columnName = table.getAllColumns().find(column => column.id === firstCellErrorColumnId)?.columnDef.meta?.header;\n tooltip = `${columnName}: ${pendingChangeWithError.errors.cells[firstCellErrorColumnId]}`;\n }\n\n let row;\n try {\n row = table.getRow(pendingChangeWithError.rowId).original;\n } catch {\n // because of server loading, some rows may not be accessible\n }\n\n links.push(\n <Tooltip key={pendingChangeWithError.rowId} title={tooltip}>\n <span className=\"text-blue\" onClick={handleClick} role=\"button\">\n {rowIdentityColumn ? row?.[rowIdentityColumn.id] : pendingChangeWithError.index + 1}\n </span>\n </Tooltip>\n );\n\n // if appropriate, concatenate the item with the text \",\"\n if (pendingChangesWithErrors.length > 2 && index < pendingChangesWithErrors.length - 2) {\n links.push(', ');\n }\n });\n\n // generate the \"Row N is incomplete and hasn't been saved\" error message\n const message = (links.length === 1 ? validationTexts.alert.messageOne : validationTexts.alert.messagePlural)\n .split(/(\\[\\w+\\])/)\n .map(part => {\n if (part === '[COLUMN]') {\n return rowIdentityColumn?.columnDef.meta?.header ?? validationTexts.alert.messageRow;\n }\n\n if (part === '[ROW]') {\n return links;\n }\n\n return part;\n });\n\n const handleResetFilters = () => {\n table.resetGlobalFilter();\n table.resetColumnFilters();\n\n requestAnimationFrame(() => {\n if (showFilterResetDialog && showFilterResetDialog > -1) {\n scrollToRow(showFilterResetDialog);\n }\n\n setShowFilterResetDialog(false);\n });\n };\n\n return (\n <>\n <BaseAlert {...attributes} state=\"error\">\n <span className=\"font-bold\">{title}</span> {message}\n </BaseAlert>\n <FilterResetDialog\n open={showFilterResetDialog !== false}\n onChange={() => setShowFilterResetDialog(false)}\n onSubmit={handleResetFilters}\n />\n </>\n );\n}\n\ntype FilterResetDialogProps = Omit<DialogProps, 'children'> & {\n onSubmit: () => void;\n};\n\nfunction FilterResetDialog(props: FilterResetDialogProps) {\n const { onSubmit: handleSubmit, ...dialogProps } = props;\n const { texts } = useLocalization();\n\n return (\n <Dialog {...dialogProps} size=\"xs\">\n <Dialog.Content aria-label=\"Create a new account\">\n <Dialog.Title>{texts.table3.editing.validation.resetFiltersDialog.title}</Dialog.Title>\n\n <p>{texts.table3.editing.validation.resetFiltersDialog.description}</p>\n\n <Dialog.Footer>\n <Group>\n <Dialog.Close>\n <Button>{texts.table3.editing.validation.resetFiltersDialog.cancel}</Button>\n </Dialog.Close>\n <Button appearance=\"primary\" onClick={handleSubmit}>\n {texts.table3.editing.validation.resetFiltersDialog.confirm}\n </Button>\n </Group>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog>\n );\n}\n"],"names":["Alert","props","scrollToIndex","table","tableRef","attributes","_objectWithoutPropertiesLoose","_excluded","_useLocalization","useLocalization","texts","validationTexts","table3","editing","validation","tableMeta","options","meta","_React$useState","React","useState","showFilterResetDialog","setShowFilterResetDialog","pendingChangesWithErrors","getErrorsShownInAlert","scrollToRow","rowIndex","rowActive","setRowActiveIndex","align","requestAnimationFrame","cell","_tableRef$current","current","querySelector","_cell$focus","focus","call","title","length","alert","titleOne","titlePlural","replace","String","links","visibleColumns","getVisibleFlatColumns","map","c","id","rowIdentityColumn","rowIdentityAccessor","includes","getAllColumns","find","x","undefined","forEach","pendingChangeWithError","index","push","messageAnd","handleClick","tooltip","errors","row","_table$getAllColumns$","_table$getAllColumns$2","firstCellErrorColumnId","Object","keys","cells","columnName","column","columnDef","header","getRow","rowId","original","_unused","Tooltip","key","className","onClick","role","_row","message","messageOne","messagePlural","split","part","_rowIdentityColumn$co","_rowIdentityColumn$co2","messageRow","handleResetFilters","resetGlobalFilter","resetColumnFilters","BaseAlert","state","FilterResetDialog","open","onChange","onSubmit","handleSubmit","dialogProps","_excluded2","_useLocalization2","Dialog","size","Content","Title","resetFiltersDialog","description","Footer","Group","Close","Button","cancel","appearance","confirm"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Alert.js","sources":["../../../../../../../../../src/components/Table3/components/Editing/Alert.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { ScrollToOptions as ReactVirtualScrollToOptions } from '@tanstack/react-virtual';\nimport { Alert as BaseAlert, AlertProps as BaseAlertProps } from '../../../Alert/Alert';\nimport { TableRef } from '../../../../primitives/Table/types';\nimport { Tooltip } from '../../../Tooltip/Tooltip';\nimport { useLocalization } from '../../../Provider/Localization';\nimport { Dialog, DialogProps } from '../../../Dialog/Dialog';\nimport { Group } from '../../../Group/Group';\nimport { Button } from '../../../Button/Button';\n\ntype AlertProps<TType = unknown> = Omit<BaseAlertProps, 'children'> & {\n scrollToIndex: (index: number, options: ReactVirtualScrollToOptions) => void;\n table: ReactTable<TType>;\n tableRef: React.RefObject<TableRef>;\n};\n\nexport function Alert<TType = unknown>(props: AlertProps<TType>) {\n const { scrollToIndex, table, tableRef, ...attributes } = props;\n const { texts } = useLocalization();\n const validationTexts = texts.table3.editing.validation;\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const [showFilterResetDialog, setShowFilterResetDialog] = React.useState<number | false>(false);\n const pendingChangesWithErrors = tableMeta.editing.getErrorsShownInAlert<TType>();\n\n function scrollToRow(rowIndex: number) {\n tableMeta.rowActive.setRowActiveIndex(rowIndex);\n scrollToIndex(rowIndex, { align: 'center' });\n\n requestAnimationFrame(() => {\n const cell = tableRef.current?.querySelector(\n 'tbody > tr[data-row-active=\"true\"] > td[data-cell-editing-invalid=\"true\"]'\n );\n\n if (cell) {\n (cell as HTMLElement).focus?.();\n }\n });\n }\n\n // generate the \"N unsaved entries\" title\n const title = (\n pendingChangesWithErrors.length === 1 ? validationTexts.alert.titleOne : validationTexts.alert.titlePlural\n ).replace('[COUNT]', String(pendingChangesWithErrors.length));\n\n // generate links to each invalid row, to go into the error message\n const links: React.ReactNode[] = [];\n const visibleColumns = table.getVisibleFlatColumns().map(c => c.id);\n const rowIdentityColumn =\n tableMeta.rowIdentityAccessor && visibleColumns.includes(String(tableMeta.rowIdentityAccessor))\n ? // table.getColumn(columName) throw error in strict dev mode. Related thread: https://github.com/TanStack/table/discussions/5505\n table.getAllColumns().find(x => x.id === String(tableMeta.rowIdentityAccessor))\n : undefined;\n\n pendingChangesWithErrors.forEach((pendingChangeWithError, index) => {\n // if appropriate, concatenate the item with the text \"and\"\n if (pendingChangesWithErrors.length > 1 && index === pendingChangesWithErrors.length - 1) {\n // Add space before and after `messageAnd` text\n links.push(` ${validationTexts.alert.messageAnd} `);\n }\n pendingChangeWithError;\n\n // note: if this row click functionality is removed, indexes can be removed from useEditingState\n const handleClick = () => {\n // if row is visible\n if (pendingChangeWithError.index > -1) {\n scrollToRow(pendingChangeWithError.index);\n tableMeta.rowActive.setRowActiveIndex(pendingChangeWithError.index);\n }\n // if row is filtered out\n else {\n setShowFilterResetDialog(pendingChangeWithError.index);\n }\n };\n\n let tooltip;\n\n if (pendingChangeWithError.errors.row) {\n tooltip = pendingChangeWithError.errors.row;\n } else {\n const firstCellErrorColumnId = Object.keys(pendingChangeWithError.errors.cells)[0];\n const columnName = table.getAllColumns().find(column => column.id === firstCellErrorColumnId)?.columnDef.meta?.header;\n tooltip = `${columnName}: ${pendingChangeWithError.errors.cells[firstCellErrorColumnId]}`;\n }\n\n let row;\n try {\n row = table.getRow(pendingChangeWithError.rowId).original;\n } catch {\n // because of server loading, some rows may not be accessible\n }\n\n links.push(\n <Tooltip key={pendingChangeWithError.rowId} title={tooltip}>\n <span className=\"text-blue\" onClick={handleClick} role=\"button\">\n {rowIdentityColumn ? row?.[rowIdentityColumn.id] : pendingChangeWithError.index + 1}\n </span>\n </Tooltip>\n );\n\n // if appropriate, concatenate the item with the text \",\"\n if (pendingChangesWithErrors.length > 2 && index < pendingChangesWithErrors.length - 2) {\n links.push(', ');\n }\n });\n\n // generate the \"Row N is incomplete and hasn't been saved\" error message\n const message = (links.length === 1 ? validationTexts.alert.messageOne : validationTexts.alert.messagePlural)\n .split(/(\\[\\w+\\])/)\n .map(part => {\n if (part === '[COLUMN]') {\n return rowIdentityColumn?.columnDef.meta?.header ?? validationTexts.alert.messageRow;\n }\n\n if (part === '[ROW]') {\n return links;\n }\n\n return part;\n });\n\n const handleResetFilters = () => {\n table.resetGlobalFilter();\n table.resetColumnFilters();\n\n requestAnimationFrame(() => {\n if (showFilterResetDialog && showFilterResetDialog > -1) {\n scrollToRow(showFilterResetDialog);\n }\n\n setShowFilterResetDialog(false);\n });\n };\n\n return (\n <>\n <BaseAlert {...attributes} state=\"error\">\n <span className=\"font-bold\">{title}</span> {message}\n </BaseAlert>\n <FilterResetDialog\n open={showFilterResetDialog !== false}\n onChange={() => setShowFilterResetDialog(false)}\n onSubmit={handleResetFilters}\n />\n </>\n );\n}\n\ntype FilterResetDialogProps = Omit<DialogProps, 'children'> & {\n onSubmit: () => void;\n};\n\nfunction FilterResetDialog(props: FilterResetDialogProps) {\n const { onSubmit: handleSubmit, ...dialogProps } = props;\n const { texts } = useLocalization();\n\n return (\n <Dialog {...dialogProps} size=\"xs\">\n <Dialog.Content aria-label=\"Create a new account\">\n <Dialog.Title>{texts.table3.editing.validation.resetFiltersDialog.title}</Dialog.Title>\n\n <p>{texts.table3.editing.validation.resetFiltersDialog.description}</p>\n\n <Dialog.Footer>\n <Group>\n <Dialog.Close>\n <Button>{texts.table3.editing.validation.resetFiltersDialog.cancel}</Button>\n </Dialog.Close>\n <Button appearance=\"primary\" onClick={handleSubmit}>\n {texts.table3.editing.validation.resetFiltersDialog.confirm}\n </Button>\n </Group>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog>\n );\n}\n"],"names":["Alert","props","scrollToIndex","table","tableRef","attributes","_objectWithoutPropertiesLoose","_excluded","_useLocalization","useLocalization","texts","validationTexts","table3","editing","validation","tableMeta","options","meta","_React$useState","React","useState","showFilterResetDialog","setShowFilterResetDialog","pendingChangesWithErrors","getErrorsShownInAlert","scrollToRow","rowIndex","rowActive","setRowActiveIndex","align","requestAnimationFrame","cell","_tableRef$current","current","querySelector","_cell$focus","focus","call","title","length","alert","titleOne","titlePlural","replace","String","links","visibleColumns","getVisibleFlatColumns","map","c","id","rowIdentityColumn","rowIdentityAccessor","includes","getAllColumns","find","x","undefined","forEach","pendingChangeWithError","index","push","messageAnd","handleClick","tooltip","errors","row","_table$getAllColumns$","_table$getAllColumns$2","firstCellErrorColumnId","Object","keys","cells","columnName","column","columnDef","header","getRow","rowId","original","_unused","Tooltip","key","className","onClick","role","_row","message","messageOne","messagePlural","split","part","_rowIdentityColumn$co","_rowIdentityColumn$co2","messageRow","handleResetFilters","resetGlobalFilter","resetColumnFilters","BaseAlert","state","FilterResetDialog","open","onChange","onSubmit","handleSubmit","dialogProps","_excluded2","_useLocalization2","Dialog","size","Content","Title","resetFiltersDialog","description","Footer","Group","Close","Button","cancel","appearance","confirm"],"mappings":"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"}
|
|
@@ -121,7 +121,28 @@ function reducer(state, action) {
|
|
|
121
121
|
return state;
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
|
-
function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, validator) {
|
|
124
|
+
function usePendingChangesState(handleSave, handleChange, handleDiscard, rowIdentityAccessor, validator) {
|
|
125
|
+
var discardChanges = function discardChanges(rowId, table) {
|
|
126
|
+
try {
|
|
127
|
+
// remove any new rows from pinned state before discarding them
|
|
128
|
+
table.resetRowPinning(true);
|
|
129
|
+
dispatch({
|
|
130
|
+
type: 'removeRow',
|
|
131
|
+
rowId: rowId,
|
|
132
|
+
payload: {
|
|
133
|
+
rowIdentityAccessor: rowIdentityAccessor
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
var _temp8 = function () {
|
|
137
|
+
if (typeof handleDiscard === 'function') {
|
|
138
|
+
return Promise.resolve(handleDiscard()).then(function () {});
|
|
139
|
+
}
|
|
140
|
+
}();
|
|
141
|
+
return Promise.resolve(_temp8 && _temp8.then ? _temp8.then(function () {}) : void 0);
|
|
142
|
+
} catch (e) {
|
|
143
|
+
return Promise.reject(e);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
125
146
|
var saveChanges = function saveChanges(table, rowId) {
|
|
126
147
|
if (rowId === void 0) {
|
|
127
148
|
rowId = undefined;
|
|
@@ -143,12 +164,13 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
|
143
164
|
function _temp6(_result) {
|
|
144
165
|
return _exit ? _result : Promise.resolve(handleSave(changeSet)).then(function () {
|
|
145
166
|
// cleanup changes, we don't need them after saving
|
|
146
|
-
discardChanges(rowId, table)
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
167
|
+
return Promise.resolve(discardChanges(rowId, table)).then(function () {
|
|
168
|
+
// show the saved status, then remove it after a delay
|
|
169
|
+
setRowStatus(rowId, 'saved');
|
|
170
|
+
setTimeout(function () {
|
|
171
|
+
setRowStatus(rowId, undefined);
|
|
172
|
+
}, DELAY_BEFORE_REMOVING_SAVE_STATUS);
|
|
173
|
+
});
|
|
152
174
|
});
|
|
153
175
|
}
|
|
154
176
|
var rowChanges = (_changes$rowId = changes[rowId]) !== null && _changes$rowId !== void 0 ? _changes$rowId : {};
|
|
@@ -426,17 +448,6 @@ function usePendingChangesState(handleSave, handleChange, rowIdentityAccessor, v
|
|
|
426
448
|
function hasChanges(rowId) {
|
|
427
449
|
return rowId ? !!state.changes.rows[rowId] : !!Object.keys(state.changes.rows).length;
|
|
428
450
|
}
|
|
429
|
-
function discardChanges(rowId, table) {
|
|
430
|
-
// remove any new rows from pinned state before discarding them
|
|
431
|
-
table.resetRowPinning(true);
|
|
432
|
-
dispatch({
|
|
433
|
-
type: 'removeRow',
|
|
434
|
-
rowId: rowId,
|
|
435
|
-
payload: {
|
|
436
|
-
rowIdentityAccessor: rowIdentityAccessor
|
|
437
|
-
}
|
|
438
|
-
});
|
|
439
|
-
}
|
|
440
451
|
return {
|
|
441
452
|
// row
|
|
442
453
|
getRowValue: getRowValue,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEditingState.js","sources":["../../../../../../../../src/components/Table3/features/useEditingState.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, Cell as ReactTableCell } from '@tanstack/react-table';\nimport { v4 as uuid } from 'uuid';\nimport omit from 'lodash/omit';\nimport setWith from 'lodash/setWith';\nimport { Table3EditingChangeHandler, Table3EditingSaveHandler, Table3EditingValidatorFn } from '../types';\nimport { isTemporaryRow, TEMPORARY_ROW_ID_PREFIX, willRowMove } from '../util/editing';\nimport { useLocalization } from '../../Provider/Localization';\n\nconst DELAY_BEFORE_REMOVING_SAVE_STATUS = 3000;\n\ntype EditingError = {\n row: string;\n cells: Record<string, string>;\n shouldShowErrorAlert: boolean;\n};\ntype EditingRowMoveReason = Record<string, 'search' | 'sorting' | 'filter'>;\ntype EditingSaveState = 'saving' | 'saved' | 'errored';\ntype EditingChangeset<TType = unknown> = Partial<TType>;\ntype EditingState<TType = unknown> = {\n changes: {\n rows: Record<string, EditingChangeset<TType>>;\n errors: Record<string, EditingError>;\n moveReasons: Record<string, EditingRowMoveReason>;\n originals: Record<string, TType>;\n status: Record<string, EditingSaveState>;\n };\n indexes: Record<string, number>;\n temporaryRows: TType[];\n};\ntype EditingStateAction = {\n type:\n | 'setCellValue'\n | 'removeCellValue'\n | 'updateRow'\n | 'mergeRowValue'\n | 'removeRow'\n | 'setRowStatus'\n | 'setRowErrors'\n | 'insertTemporaryRow';\n rowId: string;\n payload?: any;\n};\n\nfunction reducer<TType = unknown>(state: EditingState<TType>, action: EditingStateAction) {\n const { type, rowId, payload } = action;\n\n switch (type) {\n case 'setCellValue': {\n const { columnId, index, row, value } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, `${rowId}.${columnId}`, value, Object),\n originals: setWith(state.changes.originals, rowId, row, Object),\n },\n indexes: setWith(state.indexes, rowId, index, Object),\n };\n }\n\n case 'removeCellValue': {\n const { columnId, rowIdentityAccessor } = payload;\n const changes = omit(state.changes.rows, `${rowId}.${columnId}`);\n\n // if there are no changes left, remove the row\n if (!Object.keys(changes[rowId]).length) {\n return reducer(state, { type: 'removeRow', rowId, payload: { rowIdentityAccessor } });\n }\n\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: omit(state.changes.rows, `${rowId}.${columnId}`),\n errors: omit(state.changes.errors, `${rowId}.cells.${columnId}`),\n moveReasons: omit(state.changes.moveReasons, `${rowId}.${columnId}`),\n },\n };\n }\n\n case 'updateRow': {\n const { cellErrors, index, moveReasons, original, value } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, rowId, value, Object),\n errors: setWith(\n state.changes.errors,\n `${rowId}.cells`,\n cellErrors ?? state.changes.errors.cells[rowId],\n Object\n ),\n originals: setWith(state.changes.originals, rowId, original ?? state.changes.originals[rowId], Object),\n moveReasons: setWith(\n state.changes.moveReasons,\n rowId,\n moveReasons ?? state.changes.moveReasons[rowId],\n Object\n ),\n // status can be undefined, so don't use ??\n status: setWith(state.changes.status, rowId, undefined, Object),\n },\n indexes: setWith(state.indexes, rowId, index, Object),\n };\n }\n\n case 'removeRow': {\n const { rowIdentityAccessor } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: omit(state.changes.rows, rowId),\n errors: omit(state.changes.errors, rowId),\n moveReasons: omit(state.changes.moveReasons, rowId),\n originals: omit(state.changes.originals, rowId),\n status: omit(state.changes.status, rowId),\n },\n indexes: omit(state.indexes, rowId),\n temporaryRows: state.temporaryRows.filter(row => row[rowIdentityAccessor] !== rowId),\n };\n }\n\n case 'setRowStatus': {\n const { status } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n status: status ? setWith(state.changes.status, rowId, status, Object) : omit(state.changes.status, rowId),\n },\n };\n }\n\n case 'setRowErrors': {\n const { ...errors } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n errors: setWith(state.changes.errors, rowId, errors, Object),\n },\n };\n }\n\n case 'insertTemporaryRow': {\n const { index, value } = payload;\n return {\n ...state,\n temporaryRows: state.temporaryRows.concat(value),\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, rowId, value, Object),\n originals: setWith(state.changes.originals, rowId, value, Object),\n },\n indexes: setWith(state.indexes, rowId, index, Object),\n };\n }\n\n default:\n return state;\n }\n}\n\nexport function usePendingChangesState<TType = unknown>(\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n rowIdentityAccessor: keyof TType,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n const localization = useLocalization();\n const [state, dispatch] = React.useReducer(reducer, {\n changes: { rows: {}, errors: {}, moveReasons: {}, originals: {}, status: {} },\n indexes: {},\n temporaryRows: [],\n });\n\n // rows\n function getRowValue(rowId: string) {\n return state.changes.rows?.[rowId] ?? undefined;\n }\n\n function getRowMoveReason(rowId: string) {\n return Object.values(state.changes.moveReasons?.[rowId] ?? {})[0] ?? undefined;\n }\n\n function hasRowErrors(rowId: string) {\n return !!state.changes.errors[rowId]?.row || !!Object.keys(state.changes.errors[rowId]?.cells ?? {}).length;\n }\n\n function hasRowErrorsShownInAlert(rowId: string) {\n return hasRowErrors(rowId) && !!state.changes.errors[rowId]?.shouldShowErrorAlert;\n }\n\n function hasTemporaryRowErrors<T extends TType>() {\n const newRow = state.temporaryRows?.[0] as T | undefined;\n\n if (!newRow) {\n return false;\n }\n\n const rowId = newRow[rowIdentityAccessor as string];\n return !!state.changes.errors[rowId]?.row || !!Object.keys(state.changes.errors[rowId]?.cells ?? {}).length;\n }\n\n function getRowStatus(rowId: string) {\n return state.changes.status[rowId];\n }\n\n function setRowStatus(rowId: string, status: EditingSaveState | undefined) {\n dispatch({\n type: 'setRowStatus',\n rowId,\n payload: {\n status,\n },\n });\n }\n\n function insertTemporaryRow<T extends TType>(data: Partial<T>, rowIndex: number) {\n const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${uuid()}`;\n const value: Partial<TType> = {\n ...data,\n [rowIdentityAccessor]: newRowId,\n };\n\n dispatch({\n type: 'insertTemporaryRow',\n rowId: newRowId,\n payload: { index: rowIndex, value },\n });\n\n return newRowId;\n }\n\n // cells\n function setCellValue<T extends TType>(cell: ReactTableCell<T, unknown>, rowIndex: number, value: unknown) {\n const rowId = cell.row.id;\n const columnId = cell.column.id;\n\n // update if the change is different to the original value\n if (value !== cell.row.original[columnId]) {\n dispatch({\n type: 'setCellValue',\n rowId,\n payload: {\n columnId,\n index: rowIndex,\n row: cell.row.original,\n value,\n },\n });\n }\n // otherwise remove any previous change - no point saving the same value\n else if (cell.row.id in state.changes.rows) {\n dispatch({\n type: 'removeCellValue',\n rowId,\n payload: {\n columnId,\n rowIdentityAccessor,\n },\n });\n }\n }\n\n function getCellValue<T extends TType>(cell: ReactTableCell<T, unknown>): unknown | undefined {\n return state.changes.rows?.[cell.row.id]?.[cell.column.id];\n }\n\n function getCellError<T extends TType>(cell: ReactTableCell<T, unknown>): string | undefined {\n return state.changes.errors?.[cell.row.id]?.cells?.[cell.column.id];\n }\n\n async function onCellChanged<T extends TType>(\n cell: ReactTableCell<T, unknown>,\n rowIndex: number,\n nextValue,\n shouldRunUpdaters = true\n ) {\n const changes =\n nextValue !== undefined\n ? { ...state.changes.rows[cell.row.id], [cell.column.id]: nextValue }\n : { ...state.changes.rows[cell.row.id] };\n\n if (!Object.keys(changes).length) {\n return;\n }\n\n let updatesForOtherCells: Partial<T> = {};\n\n // run the updater handler if there is one, to see if there are any other cells to update\n if (typeof handleChange === 'function' && shouldRunUpdaters) {\n const previousRowValue = {\n ...state.changes.originals[cell.row.id],\n //...getRowChangeset(updatersRef.current[cell.row.id], rowIdentityAccessor),\n };\n const nextRowValue = {\n ...state.changes.originals[cell.row.id],\n ...changes,\n };\n updatesForOtherCells = ((await handleChange(\n cell.column.id,\n changes[cell.column.id],\n nextRowValue,\n previousRowValue\n )) ?? {}) as Partial<T>;\n }\n\n // create a projection of the next state, so we can act against it\n const nextChanges = { ...changes, ...updatesForOtherCells };\n const nextMoveReasons: EditingRowMoveReason = { ...state.changes.moveReasons[cell.row.id] };\n const nextCellErrors: Record<string, string> = { ...state.changes.errors[cell.row.id]?.cells };\n\n // run validation - if there are changes, and if there is an original stored\n let validationErrors: Record<string, string> = {};\n\n if (validator && Object.keys(nextChanges).length && state.changes.originals[cell.row.id]) {\n // merge with the original so we get a full row\n const nextRowValue = { ...state.changes.originals[cell.row.id], ...changes, ...updatesForOtherCells };\n validationErrors = ((await validator(nextRowValue)) ?? {}) as Record<string, string>;\n }\n\n // only set errors and move reasons for the cells we're currently acting on\n // why? because the UX is not good if we set them for cells the user hasn't touched yet\n const cellsToActOn = [cell.column.id, ...Object.keys(updatesForOtherCells)];\n const allCells = cell.row._getAllCellsByColumnId();\n\n cellsToActOn.forEach(accessor => {\n if (validationErrors[accessor]) {\n nextCellErrors[accessor] = validationErrors[accessor];\n // don't show move indicator for cells with errors, they aren't valid and can't be saved\n delete nextMoveReasons[accessor];\n } else {\n // there isn't any error in this run, remove any error set in state\n delete nextCellErrors[accessor];\n\n if (allCells[accessor]?.column.getIsSorted()) {\n // run row move determination\n const reason = willRowMove(cell, nextChanges[accessor], rowIndex, localization);\n\n // if the row will move based on this change save why, otherwise delete any existing state\n if (reason) {\n nextMoveReasons[accessor] = reason;\n } else {\n delete nextMoveReasons[accessor];\n }\n }\n }\n });\n\n dispatch({\n type: 'updateRow',\n rowId: cell.row.id,\n payload: {\n cellErrors: nextCellErrors,\n index: rowIndex,\n moveReasons: nextMoveReasons,\n value: nextChanges,\n },\n });\n }\n\n // general\n function getErrorsShownInAlert<T extends TType>() {\n const rowsWithErrors = Object.keys(state.changes.errors);\n\n if (!rowsWithErrors.length) {\n return [];\n }\n\n return rowsWithErrors.filter(hasRowErrorsShownInAlert).map(rowId => ({\n rowId,\n index: state.indexes[rowId],\n changes: state.changes.rows[rowId] as EditingChangeset<T>,\n errors: state.changes.errors[rowId],\n }));\n }\n\n function hasSaved() {\n return !!Object.values(state.changes.status).filter(value => value === 'saved').length;\n }\n\n function hasChanges(rowId?: string) {\n return rowId ? !!state.changes.rows[rowId] : !!Object.keys(state.changes.rows).length;\n }\n\n async function saveChanges<T extends TType>(table: ReactTable<T>, rowId: string | undefined = undefined): Promise<boolean> {\n if (!handleSave) {\n console.warn('Tried to save, but Table has no onEditingSave handler');\n return false;\n }\n\n // sometimes we only want to save one row\n const changes = rowId ? { [rowId]: state.changes.rows[rowId] } : state.changes.rows;\n\n let completed = true;\n\n for (const rowId of Object.keys(changes)) {\n const status = getRowStatus(rowId);\n\n try {\n const rowChanges = changes[rowId] ?? {};\n\n // don't try to save if - already saving, or there are known errors\n if (!Object.keys(rowChanges).length || status === 'saving' || status === 'errored') {\n continue;\n }\n\n setRowStatus(rowId, 'saving');\n\n const changeSet = { ...state.changes.originals[rowId], ...rowChanges };\n\n // if we had to create a temporary id, delete it first - it's our data, not theirs\n if (isTemporaryRow(changeSet[rowIdentityAccessor as string])) {\n delete changeSet[rowIdentityAccessor];\n }\n\n // re-run validation, maybe a cell is already invalid but has never been blurred\n if (validator) {\n const errors = await validator(changeSet);\n\n if (errors && Object.keys(errors).length) {\n throw errors;\n }\n }\n\n // send new data to the server\n await handleSave(changeSet);\n\n // cleanup changes, we don't need them after saving\n discardChanges(rowId, table);\n\n // show the saved status, then remove it after a delay\n setRowStatus(rowId, 'saved');\n setTimeout(() => {\n setRowStatus(rowId, undefined);\n }, DELAY_BEFORE_REMOVING_SAVE_STATUS);\n } catch (error) {\n if (error instanceof ReferenceError || error instanceof TypeError || (error as any)?.response?.status >= 500) {\n console.error(error);\n }\n\n // the onEditingSave handler should throw errors when something fails, e.g. validation, network errors etc\n // this code handles those errors and maps them either to row errors or cell specific errors\n let rowError: string | undefined;\n let cellErrors;\n\n if (typeof error === 'string') {\n rowError = error;\n } else if (error instanceof Error) {\n rowError = error.message;\n\n // most of our apis return error objects within this shape\n if (typeof (error as any).response?.data === 'object') {\n cellErrors = (error as any).response?.data;\n }\n } else if (typeof error === 'object') {\n cellErrors = error;\n }\n\n if (rowError || cellErrors) {\n dispatch({\n type: 'setRowErrors',\n rowId,\n payload: {\n row: rowError,\n cells: cellErrors,\n shouldShowErrorAlert: true,\n },\n });\n }\n\n setRowStatus(rowId, 'errored');\n completed = false;\n }\n }\n\n return completed;\n }\n\n function discardChanges<T extends TType>(rowId: string, table: ReactTable<T>) {\n // remove any new rows from pinned state before discarding them\n table.resetRowPinning(true);\n\n dispatch({\n type: 'removeRow',\n rowId,\n payload: { rowIdentityAccessor },\n });\n }\n\n return {\n // row\n getRowValue,\n getRowMoveReason,\n hasRowErrors,\n hasRowErrorsShownInAlert,\n hasTemporaryRowErrors,\n getRowStatus,\n setRowStatus,\n // cells\n setCellValue,\n getCellValue,\n getCellError,\n onCellChanged,\n // general\n getErrorsShownInAlert,\n hasChanges,\n saveChanges,\n discardChanges,\n hasSaved,\n // new rows\n insertTemporaryRow,\n temporaryRows: state.temporaryRows,\n };\n}\n"],"names":["DELAY_BEFORE_REMOVING_SAVE_STATUS","reducer","state","action","type","rowId","payload","columnId","index","row","value","_extends","changes","rows","setWith","Object","originals","indexes","rowIdentityAccessor","omit","keys","length","errors","moveReasons","cellErrors","original","cells","status","undefined","temporaryRows","filter","_objectDestructuringEmpty","concat","usePendingChangesState","handleSave","handleChange","validator","saveChanges","table","console","warn","Promise","resolve","_ref","completed","_temp7","_forOf","getRowStatus","_catch","_changes$rowId","_temp6","_result","_exit","changeSet","then","discardChanges","setRowStatus","setTimeout","rowChanges","isTemporaryRow","_temp5","error","_error$response","ReferenceError","TypeError","response","rowError","Error","_error$response2","message","data","_error$response3","dispatch","shouldShowErrorAlert","_result3","e","reject","onCellChanged","cell","rowIndex","nextValue","shouldRunUpdaters","cellsToActOn","column","id","updatesForOtherCells","allCells","_getAllCellsByColumnId","forEach","accessor","validationErrors","nextCellErrors","nextMoveReasons","_allCells$accessor","getIsSorted","reason","willRowMove","nextChanges","localization","_state$changes$errors11","_temp","nextRowValue","_validator","_temp2","_extends3","_temp3","previousRowValue","_handleChange","_temp4","useLocalization","_React$useReducer","React","useReducer","getRowValue","_state$changes$rows$r","_state$changes$rows","getRowMoveReason","_Object$values$","values","_state$changes$moveRe","_state$changes$moveRe2","hasRowErrors","_state$changes$errors","_state$changes$errors2","_state$changes$errors3","hasRowErrorsShownInAlert","_state$changes$errors4","hasTemporaryRowErrors","newRow","_state$temporaryRows","_state$changes$errors5","_state$changes$errors6","_state$changes$errors7","insertTemporaryRow","newRowId","TEMPORARY_ROW_ID_PREFIX","uuid","_extends2","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":";;;;;;;;;AASA,IAAMA,iCAAiC,GAAG,IAAI;AAmC9C,SAASC,OAAOA,CAAkBC,KAA0B,EAAEC,MAA0B;EACpF,IAAQC,IAAI,GAAqBD,MAAM,CAA/BC,IAAI;IAAEC,KAAK,GAAcF,MAAM,CAAzBE,KAAK;IAAEC,OAAO,GAAKH,MAAM,CAAlBG,OAAO;EAE5B,QAAQF,IAAI;IACR,KAAK,cAAc;MAAE;QACjB,IAAQG,QAAQ,GAAwBD,OAAO,CAAvCC,QAAQ;UAAEC,KAAK,GAAiBF,OAAO,CAA7BE,KAAK;UAAEC,GAAG,GAAYH,OAAO,CAAtBG,GAAG;UAAEC,KAAK,GAAKJ,OAAO,CAAjBI,KAAK;QACnC,OAAAC,QAAA,KACOT,KAAK;UACRU,OAAO,EAAAD,QAAA,KACAT,KAAK,CAACU,OAAO;YAChBC,IAAI,EAAEC,OAAO,CAACZ,KAAK,CAACU,OAAO,CAACC,IAAI,EAAKR,KAAK,SAAIE,QAAQ,EAAIG,KAAK,EAAEK,MAAM,CAAC;YACxEC,SAAS,EAAEF,OAAO,CAACZ,KAAK,CAACU,OAAO,CAACI,SAAS,EAAEX,KAAK,EAAEI,GAAG,EAAEM,MAAM;YACjE;UACDE,OAAO,EAAEH,OAAO,CAACZ,KAAK,CAACe,OAAO,EAAEZ,KAAK,EAAEG,KAAK,EAAEO,MAAM;;;IAI5D,KAAK,iBAAiB;MAAE;QACpB,IAAQR,SAAQ,GAA0BD,OAAO,CAAzCC,QAAQ;UAAEW,mBAAmB,GAAKZ,OAAO,CAA/BY,mBAAmB;QACrC,IAAMN,OAAO,GAAGO,IAAI,CAACjB,KAAK,CAACU,OAAO,CAACC,IAAI,EAAKR,KAAK,SAAIE,SAAU,CAAC;;QAGhE,IAAI,CAACQ,MAAM,CAACK,IAAI,CAACR,OAAO,CAACP,KAAK,CAAC,CAAC,CAACgB,MAAM,EAAE;UACrC,OAAOpB,OAAO,CAACC,KAAK,EAAE;YAAEE,IAAI,EAAE,WAAW;YAAEC,KAAK,EAALA,KAAK;YAAEC,OAAO,EAAE;cAAEY,mBAAmB,EAAnBA;;WAAuB,CAAC;;QAGzF,OAAAP,QAAA,KACOT,KAAK;UACRU,OAAO,EAAAD,QAAA,KACAT,KAAK,CAACU,OAAO;YAChBC,IAAI,EAAEM,IAAI,CAACjB,KAAK,CAACU,OAAO,CAACC,IAAI,EAAKR,KAAK,SAAIE,SAAU,CAAC;YACtDe,MAAM,EAAEH,IAAI,CAACjB,KAAK,CAACU,OAAO,CAACU,MAAM,EAAKjB,KAAK,eAAUE,SAAU,CAAC;YAChEgB,WAAW,EAAEJ,IAAI,CAACjB,KAAK,CAACU,OAAO,CAACW,WAAW,EAAKlB,KAAK,SAAIE,SAAU;;;;IAK/E,KAAK,WAAW;MAAE;QACd,IAAQiB,UAAU,GAA0ClB,OAAO,CAA3DkB,UAAU;UAAEhB,MAAK,GAAmCF,OAAO,CAA/CE,KAAK;UAAEe,WAAW,GAAsBjB,OAAO,CAAxCiB,WAAW;UAAEE,QAAQ,GAAYnB,OAAO,CAA3BmB,QAAQ;UAAEf,MAAK,GAAKJ,OAAO,CAAjBI,KAAK;QACvD,OAAAC,QAAA,KACOT,KAAK;UACRU,OAAO,EAAAD,QAAA,KACAT,KAAK,CAACU,OAAO;YAChBC,IAAI,EAAEC,OAAO,CAACZ,KAAK,CAACU,OAAO,CAACC,IAAI,EAAER,KAAK,EAAEK,MAAK,EAAEK,MAAM,CAAC;YACvDO,MAAM,EAAER,OAAO,CACXZ,KAAK,CAACU,OAAO,CAACU,MAAM,EACjBjB,KAAK,aACRmB,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAItB,KAAK,CAACU,OAAO,CAACU,MAAM,CAACI,KAAK,CAACrB,KAAK,CAAC,EAC/CU,MAAM,CACT;YACDC,SAAS,EAAEF,OAAO,CAACZ,KAAK,CAACU,OAAO,CAACI,SAAS,EAAEX,KAAK,EAAEoB,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAIvB,KAAK,CAACU,OAAO,CAACI,SAAS,CAACX,KAAK,CAAC,EAAEU,MAAM,CAAC;YACtGQ,WAAW,EAAET,OAAO,CAChBZ,KAAK,CAACU,OAAO,CAACW,WAAW,EACzBlB,KAAK,EACLkB,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAIrB,KAAK,CAACU,OAAO,CAACW,WAAW,CAAClB,KAAK,CAAC,EAC/CU,MAAM,CACT;;YAEDY,MAAM,EAAEb,OAAO,CAACZ,KAAK,CAACU,OAAO,CAACe,MAAM,EAAEtB,KAAK,EAAEuB,SAAS,EAAEb,MAAM;YACjE;UACDE,OAAO,EAAEH,OAAO,CAACZ,KAAK,CAACe,OAAO,EAAEZ,KAAK,EAAEG,MAAK,EAAEO,MAAM;;;IAI5D,KAAK,WAAW;MAAE;QACd,IAAQG,oBAAmB,GAAKZ,OAAO,CAA/BY,mBAAmB;QAC3B,OAAAP,QAAA,KACOT,KAAK;UACRU,OAAO,EAAAD,QAAA,KACAT,KAAK,CAACU,OAAO;YAChBC,IAAI,EAAEM,IAAI,CAACjB,KAAK,CAACU,OAAO,CAACC,IAAI,EAAER,KAAK,CAAC;YACrCiB,MAAM,EAAEH,IAAI,CAACjB,KAAK,CAACU,OAAO,CAACU,MAAM,EAAEjB,KAAK,CAAC;YACzCkB,WAAW,EAAEJ,IAAI,CAACjB,KAAK,CAACU,OAAO,CAACW,WAAW,EAAElB,KAAK,CAAC;YACnDW,SAAS,EAAEG,IAAI,CAACjB,KAAK,CAACU,OAAO,CAACI,SAAS,EAAEX,KAAK,CAAC;YAC/CsB,MAAM,EAAER,IAAI,CAACjB,KAAK,CAACU,OAAO,CAACe,MAAM,EAAEtB,KAAK;YAC3C;UACDY,OAAO,EAAEE,IAAI,CAACjB,KAAK,CAACe,OAAO,EAAEZ,KAAK,CAAC;UACnCwB,aAAa,EAAE3B,KAAK,CAAC2B,aAAa,CAACC,MAAM,CAAC,UAAArB,GAAG;YAAA,OAAIA,GAAG,CAACS,oBAAmB,CAAC,KAAKb,KAAK;;;;IAI3F,KAAK,cAAc;MAAE;QACjB,IAAQsB,MAAM,GAAKrB,OAAO,CAAlBqB,MAAM;QACd,OAAAhB,QAAA,KACOT,KAAK;UACRU,OAAO,EAAAD,QAAA,KACAT,KAAK,CAACU,OAAO;YAChBe,MAAM,EAAEA,MAAM,GAAGb,OAAO,CAACZ,KAAK,CAACU,OAAO,CAACe,MAAM,EAAEtB,KAAK,EAAEsB,MAAM,EAAEZ,MAAM,CAAC,GAAGI,IAAI,CAACjB,KAAK,CAACU,OAAO,CAACe,MAAM,EAAEtB,KAAK;;;;IAKpH,KAAK,cAAc;MAAE;QACjB,IAAWiB,MAAM,GAAAX,QAAA,MAAAoB,yBAAA,CAAKzB,OAAO,GAAPA,OAAO;QAC7B,OAAAK,QAAA,KACOT,KAAK;UACRU,OAAO,EAAAD,QAAA,KACAT,KAAK,CAACU,OAAO;YAChBU,MAAM,EAAER,OAAO,CAACZ,KAAK,CAACU,OAAO,CAACU,MAAM,EAAEjB,KAAK,EAAEiB,MAAM,EAAEP,MAAM;;;;IAKvE,KAAK,oBAAoB;MAAE;QACvB,IAAQP,OAAK,GAAYF,OAAO,CAAxBE,KAAK;UAAEE,OAAK,GAAKJ,OAAO,CAAjBI,KAAK;QACpB,OAAAC,QAAA,KACOT,KAAK;UACR2B,aAAa,EAAE3B,KAAK,CAAC2B,aAAa,CAACG,MAAM,CAACtB,OAAK,CAAC;UAChDE,OAAO,EAAAD,QAAA,KACAT,KAAK,CAACU,OAAO;YAChBC,IAAI,EAAEC,OAAO,CAACZ,KAAK,CAACU,OAAO,CAACC,IAAI,EAAER,KAAK,EAAEK,OAAK,EAAEK,MAAM,CAAC;YACvDC,SAAS,EAAEF,OAAO,CAACZ,KAAK,CAACU,OAAO,CAACI,SAAS,EAAEX,KAAK,EAAEK,OAAK,EAAEK,MAAM;YACnE;UACDE,OAAO,EAAEH,OAAO,CAACZ,KAAK,CAACe,OAAO,EAAEZ,KAAK,EAAEG,OAAK,EAAEO,MAAM;;;IAI5D;MACI,OAAOb,KAAK;;AAExB;SAEgB+B,sBAAsBA,CAClCC,UAAuD,EACvDC,YAA2D,EAC3DjB,mBAAgC,EAChCkB,SAAsD;MA2NvCC,WAAW,YAAXA,WAAWA,CAAkBC,KAAoB,EAAEjC;QAAAA;MAAAA,QAA4BuB,SAAS;;IAAA;;;MACnG,IAAI,CAACM,UAAU,EAAE;QACbK,OAAO,CAACC,IAAI,CAAC,uDAAuD,CAAC;QACrE,OAAAC,OAAA,CAAAC,OAAA,CAAO,KAAK;;;MAIhB,IAAM9B,OAAO,GAAGP,KAAK,IAAAsC,IAAA,OAAAA,IAAA,CAAMtC,KAAK,IAAGH,KAAK,CAACU,OAAO,CAACC,IAAI,CAACR,KAAK,CAAC,EAAAsC,IAAA,IAAKzC,KAAK,CAACU,OAAO,CAACC,IAAI;MAEnF,IAAI+B,SAAS,GAAG,IAAI;MAAC,IAAAC,MAAA,GAAAC,MAAA,CAED/B,MAAM,CAACK,IAAI,CAACR,OAAO,CAAC,YAA7BP,KAAK,EAA0B;QACtC,IAAMsB,MAAM,GAAGoB,YAAY,CAAC1C,KAAK,CAAC;QAAC,OAAA2C,MAAA,aAE/B;UAAA,IAAAC,cAAA;UAAA,SAAAC,OAAAC,OAAA;YAAA,OAAAC,KAAA,GAAAD,OAAA,GAAAV,OAAA,CAAAC,OAAA,CA2BMR,UAAU,CAACmB,SAAS,CAAC,EAAAC,IAAA;;cAG3BC,cAAc,CAAClD,KAAK,EAAEiC,KAAK,CAAC;;cAG5BkB,YAAY,CAACnD,KAAK,EAAE,OAAO,CAAC;cAC5BoD,UAAU,CAAC;gBACPD,YAAY,CAACnD,KAAK,EAAEuB,SAAS,CAAC;eACjC,EAAE5B,iCAAiC,CAAC;;;UAnCrC,IAAM0D,UAAU,IAAAT,cAAA,GAAGrC,OAAO,CAACP,KAAK,CAAC,cAAA4C,cAAA,cAAAA,cAAA,GAAI,EAAE;;UAGvC,IAAI,CAAClC,MAAM,CAACK,IAAI,CAACsC,UAAU,CAAC,CAACrC,MAAM,IAAIM,MAAM,KAAK,QAAQ,IAAIA,MAAM,KAAK,SAAS,EAAE;YAAA;;UAIpF6B,YAAY,CAACnD,KAAK,EAAE,QAAQ,CAAC;UAE7B,IAAMgD,SAAS,GAAA1C,QAAA,KAAQT,KAAK,CAACU,OAAO,CAACI,SAAS,CAACX,KAAK,CAAC,EAAKqD,UAAU,CAAE;;UAGtE,IAAIC,cAAc,CAACN,SAAS,CAACnC,mBAA6B,CAAC,CAAC,EAAE;YAC1D,OAAOmC,SAAS,CAACnC,mBAAmB,CAAC;;;UAGzC,IAAA0C,MAAA;YAAA,IACIxB,SAAS;cAAA,OAAAK,OAAA,CAAAC,OAAA,CACYN,SAAS,CAACiB,SAAS,CAAC,EAAAC,IAAA,WAAnChC,MAAM;gBAAA,IAERA,MAAM,IAAIP,MAAM,CAACK,IAAI,CAACE,MAAM,CAAC,CAACD,MAAM;kBACpC,MAAMC,MAAM;;;;;UAAC,OAAAsC,MAAA,IAAAA,MAAA,CAAAN,IAAA,GAAAM,MAAA,CAAAN,IAAA,CAAAJ,MAAA,IAAAA,MAAA,CAAAU,MAAA;SAexB,YAAQC,KAAK,EAAE;UAAA,IAAAC,eAAA;UACZ,IAAID,KAAK,YAAYE,cAAc,IAAIF,KAAK,YAAYG,SAAS,IAAK,CAAAH,KAAa,aAAbA,KAAa,wBAAAC,eAAA,GAAbD,KAAa,CAAEI,QAAQ,cAAAH,eAAA,uBAAvBA,eAAA,CAAyBnC,MAAM,KAAI,GAAG,EAAE;YAC1GY,OAAO,CAACsB,KAAK,CAACA,KAAK,CAAC;;;;UAKxB,IAAIK,QAA4B;UAChC,IAAI1C,UAAU;UAEd,IAAI,OAAOqC,KAAK,KAAK,QAAQ,EAAE;YAC3BK,QAAQ,GAAGL,KAAK;WACnB,MAAM,IAAIA,KAAK,YAAYM,KAAK,EAAE;YAAA,IAAAC,gBAAA;YAC/BF,QAAQ,GAAGL,KAAK,CAACQ,OAAO;;YAGxB,IAAI,SAAAD,gBAAA,GAAQP,KAAa,CAACI,QAAQ,cAAAG,gBAAA,uBAAtBA,gBAAA,CAAwBE,IAAI,MAAK,QAAQ,EAAE;cAAA,IAAAC,gBAAA;cACnD/C,UAAU,IAAA+C,gBAAA,GAAIV,KAAa,CAACI,QAAQ,cAAAM,gBAAA,uBAAtBA,gBAAA,CAAwBD,IAAI;;WAEjD,MAAM,IAAI,OAAOT,KAAK,KAAK,QAAQ,EAAE;YAClCrC,UAAU,GAAGqC,KAAK;;UAGtB,IAAIK,QAAQ,IAAI1C,UAAU,EAAE;YACxBgD,QAAQ,CAAC;cACLpE,IAAI,EAAE,cAAc;cACpBC,KAAK,EAALA,KAAK;cACLC,OAAO,EAAE;gBACLG,GAAG,EAAEyD,QAAQ;gBACbxC,KAAK,EAAEF,UAAU;gBACjBiD,oBAAoB,EAAE;;aAE7B,CAAC;;UAGNjB,YAAY,CAACnD,KAAK,EAAE,SAAS,CAAC;UAC9BuC,SAAS,GAAG,KAAK;SACpB;OACJ;QAAA,OAAAQ,KAAA;;MAAA,OAAAX,OAAA,CAAAC,OAAA,CAAAG,MAAA,IAAAA,MAAA,CAAAS,IAAA,GAAAT,MAAA,CAAAS,IAAA,WAAAoB,QAAA;QAAA,OAAAtB,KAAA,GAAAsB,QAAA,GAEM9B,SAAS;WAAAQ,KAAA,GAAAP,MAAA,GAATD,SAAS;KACnB,QAAA+B,CAAA;MAAA,OAAAlC,OAAA,CAAAmC,MAAA,CAAAD,CAAA;;;EAAA,IA7McE,aAAa,YAAbA,aAAaA,CACxBC,IAAgC,EAChCC,QAAgB,EAChBC,SAAS,EACTC,iBAAiB;IAAA,IAAjBA,iBAAiB;MAAjBA,iBAAiB,GAAG,IAAI;;IAAA;;;;;;;UA+CxB,IAAMC,YAAY,IAAIJ,IAAI,CAACK,MAAM,CAACC,EAAE,EAAApD,MAAA,CAAKjB,MAAM,CAACK,IAAI,CAACiE,oBAAoB,CAAC,CAAC;UAC3E,IAAMC,QAAQ,GAAGR,IAAI,CAACrE,GAAG,CAAC8E,sBAAsB,EAAE;UAElDL,YAAY,CAACM,OAAO,CAAC,UAAAC,QAAQ;YACzB,IAAIC,gBAAgB,CAACD,QAAQ,CAAC,EAAE;cAC5BE,cAAc,CAACF,QAAQ,CAAC,GAAGC,gBAAgB,CAACD,QAAQ,CAAC;;cAErD,OAAOG,eAAe,CAACH,QAAQ,CAAC;aACnC,MAAM;cAAA,IAAAI,kBAAA;;cAEH,OAAOF,cAAc,CAACF,QAAQ,CAAC;cAE/B,KAAAI,kBAAA,GAAIP,QAAQ,CAACG,QAAQ,CAAC,cAAAI,kBAAA,eAAlBA,kBAAA,CAAoBV,MAAM,CAACW,WAAW,EAAE,EAAE;;gBAE1C,IAAMC,MAAM,GAAGC,WAAW,CAAClB,IAAI,EAAEmB,WAAW,CAACR,QAAQ,CAAC,EAAEV,QAAQ,EAAEmB,YAAY,CAAC;;gBAG/E,IAAIH,MAAM,EAAE;kBACRH,eAAe,CAACH,QAAQ,CAAC,GAAGM,MAAM;iBACrC,MAAM;kBACH,OAAOH,eAAe,CAACH,QAAQ,CAAC;;;;WAI/C,CAAC;UAEFjB,QAAQ,CAAC;YACLpE,IAAI,EAAE,WAAW;YACjBC,KAAK,EAAEyE,IAAI,CAACrE,GAAG,CAAC2E,EAAE;YAClB9E,OAAO,EAAE;cACLkB,UAAU,EAAEmE,cAAc;cAC1BnF,KAAK,EAAEuE,QAAQ;cACfxD,WAAW,EAAEqE,eAAe;cAC5BlF,KAAK,EAAEuF;;WAEd,CAAC;;;QAlDF,IAAMA,WAAW,GAAAtF,QAAA,KAAQC,OAAO,EAAKyE,oBAAoB,CAAE;QAC3D,IAAMO,eAAe,GAAAjF,QAAA,KAA8BT,KAAK,CAACU,OAAO,CAACW,WAAW,CAACuD,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC,CAAE;QAC3F,IAAMO,cAAc,GAAAhF,QAAA,MAAAwF,uBAAA,GAAgCjG,KAAK,CAACU,OAAO,CAACU,MAAM,CAACwD,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC,cAAAe,uBAAA,uBAAjCA,uBAAA,CAAmCzE,KAAK,CAAE;;QAG9F,IAAIgE,gBAAgB,GAA2B,EAAE;QAAC,IAAAU,KAAA;UAAA,IAE9ChE,SAAS,IAAIrB,MAAM,CAACK,IAAI,CAAC6E,WAAW,CAAC,CAAC5E,MAAM,IAAInB,KAAK,CAACU,OAAO,CAACI,SAAS,CAAC8D,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC;;YAEpF,IAAMiB,YAAY,GAAA1F,QAAA,KAAQT,KAAK,CAACU,OAAO,CAACI,SAAS,CAAC8D,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC,EAAKxE,OAAO,EAAKyE,oBAAoB,CAAE;YAAC,OAAA5C,OAAA,CAAAC,OAAA,CAC3EN,SAAS,CAACiE,YAAY,CAAC,EAAA/C,IAAA,WAAAgD,UAAA;cAAlDZ,gBAAgB,GAAAY,UAAA,aAAAA,UAAA,cAAAA,UAAA,GAAuC,EAA6B;;;;QAAC,OAAAF,KAAA,IAAAA,KAAA,CAAA9C,IAAA,GAAA8C,KAAA,CAAA9C,IAAA,CAAAiD,MAAA,IAAAA,MAAA,CAAAH,KAAA;;MAxCzF,IAAMxF,OAAO,GACToE,SAAS,KAAKpD,SAAS,GAAAjB,QAAA,KACZT,KAAK,CAACU,OAAO,CAACC,IAAI,CAACiE,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC,GAAAoB,SAAA,OAAAA,SAAA,CAAG1B,IAAI,CAACK,MAAM,CAACC,EAAE,IAAGJ,SAAS,EAAAwB,SAAA,KAAA7F,QAAA,KAC5DT,KAAK,CAACU,OAAO,CAACC,IAAI,CAACiE,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC,CAAE;MAEhD,IAAI,CAACrE,MAAM,CAACK,IAAI,CAACR,OAAO,CAAC,CAACS,MAAM,EAAE;QAC9B,OAAAoB,OAAA,CAAAC,OAAA;;MAGJ,IAAI2C,oBAAoB,GAAe,EAAE;;MAEzC,IAAAoB,MAAA;QAAA,IACI,OAAOtE,YAAY,KAAK,UAAU,IAAI8C,iBAAiB;UACvD,IAAMyB,gBAAgB,GAAA/F,QAAA,KACfT,KAAK,CAACU,OAAO,CAACI,SAAS,CAAC8D,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC,CAE1C;UACD,IAAMiB,YAAY,GAAA1F,QAAA,KACXT,KAAK,CAACU,OAAO,CAACI,SAAS,CAAC8D,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC,EACpCxE,OAAO,CACb;UAAC,OAAA6B,OAAA,CAAAC,OAAA,CAC6BP,YAAY,CACvC2C,IAAI,CAACK,MAAM,CAACC,EAAE,EACdxE,OAAO,CAACkE,IAAI,CAACK,MAAM,CAACC,EAAE,CAAC,EACvBiB,YAAY,EACZK,gBAAgB,CACnB,EAAApD,IAAA,WAAAqD,aAAA;YALDtB,oBAAoB,GAAAsB,aAAA,aAAAA,aAAA,cAAAA,aAAA,GAKd,EAAiB;;;;MAAC,OAAAlE,OAAA,CAAAC,OAAA,CAAA+D,MAAA,IAAAA,MAAA,CAAAnD,IAAA,GAAAmD,MAAA,CAAAnD,IAAA,CAAAsD,MAAA,IAAAA,MAAA,CAAAH,MAAA;KAuD/B,QAAA9B,CAAA;MAAA,OAAAlC,OAAA,CAAAmC,MAAA,CAAAD,CAAA;;;EA/LD,IAAMuB,YAAY,GAAGW,eAAe,EAAE;EACtC,IAAAC,iBAAA,GAA0BC,cAAK,CAACC,UAAU,CAAC/G,OAAO,EAAE;MAChDW,OAAO,EAAE;QAAEC,IAAI,EAAE,EAAE;QAAES,MAAM,EAAE,EAAE;QAAEC,WAAW,EAAE,EAAE;QAAEP,SAAS,EAAE,EAAE;QAAEW,MAAM,EAAE;OAAI;MAC7EV,OAAO,EAAE,EAAE;MACXY,aAAa,EAAE;KAClB,CAAC;IAJK3B,KAAK,GAAA4G,iBAAA;IAAEtC,QAAQ,GAAAsC,iBAAA;;EAOtB,SAASG,WAAWA,CAAC5G,KAAa;;IAC9B,QAAA6G,qBAAA,IAAAC,mBAAA,GAAOjH,KAAK,CAACU,OAAO,CAACC,IAAI,cAAAsG,mBAAA,uBAAlBA,mBAAA,CAAqB9G,KAAK,CAAC,cAAA6G,qBAAA,cAAAA,qBAAA,GAAItF,SAAS;;EAGnD,SAASwF,gBAAgBA,CAAC/G,KAAa;;IACnC,QAAAgH,eAAA,GAAOtG,MAAM,CAACuG,MAAM,EAAAC,qBAAA,IAAAC,sBAAA,GAACtH,KAAK,CAACU,OAAO,CAACW,WAAW,cAAAiG,sBAAA,uBAAzBA,sBAAA,CAA4BnH,KAAK,CAAC,cAAAkH,qBAAA,cAAAA,qBAAA,GAAI,EAAE,CAAC,CAAC,CAAC,CAAC,cAAAF,eAAA,cAAAA,eAAA,GAAIzF,SAAS;;EAGlF,SAAS6F,YAAYA,CAACpH,KAAa;;IAC/B,OAAO,CAAC,GAAAqH,qBAAA,GAACxH,KAAK,CAACU,OAAO,CAACU,MAAM,CAACjB,KAAK,CAAC,cAAAqH,qBAAA,eAA3BA,qBAAA,CAA6BjH,GAAG,KAAI,CAAC,CAACM,MAAM,CAACK,IAAI,EAAAuG,sBAAA,IAAAC,sBAAA,GAAC1H,KAAK,CAACU,OAAO,CAACU,MAAM,CAACjB,KAAK,CAAC,cAAAuH,sBAAA,uBAA3BA,sBAAA,CAA6BlG,KAAK,cAAAiG,sBAAA,cAAAA,sBAAA,GAAI,EAAE,CAAC,CAACtG,MAAM;;EAG/G,SAASwG,wBAAwBA,CAACxH,KAAa;;IAC3C,OAAOoH,YAAY,CAACpH,KAAK,CAAC,IAAI,CAAC,GAAAyH,sBAAA,GAAC5H,KAAK,CAACU,OAAO,CAACU,MAAM,CAACjB,KAAK,CAAC,cAAAyH,sBAAA,eAA3BA,sBAAA,CAA6BrD,oBAAoB;;EAGrF,SAASsD,qBAAqBA;;IAC1B,IAAMC,MAAM,IAAAC,oBAAA,GAAG/H,KAAK,CAAC2B,aAAa,cAAAoG,oBAAA,uBAAnBA,oBAAA,CAAsB,CAAC,CAAkB;IAExD,IAAI,CAACD,MAAM,EAAE;MACT,OAAO,KAAK;;IAGhB,IAAM3H,KAAK,GAAG2H,MAAM,CAAC9G,mBAA6B,CAAC;IACnD,OAAO,CAAC,GAAAgH,sBAAA,GAAChI,KAAK,CAACU,OAAO,CAACU,MAAM,CAACjB,KAAK,CAAC,cAAA6H,sBAAA,eAA3BA,sBAAA,CAA6BzH,GAAG,KAAI,CAAC,CAACM,MAAM,CAACK,IAAI,EAAA+G,sBAAA,IAAAC,sBAAA,GAAClI,KAAK,CAACU,OAAO,CAACU,MAAM,CAACjB,KAAK,CAAC,cAAA+H,sBAAA,uBAA3BA,sBAAA,CAA6B1G,KAAK,cAAAyG,sBAAA,cAAAA,sBAAA,GAAI,EAAE,CAAC,CAAC9G,MAAM;;EAG/G,SAAS0B,YAAYA,CAAC1C,KAAa;IAC/B,OAAOH,KAAK,CAACU,OAAO,CAACe,MAAM,CAACtB,KAAK,CAAC;;EAGtC,SAASmD,YAAYA,CAACnD,KAAa,EAAEsB,MAAoC;IACrE6C,QAAQ,CAAC;MACLpE,IAAI,EAAE,cAAc;MACpBC,KAAK,EAALA,KAAK;MACLC,OAAO,EAAE;QACLqB,MAAM,EAANA;;KAEP,CAAC;;EAGN,SAAS0G,kBAAkBA,CAAkB/D,IAAgB,EAAES,QAAgB;;IAC3E,IAAMuD,QAAQ,QAAMC,uBAAuB,GAAGC,EAAI,EAAI;IACtD,IAAM9H,KAAK,GAAAC,QAAA,KACJ2D,IAAI,GAAAmE,SAAA,OAAAA,SAAA,CACNvH,mBAAmB,IAAGoH,QAAQ,EAAAG,SAAA,EAClC;IAEDjE,QAAQ,CAAC;MACLpE,IAAI,EAAE,oBAAoB;MAC1BC,KAAK,EAAEiI,QAAQ;MACfhI,OAAO,EAAE;QAAEE,KAAK,EAAEuE,QAAQ;QAAErE,KAAK,EAALA;;KAC/B,CAAC;IAEF,OAAO4H,QAAQ;;;EAInB,SAASI,YAAYA,CAAkB5D,IAAgC,EAAEC,QAAgB,EAAErE,KAAc;IACrG,IAAML,KAAK,GAAGyE,IAAI,CAACrE,GAAG,CAAC2E,EAAE;IACzB,IAAM7E,QAAQ,GAAGuE,IAAI,CAACK,MAAM,CAACC,EAAE;;IAG/B,IAAI1E,KAAK,KAAKoE,IAAI,CAACrE,GAAG,CAACgB,QAAQ,CAAClB,QAAQ,CAAC,EAAE;MACvCiE,QAAQ,CAAC;QACLpE,IAAI,EAAE,cAAc;QACpBC,KAAK,EAALA,KAAK;QACLC,OAAO,EAAE;UACLC,QAAQ,EAARA,QAAQ;UACRC,KAAK,EAAEuE,QAAQ;UACftE,GAAG,EAAEqE,IAAI,CAACrE,GAAG,CAACgB,QAAQ;UACtBf,KAAK,EAALA;;OAEP,CAAC;;;SAGD,IAAIoE,IAAI,CAACrE,GAAG,CAAC2E,EAAE,IAAIlF,KAAK,CAACU,OAAO,CAACC,IAAI,EAAE;MACxC2D,QAAQ,CAAC;QACLpE,IAAI,EAAE,iBAAiB;QACvBC,KAAK,EAALA,KAAK;QACLC,OAAO,EAAE;UACLC,QAAQ,EAARA,QAAQ;UACRW,mBAAmB,EAAnBA;;OAEP,CAAC;;;EAIV,SAASyH,YAAYA,CAAkB7D,IAAgC;;IACnE,QAAA8D,oBAAA,GAAO1I,KAAK,CAACU,OAAO,CAACC,IAAI,cAAA+H,oBAAA,wBAAAC,qBAAA,GAAlBD,oBAAA,CAAqB9D,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC,cAAAyD,qBAAA,uBAAjCA,qBAAA,CAAoC/D,IAAI,CAACK,MAAM,CAACC,EAAE,CAAC;;EAG9D,SAAS0D,YAAYA,CAAkBhE,IAAgC;;IACnE,QAAAiE,sBAAA,GAAO7I,KAAK,CAACU,OAAO,CAACU,MAAM,cAAAyH,sBAAA,wBAAAC,sBAAA,GAApBD,sBAAA,CAAuBjE,IAAI,CAACrE,GAAG,CAAC2E,EAAE,CAAC,cAAA4D,sBAAA,wBAAAC,uBAAA,GAAnCD,sBAAA,CAAqCtH,KAAK,cAAAuH,uBAAA,uBAA1CA,uBAAA,CAA6CnE,IAAI,CAACK,MAAM,CAACC,EAAE,CAAC;;EA6FvE,SAAS8D,qBAAqBA;IAC1B,IAAMC,cAAc,GAAGpI,MAAM,CAACK,IAAI,CAAClB,KAAK,CAACU,OAAO,CAACU,MAAM,CAAC;IAExD,IAAI,CAAC6H,cAAc,CAAC9H,MAAM,EAAE;MACxB,OAAO,EAAE;;IAGb,OAAO8H,cAAc,CAACrH,MAAM,CAAC+F,wBAAwB,CAAC,CAACuB,GAAG,CAAC,UAAA/I,KAAK;MAAA,OAAK;QACjEA,KAAK,EAALA,KAAK;QACLG,KAAK,EAAEN,KAAK,CAACe,OAAO,CAACZ,KAAK,CAAC;QAC3BO,OAAO,EAAEV,KAAK,CAACU,OAAO,CAACC,IAAI,CAACR,KAAK,CAAwB;QACzDiB,MAAM,EAAEpB,KAAK,CAACU,OAAO,CAACU,MAAM,CAACjB,KAAK;OACrC;KAAC,CAAC;;EAGP,SAASgJ,QAAQA;IACb,OAAO,CAAC,CAACtI,MAAM,CAACuG,MAAM,CAACpH,KAAK,CAACU,OAAO,CAACe,MAAM,CAAC,CAACG,MAAM,CAAC,UAAApB,KAAK;MAAA,OAAIA,KAAK,KAAK,OAAO;MAAC,CAACW,MAAM;;EAG1F,SAASiI,UAAUA,CAACjJ,KAAc;IAC9B,OAAOA,KAAK,GAAG,CAAC,CAACH,KAAK,CAACU,OAAO,CAACC,IAAI,CAACR,KAAK,CAAC,GAAG,CAAC,CAACU,MAAM,CAACK,IAAI,CAAClB,KAAK,CAACU,OAAO,CAACC,IAAI,CAAC,CAACQ,MAAM;;EAiGzF,SAASkC,cAAcA,CAAkBlD,KAAa,EAAEiC,KAAoB;;IAExEA,KAAK,CAACiH,eAAe,CAAC,IAAI,CAAC;IAE3B/E,QAAQ,CAAC;MACLpE,IAAI,EAAE,WAAW;MACjBC,KAAK,EAALA,KAAK;MACLC,OAAO,EAAE;QAAEY,mBAAmB,EAAnBA;;KACd,CAAC;;EAGN,OAAO;;IAEH+F,WAAW,EAAXA,WAAW;IACXG,gBAAgB,EAAhBA,gBAAgB;IAChBK,YAAY,EAAZA,YAAY;IACZI,wBAAwB,EAAxBA,wBAAwB;IACxBE,qBAAqB,EAArBA,qBAAqB;IACrBhF,YAAY,EAAZA,YAAY;IACZS,YAAY,EAAZA,YAAY;;IAEZkF,YAAY,EAAZA,YAAY;IACZC,YAAY,EAAZA,YAAY;IACZG,YAAY,EAAZA,YAAY;IACZjE,aAAa,EAAbA,aAAa;;IAEbqE,qBAAqB,EAArBA,qBAAqB;IACrBI,UAAU,EAAVA,UAAU;IACVjH,WAAW,EAAXA,WAAW;IACXkB,cAAc,EAAdA,cAAc;IACd8F,QAAQ,EAARA,QAAQ;;IAERhB,kBAAkB,EAAlBA,kBAAkB;IAClBxG,aAAa,EAAE3B,KAAK,CAAC2B;GACxB;AACL;;;;"}
|
|
1
|
+
{"version":3,"file":"useEditingState.js","sources":["../../../../../../../../src/components/Table3/features/useEditingState.ts"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, Cell as ReactTableCell } from '@tanstack/react-table';\nimport { v4 as uuid } from 'uuid';\nimport omit from 'lodash/omit';\nimport setWith from 'lodash/setWith';\nimport {\n Table3EditingChangeHandler,\n Table3EditingDiscardHandler,\n Table3EditingSaveHandler,\n Table3EditingValidatorFn,\n} from '../types';\nimport { isTemporaryRow, TEMPORARY_ROW_ID_PREFIX, willRowMove } from '../util/editing';\nimport { useLocalization } from '../../Provider/Localization';\n\nconst DELAY_BEFORE_REMOVING_SAVE_STATUS = 3000;\n\ntype EditingError = {\n row: string;\n cells: Record<string, string>;\n shouldShowErrorAlert: boolean;\n};\ntype EditingRowMoveReason = Record<string, 'search' | 'sorting' | 'filter'>;\ntype EditingSaveState = 'saving' | 'saved' | 'errored';\ntype EditingChangeset<TType = unknown> = Partial<TType>;\ntype EditingState<TType = unknown> = {\n changes: {\n rows: Record<string, EditingChangeset<TType>>;\n errors: Record<string, EditingError>;\n moveReasons: Record<string, EditingRowMoveReason>;\n originals: Record<string, TType>;\n status: Record<string, EditingSaveState>;\n };\n // we store row indexes because due to server loading, we don't always have all data available\n // so we can't determine an index from a row id\n // note: if the row click button in the error Alert is removed, indexes can be removed here\n indexes: Record<string, number>;\n temporaryRows: TType[];\n};\ntype EditingStateAction = {\n type:\n | 'setCellValue'\n | 'removeCellValue'\n | 'updateRow'\n | 'mergeRowValue'\n | 'removeRow'\n | 'setRowStatus'\n | 'setRowErrors'\n | 'insertTemporaryRow';\n rowId: string;\n payload?: any;\n};\n\nfunction reducer<TType = unknown>(state: EditingState<TType>, action: EditingStateAction) {\n const { type, rowId, payload } = action;\n\n switch (type) {\n case 'setCellValue': {\n const { columnId, index, row, value } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, `${rowId}.${columnId}`, value, Object),\n originals: setWith(state.changes.originals, rowId, row, Object),\n },\n indexes: setWith(state.indexes, rowId, index, Object),\n };\n }\n\n case 'removeCellValue': {\n const { columnId, rowIdentityAccessor } = payload;\n const changes = omit(state.changes.rows, `${rowId}.${columnId}`);\n\n // if there are no changes left, remove the row\n if (!Object.keys(changes[rowId]).length) {\n return reducer(state, { type: 'removeRow', rowId, payload: { rowIdentityAccessor } });\n }\n\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: omit(state.changes.rows, `${rowId}.${columnId}`),\n errors: omit(state.changes.errors, `${rowId}.cells.${columnId}`),\n moveReasons: omit(state.changes.moveReasons, `${rowId}.${columnId}`),\n },\n };\n }\n\n case 'updateRow': {\n const { cellErrors, index, moveReasons, original, value } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, rowId, value, Object),\n errors: setWith(\n state.changes.errors,\n `${rowId}.cells`,\n cellErrors ?? state.changes.errors.cells[rowId],\n Object\n ),\n originals: setWith(state.changes.originals, rowId, original ?? state.changes.originals[rowId], Object),\n moveReasons: setWith(\n state.changes.moveReasons,\n rowId,\n moveReasons ?? state.changes.moveReasons[rowId],\n Object\n ),\n // status can be undefined, so don't use ??\n status: setWith(state.changes.status, rowId, undefined, Object),\n },\n indexes: setWith(state.indexes, rowId, index, Object),\n };\n }\n\n case 'removeRow': {\n const { rowIdentityAccessor } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n rows: omit(state.changes.rows, rowId),\n errors: omit(state.changes.errors, rowId),\n moveReasons: omit(state.changes.moveReasons, rowId),\n originals: omit(state.changes.originals, rowId),\n status: omit(state.changes.status, rowId),\n },\n indexes: omit(state.indexes, rowId),\n temporaryRows: state.temporaryRows.filter(row => row[rowIdentityAccessor] !== rowId),\n };\n }\n\n case 'setRowStatus': {\n const { status } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n status: status ? setWith(state.changes.status, rowId, status, Object) : omit(state.changes.status, rowId),\n },\n };\n }\n\n case 'setRowErrors': {\n const { ...errors } = payload;\n return {\n ...state,\n changes: {\n ...state.changes,\n errors: setWith(state.changes.errors, rowId, errors, Object),\n },\n };\n }\n\n case 'insertTemporaryRow': {\n const { index, value } = payload;\n return {\n ...state,\n temporaryRows: state.temporaryRows.concat(value),\n changes: {\n ...state.changes,\n rows: setWith(state.changes.rows, rowId, value, Object),\n originals: setWith(state.changes.originals, rowId, value, Object),\n },\n indexes: setWith(state.indexes, rowId, index, Object),\n };\n }\n\n default:\n return state;\n }\n}\n\nexport function usePendingChangesState<TType = unknown>(\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n handleChange: Table3EditingChangeHandler<TType> | undefined,\n handleDiscard: Table3EditingDiscardHandler | undefined,\n rowIdentityAccessor: keyof TType,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n const localization = useLocalization();\n const [state, dispatch] = React.useReducer(reducer, {\n changes: { rows: {}, errors: {}, moveReasons: {}, originals: {}, status: {} },\n indexes: {},\n temporaryRows: [],\n });\n\n // rows\n function getRowValue(rowId: string) {\n return state.changes.rows?.[rowId] ?? undefined;\n }\n\n function getRowMoveReason(rowId: string) {\n return Object.values(state.changes.moveReasons?.[rowId] ?? {})[0] ?? undefined;\n }\n\n function hasRowErrors(rowId: string) {\n return !!state.changes.errors[rowId]?.row || !!Object.keys(state.changes.errors[rowId]?.cells ?? {}).length;\n }\n\n function hasRowErrorsShownInAlert(rowId: string) {\n return hasRowErrors(rowId) && !!state.changes.errors[rowId]?.shouldShowErrorAlert;\n }\n\n function hasTemporaryRowErrors<T extends TType>() {\n const newRow = state.temporaryRows?.[0] as T | undefined;\n\n if (!newRow) {\n return false;\n }\n\n const rowId = newRow[rowIdentityAccessor as string];\n return !!state.changes.errors[rowId]?.row || !!Object.keys(state.changes.errors[rowId]?.cells ?? {}).length;\n }\n\n function getRowStatus(rowId: string) {\n return state.changes.status[rowId];\n }\n\n function setRowStatus(rowId: string, status: EditingSaveState | undefined) {\n dispatch({\n type: 'setRowStatus',\n rowId,\n payload: {\n status,\n },\n });\n }\n\n function insertTemporaryRow<T extends TType>(data: Partial<T>, rowIndex: number) {\n const newRowId = `${TEMPORARY_ROW_ID_PREFIX}${uuid()}`;\n const value: Partial<TType> = {\n ...data,\n [rowIdentityAccessor]: newRowId,\n };\n\n dispatch({\n type: 'insertTemporaryRow',\n rowId: newRowId,\n payload: { index: rowIndex, value },\n });\n\n return newRowId;\n }\n\n // cells\n function setCellValue<T extends TType>(cell: ReactTableCell<T, unknown>, rowIndex: number, value: unknown) {\n const rowId = cell.row.id;\n const columnId = cell.column.id;\n\n // update if the change is different to the original value\n if (value !== cell.row.original[columnId]) {\n dispatch({\n type: 'setCellValue',\n rowId,\n payload: {\n columnId,\n index: rowIndex,\n row: cell.row.original,\n value,\n },\n });\n }\n // otherwise remove any previous change - no point saving the same value\n else if (cell.row.id in state.changes.rows) {\n dispatch({\n type: 'removeCellValue',\n rowId,\n payload: {\n columnId,\n rowIdentityAccessor,\n },\n });\n }\n }\n\n function getCellValue<T extends TType>(cell: ReactTableCell<T, unknown>): unknown | undefined {\n return state.changes.rows?.[cell.row.id]?.[cell.column.id];\n }\n\n function getCellError<T extends TType>(cell: ReactTableCell<T, unknown>): string | undefined {\n return state.changes.errors?.[cell.row.id]?.cells?.[cell.column.id];\n }\n\n async function onCellChanged<T extends TType>(\n cell: ReactTableCell<T, unknown>,\n rowIndex: number,\n nextValue,\n shouldRunUpdaters = true\n ) {\n const changes =\n nextValue !== undefined\n ? { ...state.changes.rows[cell.row.id], [cell.column.id]: nextValue }\n : { ...state.changes.rows[cell.row.id] };\n\n if (!Object.keys(changes).length) {\n return;\n }\n\n let updatesForOtherCells: Partial<T> = {};\n\n // run the updater handler if there is one, to see if there are any other cells to update\n if (typeof handleChange === 'function' && shouldRunUpdaters) {\n const previousRowValue = {\n ...state.changes.originals[cell.row.id],\n //...getRowChangeset(updatersRef.current[cell.row.id], rowIdentityAccessor),\n };\n const nextRowValue = {\n ...state.changes.originals[cell.row.id],\n ...changes,\n };\n updatesForOtherCells = ((await handleChange(\n cell.column.id,\n changes[cell.column.id],\n nextRowValue,\n previousRowValue\n )) ?? {}) as Partial<T>;\n }\n\n // create a projection of the next state, so we can act against it\n const nextChanges = { ...changes, ...updatesForOtherCells };\n const nextMoveReasons: EditingRowMoveReason = { ...state.changes.moveReasons[cell.row.id] };\n const nextCellErrors: Record<string, string> = { ...state.changes.errors[cell.row.id]?.cells };\n\n // run validation - if there are changes, and if there is an original stored\n let validationErrors: Record<string, string> = {};\n\n if (validator && Object.keys(nextChanges).length && state.changes.originals[cell.row.id]) {\n // merge with the original so we get a full row\n const nextRowValue = { ...state.changes.originals[cell.row.id], ...changes, ...updatesForOtherCells };\n validationErrors = ((await validator(nextRowValue)) ?? {}) as Record<string, string>;\n }\n\n // only set errors and move reasons for the cells we're currently acting on\n // why? because the UX is not good if we set them for cells the user hasn't touched yet\n const cellsToActOn = [cell.column.id, ...Object.keys(updatesForOtherCells)];\n const allCells = cell.row._getAllCellsByColumnId();\n\n cellsToActOn.forEach(accessor => {\n if (validationErrors[accessor]) {\n nextCellErrors[accessor] = validationErrors[accessor];\n // don't show move indicator for cells with errors, they aren't valid and can't be saved\n delete nextMoveReasons[accessor];\n } else {\n // there isn't any error in this run, remove any error set in state\n delete nextCellErrors[accessor];\n\n if (allCells[accessor]?.column.getIsSorted()) {\n // run row move determination\n const reason = willRowMove(cell, nextChanges[accessor], rowIndex, localization);\n\n // if the row will move based on this change save why, otherwise delete any existing state\n if (reason) {\n nextMoveReasons[accessor] = reason;\n } else {\n delete nextMoveReasons[accessor];\n }\n }\n }\n });\n\n dispatch({\n type: 'updateRow',\n rowId: cell.row.id,\n payload: {\n cellErrors: nextCellErrors,\n index: rowIndex,\n moveReasons: nextMoveReasons,\n value: nextChanges,\n },\n });\n }\n\n // general\n function getErrorsShownInAlert<T extends TType>() {\n const rowsWithErrors = Object.keys(state.changes.errors);\n\n if (!rowsWithErrors.length) {\n return [];\n }\n\n return rowsWithErrors.filter(hasRowErrorsShownInAlert).map(rowId => ({\n rowId,\n index: state.indexes[rowId],\n changes: state.changes.rows[rowId] as EditingChangeset<T>,\n errors: state.changes.errors[rowId],\n }));\n }\n\n function hasSaved() {\n return !!Object.values(state.changes.status).filter(value => value === 'saved').length;\n }\n\n function hasChanges(rowId?: string) {\n return rowId ? !!state.changes.rows[rowId] : !!Object.keys(state.changes.rows).length;\n }\n\n async function saveChanges<T extends TType>(table: ReactTable<T>, rowId: string | undefined = undefined): Promise<boolean> {\n if (!handleSave) {\n console.warn('Tried to save, but Table has no onEditingSave handler');\n return false;\n }\n\n // sometimes we only want to save one row\n const changes = rowId ? { [rowId]: state.changes.rows[rowId] } : state.changes.rows;\n\n let completed = true;\n\n for (const rowId of Object.keys(changes)) {\n const status = getRowStatus(rowId);\n\n try {\n const rowChanges = changes[rowId] ?? {};\n\n // don't try to save if - already saving, or there are known errors\n if (!Object.keys(rowChanges).length || status === 'saving' || status === 'errored') {\n continue;\n }\n\n setRowStatus(rowId, 'saving');\n\n const changeSet = { ...state.changes.originals[rowId], ...rowChanges };\n\n // if we had to create a temporary id, delete it first - it's our data, not theirs\n if (isTemporaryRow(changeSet[rowIdentityAccessor as string])) {\n delete changeSet[rowIdentityAccessor];\n }\n\n // re-run validation, maybe a cell is already invalid but has never been blurred\n if (validator) {\n const errors = await validator(changeSet);\n\n if (errors && Object.keys(errors).length) {\n throw errors;\n }\n }\n\n // send new data to the server\n await handleSave(changeSet);\n\n // cleanup changes, we don't need them after saving\n await discardChanges(rowId, table);\n\n // show the saved status, then remove it after a delay\n setRowStatus(rowId, 'saved');\n setTimeout(() => {\n setRowStatus(rowId, undefined);\n }, DELAY_BEFORE_REMOVING_SAVE_STATUS);\n } catch (error) {\n if (error instanceof ReferenceError || error instanceof TypeError || (error as any)?.response?.status >= 500) {\n console.error(error);\n }\n\n // the onEditingSave handler should throw errors when something fails, e.g. validation, network errors etc\n // this code handles those errors and maps them either to row errors or cell specific errors\n let rowError: string | undefined;\n let cellErrors;\n\n if (typeof error === 'string') {\n rowError = error;\n } else if (error instanceof Error) {\n rowError = error.message;\n\n // most of our apis return error objects within this shape\n if (typeof (error as any).response?.data === 'object') {\n cellErrors = (error as any).response?.data;\n }\n } else if (typeof error === 'object') {\n cellErrors = error;\n }\n\n if (rowError || cellErrors) {\n dispatch({\n type: 'setRowErrors',\n rowId,\n payload: {\n row: rowError,\n cells: cellErrors,\n shouldShowErrorAlert: true,\n },\n });\n }\n\n setRowStatus(rowId, 'errored');\n completed = false;\n }\n }\n\n return completed;\n }\n\n async function discardChanges<T extends TType>(rowId: string, table: ReactTable<T>) {\n // remove any new rows from pinned state before discarding them\n table.resetRowPinning(true);\n\n dispatch({\n type: 'removeRow',\n rowId,\n payload: { rowIdentityAccessor },\n });\n\n if (typeof handleDiscard === 'function') {\n await handleDiscard();\n }\n }\n\n return {\n // row\n getRowValue,\n getRowMoveReason,\n hasRowErrors,\n hasRowErrorsShownInAlert,\n hasTemporaryRowErrors,\n getRowStatus,\n setRowStatus,\n // cells\n setCellValue,\n getCellValue,\n getCellError,\n onCellChanged,\n // general\n getErrorsShownInAlert,\n hasChanges,\n saveChanges,\n discardChanges,\n hasSaved,\n // new rows\n insertTemporaryRow,\n temporaryRows: state.temporaryRows,\n };\n}\n"],"names":["DELAY_BEFORE_REMOVING_SAVE_STATUS","reducer","state","action","type","rowId","payload","columnId","index","row","value","_extends","changes","rows","setWith","Object","originals","indexes","rowIdentityAccessor","omit","keys","length","errors","moveReasons","cellErrors","original","cells","status","undefined","temporaryRows","filter","_objectDestructuringEmpty","concat","usePendingChangesState","handleSave","handleChange","handleDiscard","validator","discardChanges","table","resetRowPinning","dispatch","_temp8","Promise","resolve","then","e","reject","saveChanges","console","warn","_ref","completed","_temp7","_forOf","getRowStatus","_catch","_changes$rowId","_temp6","_result","_exit","changeSet","setRowStatus","setTimeout","rowChanges","isTemporaryRow","_temp5","error","_error$response","ReferenceError","TypeError","response","rowError","Error","_error$response2","message","data","_error$response3","shouldShowErrorAlert","_result3","onCellChanged","cell","rowIndex","nextValue","shouldRunUpdaters","cellsToActOn","column","id","updatesForOtherCells","allCells","_getAllCellsByColumnId","forEach","accessor","validationErrors","nextCellErrors","nextMoveReasons","_allCells$accessor","getIsSorted","reason","willRowMove","nextChanges","localization","_state$changes$errors11","_temp","nextRowValue","_validator","_temp2","_extends3","_temp3","previousRowValue","_handleChange","_temp4","useLocalization","_React$useReducer","React","useReducer","getRowValue","_state$changes$rows$r","_state$changes$rows","getRowMoveReason","_Object$values$","values","_state$changes$moveRe","_state$changes$moveRe2","hasRowErrors","_state$changes$errors","_state$changes$errors2","_state$changes$errors3","hasRowErrorsShownInAlert","_state$changes$errors4","hasTemporaryRowErrors","newRow","_state$temporaryRows","_state$changes$errors5","_state$changes$errors6","_state$changes$errors7","insertTemporaryRow","newRowId","TEMPORARY_ROW_ID_PREFIX","uuid","_extends2","setCellValue","getCellValue","_state$changes$rows2","_state$changes$rows2$","getCellError","_state$changes$errors8","_state$changes$errors9","_state$changes$errors10","getErrorsShownInAlert","rowsWithErrors","map","hasSaved","hasChanges"],"mappings":"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"}
|