@economic/taco 2.15.0 → 2.16.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/components/Drawer/Drawer.d.ts +5 -1
- package/dist/components/Provider/Localization.d.ts +19 -0
- package/dist/components/SearchInput2/SearchInput2.d.ts +1 -0
- package/dist/components/Table3/components/alert/ErrorAlert.d.ts +10 -0
- package/dist/components/Table3/components/columns/cell/DisplayCell.d.ts +5 -2
- package/dist/components/Table3/components/columns/cell/EditingCell.d.ts +3 -0
- package/dist/components/Table3/components/columns/cell/Highlight.d.ts +2 -0
- package/dist/components/Table3/components/columns/internal/EditingActions.d.ts +1 -1
- package/dist/components/Table3/components/rows/Row.d.ts +2 -0
- package/dist/components/Table3/components/rows/RowContext.d.ts +1 -0
- package/dist/components/Table3/hooks/features/useEditing.d.ts +12 -11
- package/dist/components/Table3/hooks/features/usePauseShortcuts.d.ts +5 -0
- package/dist/components/Table3/hooks/features/useSearch.d.ts +2 -0
- package/dist/components/Table3/hooks/features/useValidation.d.ts +13 -0
- package/dist/components/Table3/hooks/useTable.d.ts +4 -0
- package/dist/components/Table3/types.d.ts +26 -1
- package/dist/components/Table3/util/editing.d.ts +6 -0
- package/dist/esm/index.css +108 -33
- package/dist/esm/packages/taco/src/components/Drawer/Drawer.js +7 -2
- package/dist/esm/packages/taco/src/components/Drawer/Drawer.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Provider/Localization.js +19 -0
- package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
- package/dist/esm/packages/taco/src/components/SearchInput2/SearchInput2.js +4 -0
- package/dist/esm/packages/taco/src/components/SearchInput2/SearchInput2.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/Table3.js +7 -1
- package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/alert/ErrorAlert.js +154 -0
- package/dist/esm/packages/taco/src/components/Table3/components/alert/ErrorAlert.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/Cell.js +51 -6
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/Cell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/DisplayCell.js +7 -55
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/DisplayCell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingCell.js +69 -37
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingCell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingControl.js +17 -17
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingControl.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/Highlight.js +41 -0
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/Highlight.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/controls/TextareaControl.js +21 -12
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/controls/TextareaControl.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/footer/Footer.js +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/footer/Footer.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/EditingActions.js +57 -17
- package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/EditingActions.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/rows/Row.js +39 -31
- package/dist/esm/packages/taco/src/components/Table3/components/rows/Row.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/rows/RowContext.js +2 -1
- package/dist/esm/packages/taco/src/components/Table3/components/rows/RowContext.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/Filters.js +8 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/Filters.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Search.js +48 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Search.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useEditing.js +185 -101
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useEditing.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/usePauseShortcuts.js +12 -0
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/usePauseShortcuts.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useSearch.js +4 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useSearch.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useValidation.js +178 -0
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useValidation.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/hooks/useConvertChildrenToColumns.js +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/useConvertChildrenToColumns.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/useTable.js +8 -2
- package/dist/esm/packages/taco/src/components/Table3/hooks/useTable.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/strategies/virtualised.js +1 -1
- package/dist/esm/packages/taco/src/components/Table3/types.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/util/editing.js +21 -1
- package/dist/esm/packages/taco/src/components/Table3/util/editing.js.map +1 -1
- package/dist/index.css +108 -33
- package/dist/taco.cjs.development.js +2605 -1970
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/package.json +2 -2
- package/types.json +10973 -7880
@@ -4,6 +4,7 @@ import { SearchInput2 } from '../../../SearchInput2/SearchInput2.js';
|
|
4
4
|
import { Switch } from '../../../Switch/Switch.js';
|
5
5
|
import { getCellValueAsString } from '../../util/columns.js';
|
6
6
|
import { globalFilterFn } from '../../util/filtering.js';
|
7
|
+
import { lastCellIndex } from '../rows/Row.js';
|
7
8
|
import { useDebouncedEffect } from '../../../../hooks/useDebouncedEffect.js';
|
8
9
|
|
9
10
|
var LoadingState;
|
@@ -24,6 +25,7 @@ function Search(props) {
|
|
24
25
|
const tableMeta = table.options.meta;
|
25
26
|
const [query, setQuery] = React__default.useState(tableMeta.search.query);
|
26
27
|
const [loading, setLoading] = React__default.useState(LoadingState.Incomplete);
|
28
|
+
const [rowIdToNavigate, setRowIdToNavigate] = React__default.useState(null);
|
27
29
|
const scrollTo = rowIndex => scrollToIndex(rowIndex, {
|
28
30
|
align: 'center'
|
29
31
|
});
|
@@ -35,6 +37,12 @@ function Search(props) {
|
|
35
37
|
scrollTo(firstRowIndex);
|
36
38
|
}
|
37
39
|
}, [tableMeta.search.query, tableMeta.search.excludeUnmatchedResults, table.getRowModel().rows.length, JSON.stringify(table.getState().sorting), JSON.stringify(table.getState().columnVisibility), loading]);
|
40
|
+
// Reseting internal search state if search.query is changed from the outside.
|
41
|
+
React__default.useEffect(() => {
|
42
|
+
if (tableMeta.search.query !== query) {
|
43
|
+
setQuery(tableMeta.search.query);
|
44
|
+
}
|
45
|
+
}, [tableMeta.search.query]);
|
38
46
|
// update the table search and filtering on a debounce
|
39
47
|
useDebouncedEffect(() => {
|
40
48
|
tableMeta.search.setQuery(query);
|
@@ -48,6 +56,9 @@ function Search(props) {
|
|
48
56
|
}, [query]);
|
49
57
|
const handleFocus = function () {
|
50
58
|
try {
|
59
|
+
// While Search input is focused, we'll switch into searching mode
|
60
|
+
tableMeta.search.setIsSearching(true);
|
61
|
+
// load all data if that is possible
|
51
62
|
const _temp = function () {
|
52
63
|
if (tableMeta.search.loadAll && loading === LoadingState.Incomplete) {
|
53
64
|
setLoading(LoadingState.Loading);
|
@@ -57,15 +68,48 @@ function Search(props) {
|
|
57
68
|
});
|
58
69
|
}
|
59
70
|
}();
|
60
|
-
// load all data if that is possible
|
61
71
|
return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
|
62
72
|
} catch (e) {
|
63
73
|
return Promise.reject(e);
|
64
74
|
}
|
65
75
|
};
|
76
|
+
const handleBlur = () => {
|
77
|
+
// As soon as search input loose a focus, we'll turn of searching mode.
|
78
|
+
tableMeta.search.setIsSearching(false);
|
79
|
+
};
|
66
80
|
const handleChange = query => {
|
67
81
|
setQuery(String(query !== null && query !== void 0 ? query : ''));
|
68
82
|
};
|
83
|
+
const handleClear = () => {
|
84
|
+
var _rows$rowIndex;
|
85
|
+
const [rowIndex, cellIndex] = tableMeta.search.highlightedColumnIndexes[tableMeta.search.currentHighlightColumnIndex || 0];
|
86
|
+
const rows = table.getRowModel().rows;
|
87
|
+
const rowId = ((_rows$rowIndex = rows[rowIndex]) === null || _rows$rowIndex === void 0 ? void 0 : _rows$rowIndex.id) || null;
|
88
|
+
tableMeta.search.setQuery('');
|
89
|
+
// Need to save row id and cell index, to be able to find the row in the table with updated indexes, after global filter will be reset.
|
90
|
+
lastCellIndex.value = String(cellIndex);
|
91
|
+
setRowIdToNavigate(rowId);
|
92
|
+
};
|
93
|
+
const handleKeyDown = event => {
|
94
|
+
if (event.key === 'Escape') {
|
95
|
+
handleClear();
|
96
|
+
event.preventDefault();
|
97
|
+
}
|
98
|
+
};
|
99
|
+
const {
|
100
|
+
globalFilter
|
101
|
+
} = table.getState();
|
102
|
+
React__default.useEffect(() => {
|
103
|
+
// need to wait when table global filter will be reset and rows will be re-rendered
|
104
|
+
if (rowIdToNavigate !== null && !globalFilter) {
|
105
|
+
const rows = table.getRowModel().rows;
|
106
|
+
const rowIndex = rows.findIndex(row => row.id === rowIdToNavigate);
|
107
|
+
tableMeta.search.setIsSearching(false);
|
108
|
+
tableMeta.currentRow.setCurrentRowIndex(rowIndex);
|
109
|
+
scrollTo(rowIndex);
|
110
|
+
setRowIdToNavigate(null);
|
111
|
+
}
|
112
|
+
}, [rowIdToNavigate, globalFilter]);
|
69
113
|
const handleToggleExcludeUnmatchedResults = enabled => {
|
70
114
|
tableMeta.search.toggleExcludeUnmatchedResults(enabled);
|
71
115
|
if (enabled) {
|
@@ -115,6 +159,9 @@ function Search(props) {
|
|
115
159
|
onClickFindNext: handleNextResult,
|
116
160
|
onChange: handleChange,
|
117
161
|
onFocus: handleFocus,
|
162
|
+
onBlur: handleBlur,
|
163
|
+
onKeyDown: handleKeyDown,
|
164
|
+
onClear: handleClear,
|
118
165
|
placeholder: texts.table3.search.placeholder,
|
119
166
|
settingsContent: settings,
|
120
167
|
ref: ref,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Search.js","sources":["../../../../../../../../../src/components/Table3/components/toolbar/Search.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as RTable, TableMeta } from '@tanstack/react-table';\nimport { useLocalization } from '../../../Provider/Localization';\nimport { Switch } from '../../../Switch/Switch';\nimport { globalFilterFn } from '../../util/filtering';\nimport { SearchInput2 } from '../../../SearchInput2/SearchInput2';\nimport { useDebouncedEffect } from '../../../../hooks/useDebouncedEffect';\nimport { getCellValueAsString } from '../../util/columns';\n\ntype SearchProps<TType = unknown> = {\n scrollToIndex: any;\n table: RTable<TType>;\n};\n\nenum LoadingState {\n Incomplete,\n Loading,\n Completed,\n}\n\nexport function Search<TType = unknown>(props: SearchProps<TType>) {\n const { scrollToIndex, table } = props;\n const { texts } = useLocalization();\n const ref = React.useRef<HTMLInputElement>(null);\n const tableMeta = table.options.meta as TableMeta<TType>;\n const [query, setQuery] = React.useState(tableMeta.search.query);\n const [loading, setLoading] = React.useState<LoadingState>(LoadingState.Incomplete);\n\n const scrollTo = (rowIndex: number) => scrollToIndex(rowIndex, { align: 'center' });\n\n // update the indexes if the row length changes (e.g. when filtering)\n React.useEffect(() => {\n const firstRowIndex = resetHighlightedColumnIndexes(tableMeta.search.isHighlightingEnabled, ref.current?.value, table);\n\n if (firstRowIndex) {\n scrollTo(firstRowIndex);\n }\n }, [\n tableMeta.search.query,\n tableMeta.search.excludeUnmatchedResults,\n table.getRowModel().rows.length,\n JSON.stringify(table.getState().sorting),\n JSON.stringify(table.getState().columnVisibility),\n loading,\n ]);\n\n // update the table search and filtering on a debounce\n useDebouncedEffect(() => {\n tableMeta.search.setQuery(query);\n\n if (tableMeta.search.excludeUnmatchedResults) {\n if (query?.length) {\n table.setGlobalFilter(query);\n } else {\n table.resetGlobalFilter();\n }\n }\n }, [query]);\n\n const handleFocus = async () => {\n // load all data if that is possible\n if (tableMeta.search.loadAll && loading === LoadingState.Incomplete) {\n setLoading(LoadingState.Loading);\n // don't pass the search query because we need all data - not filtered data\n await tableMeta.search.loadAll(table.getState().sorting, table.getState().columnFilters, undefined);\n setLoading(LoadingState.Completed);\n }\n };\n\n const handleChange = (query: any) => {\n setQuery(String(query ?? ''));\n };\n\n const handleToggleExcludeUnmatchedResults = (enabled: boolean) => {\n tableMeta.search.toggleExcludeUnmatchedResults(enabled);\n\n if (enabled) {\n if (ref.current?.value) {\n table.setGlobalFilter(ref.current?.value);\n } else {\n table.resetGlobalFilter();\n }\n } else {\n table.resetGlobalFilter();\n }\n\n requestAnimationFrame(() => ref.current?.focus());\n };\n\n const handleNextResult = () => {\n if (!tableMeta.search.highlightedColumnIndexes.length) {\n return;\n }\n\n const nextIndex =\n tableMeta.search.currentHighlightColumnIndex === undefined ||\n tableMeta.search.currentHighlightColumnIndex === tableMeta.search.highlightedColumnIndexes.length - 1\n ? 0\n : tableMeta.search.currentHighlightColumnIndex + 1;\n\n tableMeta.search.setCurrentHighlightColumnIndex(nextIndex);\n // we scroll to the row here, the cell scrolls itself into view\n scrollTo(tableMeta.search.highlightedColumnIndexes[nextIndex][0]);\n };\n\n const handlePreviousResult = () => {\n if (!tableMeta.search.highlightedColumnIndexes.length) {\n return;\n }\n\n const nextIndex =\n tableMeta.search.currentHighlightColumnIndex === undefined\n ? 0\n : tableMeta.search.currentHighlightColumnIndex === 0\n ? tableMeta.search.highlightedColumnIndexes.length - 1\n : tableMeta.search.currentHighlightColumnIndex - 1;\n\n tableMeta.search.setCurrentHighlightColumnIndex(nextIndex);\n // we scroll to the row here, the cell scrolls itself into view\n scrollTo(tableMeta.search.highlightedColumnIndexes[nextIndex][0]);\n };\n\n const settings = (\n <Switch\n label={texts.table3.search.excludeUnmatchedResults}\n checked={tableMeta.search.excludeUnmatchedResults}\n onChange={handleToggleExcludeUnmatchedResults}\n />\n );\n\n return (\n <>\n <SearchInput2\n findCurrent={\n tableMeta.search.currentHighlightColumnIndex !== undefined\n ? tableMeta.search.currentHighlightColumnIndex + 1\n : null\n }\n findTotal={tableMeta.search.highlightedColumnIndexes ? tableMeta.search.highlightedColumnIndexes.length : null}\n loading={loading === LoadingState.Loading}\n onClickFindPrevious={handlePreviousResult}\n onClickFindNext={handleNextResult}\n onChange={handleChange}\n onFocus={handleFocus}\n placeholder={texts.table3.search.placeholder}\n settingsContent={settings}\n ref={ref}\n shortcut={{ key: 'f', meta: true, shift: false }}\n value={query}\n />\n </>\n );\n}\n\nfunction resetHighlightedColumnIndexes<TType = unknown>(enabled: boolean, value: string | undefined, table: RTable<TType>) {\n const tableMeta = table.options.meta as TableMeta<TType>;\n let firstRowIndex: undefined | number;\n\n if (enabled && value) {\n const rowIndexes: number[] = [];\n const indexes: number[][] = [];\n const columns = table.getVisibleLeafColumns();\n\n table.getRowModel().rows.forEach((row, rowIndex) => {\n columns.forEach((column, columnIndex) => {\n try {\n if (column.getIsVisible() && column.columnDef.meta?.enableSearch) {\n const cellValue = getCellValueAsString(row.original?.[column.id], column.columnDef.meta?.dataType);\n\n if (cellValue !== undefined && globalFilterFn(cellValue, value)) {\n indexes.push([rowIndex, columnIndex]);\n }\n }\n } catch (e) {\n //\n }\n });\n\n if (indexes.length) {\n rowIndexes.push(rowIndex);\n }\n });\n\n tableMeta.search.setHighlightedColumnIndexes(indexes);\n\n if (indexes.length) {\n firstRowIndex = indexes[0][0];\n tableMeta.search.setCurrentHighlightColumnIndex(0);\n } else {\n tableMeta.search.setCurrentHighlightColumnIndex(undefined);\n }\n } else {\n tableMeta.search.setHighlightedColumnIndexes([]);\n tableMeta.search.setCurrentHighlightColumnIndex(undefined);\n }\n\n if (firstRowIndex !== undefined) {\n tableMeta.currentRow.setCurrentRowIndex(firstRowIndex);\n }\n\n return firstRowIndex;\n}\n"],"names":["LoadingState","Search","props","scrollToIndex","table","texts","useLocalization","ref","React","useRef","tableMeta","options","meta","query","setQuery","useState","search","loading","setLoading","Incomplete","scrollTo","rowIndex","align","useEffect","firstRowIndex","resetHighlightedColumnIndexes","isHighlightingEnabled","_ref$current","current","value","excludeUnmatchedResults","getRowModel","rows","length","JSON","stringify","getState","sorting","columnVisibility","useDebouncedEffect","setGlobalFilter","resetGlobalFilter","handleFocus","loadAll","Loading","Promise","resolve","columnFilters","undefined","then","Completed","_temp","e","reject","handleChange","String","handleToggleExcludeUnmatchedResults","enabled","toggleExcludeUnmatchedResults","_ref$current2","_ref$current3","requestAnimationFrame","_ref$current4","focus","handleNextResult","highlightedColumnIndexes","nextIndex","currentHighlightColumnIndex","setCurrentHighlightColumnIndex","handlePreviousResult","settings","Switch","label","table3","checked","onChange","SearchInput2","findCurrent","findTotal","onClickFindPrevious","onClickFindNext","onFocus","placeholder","settingsContent","shortcut","key","shift","indexes","columns","getVisibleLeafColumns","forEach","row","column","columnIndex","_column$columnDef$met","getIsVisible","columnDef","enableSearch","_row$original","_column$columnDef$met2","cellValue","getCellValueAsString","original","id","dataType","globalFilterFn","push","setHighlightedColumnIndexes","currentRow","setCurrentRowIndex"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"Search.js","sources":["../../../../../../../../../src/components/Table3/components/toolbar/Search.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as RTable, TableMeta } from '@tanstack/react-table';\nimport { useLocalization } from '../../../Provider/Localization';\nimport { Switch } from '../../../Switch/Switch';\nimport { globalFilterFn } from '../../util/filtering';\nimport { SearchInput2 } from '../../../SearchInput2/SearchInput2';\nimport { useDebouncedEffect } from '../../../../hooks/useDebouncedEffect';\nimport { getCellValueAsString } from '../../util/columns';\nimport { lastCellIndex } from '../rows/Row';\n\ntype SearchProps<TType = unknown> = {\n scrollToIndex: any;\n table: RTable<TType>;\n};\n\nenum LoadingState {\n Incomplete,\n Loading,\n Completed,\n}\n\nexport function Search<TType = unknown>(props: SearchProps<TType>) {\n const { scrollToIndex, table } = props;\n const { texts } = useLocalization();\n const ref = React.useRef<HTMLInputElement>(null);\n const tableMeta = table.options.meta as TableMeta<TType>;\n const [query, setQuery] = React.useState(tableMeta.search.query);\n const [loading, setLoading] = React.useState<LoadingState>(LoadingState.Incomplete);\n const [rowIdToNavigate, setRowIdToNavigate] = React.useState<string | null>(null);\n\n const scrollTo = (rowIndex: number) => scrollToIndex(rowIndex, { align: 'center' });\n\n // update the indexes if the row length changes (e.g. when filtering)\n React.useEffect(() => {\n const firstRowIndex = resetHighlightedColumnIndexes(tableMeta.search.isHighlightingEnabled, ref.current?.value, table);\n\n if (firstRowIndex) {\n scrollTo(firstRowIndex);\n }\n }, [\n tableMeta.search.query,\n tableMeta.search.excludeUnmatchedResults,\n table.getRowModel().rows.length,\n JSON.stringify(table.getState().sorting),\n JSON.stringify(table.getState().columnVisibility),\n loading,\n ]);\n\n // Reseting internal search state if search.query is changed from the outside.\n React.useEffect(() => {\n if (tableMeta.search.query !== query) {\n setQuery(tableMeta.search.query);\n }\n }, [tableMeta.search.query]);\n\n // update the table search and filtering on a debounce\n useDebouncedEffect(() => {\n tableMeta.search.setQuery(query);\n\n if (tableMeta.search.excludeUnmatchedResults) {\n if (query?.length) {\n table.setGlobalFilter(query);\n } else {\n table.resetGlobalFilter();\n }\n }\n }, [query]);\n\n const handleFocus = async () => {\n // While Search input is focused, we'll switch into searching mode\n tableMeta.search.setIsSearching(true);\n // load all data if that is possible\n if (tableMeta.search.loadAll && loading === LoadingState.Incomplete) {\n setLoading(LoadingState.Loading);\n // don't pass the search query because we need all data - not filtered data\n await tableMeta.search.loadAll(table.getState().sorting, table.getState().columnFilters, undefined);\n setLoading(LoadingState.Completed);\n }\n };\n\n const handleBlur = () => {\n // As soon as search input loose a focus, we'll turn of searching mode.\n tableMeta.search.setIsSearching(false);\n };\n\n const handleChange = (query: any) => {\n setQuery(String(query ?? ''));\n };\n\n const handleClear = () => {\n const [rowIndex, cellIndex] =\n tableMeta.search.highlightedColumnIndexes[tableMeta.search.currentHighlightColumnIndex || 0];\n const rows = table.getRowModel().rows;\n const rowId = rows[rowIndex]?.id || null;\n tableMeta.search.setQuery('');\n\n // Need to save row id and cell index, to be able to find the row in the table with updated indexes, after global filter will be reset.\n lastCellIndex.value = String(cellIndex);\n setRowIdToNavigate(rowId);\n };\n\n const handleKeyDown = event => {\n if (event.key === 'Escape') {\n handleClear();\n event.preventDefault();\n }\n };\n\n const { globalFilter } = table.getState();\n\n React.useEffect(() => {\n // need to wait when table global filter will be reset and rows will be re-rendered\n if (rowIdToNavigate !== null && !globalFilter) {\n const rows = table.getRowModel().rows;\n const rowIndex = rows.findIndex(row => row.id === rowIdToNavigate);\n tableMeta.search.setIsSearching(false);\n tableMeta.currentRow.setCurrentRowIndex(rowIndex);\n scrollTo(rowIndex);\n setRowIdToNavigate(null);\n }\n }, [rowIdToNavigate, globalFilter]);\n\n const handleToggleExcludeUnmatchedResults = (enabled: boolean) => {\n tableMeta.search.toggleExcludeUnmatchedResults(enabled);\n\n if (enabled) {\n if (ref.current?.value) {\n table.setGlobalFilter(ref.current?.value);\n } else {\n table.resetGlobalFilter();\n }\n } else {\n table.resetGlobalFilter();\n }\n\n requestAnimationFrame(() => ref.current?.focus());\n };\n\n const handleNextResult = () => {\n if (!tableMeta.search.highlightedColumnIndexes.length) {\n return;\n }\n\n const nextIndex =\n tableMeta.search.currentHighlightColumnIndex === undefined ||\n tableMeta.search.currentHighlightColumnIndex === tableMeta.search.highlightedColumnIndexes.length - 1\n ? 0\n : tableMeta.search.currentHighlightColumnIndex + 1;\n\n tableMeta.search.setCurrentHighlightColumnIndex(nextIndex);\n // we scroll to the row here, the cell scrolls itself into view\n scrollTo(tableMeta.search.highlightedColumnIndexes[nextIndex][0]);\n };\n\n const handlePreviousResult = () => {\n if (!tableMeta.search.highlightedColumnIndexes.length) {\n return;\n }\n\n const nextIndex =\n tableMeta.search.currentHighlightColumnIndex === undefined\n ? 0\n : tableMeta.search.currentHighlightColumnIndex === 0\n ? tableMeta.search.highlightedColumnIndexes.length - 1\n : tableMeta.search.currentHighlightColumnIndex - 1;\n\n tableMeta.search.setCurrentHighlightColumnIndex(nextIndex);\n // we scroll to the row here, the cell scrolls itself into view\n scrollTo(tableMeta.search.highlightedColumnIndexes[nextIndex][0]);\n };\n\n const settings = (\n <Switch\n label={texts.table3.search.excludeUnmatchedResults}\n checked={tableMeta.search.excludeUnmatchedResults}\n onChange={handleToggleExcludeUnmatchedResults}\n />\n );\n\n return (\n <>\n <SearchInput2\n findCurrent={\n tableMeta.search.currentHighlightColumnIndex !== undefined\n ? tableMeta.search.currentHighlightColumnIndex + 1\n : null\n }\n findTotal={tableMeta.search.highlightedColumnIndexes ? tableMeta.search.highlightedColumnIndexes.length : null}\n loading={loading === LoadingState.Loading}\n onClickFindPrevious={handlePreviousResult}\n onClickFindNext={handleNextResult}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onClear={handleClear}\n placeholder={texts.table3.search.placeholder}\n settingsContent={settings}\n ref={ref}\n shortcut={{ key: 'f', meta: true, shift: false }}\n value={query}\n />\n </>\n );\n}\n\nfunction resetHighlightedColumnIndexes<TType = unknown>(enabled: boolean, value: string | undefined, table: RTable<TType>) {\n const tableMeta = table.options.meta as TableMeta<TType>;\n let firstRowIndex: undefined | number;\n\n if (enabled && value) {\n const rowIndexes: number[] = [];\n const indexes: number[][] = [];\n const columns = table.getVisibleLeafColumns();\n\n table.getRowModel().rows.forEach((row, rowIndex) => {\n columns.forEach((column, columnIndex) => {\n try {\n if (column.getIsVisible() && column.columnDef.meta?.enableSearch) {\n const cellValue = getCellValueAsString(row.original?.[column.id], column.columnDef.meta?.dataType);\n\n if (cellValue !== undefined && globalFilterFn(cellValue, value)) {\n indexes.push([rowIndex, columnIndex]);\n }\n }\n } catch (e) {\n //\n }\n });\n\n if (indexes.length) {\n rowIndexes.push(rowIndex);\n }\n });\n\n tableMeta.search.setHighlightedColumnIndexes(indexes);\n\n if (indexes.length) {\n firstRowIndex = indexes[0][0];\n tableMeta.search.setCurrentHighlightColumnIndex(0);\n } else {\n tableMeta.search.setCurrentHighlightColumnIndex(undefined);\n }\n } else {\n tableMeta.search.setHighlightedColumnIndexes([]);\n tableMeta.search.setCurrentHighlightColumnIndex(undefined);\n }\n\n if (firstRowIndex !== undefined) {\n tableMeta.currentRow.setCurrentRowIndex(firstRowIndex);\n }\n\n return firstRowIndex;\n}\n"],"names":["LoadingState","Search","props","scrollToIndex","table","texts","useLocalization","ref","React","useRef","tableMeta","options","meta","query","setQuery","useState","search","loading","setLoading","Incomplete","rowIdToNavigate","setRowIdToNavigate","scrollTo","rowIndex","align","useEffect","firstRowIndex","resetHighlightedColumnIndexes","isHighlightingEnabled","_ref$current","current","value","excludeUnmatchedResults","getRowModel","rows","length","JSON","stringify","getState","sorting","columnVisibility","useDebouncedEffect","setGlobalFilter","resetGlobalFilter","handleFocus","setIsSearching","_temp","loadAll","Loading","Promise","resolve","columnFilters","undefined","then","Completed","e","reject","handleBlur","handleChange","String","handleClear","cellIndex","highlightedColumnIndexes","currentHighlightColumnIndex","rowId","_rows$rowIndex","id","lastCellIndex","handleKeyDown","event","key","preventDefault","globalFilter","findIndex","row","currentRow","setCurrentRowIndex","handleToggleExcludeUnmatchedResults","enabled","toggleExcludeUnmatchedResults","_ref$current2","_ref$current3","requestAnimationFrame","_ref$current4","focus","handleNextResult","nextIndex","setCurrentHighlightColumnIndex","handlePreviousResult","settings","Switch","label","table3","checked","onChange","SearchInput2","findCurrent","findTotal","onClickFindPrevious","onClickFindNext","onFocus","onBlur","onKeyDown","onClear","placeholder","settingsContent","shortcut","shift","indexes","columns","getVisibleLeafColumns","forEach","column","columnIndex","_column$columnDef$met","getIsVisible","columnDef","enableSearch","_row$original","_column$columnDef$met2","cellValue","getCellValueAsString","original","dataType","globalFilterFn","push","setHighlightedColumnIndexes"],"mappings":"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"}
|
@@ -1,57 +1,48 @@
|
|
1
1
|
import React__default from 'react';
|
2
2
|
import { shouldTriggerShortcut } from '../../../../utils/keyboard.js';
|
3
3
|
import _ from 'lodash-es';
|
4
|
+
import { lastCellIndex } from '../../components/rows/Row.js';
|
4
5
|
|
5
|
-
var
|
6
|
-
(function (
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
})(
|
11
|
-
function useEditing(isEnabled, onSave) {
|
6
|
+
var SavingStatusValue;
|
7
|
+
(function (SavingStatusValue) {
|
8
|
+
SavingStatusValue["Saving"] = "saving";
|
9
|
+
SavingStatusValue["Saved"] = "saved";
|
10
|
+
SavingStatusValue["Error"] = "error";
|
11
|
+
})(SavingStatusValue || (SavingStatusValue = {}));
|
12
|
+
function useEditing(isEnabled, validation, onSave) {
|
12
13
|
// used to switch the table into editing mode
|
13
14
|
const [isEditing, setIsEditing] = React__default.useState(false);
|
14
|
-
// Saving indicator need to show saving
|
15
|
+
// Saving indicator need to show saving status per row, saving status can have at least two states 'saving', 'saved',
|
15
16
|
// 'saved' should remain for a few seconds to show tick icon after row has been saved.
|
16
|
-
const [
|
17
|
+
const [savingStatuses, dispatchSavingStatusAction] = React__default.useReducer(savingStatusesReducer, null);
|
17
18
|
// sets of row changes pending save, either they have not saved yet or they have errors
|
18
|
-
const [
|
19
|
+
const [editingState, dispatchEditingAction] = React__default.useReducer((state, action) => editingReducer(state, action), null);
|
19
20
|
const [detailModeEditing, setDetailModeEditing] = React__default.useState(false);
|
20
21
|
function getCellValue(cell) {
|
21
|
-
var
|
22
|
-
return
|
22
|
+
var _editingState$cell$ro;
|
23
|
+
return editingState ? (_editingState$cell$ro = editingState[cell.row.id]) === null || _editingState$cell$ro === void 0 ? void 0 : _editingState$cell$ro[cell.column.id] : undefined;
|
23
24
|
}
|
24
25
|
// Saves editing cell value into editing state.
|
25
26
|
function setCellValue(cell, value) {
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
} else {
|
34
|
-
nextChanges[cell.row.id] = {
|
35
|
-
...cell.row.original,
|
36
|
-
[cell.column.id]: value
|
37
|
-
};
|
27
|
+
dispatchEditingAction({
|
28
|
+
type: EditingActionType.SET_CELL_VALUE,
|
29
|
+
payload: {
|
30
|
+
rowId: cell.row.id,
|
31
|
+
cellId: cell.column.id,
|
32
|
+
value,
|
33
|
+
originalValues: cell.row.original
|
38
34
|
}
|
39
|
-
return nextChanges;
|
40
35
|
});
|
41
36
|
}
|
42
37
|
// Removes changes from editing state by row id
|
43
38
|
function resetChange(rowId) {
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
}
|
50
|
-
|
51
|
-
if (changeset.length === 0) {
|
52
|
-
currentChanges = null;
|
53
|
-
}
|
54
|
-
setChanges(currentChanges);
|
39
|
+
dispatchEditingAction({
|
40
|
+
type: EditingActionType.RESET_CHANGE,
|
41
|
+
payload: {
|
42
|
+
rowId
|
43
|
+
}
|
44
|
+
});
|
45
|
+
validation.resetErrors(rowId);
|
55
46
|
}
|
56
47
|
const handleKeyDown = React__default.useCallback(event => {
|
57
48
|
if (event.defaultPrevented) {
|
@@ -78,71 +69,93 @@ function useEditing(isEnabled, onSave) {
|
|
78
69
|
saveChangesIfNeeded();
|
79
70
|
}
|
80
71
|
}, []);
|
81
|
-
// Creates initial saving
|
82
|
-
const
|
83
|
-
const changeset = Object.keys(
|
84
|
-
const
|
72
|
+
// Creates initial saving statuses from changes object
|
73
|
+
const addSavingStatuses = () => {
|
74
|
+
const changeset = Object.keys(editingState || {});
|
75
|
+
const additionalSavingStatuses = _.reduce(changeset, (result, rowId) => {
|
85
76
|
return {
|
86
77
|
...result,
|
87
|
-
[
|
88
|
-
state: SavingStateValue.Saving
|
89
|
-
}
|
78
|
+
[rowId]: SavingStatusValue.Saving
|
90
79
|
};
|
91
80
|
}, {});
|
92
|
-
|
93
|
-
|
94
|
-
|
81
|
+
dispatchSavingStatusAction({
|
82
|
+
type: SavingStatusActionType.SET_SAVING_STATUSES,
|
83
|
+
payload: {
|
84
|
+
states: additionalSavingStatuses
|
85
|
+
}
|
95
86
|
});
|
96
87
|
};
|
97
|
-
//
|
98
|
-
const
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
88
|
+
// Resets/removes saving status by row id. Used in delayed saving indicator.
|
89
|
+
const resetSavingStatus = rowId => {
|
90
|
+
dispatchSavingStatusAction({
|
91
|
+
type: SavingStatusActionType.RESET_SAVING_STATUS,
|
92
|
+
payload: {
|
93
|
+
rowId
|
94
|
+
}
|
95
|
+
});
|
104
96
|
};
|
105
97
|
// Checks if we have changes, then saves them
|
106
98
|
const saveChangesIfNeeded = function () {
|
107
99
|
try {
|
108
|
-
if (!
|
100
|
+
if (!editingState) {
|
109
101
|
return Promise.resolve();
|
110
102
|
}
|
111
|
-
const changeset = Object.keys(
|
103
|
+
const changeset = Object.keys(editingState);
|
112
104
|
const _temp = function () {
|
113
105
|
if (onSave && changeset.length) {
|
114
|
-
|
115
|
-
return Promise.resolve(Promise.allSettled(changeset.map(rowId =>
|
116
|
-
|
117
|
-
const
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
106
|
+
addSavingStatuses();
|
107
|
+
return Promise.resolve(Promise.allSettled(changeset.map(rowId => {
|
108
|
+
const validationSavePromise = new Promise((resolve, reject) => {
|
109
|
+
const changedRow = editingState === null || editingState === void 0 ? void 0 : editingState[rowId];
|
110
|
+
if (changedRow) {
|
111
|
+
var _validation$validate;
|
112
|
+
(_validation$validate = validation.validate(rowId, changedRow)) === null || _validation$validate === void 0 ? void 0 : _validation$validate.then(() => {
|
113
|
+
const savePromise = onSave(changedRow);
|
114
|
+
savePromise.then(() => {
|
115
|
+
resolve();
|
116
|
+
}).catch(reason => {
|
117
|
+
if (reason.errors) {
|
118
|
+
validation.setRowErrors(rowId, reason.errors);
|
119
|
+
}
|
120
|
+
reject(reason);
|
121
|
+
});
|
122
|
+
}).catch(() => {
|
123
|
+
validation.confirmErrors(rowId);
|
124
|
+
dispatchSavingStatusAction({
|
125
|
+
type: SavingStatusActionType.SET_SAVING_STATUS,
|
126
|
+
payload: {
|
127
|
+
rowId,
|
128
|
+
state: SavingStatusValue.Error
|
129
|
+
}
|
130
|
+
});
|
131
|
+
reject();
|
132
|
+
});
|
133
|
+
} else {
|
134
|
+
reject();
|
135
|
+
}
|
127
136
|
});
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
137
|
+
return validationSavePromise;
|
138
|
+
}))).then(function (responses) {
|
139
|
+
responses.forEach((response, index) => {
|
140
|
+
const rowId = changeset[index];
|
141
|
+
if (response.status === 'fulfilled') {
|
142
|
+
resetChange(rowId);
|
143
|
+
dispatchSavingStatusAction({
|
144
|
+
type: SavingStatusActionType.SET_SAVING_STATUS,
|
145
|
+
payload: {
|
146
|
+
rowId,
|
147
|
+
state: SavingStatusValue.Saved
|
148
|
+
}
|
149
|
+
});
|
150
|
+
} else {
|
151
|
+
dispatchSavingStatusAction({
|
152
|
+
type: SavingStatusActionType.SET_SAVING_STATUS,
|
153
|
+
payload: {
|
154
|
+
rowId,
|
155
|
+
state: SavingStatusValue.Error
|
156
|
+
}
|
157
|
+
});
|
158
|
+
}
|
146
159
|
});
|
147
160
|
});
|
148
161
|
}
|
@@ -152,34 +165,37 @@ function useEditing(isEnabled, onSave) {
|
|
152
165
|
return Promise.reject(e);
|
153
166
|
}
|
154
167
|
};
|
155
|
-
const [rowMoveReason, setRowMoveReason] = React__default.useState(
|
156
|
-
const removeRowMoveReason =
|
157
|
-
setRowMoveReason(
|
158
|
-
const newState = {
|
159
|
-
...prevState
|
160
|
-
};
|
161
|
-
delete newState[columnId];
|
162
|
-
return newState;
|
163
|
-
});
|
168
|
+
const [rowMoveReason, setRowMoveReason] = React__default.useState(null);
|
169
|
+
const removeRowMoveReason = () => {
|
170
|
+
setRowMoveReason(null);
|
164
171
|
};
|
165
172
|
const showWarning = React__default.useCallback(event => {
|
166
|
-
if (isEditing &&
|
173
|
+
if (isEditing && editingState && Object.keys(editingState).length > 0) {
|
167
174
|
event.returnValue = true;
|
168
175
|
return true;
|
169
176
|
}
|
170
177
|
return false;
|
171
|
-
}, [isEditing,
|
178
|
+
}, [isEditing, editingState]);
|
179
|
+
function getSavingStatus(rowId) {
|
180
|
+
return savingStatuses && savingStatuses[rowId];
|
181
|
+
}
|
172
182
|
React__default.useEffect(() => {
|
173
183
|
window.addEventListener('beforeunload', showWarning);
|
174
184
|
return () => {
|
175
185
|
window.removeEventListener('beforeunload', showWarning);
|
176
186
|
};
|
177
187
|
}, [showWarning]);
|
188
|
+
React__default.useEffect(() => {
|
189
|
+
if (!isEditing) {
|
190
|
+
setDetailModeEditing(false);
|
191
|
+
lastCellIndex.value = null;
|
192
|
+
}
|
193
|
+
}, [isEditing]);
|
178
194
|
return {
|
179
195
|
isEnabled,
|
180
196
|
isEditing,
|
181
197
|
toggleEditing: setIsEditing,
|
182
|
-
changes,
|
198
|
+
changes: editingState,
|
183
199
|
getCellValue,
|
184
200
|
setCellValue,
|
185
201
|
saveChangesIfNeeded,
|
@@ -191,10 +207,78 @@ function useEditing(isEnabled, onSave) {
|
|
191
207
|
handleKeyDown,
|
192
208
|
handleBlur,
|
193
209
|
resetChange,
|
194
|
-
|
195
|
-
|
210
|
+
getSavingStatus,
|
211
|
+
resetSavingStatus
|
196
212
|
};
|
197
213
|
}
|
214
|
+
var EditingActionType;
|
215
|
+
(function (EditingActionType) {
|
216
|
+
EditingActionType[EditingActionType["SET_CELL_VALUE"] = 0] = "SET_CELL_VALUE";
|
217
|
+
EditingActionType[EditingActionType["RESET_CHANGE"] = 1] = "RESET_CHANGE";
|
218
|
+
})(EditingActionType || (EditingActionType = {}));
|
219
|
+
function editingReducer(state, action) {
|
220
|
+
switch (action.type) {
|
221
|
+
// Set cell value of the row
|
222
|
+
case EditingActionType.SET_CELL_VALUE:
|
223
|
+
return {
|
224
|
+
...state,
|
225
|
+
[action.payload.rowId]: {
|
226
|
+
...((state === null || state === void 0 ? void 0 : state[action.payload.rowId]) || action.payload.originalValues),
|
227
|
+
[action.payload.cellId]: action.payload.value
|
228
|
+
}
|
229
|
+
};
|
230
|
+
// Reset changes for the row
|
231
|
+
case EditingActionType.RESET_CHANGE:
|
232
|
+
{
|
233
|
+
let currentChanges = {
|
234
|
+
...state
|
235
|
+
};
|
236
|
+
if (currentChanges) {
|
237
|
+
delete currentChanges[action.payload.rowId];
|
238
|
+
}
|
239
|
+
const changeset = Object.keys(currentChanges);
|
240
|
+
if (changeset.length === 0) {
|
241
|
+
currentChanges = null;
|
242
|
+
}
|
243
|
+
return currentChanges;
|
244
|
+
}
|
245
|
+
default:
|
246
|
+
return state;
|
247
|
+
}
|
248
|
+
}
|
249
|
+
var SavingStatusActionType;
|
250
|
+
(function (SavingStatusActionType) {
|
251
|
+
SavingStatusActionType[SavingStatusActionType["SET_SAVING_STATUS"] = 0] = "SET_SAVING_STATUS";
|
252
|
+
SavingStatusActionType[SavingStatusActionType["SET_SAVING_STATUSES"] = 1] = "SET_SAVING_STATUSES";
|
253
|
+
SavingStatusActionType[SavingStatusActionType["RESET_SAVING_STATUS"] = 2] = "RESET_SAVING_STATUS";
|
254
|
+
})(SavingStatusActionType || (SavingStatusActionType = {}));
|
255
|
+
function savingStatusesReducer(state, action) {
|
256
|
+
switch (action.type) {
|
257
|
+
// Set single saving status for the row
|
258
|
+
case SavingStatusActionType.SET_SAVING_STATUS:
|
259
|
+
return {
|
260
|
+
...state,
|
261
|
+
[action.payload.rowId]: action.payload.state
|
262
|
+
};
|
263
|
+
// Set multiple saving statuses for multiple rows at the same time
|
264
|
+
case SavingStatusActionType.SET_SAVING_STATUSES:
|
265
|
+
return {
|
266
|
+
...state,
|
267
|
+
...action.payload.states
|
268
|
+
};
|
269
|
+
// Reset/remove saving status for particular row
|
270
|
+
case SavingStatusActionType.RESET_SAVING_STATUS:
|
271
|
+
{
|
272
|
+
const newSavingStatus = {
|
273
|
+
...state
|
274
|
+
};
|
275
|
+
newSavingStatus === null || newSavingStatus === void 0 ? true : delete newSavingStatus[action.payload.rowId];
|
276
|
+
return newSavingStatus;
|
277
|
+
}
|
278
|
+
default:
|
279
|
+
return state;
|
280
|
+
}
|
281
|
+
}
|
198
282
|
|
199
|
-
export {
|
283
|
+
export { SavingStatusValue, useEditing };
|
200
284
|
//# sourceMappingURL=useEditing.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useEditing.js","sources":["../../../../../../../../../src/components/Table3/hooks/features/useEditing.tsx"],"sourcesContent":["import React from 'react';\nimport _ from 'lodash';\nimport { Cell as RTCell } from '@tanstack/react-table';\n\nimport { IndicatorReason } from '../../components/columns/cell/Indicator';\nimport { shouldTriggerShortcut } from '../../../../utils/keyboard';\n\nexport enum SavingStateValue {\n Saving = 'saving',\n Saved = 'saved',\n Error = 'error',\n}\n\nexport type SavingState = {\n state: SavingStateValue;\n};\n\nexport function useEditing<TType = unknown>(isEnabled: boolean, onSave?: (row: TType) => void) {\n // used to switch the table into editing mode\n const [isEditing, setIsEditing] = React.useState(false);\n // Saving indicator need to show saving state per row, saving state can have at lkeast two states 'saving', 'saved',\n // 'saved' should remain for a few seconds to show tick icon after row has been saved.\n const [savingStates, setSavingStates] = React.useState<Record<string, SavingState> | null>(null);\n\n // sets of row changes pending save, either they have not saved yet or they have errors\n const [changes, setChanges] = React.useState<Record<string, TType> | null>(null);\n\n const [detailModeEditing, setDetailModeEditing] = React.useState(false);\n\n function getCellValue<T extends TType>(cell: RTCell<T, unknown>) {\n return changes ? changes[cell.row.id]?.[cell.column.id] : undefined;\n }\n\n // Saves editing cell value into editing state.\n function setCellValue<T extends TType>(cell: RTCell<T, unknown>, value: unknown) {\n setChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n\n if (nextChanges[cell.row.id]) {\n nextChanges[cell.row.id][cell.column.id] = value;\n // we should probably delete the cell if it has just reverted back to its original value\n } else {\n nextChanges[cell.row.id] = { ...cell.row.original, [cell.column.id]: value };\n }\n\n return nextChanges;\n });\n }\n\n // Removes changes from editing state by row id\n function resetChange(rowId: string) {\n let currentChanges: Record<string, TType> | null = changes ? { ...changes } : {};\n if (currentChanges) {\n delete currentChanges[rowId];\n }\n const changeset = Object.keys(currentChanges);\n if (changeset.length === 0) {\n currentChanges = null;\n }\n\n setChanges(currentChanges);\n }\n\n const handleKeyDown = React.useCallback(\n (event: KeyboardEvent) => {\n if (event.defaultPrevented) {\n return;\n }\n\n if (shouldTriggerShortcut(event, { key: 'e', meta: true, shift: false })) {\n setIsEditing(editing => !editing);\n } else if (shouldTriggerShortcut(event, { key: 's', meta: true, shift: false })) {\n // Prevent default browser save\n event.preventDefault();\n saveChangesIfNeeded();\n }\n },\n [isEditing]\n );\n\n const handleBlur = React.useCallback((event: React.FocusEvent) => {\n if (event.target === event.currentTarget) {\n saveChangesIfNeeded();\n }\n }, []);\n\n // Creates initial saving states from changes object\n const addSavingStates = () => {\n const changeset = Object.keys(changes || {});\n const additionalSavingStates = _.reduce(\n changeset,\n (result, value) => {\n return { ...result, [value]: { state: SavingStateValue.Saving } };\n },\n {}\n );\n setSavingStates({ ...savingStates, ...additionalSavingStates });\n };\n\n // Repoves edititng state by row is. Used in delayed saving indicator.\n const removeSavingState = (rowId: string) => {\n const newSavingStates = { ...savingStates };\n delete newSavingStates[rowId];\n setSavingStates(newSavingStates);\n };\n\n // Checks if we have changes, then saves them\n const saveChangesIfNeeded = async () => {\n if (!changes) {\n return;\n }\n\n const changeset = Object.keys(changes);\n if (onSave && changeset.length) {\n addSavingStates();\n\n const responses = await Promise.allSettled(changeset.map(rowId => onSave(changes[rowId])));\n\n setChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n\n responses.forEach((response, index) => {\n const rowId = changeset[index];\n\n if (response.status === 'fulfilled') {\n delete nextChanges[rowId];\n }\n });\n\n return nextChanges;\n });\n\n setSavingStates(savingStates => {\n const nextSavingStates = savingStates ? { ...savingStates } : {};\n responses.forEach((response, index) => {\n const rowId = changeset[index];\n\n if (response.status === 'fulfilled') {\n nextSavingStates[rowId] = { state: SavingStateValue.Saved };\n } else {\n // add the error when validation is added\n nextSavingStates[rowId] = { state: SavingStateValue.Error };\n }\n });\n return nextSavingStates;\n });\n }\n };\n\n const [rowMoveReason, setRowMoveReason] = React.useState<Record<string, IndicatorReason | null>>({});\n\n const removeRowMoveReason = (columnId: string) => {\n setRowMoveReason(prevState => {\n const newState = { ...prevState };\n delete newState[columnId];\n\n return newState;\n });\n };\n\n const showWarning = React.useCallback(\n event => {\n if (isEditing && changes && Object.keys(changes).length > 0) {\n event.returnValue = true;\n return true;\n }\n\n return false;\n },\n [isEditing, changes]\n );\n\n React.useEffect(() => {\n window.addEventListener('beforeunload', showWarning);\n\n return () => {\n window.removeEventListener('beforeunload', showWarning);\n };\n }, [showWarning]);\n\n return {\n isEnabled,\n isEditing,\n toggleEditing: setIsEditing,\n changes,\n getCellValue,\n setCellValue,\n saveChangesIfNeeded,\n detailModeEditing,\n setDetailModeEditing,\n rowMoveReason,\n setRowMoveReason,\n removeRowMoveReason,\n handleKeyDown,\n handleBlur,\n resetChange,\n savingStates,\n removeSavingState,\n };\n}\n"],"names":["SavingStateValue","useEditing","isEnabled","onSave","isEditing","setIsEditing","React","useState","savingStates","setSavingStates","changes","setChanges","detailModeEditing","setDetailModeEditing","getCellValue","cell","_changes$cell$row$id","row","id","column","undefined","setCellValue","value","currentChanges","nextChanges","original","resetChange","rowId","changeset","Object","keys","length","handleKeyDown","useCallback","event","defaultPrevented","shouldTriggerShortcut","key","meta","shift","editing","preventDefault","saveChangesIfNeeded","handleBlur","target","currentTarget","addSavingStates","additionalSavingStates","_","reduce","result","state","Saving","removeSavingState","newSavingStates","Promise","resolve","_temp","allSettled","map","then","responses","forEach","response","index","status","nextSavingStates","Saved","Error","e","reject","rowMoveReason","setRowMoveReason","removeRowMoveReason","columnId","prevState","newState","showWarning","returnValue","useEffect","window","addEventListener","removeEventListener","toggleEditing"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"useEditing.js","sources":["../../../../../../../../../src/components/Table3/hooks/features/useEditing.tsx"],"sourcesContent":["import React from 'react';\nimport _ from 'lodash';\nimport { Cell as RTCell } from '@tanstack/react-table';\n\nimport { Table3SaveHandler } from '../../types';\nimport { IndicatorReason } from '../../components/columns/cell/Indicator';\nimport { shouldTriggerShortcut } from '../../../../utils/keyboard';\nimport { Table3Validation } from './useValidation';\nimport { lastCellIndex } from '../../components/rows/Row';\n\nexport enum SavingStatusValue {\n Saving = 'saving',\n Saved = 'saved',\n Error = 'error',\n}\n\nexport function useEditing<TType = unknown>(\n isEnabled: boolean,\n validation: Table3Validation<TType>,\n onSave?: Table3SaveHandler<TType>\n) {\n // used to switch the table into editing mode\n const [isEditing, setIsEditing] = React.useState(false);\n // Saving indicator need to show saving status per row, saving status can have at least two states 'saving', 'saved',\n // 'saved' should remain for a few seconds to show tick icon after row has been saved.\n const [savingStatuses, dispatchSavingStatusAction] = React.useReducer(savingStatusesReducer, null);\n\n // sets of row changes pending save, either they have not saved yet or they have errors\n const [editingState, dispatchEditingAction] = React.useReducer((state: EditingState<TType>, action) => editingReducer<TType>(state, action), null);\n\n const [detailModeEditing, setDetailModeEditing] = React.useState(false);\n\n function getCellValue<T extends TType>(cell: RTCell<T, unknown>) {\n return editingState ? editingState[cell.row.id]?.[cell.column.id] : undefined;\n }\n\n // Saves editing cell value into editing state.\n function setCellValue<T extends TType>(cell: RTCell<T, unknown>, value: unknown) {\n dispatchEditingAction({\n type: EditingActionType.SET_CELL_VALUE,\n payload: { rowId: cell.row.id, cellId: cell.column.id, value, originalValues: cell.row.original },\n });\n }\n\n // Removes changes from editing state by row id\n function resetChange(rowId: string) {\n dispatchEditingAction({\n type: EditingActionType.RESET_CHANGE,\n payload: { rowId },\n });\n validation.resetErrors(rowId);\n }\n\n const handleKeyDown = React.useCallback(\n (event: KeyboardEvent) => {\n if (event.defaultPrevented) {\n return;\n }\n\n if (shouldTriggerShortcut(event, { key: 'e', meta: true, shift: false })) {\n setIsEditing(editing => !editing);\n } else if (shouldTriggerShortcut(event, { key: 's', meta: true, shift: false })) {\n // Prevent default browser save\n event.preventDefault();\n saveChangesIfNeeded();\n }\n },\n [isEditing]\n );\n\n const handleBlur = React.useCallback((event: React.FocusEvent) => {\n if (event.target === event.currentTarget) {\n saveChangesIfNeeded();\n }\n }, []);\n\n // Creates initial saving statuses from changes object\n const addSavingStatuses = () => {\n const changeset = Object.keys(editingState || {});\n const additionalSavingStatuses = _.reduce(\n changeset,\n (result, rowId) => {\n return { ...result, [rowId]: SavingStatusValue.Saving };\n },\n {}\n );\n dispatchSavingStatusAction({\n type: SavingStatusActionType.SET_SAVING_STATUSES,\n payload: { states: additionalSavingStatuses },\n });\n };\n\n // Resets/removes saving status by row id. Used in delayed saving indicator.\n const resetSavingStatus = (rowId: string) => {\n dispatchSavingStatusAction({\n type: SavingStatusActionType.RESET_SAVING_STATUS,\n payload: { rowId },\n });\n };\n\n // Checks if we have changes, then saves them\n const saveChangesIfNeeded = async () => {\n if (!editingState) {\n return;\n }\n\n const changeset = Object.keys(editingState);\n if (onSave && changeset.length) {\n addSavingStatuses();\n\n const responses = await Promise.allSettled(\n changeset.map(rowId => {\n const validationSavePromise = new Promise<void>((resolve, reject) => {\n const changedRow = editingState?.[rowId];\n if (changedRow) {\n validation\n .validate(rowId, changedRow)\n ?.then(() => {\n const savePromise = onSave(changedRow);\n savePromise\n .then(() => {\n resolve();\n })\n .catch(reason => {\n if (reason.errors) {\n validation.setRowErrors(rowId, reason.errors);\n }\n\n reject(reason);\n });\n })\n .catch(() => {\n validation.confirmErrors(rowId);\n dispatchSavingStatusAction({\n type: SavingStatusActionType.SET_SAVING_STATUS,\n payload: { rowId, state: SavingStatusValue.Error },\n });\n reject();\n });\n } else {\n reject();\n }\n });\n return validationSavePromise;\n })\n );\n\n responses.forEach((response, index) => {\n const rowId = changeset[index];\n\n if (response.status === 'fulfilled') {\n resetChange(rowId);\n dispatchSavingStatusAction({\n type: SavingStatusActionType.SET_SAVING_STATUS,\n payload: { rowId, state: SavingStatusValue.Saved },\n });\n } else {\n dispatchSavingStatusAction({\n type: SavingStatusActionType.SET_SAVING_STATUS,\n payload: { rowId, state: SavingStatusValue.Error },\n });\n }\n });\n }\n };\n\n const [rowMoveReason, setRowMoveReason] = React.useState<Record<string, IndicatorReason | null> | null>(null);\n\n const removeRowMoveReason = () => {\n setRowMoveReason(null);\n };\n\n const showWarning = React.useCallback(\n event => {\n if (isEditing && editingState && Object.keys(editingState).length > 0) {\n event.returnValue = true;\n return true;\n }\n\n return false;\n },\n [isEditing, editingState]\n );\n\n function getSavingStatus(rowId: string) {\n return savingStatuses && savingStatuses[rowId];\n }\n\n React.useEffect(() => {\n window.addEventListener('beforeunload', showWarning);\n\n return () => {\n window.removeEventListener('beforeunload', showWarning);\n };\n }, [showWarning]);\n\n React.useEffect(() => {\n if (!isEditing) {\n setDetailModeEditing(false);\n lastCellIndex.value = null;\n }\n }, [isEditing]);\n\n return {\n isEnabled,\n isEditing,\n toggleEditing: setIsEditing,\n changes: editingState,\n getCellValue,\n setCellValue,\n saveChangesIfNeeded,\n detailModeEditing,\n setDetailModeEditing,\n rowMoveReason,\n setRowMoveReason,\n removeRowMoveReason,\n handleKeyDown,\n handleBlur,\n resetChange,\n getSavingStatus,\n resetSavingStatus,\n };\n}\n\nenum EditingActionType {\n SET_CELL_VALUE,\n RESET_CHANGE,\n}\n\ntype EditingState<TType = unknown> = Record<string, TType> | null;\n\ntype EditingAction =\n | { type: EditingActionType.SET_CELL_VALUE; payload: { rowId: string; cellId: string; value: unknown; originalValues } }\n | {\n type: EditingActionType.RESET_CHANGE;\n payload: { rowId: string };\n };\n\nfunction editingReducer<TType = unknown>(state: EditingState<TType>, action: EditingAction): EditingState<TType> {\n switch (action.type) {\n // Set cell value of the row\n case EditingActionType.SET_CELL_VALUE:\n return {\n ...state,\n [action.payload.rowId]: {\n ...(state?.[action.payload.rowId] || action.payload.originalValues),\n [action.payload.cellId]: action.payload.value,\n },\n };\n\n // Reset changes for the row\n case EditingActionType.RESET_CHANGE: {\n let currentChanges: Record<string, TType> | null = { ...state };\n if (currentChanges) {\n delete currentChanges[action.payload.rowId];\n }\n const changeset = Object.keys(currentChanges);\n if (changeset.length === 0) {\n currentChanges = null;\n }\n return currentChanges;\n }\n\n default:\n return state;\n }\n}\n\nenum SavingStatusActionType {\n SET_SAVING_STATUS,\n SET_SAVING_STATUSES,\n RESET_SAVING_STATUS,\n}\n\ntype SavingStatus = Record<string, SavingStatusValue> | null;\n\ntype SavingStatusAction =\n | { type: SavingStatusActionType.SET_SAVING_STATUS; payload: { rowId: string; state: SavingStatusValue } }\n | { type: SavingStatusActionType.SET_SAVING_STATUSES; payload: { states: Record<string, SavingStatusValue> } }\n | { type: SavingStatusActionType.RESET_SAVING_STATUS; payload: { rowId: string } };\n\nfunction savingStatusesReducer(state: SavingStatus, action: SavingStatusAction): SavingStatus {\n switch (action.type) {\n // Set single saving status for the row\n case SavingStatusActionType.SET_SAVING_STATUS:\n return {\n ...state,\n [action.payload.rowId]: action.payload.state,\n };\n // Set multiple saving statuses for multiple rows at the same time\n case SavingStatusActionType.SET_SAVING_STATUSES:\n return {\n ...state,\n ...action.payload.states,\n };\n // Reset/remove saving status for particular row\n case SavingStatusActionType.RESET_SAVING_STATUS: {\n const newSavingStatus = { ...state };\n delete newSavingStatus?.[action.payload.rowId];\n return newSavingStatus;\n }\n\n default:\n return state;\n }\n}\n"],"names":["SavingStatusValue","useEditing","isEnabled","validation","onSave","isEditing","setIsEditing","React","useState","savingStatuses","dispatchSavingStatusAction","useReducer","savingStatusesReducer","editingState","dispatchEditingAction","state","action","editingReducer","detailModeEditing","setDetailModeEditing","getCellValue","cell","_editingState$cell$ro","row","id","column","undefined","setCellValue","value","type","EditingActionType","SET_CELL_VALUE","payload","rowId","cellId","originalValues","original","resetChange","RESET_CHANGE","resetErrors","handleKeyDown","useCallback","event","defaultPrevented","shouldTriggerShortcut","key","meta","shift","editing","preventDefault","saveChangesIfNeeded","handleBlur","target","currentTarget","addSavingStatuses","changeset","Object","keys","additionalSavingStatuses","_","reduce","result","Saving","SavingStatusActionType","SET_SAVING_STATUSES","states","resetSavingStatus","RESET_SAVING_STATUS","Promise","resolve","_temp","length","allSettled","map","validationSavePromise","reject","changedRow","_validation$validate","validate","then","savePromise","catch","reason","errors","setRowErrors","confirmErrors","SET_SAVING_STATUS","Error","responses","forEach","response","index","status","Saved","e","rowMoveReason","setRowMoveReason","removeRowMoveReason","showWarning","returnValue","getSavingStatus","useEffect","window","addEventListener","removeEventListener","lastCellIndex","toggleEditing","changes","currentChanges","newSavingStatus"],"mappings":"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"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import React__default from 'react';
|
2
|
+
|
3
|
+
function usePauseShortcuts() {
|
4
|
+
const [isShortcutsPaused, setIsShortcutsPaused] = React__default.useState(false);
|
5
|
+
return {
|
6
|
+
isPaused: isShortcutsPaused,
|
7
|
+
pause: setIsShortcutsPaused
|
8
|
+
};
|
9
|
+
}
|
10
|
+
|
11
|
+
export { usePauseShortcuts };
|
12
|
+
//# sourceMappingURL=usePauseShortcuts.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"usePauseShortcuts.js","sources":["../../../../../../../../../src/components/Table3/hooks/features/usePauseShortcuts.ts"],"sourcesContent":["import React from 'react';\n\nexport function usePauseShortcuts() {\n const [isShortcutsPaused, setIsShortcutsPaused] = React.useState(false);\n\n return {\n isPaused: isShortcutsPaused,\n pause: setIsShortcutsPaused,\n };\n}\n"],"names":["usePauseShortcuts","isShortcutsPaused","setIsShortcutsPaused","React","useState","isPaused","pause"],"mappings":";;SAEgBA,iBAAiBA;EAC7B,MAAM,CAACC,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGC,cAAK,CAACC,QAAQ,CAAC,KAAK,CAAC;EAEvE,OAAO;IACHC,QAAQ,EAAEJ,iBAAiB;IAC3BK,KAAK,EAAEJ;GACV;AACL;;;;"}
|