@economic/taco 2.33.0 → 2.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Table3/Table3.d.ts +3 -19
- package/dist/components/Table3/types.d.ts +2 -11
- package/dist/esm/index.css +4 -4
- package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js +4 -5
- package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Menu/components/Trigger.js +9 -7
- package/dist/esm/packages/taco/src/components/Menu/components/Trigger.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Select2/Select2.js +3 -1
- package/dist/esm/packages/taco/src/components/Select2/Select2.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +2 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js +3 -24
- package/dist/esm/packages/taco/src/components/Table3/components/Editing/Alert.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +0 -1
- package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js +1 -0
- package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/Body.js +21 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/Body.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/components/Filter.js +12 -3
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/components/Filter.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/components/FilterComparator.js +3 -47
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/components/FilterComparator.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/util.js +44 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/util.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/types.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js +5 -5
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js +1 -2
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +0 -9
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
- package/dist/esm/packages/taco/src/utils/dom.js +4 -1
- package/dist/esm/packages/taco/src/utils/dom.js.map +1 -1
- package/dist/index.css +4 -4
- package/dist/primitives/Table/Core/components/Body/Body.d.ts +2 -0
- package/dist/primitives/Table/Core/components/Toolbar/components/Filters/util.d.ts +2 -1
- package/dist/primitives/Table/types.d.ts +1 -1
- package/dist/primitives/Table/useTableManager/useTableManager.d.ts +1 -1
- package/dist/taco.cjs.development.js +102 -107
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/dist/utils/dom.d.ts +1 -0
- package/package.json +2 -2
|
@@ -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 { isWeakEqual as isWeakEqualDate } 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';\n\nexport function EditingControlCell<TType = unknown>(props: TableCellRendererProps<TType>) {\n const { cell, cellRef, isHighlighted, index } = props;\n const { rowIndex } = React.useContext(RowContext);\n const tableMeta = cell.getContext().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\n const handleFocus = useEditingCellAutofocus<TType>(props);\n\n const handleBlur = () => {\n tableMeta.editing.toggleDetailedMode(false);\n tableMeta.editing.validateCell(cell);\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 handleBlur();\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: (value: unknown) => tableMeta.editing.setCellValue(cell, value, rowIndex),\n row: cell.row.original,\n tabIndex: isActiveRow ? 0 : -1,\n toggleEditing: tableMeta.editing.toggleEditing,\n toggleDetailedMode: tableMeta.editing.toggleDetailedMode,\n type: columnMeta.control ?? 'input',\n value: cell.getValue(),\n };\n\n const cellAttributes = {\n ...getCellAttributes(cell, index, isHighlighted),\n 'data-cell-editing-invalid': error ? true : undefined,\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: () => void;\n onChange: (value: TValue) => void;\n row: TType;\n tabIndex?: number;\n toggleEditing: (editing: React.SetStateAction<boolean>) => void;\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 tabIndex = -1,\n toggleEditing,\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 return type(controlFnProps, row);\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 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 event.preventDefault();\n\n if (isDetailedMode) {\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 } else {\n toggleEditing(false);\n }\n\n return;\n }\n\n // toggle into detailed mode when actually inputting something\n if (/^[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 handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDate = (event as any).detail;\n\n if (!value || !newDate || (isDate(value) && isDate(newDate) && !isWeakEqualDate(value as Date, newDate as Date))) {\n props.onChange((event as any).detail);\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={value as Date}\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","rowIndex","React","useContext","RowContext","tableMeta","getContext","table","options","meta","columnMeta","column","columnDef","isActiveRow","rowActive","rowActiveIndex","handleFocus","useEditingCellAutofocus","handleBlur","editing","toggleDetailedMode","validateCell","useEffect","ref","current","document","activeElement","isElementInsideOrTriggeredFromContainer","error","getCellError","controlProps","dataType","fontSize","size","id","invalid","isDetailedMode","isTruncated","enableTruncate","onBlur","onChange","value","setCellValue","row","original","tabIndex","toggleEditing","type","_columnMeta$control","control","getValue","cellAttributes","getCellAttributes","undefined","onFocus","Field","message","MemoedEditingCell","RowMoveIndicator","memo","controlRef","useRef","currentValue","commonProps","controlFnProps","setValue","Switch","checked","Boolean","handleInputKeyDown","event","target","readOnly","key","stopPropagation","shiftKey","preventDefault","_target$select","select","call","_target$setSelectionR","_target$value","_target$value2","setSelectionRange","length","requestAnimationFrame","_target$select2","test","handleChange","newDate","detail","isDate","isWeakEqualDate","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 { isWeakEqual as isWeakEqualDate } 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';\n\nexport function EditingControlCell<TType = unknown>(props: TableCellRendererProps<TType>) {\n const { cell, cellRef, isHighlighted, index } = props;\n const { rowIndex } = React.useContext(RowContext);\n const tableMeta = cell.getContext().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\n const handleFocus = useEditingCellAutofocus<TType>(props);\n\n const handleBlur = () => {\n tableMeta.editing.toggleDetailedMode(false);\n tableMeta.editing.validateCell(cell);\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 handleBlur();\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: (value: unknown) => tableMeta.editing.setCellValue(cell, value, rowIndex),\n row: cell.row.original,\n tabIndex: isActiveRow ? 0 : -1,\n toggleEditing: tableMeta.editing.toggleEditing,\n toggleDetailedMode: tableMeta.editing.toggleDetailedMode,\n type: columnMeta.control ?? 'input',\n value: cell.getValue(),\n };\n\n const cellAttributes = {\n ...getCellAttributes(cell, index, isHighlighted),\n 'data-cell-editing-invalid': error ? true : undefined,\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: () => void;\n onChange: (value: TValue) => void;\n row: TType;\n tabIndex?: number;\n toggleEditing: (editing: React.SetStateAction<boolean>) => void;\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 tabIndex = -1,\n toggleEditing,\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 return type(controlFnProps, row);\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 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 event.preventDefault();\n\n if (isDetailedMode) {\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 } else {\n toggleEditing(false);\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 handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDate = (event as any).detail;\n\n if (!value || !newDate || (isDate(value) && isDate(newDate) && !isWeakEqualDate(value as Date, newDate as Date))) {\n props.onChange((event as any).detail);\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={value as Date}\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","rowIndex","React","useContext","RowContext","tableMeta","getContext","table","options","meta","columnMeta","column","columnDef","isActiveRow","rowActive","rowActiveIndex","handleFocus","useEditingCellAutofocus","handleBlur","editing","toggleDetailedMode","validateCell","useEffect","ref","current","document","activeElement","isElementInsideOrTriggeredFromContainer","error","getCellError","controlProps","dataType","fontSize","size","id","invalid","isDetailedMode","isTruncated","enableTruncate","onBlur","onChange","value","setCellValue","row","original","tabIndex","toggleEditing","type","_columnMeta$control","control","getValue","cellAttributes","getCellAttributes","undefined","onFocus","Field","message","MemoedEditingCell","RowMoveIndicator","memo","controlRef","useRef","currentValue","commonProps","controlFnProps","setValue","Switch","checked","Boolean","handleInputKeyDown","event","target","readOnly","key","stopPropagation","shiftKey","preventDefault","_target$select","select","call","_target$setSelectionR","_target$value","_target$value2","setSelectionRange","length","requestAnimationFrame","_target$select2","isPressingMetaKey","test","handleChange","newDate","detail","isDate","isWeakEqualDate","Datepicker","onKeyDown","TextareaWithAutosizing","String","Number","parseInt","Input"],"mappings":"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"}
|
|
@@ -20,22 +20,6 @@ function Alert(props) {
|
|
|
20
20
|
const tableMeta = table.options.meta;
|
|
21
21
|
const [showFilterResetDialog, setShowFilterResetDialog] = React__default.useState(false);
|
|
22
22
|
const pendingChangesWithErrors = tableMeta.editing.getErrors();
|
|
23
|
-
const deletePendingChange = tableMeta.editing.resetChanges;
|
|
24
|
-
const allRows = table.getPreFilteredRowModel().rows;
|
|
25
|
-
// This effect deletes error in the alert if the row that has the error is deleted.
|
|
26
|
-
React__default.useEffect(() => {
|
|
27
|
-
pendingChangesWithErrors.forEach(errorRow => {
|
|
28
|
-
const errorRowId = errorRow.rowId;
|
|
29
|
-
try {
|
|
30
|
-
// getRow throws error if it fails to find the row
|
|
31
|
-
if (!table.getRow(errorRowId)) {
|
|
32
|
-
deletePendingChange(errorRowId);
|
|
33
|
-
}
|
|
34
|
-
} catch {
|
|
35
|
-
deletePendingChange(errorRowId);
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
}, [allRows.length]);
|
|
39
23
|
const activeRow = React__default.useMemo(() => tableMeta.rowActive.rowActiveIndex ? table.getRowModel().rows[tableMeta.rowActive.rowActiveIndex] : undefined, [tableMeta.rowActive.rowActiveIndex]);
|
|
40
24
|
// mark errors being rendered as seen
|
|
41
25
|
React__default.useEffect(() => {
|
|
@@ -64,23 +48,18 @@ function Alert(props) {
|
|
|
64
48
|
const title = (pendingChangesWithErrors.length === 1 ? validationTexts.alert.titleOne : validationTexts.alert.titlePlural).replace('[COUNT]', String(pendingChangesWithErrors.length));
|
|
65
49
|
// generate links to each invalid row, to go into the error message
|
|
66
50
|
const links = [];
|
|
67
|
-
const rowIdentityColumn = tableMeta.rowIdentityColumnId ?
|
|
68
|
-
// Since rowIdentityColumnId can have multiple ids, we use the first id to refer to the row in Alert
|
|
69
|
-
table.getColumn(tableMeta.rowIdentityColumnId[0]) : undefined;
|
|
51
|
+
const rowIdentityColumn = tableMeta.rowIdentityColumnId ? table.getColumn(tableMeta.rowIdentityColumnId) : undefined;
|
|
70
52
|
pendingChangesWithErrors.forEach((error, index) => {
|
|
71
53
|
// if appropriate, concatenate the item with the text "and"
|
|
72
54
|
if (pendingChangesWithErrors.length > 1 && index === pendingChangesWithErrors.length - 1) {
|
|
73
55
|
// Add space before and after `messageAnd` text
|
|
74
56
|
links.push(` ${validationTexts.alert.messageAnd} `);
|
|
75
57
|
}
|
|
76
|
-
const rowIndex = table.
|
|
58
|
+
const rowIndex = table.getRowModel().rows.findIndex(row => row.id === error.rowId);
|
|
77
59
|
const handleClick = () => {
|
|
78
|
-
// if row is visible
|
|
79
60
|
if (rowIndex > -1) {
|
|
80
61
|
scrollToRow(rowIndex);
|
|
81
|
-
}
|
|
82
|
-
// if row is filtered out
|
|
83
|
-
else {
|
|
62
|
+
} else {
|
|
84
63
|
setShowFilterResetDialog(error.rowId);
|
|
85
64
|
}
|
|
86
65
|
};
|
|
@@ -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<string | false>(false);\n\n const pendingChangesWithErrors = tableMeta.editing.getErrors<TType>();\n const deletePendingChange = tableMeta.editing.resetChanges;\n\n const allRows = table.getPreFilteredRowModel().rows;\n\n // This effect deletes error in the alert if the row that has the error is deleted.\n React.useEffect(() => {\n pendingChangesWithErrors.forEach(errorRow => {\n const errorRowId = errorRow.rowId;\n\n try {\n // getRow throws error if it fails to find the row\n if (!table.getRow(errorRowId)) {\n deletePendingChange(errorRowId);\n }\n } catch {\n deletePendingChange(errorRowId);\n }\n });\n }, [allRows.length]);\n\n const activeRow = React.useMemo(\n () => (tableMeta.rowActive.rowActiveIndex ? table.getRowModel().rows[tableMeta.rowActive.rowActiveIndex] : undefined),\n [tableMeta.rowActive.rowActiveIndex]\n );\n\n // mark errors being rendered as seen\n React.useEffect(() => {\n pendingChangesWithErrors.forEach(error => {\n if (activeRow && error.rowId === activeRow.id) {\n return;\n }\n\n tableMeta.editing.setRowErrorsSeen(error.rowId);\n });\n }, [pendingChangesWithErrors]);\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 rowIdentityColumn = tableMeta.rowIdentityColumnId\n ? // Since rowIdentityColumnId can have multiple ids, we use the first id to refer to the row in Alert\n table.getColumn(tableMeta.rowIdentityColumnId[0])\n : undefined;\n\n pendingChangesWithErrors.forEach((error, 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\n const rowIndex = table.getFilteredRowModel().rows.findIndex(row => row.id === error.rowId);\n\n const handleClick = () => {\n // if row is visible\n if (rowIndex > -1) {\n scrollToRow(rowIndex);\n }\n // if row is filtered out\n else {\n setShowFilterResetDialog(error.rowId);\n }\n };\n\n let tooltip;\n\n if (error.pendingChange._meta.errors.row) {\n tooltip = error.pendingChange._meta.errors.row;\n } else {\n const firstCellErrorColumnId = Object.keys(error.pendingChange._meta.errors.cells)[0];\n const columnName = table.getAllColumns().find(column => column.id === firstCellErrorColumnId)?.columnDef.meta?.header;\n tooltip = `${columnName}: ${error.pendingChange._meta.errors.cells[firstCellErrorColumnId]}`;\n }\n\n links.push(\n <Tooltip key={error.rowId} title={tooltip}>\n <span className=\"text-blue\" onClick={handleClick} role=\"button\">\n {rowIdentityColumn ? error.pendingChange._meta.original[rowIdentityColumn.id] : rowIndex + 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 const rowIndex = table.getRowModel().rows.findIndex(row => row.id === showFilterResetDialog);\n\n if (rowIndex > -1) {\n scrollToRow(rowIndex);\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","texts","useLocalization","validationTexts","table3","editing","validation","tableMeta","options","meta","showFilterResetDialog","setShowFilterResetDialog","React","useState","pendingChangesWithErrors","getErrors","deletePendingChange","resetChanges","allRows","getPreFilteredRowModel","rows","useEffect","forEach","errorRow","errorRowId","rowId","getRow","length","activeRow","useMemo","rowActive","rowActiveIndex","getRowModel","undefined","error","id","setRowErrorsSeen","scrollToRow","rowIndex","setRowActiveIndex","align","requestAnimationFrame","cell","_tableRef$current","current","querySelector","_cell$focus","focus","call","title","alert","titleOne","titlePlural","replace","String","links","rowIdentityColumn","rowIdentityColumnId","getColumn","index","push","messageAnd","getFilteredRowModel","findIndex","row","handleClick","tooltip","pendingChange","_meta","errors","_table$getAllColumns$","_table$getAllColumns$2","firstCellErrorColumnId","Object","keys","cells","columnName","getAllColumns","find","column","columnDef","header","Tooltip","key","className","onClick","role","original","message","messageOne","messagePlural","split","map","part","_rowIdentityColumn$co","_rowIdentityColumn$co2","messageRow","handleResetFilters","resetGlobalFilter","resetColumnFilters","BaseAlert","state","FilterResetDialog","open","onChange","onSubmit","handleSubmit","dialogProps","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<string | false>(false);\n\n const pendingChangesWithErrors = tableMeta.editing.getErrors<TType>();\n\n const activeRow = React.useMemo(\n () => (tableMeta.rowActive.rowActiveIndex ? table.getRowModel().rows[tableMeta.rowActive.rowActiveIndex] : undefined),\n [tableMeta.rowActive.rowActiveIndex]\n );\n\n // mark errors being rendered as seen\n React.useEffect(() => {\n pendingChangesWithErrors.forEach(error => {\n if (activeRow && error.rowId === activeRow.id) {\n return;\n }\n\n tableMeta.editing.setRowErrorsSeen(error.rowId);\n });\n }, [pendingChangesWithErrors]);\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 rowIdentityColumn = tableMeta.rowIdentityColumnId ? table.getColumn(tableMeta.rowIdentityColumnId) : undefined;\n\n pendingChangesWithErrors.forEach((error, 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 const rowIndex = table.getRowModel().rows.findIndex(row => row.id === error.rowId);\n\n const handleClick = () => {\n if (rowIndex > -1) {\n scrollToRow(rowIndex);\n } else {\n setShowFilterResetDialog(error.rowId);\n }\n };\n\n let tooltip;\n\n if (error.pendingChange._meta.errors.row) {\n tooltip = error.pendingChange._meta.errors.row;\n } else {\n const firstCellErrorColumnId = Object.keys(error.pendingChange._meta.errors.cells)[0];\n const columnName = table.getAllColumns().find(column => column.id === firstCellErrorColumnId)?.columnDef.meta?.header;\n tooltip = `${columnName}: ${error.pendingChange._meta.errors.cells[firstCellErrorColumnId]}`;\n }\n\n links.push(\n <Tooltip key={error.rowId} title={tooltip}>\n <span className=\"text-blue\" onClick={handleClick} role=\"button\">\n {rowIdentityColumn ? error.pendingChange._meta.original[rowIdentityColumn.id] : rowIndex + 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 const rowIndex = table.getRowModel().rows.findIndex(row => row.id === showFilterResetDialog);\n\n if (rowIndex > -1) {\n scrollToRow(rowIndex);\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","texts","useLocalization","validationTexts","table3","editing","validation","tableMeta","options","meta","showFilterResetDialog","setShowFilterResetDialog","React","useState","pendingChangesWithErrors","getErrors","activeRow","useMemo","rowActive","rowActiveIndex","getRowModel","rows","undefined","useEffect","forEach","error","rowId","id","setRowErrorsSeen","scrollToRow","rowIndex","setRowActiveIndex","align","requestAnimationFrame","cell","_tableRef$current","current","querySelector","_cell$focus","focus","call","title","length","alert","titleOne","titlePlural","replace","String","links","rowIdentityColumn","rowIdentityColumnId","getColumn","index","push","messageAnd","findIndex","row","handleClick","tooltip","pendingChange","_meta","errors","_table$getAllColumns$","_table$getAllColumns$2","firstCellErrorColumnId","Object","keys","cells","columnName","getAllColumns","find","column","columnDef","header","Tooltip","key","className","onClick","role","original","message","messageOne","messagePlural","split","map","part","_rowIdentityColumn$co","_rowIdentityColumn$co2","messageRow","handleResetFilters","resetGlobalFilter","resetColumnFilters","BaseAlert","state","FilterResetDialog","open","onChange","onSubmit","handleSubmit","dialogProps","Dialog","size","Content","Title","resetFiltersDialog","description","Footer","Group","Close","Button","cancel","appearance","confirm"],"mappings":";;;;;;;;SAiBgBA,KAAKA,CAAkBC,KAAwB;EAC3D,MAAM;IAAEC,aAAa;IAAEC,KAAK;IAAEC,QAAQ;IAAE,GAAGC;GAAY,GAAGJ,KAAK;EAC/D,MAAM;IAAEK;GAAO,GAAGC,eAAe,EAAE;EACnC,MAAMC,eAAe,GAAGF,KAAK,CAACG,MAAM,CAACC,OAAO,CAACC,UAAU;EACvD,MAAMC,SAAS,GAAGT,KAAK,CAACU,OAAO,CAACC,IAA6B;EAC7D,MAAM,CAACC,qBAAqB,EAAEC,wBAAwB,CAAC,GAAGC,cAAK,CAACC,QAAQ,CAAiB,KAAK,CAAC;EAE/F,MAAMC,wBAAwB,GAAGP,SAAS,CAACF,OAAO,CAACU,SAAS,EAAS;EAErE,MAAMC,SAAS,GAAGJ,cAAK,CAACK,OAAO,CAC3B,MAAOV,SAAS,CAACW,SAAS,CAACC,cAAc,GAAGrB,KAAK,CAACsB,WAAW,EAAE,CAACC,IAAI,CAACd,SAAS,CAACW,SAAS,CAACC,cAAc,CAAC,GAAGG,SAAU,EACrH,CAACf,SAAS,CAACW,SAAS,CAACC,cAAc,CAAC,CACvC;;EAGDP,cAAK,CAACW,SAAS,CAAC;IACZT,wBAAwB,CAACU,OAAO,CAACC,KAAK;MAClC,IAAIT,SAAS,IAAIS,KAAK,CAACC,KAAK,KAAKV,SAAS,CAACW,EAAE,EAAE;QAC3C;;MAGJpB,SAAS,CAACF,OAAO,CAACuB,gBAAgB,CAACH,KAAK,CAACC,KAAK,CAAC;KAClD,CAAC;GACL,EAAE,CAACZ,wBAAwB,CAAC,CAAC;EAE9B,SAASe,WAAWA,CAACC,QAAgB;IACjCvB,SAAS,CAACW,SAAS,CAACa,iBAAiB,CAACD,QAAQ,CAAC;IAC/CjC,aAAa,CAACiC,QAAQ,EAAE;MAAEE,KAAK,EAAE;KAAU,CAAC;IAE5CC,qBAAqB,CAAC;;MAClB,MAAMC,IAAI,IAAAC,iBAAA,GAAGpC,QAAQ,CAACqC,OAAO,cAAAD,iBAAA,uBAAhBA,iBAAA,CAAkBE,aAAa,CACxC,2EAA2E,CAC9E;MAED,IAAIH,IAAI,EAAE;QAAA,IAAAI,WAAA;QACL,CAAAA,WAAA,GAAAJ,IAAoB,CAACK,KAAK,cAAAD,WAAA,uBAA1BA,WAAA,CAAAE,IAAA,CAAAN,KAA8B;;KAEtC,CAAC;;;EAIN,MAAMO,KAAK,GAAG,CACV3B,wBAAwB,CAAC4B,MAAM,KAAK,CAAC,GAAGvC,eAAe,CAACwC,KAAK,CAACC,QAAQ,GAAGzC,eAAe,CAACwC,KAAK,CAACE,WAAW,EAC5GC,OAAO,CAAC,SAAS,EAAEC,MAAM,CAACjC,wBAAwB,CAAC4B,MAAM,CAAC,CAAC;;EAG7D,MAAMM,KAAK,GAAsB,EAAE;EACnC,MAAMC,iBAAiB,GAAG1C,SAAS,CAAC2C,mBAAmB,GAAGpD,KAAK,CAACqD,SAAS,CAAC5C,SAAS,CAAC2C,mBAAmB,CAAC,GAAG5B,SAAS;EAEpHR,wBAAwB,CAACU,OAAO,CAAC,CAACC,KAAK,EAAE2B,KAAK;;IAE1C,IAAItC,wBAAwB,CAAC4B,MAAM,GAAG,CAAC,IAAIU,KAAK,KAAKtC,wBAAwB,CAAC4B,MAAM,GAAG,CAAC,EAAE;;MAEtFM,KAAK,CAACK,IAAI,KAAKlD,eAAe,CAACwC,KAAK,CAACW,aAAa,CAAC;;IAEvD,MAAMxB,QAAQ,GAAGhC,KAAK,CAACsB,WAAW,EAAE,CAACC,IAAI,CAACkC,SAAS,CAACC,GAAG,IAAIA,GAAG,CAAC7B,EAAE,KAAKF,KAAK,CAACC,KAAK,CAAC;IAElF,MAAM+B,WAAW,GAAGA;MAChB,IAAI3B,QAAQ,GAAG,CAAC,CAAC,EAAE;QACfD,WAAW,CAACC,QAAQ,CAAC;OACxB,MAAM;QACHnB,wBAAwB,CAACc,KAAK,CAACC,KAAK,CAAC;;KAE5C;IAED,IAAIgC,OAAO;IAEX,IAAIjC,KAAK,CAACkC,aAAa,CAACC,KAAK,CAACC,MAAM,CAACL,GAAG,EAAE;MACtCE,OAAO,GAAGjC,KAAK,CAACkC,aAAa,CAACC,KAAK,CAACC,MAAM,CAACL,GAAG;KACjD,MAAM;MAAA,IAAAM,qBAAA,EAAAC,sBAAA;MACH,MAAMC,sBAAsB,GAAGC,MAAM,CAACC,IAAI,CAACzC,KAAK,CAACkC,aAAa,CAACC,KAAK,CAACC,MAAM,CAACM,KAAK,CAAC,CAAC,CAAC,CAAC;MACrF,MAAMC,UAAU,IAAAN,qBAAA,GAAGhE,KAAK,CAACuE,aAAa,EAAE,CAACC,IAAI,CAACC,MAAM,IAAIA,MAAM,CAAC5C,EAAE,KAAKqC,sBAAsB,CAAC,cAAAF,qBAAA,wBAAAC,sBAAA,GAA1ED,qBAAA,CAA4EU,SAAS,CAAC/D,IAAI,cAAAsD,sBAAA,uBAA1FA,sBAAA,CAA4FU,MAAM;MACrHf,OAAO,MAAMU,eAAe3C,KAAK,CAACkC,aAAa,CAACC,KAAK,CAACC,MAAM,CAACM,KAAK,CAACH,sBAAsB,GAAG;;IAGhGhB,KAAK,CAACK,IAAI,eACNzC,6BAAC8D,OAAO;MAACC,GAAG,EAAElD,KAAK,CAACC,KAAK;MAAEe,KAAK,EAAEiB;oBAC9B9C;MAAMgE,SAAS,EAAC,WAAW;MAACC,OAAO,EAAEpB,WAAW;MAAEqB,IAAI,EAAC;OAClD7B,iBAAiB,GAAGxB,KAAK,CAACkC,aAAa,CAACC,KAAK,CAACmB,QAAQ,CAAC9B,iBAAiB,CAACtB,EAAE,CAAC,GAAGG,QAAQ,GAAG,CAAC,CACzF,CACD,CACb;;IAGD,IAAIhB,wBAAwB,CAAC4B,MAAM,GAAG,CAAC,IAAIU,KAAK,GAAGtC,wBAAwB,CAAC4B,MAAM,GAAG,CAAC,EAAE;MACpFM,KAAK,CAACK,IAAI,CAAC,IAAI,CAAC;;GAEvB,CAAC;;EAGF,MAAM2B,OAAO,GAAG,CAAChC,KAAK,CAACN,MAAM,KAAK,CAAC,GAAGvC,eAAe,CAACwC,KAAK,CAACsC,UAAU,GAAG9E,eAAe,CAACwC,KAAK,CAACuC,aAAa,EACvGC,KAAK,CAAC,WAAW,CAAC,CAClBC,GAAG,CAACC,IAAI;IACL,IAAIA,IAAI,KAAK,UAAU,EAAE;MAAA,IAAAC,qBAAA,EAAAC,sBAAA;MACrB,QAAAD,qBAAA,GAAOrC,iBAAiB,aAAjBA,iBAAiB,wBAAAsC,sBAAA,GAAjBtC,iBAAiB,CAAEuB,SAAS,CAAC/D,IAAI,cAAA8E,sBAAA,uBAAjCA,sBAAA,CAAmCd,MAAM,cAAAa,qBAAA,cAAAA,qBAAA,GAAInF,eAAe,CAACwC,KAAK,CAAC6C,UAAU;;IAGxF,IAAIH,IAAI,KAAK,OAAO,EAAE;MAClB,OAAOrC,KAAK;;IAGhB,OAAOqC,IAAI;GACd,CAAC;EAEN,MAAMI,kBAAkB,GAAGA;IACvB3F,KAAK,CAAC4F,iBAAiB,EAAE;IACzB5F,KAAK,CAAC6F,kBAAkB,EAAE;IAE1B1D,qBAAqB,CAAC;MAClB,MAAMH,QAAQ,GAAGhC,KAAK,CAACsB,WAAW,EAAE,CAACC,IAAI,CAACkC,SAAS,CAACC,GAAG,IAAIA,GAAG,CAAC7B,EAAE,KAAKjB,qBAAqB,CAAC;MAE5F,IAAIoB,QAAQ,GAAG,CAAC,CAAC,EAAE;QACfD,WAAW,CAACC,QAAQ,CAAC;;MAGzBnB,wBAAwB,CAAC,KAAK,CAAC;KAClC,CAAC;GACL;EAED,oBACIC,yEACIA,6BAACgF,OAAS,oBAAK5F,UAAU;IAAE6F,KAAK,EAAC;mBAC7BjF;IAAMgE,SAAS,EAAC;KAAanC,KAAK,CAAQ,YAAOuC,OAAO,CAChD,eACZpE,6BAACkF,iBAAiB;IACdC,IAAI,EAAErF,qBAAqB,KAAK,KAAK;IACrCsF,QAAQ,EAAEA,MAAMrF,wBAAwB,CAAC,KAAK,CAAC;IAC/CsF,QAAQ,EAAER;IACZ,CACH;AAEX;AAMA,SAASK,iBAAiBA,CAAClG,KAA6B;EACpD,MAAM;IAAEqG,QAAQ,EAAEC,YAAY;IAAE,GAAGC;GAAa,GAAGvG,KAAK;EACxD,MAAM;IAAEK;GAAO,GAAGC,eAAe,EAAE;EAEnC,oBACIU,6BAACwF,MAAM,oBAAKD,WAAW;IAAEE,IAAI,EAAC;mBAC1BzF,6BAACwF,MAAM,CAACE,OAAO;kBAAY;kBACvB1F,6BAACwF,MAAM,CAACG,KAAK,QAAEtG,KAAK,CAACG,MAAM,CAACC,OAAO,CAACC,UAAU,CAACkG,kBAAkB,CAAC/D,KAAK,CAAgB,eAEvF7B,wCAAIX,KAAK,CAACG,MAAM,CAACC,OAAO,CAACC,UAAU,CAACkG,kBAAkB,CAACC,WAAW,CAAK,eAEvE7F,6BAACwF,MAAM,CAACM,MAAM,qBACV9F,6BAAC+F,KAAK,qBACF/F,6BAACwF,MAAM,CAACQ,KAAK,qBACThG,6BAACiG,MAAM,QAAE5G,KAAK,CAACG,MAAM,CAACC,OAAO,CAACC,UAAU,CAACkG,kBAAkB,CAACM,MAAM,CAAU,CACjE,eACflG,6BAACiG,MAAM;IAACE,UAAU,EAAC,SAAS;IAAClC,OAAO,EAAEqB;KACjCjG,KAAK,CAACG,MAAM,CAACC,OAAO,CAACC,UAAU,CAACkG,kBAAkB,CAACQ,OAAO,CACtD,CACL,CACI,CACH,CACZ;AAEjB;;;;"}
|
|
@@ -21,7 +21,7 @@ function Row(props) {
|
|
|
21
21
|
if (tableMeta.editing.isEditing && isActiveRow) {
|
|
22
22
|
var _event$target$closest, _event$target$closest2;
|
|
23
23
|
const cellIndex = Number((_event$target$closest = (_event$target$closest2 = event.target.closest('td')) === null || _event$target$closest2 === void 0 ? void 0 : _event$target$closest2.getAttribute('data-cell-index')) !== null && _event$target$closest !== void 0 ? _event$target$closest : undefined);
|
|
24
|
-
if (!isNaN(cellIndex)
|
|
24
|
+
if (!isNaN(cellIndex)) {
|
|
25
25
|
tableMeta.editing.setLastFocusedCellIndex(Number(cellIndex));
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Row.js","sources":["../../../../../../../../../src/components/Table3/components/Row/Row.tsx"],"sourcesContent":["import React from 'react';\nimport { TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { DisplayRow, DisplayRowProps } from '../../../../primitives/Table/Core/components/Row/BuiltIns/DisplayRow';\nimport { SaveStatus } from './Editing/SaveStatus';\nimport { useAugmentedFocusManager } from '../../../../primitives/Table/Core/components/Body/util';\n\nexport function Row<TType = unknown>(props: DisplayRowProps<TType>) {\n const { row, index, table } = props;\n const focusManager = useAugmentedFocusManager();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === index;\n\n React.useEffect(() => {\n if (tableMeta.editing.isEditing && isActiveRow && tableMeta.editing.lastFocusedCellIndex === undefined) {\n focusManager.focusFirst();\n }\n }, [tableMeta.editing.isEditing, tableMeta.rowActive.rowActiveIndex, tableMeta.editing.lastFocusedCellIndex]);\n\n const handleFocus = React.useCallback(\n (event: React.FocusEvent<HTMLTableRowElement>) => {\n if (tableMeta.editing.isEditing && isActiveRow) {\n const cellIndex = Number(event.target.closest('td')?.getAttribute('data-cell-index') ?? undefined);\n\n if (!isNaN(cellIndex)
|
|
1
|
+
{"version":3,"file":"Row.js","sources":["../../../../../../../../../src/components/Table3/components/Row/Row.tsx"],"sourcesContent":["import React from 'react';\nimport { TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { DisplayRow, DisplayRowProps } from '../../../../primitives/Table/Core/components/Row/BuiltIns/DisplayRow';\nimport { SaveStatus } from './Editing/SaveStatus';\nimport { useAugmentedFocusManager } from '../../../../primitives/Table/Core/components/Body/util';\n\nexport function Row<TType = unknown>(props: DisplayRowProps<TType>) {\n const { row, index, table } = props;\n const focusManager = useAugmentedFocusManager();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === index;\n\n React.useEffect(() => {\n if (tableMeta.editing.isEditing && isActiveRow && tableMeta.editing.lastFocusedCellIndex === undefined) {\n focusManager.focusFirst();\n }\n }, [tableMeta.editing.isEditing, tableMeta.rowActive.rowActiveIndex, tableMeta.editing.lastFocusedCellIndex]);\n\n const handleFocus = React.useCallback(\n (event: React.FocusEvent<HTMLTableRowElement>) => {\n if (tableMeta.editing.isEditing && isActiveRow) {\n const cellIndex = Number(event.target.closest('td')?.getAttribute('data-cell-index') ?? undefined);\n\n if (!isNaN(cellIndex)) {\n tableMeta.editing.setLastFocusedCellIndex(Number(cellIndex));\n }\n }\n },\n [tableMeta.editing.isEditing, isActiveRow]\n );\n\n const attributes = {\n 'data-row-editing-invalid':\n tableMeta.editing.isEnabled && tableMeta.editing.hasRowErrors(row.id)\n ? !tableMeta.editing.hasRowErrorsSeen(row.id)\n ? 'unseen'\n : true\n : undefined,\n 'data-row-editing-status':\n tableMeta.editing.isEnabled && tableMeta.editing.getRowSaveStatus(row.id)\n ? tableMeta.editing.getRowSaveStatus(row.id)\n : undefined,\n onFocus: handleFocus,\n };\n\n return (\n <DisplayRow<TType> {...props} {...attributes}>\n {tableMeta.editing.getRowSaveStatus(row.id) ? <SaveStatus rowId={row.id} table={table} /> : null}\n </DisplayRow>\n );\n}\n"],"names":["Row","props","row","index","table","focusManager","useAugmentedFocusManager","tableMeta","options","meta","isActiveRow","rowActive","rowActiveIndex","React","useEffect","editing","isEditing","lastFocusedCellIndex","undefined","focusFirst","handleFocus","useCallback","event","_event$target$closest","_event$target$closest2","cellIndex","Number","target","closest","getAttribute","isNaN","setLastFocusedCellIndex","attributes","isEnabled","hasRowErrors","id","hasRowErrorsSeen","getRowSaveStatus","onFocus","DisplayRow","SaveStatus","rowId"],"mappings":";;;;;SAMgBA,GAAGA,CAAkBC,KAA6B;EAC9D,MAAM;IAAEC,GAAG;IAAEC,KAAK;IAAEC;GAAO,GAAGH,KAAK;EACnC,MAAMI,YAAY,GAAGC,wBAAwB,EAAE;EAC/C,MAAMC,SAAS,GAAGH,KAAK,CAACI,OAAO,CAACC,IAA6B;EAC7D,MAAMC,WAAW,GAAGH,SAAS,CAACI,SAAS,CAACC,cAAc,KAAKT,KAAK;EAEhEU,cAAK,CAACC,SAAS,CAAC;IACZ,IAAIP,SAAS,CAACQ,OAAO,CAACC,SAAS,IAAIN,WAAW,IAAIH,SAAS,CAACQ,OAAO,CAACE,oBAAoB,KAAKC,SAAS,EAAE;MACpGb,YAAY,CAACc,UAAU,EAAE;;GAEhC,EAAE,CAACZ,SAAS,CAACQ,OAAO,CAACC,SAAS,EAAET,SAAS,CAACI,SAAS,CAACC,cAAc,EAAEL,SAAS,CAACQ,OAAO,CAACE,oBAAoB,CAAC,CAAC;EAE7G,MAAMG,WAAW,GAAGP,cAAK,CAACQ,WAAW,CAChCC,KAA4C;IACzC,IAAIf,SAAS,CAACQ,OAAO,CAACC,SAAS,IAAIN,WAAW,EAAE;MAAA,IAAAa,qBAAA,EAAAC,sBAAA;MAC5C,MAAMC,SAAS,GAAGC,MAAM,EAAAH,qBAAA,IAAAC,sBAAA,GAACF,KAAK,CAACK,MAAM,CAACC,OAAO,CAAC,IAAI,CAAC,cAAAJ,sBAAA,uBAA1BA,sBAAA,CAA4BK,YAAY,CAAC,iBAAiB,CAAC,cAAAN,qBAAA,cAAAA,qBAAA,GAAIL,SAAS,CAAC;MAElG,IAAI,CAACY,KAAK,CAACL,SAAS,CAAC,EAAE;QACnBlB,SAAS,CAACQ,OAAO,CAACgB,uBAAuB,CAACL,MAAM,CAACD,SAAS,CAAC,CAAC;;;GAGvE,EACD,CAAClB,SAAS,CAACQ,OAAO,CAACC,SAAS,EAAEN,WAAW,CAAC,CAC7C;EAED,MAAMsB,UAAU,GAAG;IACf,0BAA0B,EACtBzB,SAAS,CAACQ,OAAO,CAACkB,SAAS,IAAI1B,SAAS,CAACQ,OAAO,CAACmB,YAAY,CAAChC,GAAG,CAACiC,EAAE,CAAC,GAC/D,CAAC5B,SAAS,CAACQ,OAAO,CAACqB,gBAAgB,CAAClC,GAAG,CAACiC,EAAE,CAAC,GACvC,QAAQ,GACR,IAAI,GACRjB,SAAS;IACnB,yBAAyB,EACrBX,SAAS,CAACQ,OAAO,CAACkB,SAAS,IAAI1B,SAAS,CAACQ,OAAO,CAACsB,gBAAgB,CAACnC,GAAG,CAACiC,EAAE,CAAC,GACnE5B,SAAS,CAACQ,OAAO,CAACsB,gBAAgB,CAACnC,GAAG,CAACiC,EAAE,CAAC,GAC1CjB,SAAS;IACnBoB,OAAO,EAAElB;GACZ;EAED,oBACIP,6BAAC0B,UAAU,oBAAYtC,KAAK,EAAM+B,UAAU,GACvCzB,SAAS,CAACQ,OAAO,CAACsB,gBAAgB,CAACnC,GAAG,CAACiC,EAAE,CAAC,gBAAGtB,6BAAC2B,UAAU;IAACC,KAAK,EAAEvC,GAAG,CAACiC,EAAE;IAAE/B,KAAK,EAAEA;IAAS,GAAG,IAAI,CACvF;AAErB;;;;"}
|
|
@@ -24,7 +24,6 @@ function useTableEditing(isEnabled = false, handleSave, validator) {
|
|
|
24
24
|
pendingChangesFns.saveChanges();
|
|
25
25
|
}
|
|
26
26
|
}, [pendingChangesFns.saveChanges]);
|
|
27
|
-
// TODO: using useGlobalKeyDown prevents trigger when focused on inputs, but it's more "proper"
|
|
28
27
|
useGlobalKeyDown(isEnabled && isEditing ? {
|
|
29
28
|
key: 's',
|
|
30
29
|
meta: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableEditing.js","sources":["../../../../../../../../src/components/Table3/features/useTableEditing.ts"],"sourcesContent":["import React from 'react';\nimport { Cell as ReactTableCell, Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { Table3EditingSaveHandler, Table3EditingValidatorFn } from '../types';\nimport { isElementInsideOrTriggeredFromContainer } from '../../../utils/dom';\nimport { useGlobalKeyDown } from '../../../hooks/useGlobalKeyDown';\nimport { willRowMove } from '../util/editing';\nimport { TableRef } from '../../../primitives/Table/types';\nimport { isDate } from 'date-fns';\n\nexport function useTableEditing<TType = unknown>(\n isEnabled = false,\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n // used to switch the table into editing mode\n const [isEditing, toggleEditing] = React.useState(false);\n\n // used to switch the editing between \"detailed\" mode\n const [isDetailedMode, toggleDetailedMode] = React.useState(false);\n\n // store the last focused cell, so that up/down arrow key navigation remains in the same column\n const [lastFocusedCellIndex, setLastFocusedCellIndex] = useLastFocusedCellIndex();\n\n // store pending changes for each row\n // changes are saved as soon as the active row changes, so in most cases this will only contain the active row's changes\n // but not always - if validation or server requests fail when saving, those rows remain until the failure is resolved\n const pendingChangesFns = usePendingChanges<TType>(isEnabled, handleSave, validator);\n\n // if focus leaves the table in any way, trigger a save\n const handleBlur = React.useCallback(\n (event: React.FocusEvent<HTMLTableElement>) => {\n // custom event from datepicker, and it doesn't have the relatedTarget property set.\n const isClosingDatepicker = isDate((event as any).detail);\n\n if (\n event.relatedTarget !== event.currentTarget &&\n !isElementInsideOrTriggeredFromContainer(event.relatedTarget, event.currentTarget) &&\n !isClosingDatepicker\n ) {\n pendingChangesFns.saveChanges();\n }\n },\n [pendingChangesFns.saveChanges]\n );\n\n // TODO: using useGlobalKeyDown prevents trigger when focused on inputs, but it's more \"proper\"\n useGlobalKeyDown(isEnabled && isEditing ? { key: 's', meta: true, shift: false } : undefined, event => {\n event.preventDefault();\n pendingChangesFns.saveChanges();\n });\n\n return {\n isEnabled,\n isEditing,\n isDetailedMode,\n toggleDetailedMode: isEnabled ? toggleDetailedMode : () => undefined,\n toggleEditing: isEnabled ? toggleEditing : () => undefined,\n lastFocusedCellIndex,\n setLastFocusedCellIndex,\n ...pendingChangesFns,\n handleBlur: isEnabled && isEditing ? handleBlur : () => undefined,\n };\n}\n\ntype SaveState = 'pending' | 'complete';\ntype PendingChange<TType = unknown> = Partial<TType> & {\n _meta: {\n original: TType;\n moveReason: Record<string, 'search' | 'sorting' | 'filter'>;\n errors: {\n row: string;\n cells: Record<string, string>;\n hasShownErrorAlert: boolean;\n };\n status?: SaveState;\n };\n};\n\nfunction usePendingChanges<TType = unknown>(\n isEnabled: boolean,\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n const [pendingChanges, setPendingChanges] = React.useState<Record<string, PendingChange<TType>>>({});\n // we maintain save status as separate state because 'complete' needs to briefly show after pendingChanges are deleted\n const [saveStates, setSaveState] = React.useState<Record<string, SaveState>>({});\n\n function getCellValue<T extends TType>(cell: ReactTableCell<T, unknown>): unknown | undefined {\n return pendingChanges[cell.row.id]?.[cell.column.id];\n }\n\n function getCellError<T extends TType>(cell: ReactTableCell<T, unknown>): string | undefined {\n return pendingChanges[cell.row.id]?._meta.errors?.cells?.[cell.column.id];\n }\n\n const setCellValue = React.useCallback(function <T extends TType>(\n cell: ReactTableCell<T, unknown>,\n change: unknown,\n rowIndex: number\n ) {\n setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n const rowChanges = {\n ...currentChanges[cell.row.id],\n _meta: {\n ...currentChanges[cell.row.id]?._meta,\n original: cell.row.original,\n moveReason: {\n ...currentChanges[cell.row.id]?._meta.moveReason,\n },\n errors: {\n ...currentChanges[cell.row.id]?._meta.errors,\n },\n },\n } as PendingChange<T>;\n\n // update if the change is different to the original (saved) value,\n // otherwise remove any change - no point saving the same value\n if (change !== cell.row.original[cell.column.id]) {\n rowChanges[cell.column.id] = change;\n\n // determine if the row will move position based on this change, and save why it will move\n const reason = willRowMove(cell, change, rowIndex);\n\n if (reason) {\n rowChanges._meta.moveReason[cell.column.id] = reason;\n } else {\n delete rowChanges._meta.moveReason[cell.column.id];\n }\n } else {\n delete rowChanges[cell.column.id];\n }\n\n // set the changes for the row...\n // or delete if there are no changes left, so that we don't store changes with unchanged data\n if (Object.keys(rowChanges).filter(k => k !== '_meta').length) {\n nextChanges[cell.row.id] = rowChanges;\n } else {\n delete nextChanges[cell.row.id];\n }\n\n return nextChanges;\n });\n },\n []);\n\n async function validateCell<T extends TType>(cell: ReactTableCell<T, unknown>) {\n if (!validator || !isEnabled) {\n return;\n }\n\n const changeSet = getChangesetFromChanges(pendingChanges[cell.row.id]);\n\n // only validate if the cell being blurred actually has any changes\n if (cell.column.id in changeSet) {\n const errors = ((await validator(changeSet)) ?? {}) as Record<string, string>;\n\n setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n nextChanges[cell.row.id]._meta = {\n ...nextChanges[cell.row.id]._meta,\n errors: {\n ...nextChanges[cell.row.id]._meta.errors,\n cells: errors,\n hasShownErrorAlert:\n Object.keys(errors).length && !nextChanges[cell.row.id]._meta.errors.hasShownErrorAlert\n ? false\n : nextChanges[cell.row.id]._meta.errors.hasShownErrorAlert,\n },\n };\n return nextChanges;\n });\n }\n }\n\n function hasRowErrors(rowId: string) {\n if (!isEnabled) {\n return false;\n }\n\n return (\n !!pendingChanges[rowId]?._meta.errors?.row || !!Object.keys(pendingChanges[rowId]?._meta.errors?.cells ?? {}).length\n );\n }\n\n function hasRowErrorsSeen(rowId: string) {\n if (!isEnabled) {\n return false;\n }\n\n return hasRowErrors(rowId) && !!pendingChanges[rowId]._meta.errors?.hasShownErrorAlert;\n }\n\n function setRowErrorsSeen(rowId: string) {\n if (pendingChanges[rowId]._meta.errors?.hasShownErrorAlert === false) {\n setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n nextChanges[rowId]._meta.errors = {\n ...nextChanges[rowId]._meta.errors,\n hasShownErrorAlert: true,\n };\n return nextChanges;\n });\n }\n }\n\n function getRowSaveStatus(rowId: string) {\n if (!isEnabled) {\n return false;\n }\n\n return saveStates[rowId];\n }\n\n function setRowSaveStatus(rowId: string, status: 'pending' | 'complete' | undefined) {\n setSaveState(currentStates => {\n const nextStates = { ...currentStates };\n\n if (status) {\n nextStates[rowId] = status;\n } else {\n delete nextStates[rowId];\n }\n\n return nextStates;\n });\n }\n\n function getRowMoveReason(rowId: string) {\n return pendingChanges[rowId]?._meta.moveReason ? Object.values(pendingChanges[rowId]._meta.moveReason)[0] : undefined;\n }\n\n function hasChanges(rowId?: string) {\n if (!isEnabled) {\n return false;\n }\n\n return rowId ? !!pendingChanges[rowId] : !!Object.keys(pendingChanges).length;\n }\n\n function hasErrors<T extends TType>(table: ReactTable<T>, tableRef: React.RefObject<TableRef>) {\n if (!isEnabled) {\n return false;\n }\n\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const focusIsInsideTable = tableRef.current?.contains(document.activeElement);\n\n let activeRow;\n\n if (tableMeta.rowActive.rowActiveIndex !== undefined) {\n activeRow = table.getRowModel().rows[tableMeta.rowActive.rowActiveIndex];\n }\n\n return Object.keys(\n getErrors().filter(error => {\n if (activeRow?.id && focusIsInsideTable) {\n return error.rowId === activeRow?.id ? error.pendingChange._meta.errors.hasShownErrorAlert : true;\n }\n\n return true;\n })\n ).length;\n }\n\n function getErrors<T extends TType>() {\n return Object.keys(pendingChanges)\n .filter(hasRowErrors)\n .map(rowId => ({ rowId, pendingChange: pendingChanges[rowId] as PendingChange<T> }));\n }\n\n function resetChanges(rowId: string) {\n setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n delete nextChanges[rowId];\n return nextChanges;\n });\n }\n\n async function saveChanges(rowId: string | undefined = undefined) {\n if (!handleSave) {\n console.warn('Tried to save, but Table has no onSave handler');\n return;\n }\n\n // we save back to pendingChanges, so make a copy of it's state when save was triggered\n const changesToSave = rowId ? { [rowId]: pendingChanges[rowId] } : { ...pendingChanges };\n const changes = Object.keys(changesToSave);\n\n if (changes.length) {\n changes.map(async rowId => {\n const pendingChange = changesToSave[rowId];\n\n const changeSet = getChangesetFromChanges(pendingChange);\n\n try {\n // set saving = true\n setRowSaveStatus(rowId, 'pending');\n\n // re-run validation, maybe a cell is already invalid but has never been blurred\n if (validator) {\n const errors = await validator(changeSet);\n\n if (errors && Object.keys(errors).length) {\n throw errors;\n }\n }\n\n // send new data to the server\n await handleSave(changeSet);\n\n // cleanup changes, we don't need them after saving\n resetChanges(rowId);\n setRowSaveStatus(rowId, 'complete');\n } catch (error) {\n // the onSave handler should throw errors when something fails, e.g. validation, network errors etc\n // this code handles those errors and maps them either to row errors or cell specific errors\n let rowError;\n let cellErrors;\n\n if (typeof error === 'string') {\n rowError = error;\n } else if (error instanceof Error) {\n rowError = error.message;\n\n // most of our apis return error objects within this shape\n if (typeof (error as any).response?.data === 'object') {\n cellErrors = (error as any).response?.data;\n }\n } else if (typeof error === 'object') {\n cellErrors = error;\n }\n\n if (rowError || cellErrors) {\n setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n nextChanges[rowId]._meta.errors = {\n row: rowError,\n cells: cellErrors,\n hasShownErrorAlert: nextChanges[rowId]._meta.errors?.hasShownErrorAlert ?? false,\n };\n return nextChanges;\n });\n }\n\n setRowSaveStatus(rowId, undefined);\n }\n });\n }\n }\n\n return {\n getCellValue,\n getCellError,\n setCellValue,\n validateCell,\n hasChanges,\n hasErrors,\n getErrors,\n saveChanges,\n resetChanges,\n hasRowErrors,\n hasRowErrorsSeen,\n setRowErrorsSeen,\n getRowSaveStatus,\n setRowSaveStatus,\n getRowMoveReason,\n };\n}\n\nfunction useLastFocusedCellIndex(): [number | undefined, (index: number | undefined) => void] {\n // store the last focused cell, so that up/down arrow key navigation remains in the same column\n const lastFocusedCellIndexRef = React.useRef<number | undefined>(undefined);\n const setLastFocusedCellIndex = React.useCallback((index: number | undefined) => {\n lastFocusedCellIndexRef.current = index;\n }, []);\n\n return [lastFocusedCellIndexRef.current, setLastFocusedCellIndex];\n}\n\nfunction getChangesetFromChanges<TType = unknown>(changes: PendingChange<TType>): TType {\n // extract the original data from the row changes\n const { _meta, ...changeset } = changes ?? {};\n // and mix them in with the changes, ready to send to the server\n return { ..._meta?.original, ...changeset };\n}\n"],"names":["useTableEditing","isEnabled","handleSave","validator","isEditing","toggleEditing","React","useState","isDetailedMode","toggleDetailedMode","lastFocusedCellIndex","setLastFocusedCellIndex","useLastFocusedCellIndex","pendingChangesFns","usePendingChanges","handleBlur","useCallback","event","isClosingDatepicker","isDate","detail","relatedTarget","currentTarget","isElementInsideOrTriggeredFromContainer","saveChanges","useGlobalKeyDown","key","meta","shift","undefined","preventDefault","rowId","console","warn","Promise","resolve","changesToSave","pendingChanges","changes","Object","keys","length","map","pendingChange","changeSet","getChangesetFromChanges","_catch","_temp3","_result","_exit","then","resetChanges","setRowSaveStatus","_temp2","errors","error","rowError","cellErrors","Error","_error$response","message","response","data","_error$response2","setPendingChanges","currentChanges","nextChanges","_meta","row","cells","hasShownErrorAlert","_nextChanges$rowId$_m","_nextChanges$rowId$_m2","e","reject","validateCell","cell","id","_temp","column","saveStates","setSaveState","getCellValue","_pendingChanges$cell$","getCellError","_pendingChanges$cell$2","_pendingChanges$cell$3","_pendingChanges$cell$4","setCellValue","change","rowIndex","rowChanges","_currentChanges$cell$","original","moveReason","_currentChanges$cell$2","_currentChanges$cell$3","reason","willRowMove","filter","k","hasRowErrors","_pendingChanges$rowId","_pendingChanges$rowId2","_pendingChanges$rowId3","_pendingChanges$rowId4","_pendingChanges$rowId5","hasRowErrorsSeen","_pendingChanges$rowId6","setRowErrorsSeen","_pendingChanges$rowId7","getRowSaveStatus","status","currentStates","nextStates","getRowMoveReason","_pendingChanges$rowId8","values","hasChanges","hasErrors","table","tableRef","tableMeta","options","focusIsInsideTable","_tableRef$current","current","contains","document","activeElement","activeRow","rowActive","rowActiveIndex","getRowModel","rows","getErrors","_activeRow","_activeRow2","lastFocusedCellIndexRef","useRef","index","changeset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useTableEditing.js","sources":["../../../../../../../../src/components/Table3/features/useTableEditing.ts"],"sourcesContent":["import React from 'react';\nimport { Cell as ReactTableCell, Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { Table3EditingSaveHandler, Table3EditingValidatorFn } from '../types';\nimport { isElementInsideOrTriggeredFromContainer } from '../../../utils/dom';\nimport { useGlobalKeyDown } from '../../../hooks/useGlobalKeyDown';\nimport { willRowMove } from '../util/editing';\nimport { TableRef } from '../../../primitives/Table/types';\nimport { isDate } from 'date-fns';\n\nexport function useTableEditing<TType = unknown>(\n isEnabled = false,\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n // used to switch the table into editing mode\n const [isEditing, toggleEditing] = React.useState(false);\n\n // used to switch the editing between \"detailed\" mode\n const [isDetailedMode, toggleDetailedMode] = React.useState(false);\n\n // store the last focused cell, so that up/down arrow key navigation remains in the same column\n const [lastFocusedCellIndex, setLastFocusedCellIndex] = useLastFocusedCellIndex();\n\n // store pending changes for each row\n // changes are saved as soon as the active row changes, so in most cases this will only contain the active row's changes\n // but not always - if validation or server requests fail when saving, those rows remain until the failure is resolved\n const pendingChangesFns = usePendingChanges<TType>(isEnabled, handleSave, validator);\n\n // if focus leaves the table in any way, trigger a save\n const handleBlur = React.useCallback(\n (event: React.FocusEvent<HTMLTableElement>) => {\n // custom event from datepicker, and it doesn't have the relatedTarget property set.\n const isClosingDatepicker = isDate((event as any).detail);\n\n if (\n event.relatedTarget !== event.currentTarget &&\n !isElementInsideOrTriggeredFromContainer(event.relatedTarget, event.currentTarget) &&\n !isClosingDatepicker\n ) {\n pendingChangesFns.saveChanges();\n }\n },\n [pendingChangesFns.saveChanges]\n );\n\n useGlobalKeyDown(isEnabled && isEditing ? { key: 's', meta: true, shift: false } : undefined, event => {\n event.preventDefault();\n pendingChangesFns.saveChanges();\n });\n\n return {\n isEnabled,\n isEditing,\n isDetailedMode,\n toggleDetailedMode: isEnabled ? toggleDetailedMode : () => undefined,\n toggleEditing: isEnabled ? toggleEditing : () => undefined,\n lastFocusedCellIndex,\n setLastFocusedCellIndex,\n ...pendingChangesFns,\n handleBlur: isEnabled && isEditing ? handleBlur : () => undefined,\n };\n}\n\ntype SaveState = 'pending' | 'complete';\ntype PendingChange<TType = unknown> = Partial<TType> & {\n _meta: {\n original: TType;\n moveReason: Record<string, 'search' | 'sorting' | 'filter'>;\n errors: {\n row: string;\n cells: Record<string, string>;\n hasShownErrorAlert: boolean;\n };\n status?: SaveState;\n };\n};\n\nfunction usePendingChanges<TType = unknown>(\n isEnabled: boolean,\n handleSave: Table3EditingSaveHandler<TType> | undefined,\n validator: Table3EditingValidatorFn<TType> | undefined\n) {\n const [pendingChanges, setPendingChanges] = React.useState<Record<string, PendingChange<TType>>>({});\n // we maintain save status as separate state because 'complete' needs to briefly show after pendingChanges are deleted\n const [saveStates, setSaveState] = React.useState<Record<string, SaveState>>({});\n\n function getCellValue<T extends TType>(cell: ReactTableCell<T, unknown>): unknown | undefined {\n return pendingChanges[cell.row.id]?.[cell.column.id];\n }\n\n function getCellError<T extends TType>(cell: ReactTableCell<T, unknown>): string | undefined {\n return pendingChanges[cell.row.id]?._meta.errors?.cells?.[cell.column.id];\n }\n\n const setCellValue = React.useCallback(function <T extends TType>(\n cell: ReactTableCell<T, unknown>,\n change: unknown,\n rowIndex: number\n ) {\n setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n const rowChanges = {\n ...currentChanges[cell.row.id],\n _meta: {\n ...currentChanges[cell.row.id]?._meta,\n original: cell.row.original,\n moveReason: {\n ...currentChanges[cell.row.id]?._meta.moveReason,\n },\n errors: {\n ...currentChanges[cell.row.id]?._meta.errors,\n },\n },\n } as PendingChange<T>;\n\n // update if the change is different to the original (saved) value,\n // otherwise remove any change - no point saving the same value\n if (change !== cell.row.original[cell.column.id]) {\n rowChanges[cell.column.id] = change;\n\n // determine if the row will move position based on this change, and save why it will move\n const reason = willRowMove(cell, change, rowIndex);\n\n if (reason) {\n rowChanges._meta.moveReason[cell.column.id] = reason;\n } else {\n delete rowChanges._meta.moveReason[cell.column.id];\n }\n } else {\n delete rowChanges[cell.column.id];\n }\n\n // set the changes for the row...\n // or delete if there are no changes left, so that we don't store changes with unchanged data\n if (Object.keys(rowChanges).filter(k => k !== '_meta').length) {\n nextChanges[cell.row.id] = rowChanges;\n } else {\n delete nextChanges[cell.row.id];\n }\n\n return nextChanges;\n });\n },\n []);\n\n async function validateCell<T extends TType>(cell: ReactTableCell<T, unknown>) {\n if (!validator || !isEnabled) {\n return;\n }\n\n const changeSet = getChangesetFromChanges(pendingChanges[cell.row.id]);\n\n // only validate if the cell being blurred actually has any changes\n if (cell.column.id in changeSet) {\n const errors = ((await validator(changeSet)) ?? {}) as Record<string, string>;\n\n setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n nextChanges[cell.row.id]._meta = {\n ...nextChanges[cell.row.id]._meta,\n errors: {\n ...nextChanges[cell.row.id]._meta.errors,\n cells: errors,\n hasShownErrorAlert:\n Object.keys(errors).length && !nextChanges[cell.row.id]._meta.errors.hasShownErrorAlert\n ? false\n : nextChanges[cell.row.id]._meta.errors.hasShownErrorAlert,\n },\n };\n return nextChanges;\n });\n }\n }\n\n function hasRowErrors(rowId: string) {\n if (!isEnabled) {\n return false;\n }\n\n return (\n !!pendingChanges[rowId]?._meta.errors?.row || !!Object.keys(pendingChanges[rowId]?._meta.errors?.cells ?? {}).length\n );\n }\n\n function hasRowErrorsSeen(rowId: string) {\n if (!isEnabled) {\n return false;\n }\n\n return hasRowErrors(rowId) && !!pendingChanges[rowId]._meta.errors?.hasShownErrorAlert;\n }\n\n function setRowErrorsSeen(rowId: string) {\n if (pendingChanges[rowId]._meta.errors?.hasShownErrorAlert === false) {\n setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n nextChanges[rowId]._meta.errors = {\n ...nextChanges[rowId]._meta.errors,\n hasShownErrorAlert: true,\n };\n return nextChanges;\n });\n }\n }\n\n function getRowSaveStatus(rowId: string) {\n if (!isEnabled) {\n return false;\n }\n\n return saveStates[rowId];\n }\n\n function setRowSaveStatus(rowId: string, status: 'pending' | 'complete' | undefined) {\n setSaveState(currentStates => {\n const nextStates = { ...currentStates };\n\n if (status) {\n nextStates[rowId] = status;\n } else {\n delete nextStates[rowId];\n }\n\n return nextStates;\n });\n }\n\n function getRowMoveReason(rowId: string) {\n return pendingChanges[rowId]?._meta.moveReason ? Object.values(pendingChanges[rowId]._meta.moveReason)[0] : undefined;\n }\n\n function hasChanges(rowId?: string) {\n if (!isEnabled) {\n return false;\n }\n\n return rowId ? !!pendingChanges[rowId] : !!Object.keys(pendingChanges).length;\n }\n\n function hasErrors<T extends TType>(table: ReactTable<T>, tableRef: React.RefObject<TableRef>) {\n if (!isEnabled) {\n return false;\n }\n\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const focusIsInsideTable = tableRef.current?.contains(document.activeElement);\n\n let activeRow;\n\n if (tableMeta.rowActive.rowActiveIndex !== undefined) {\n activeRow = table.getRowModel().rows[tableMeta.rowActive.rowActiveIndex];\n }\n\n return Object.keys(\n getErrors().filter(error => {\n if (activeRow?.id && focusIsInsideTable) {\n return error.rowId === activeRow?.id ? error.pendingChange._meta.errors.hasShownErrorAlert : true;\n }\n\n return true;\n })\n ).length;\n }\n\n function getErrors<T extends TType>() {\n return Object.keys(pendingChanges)\n .filter(hasRowErrors)\n .map(rowId => ({ rowId, pendingChange: pendingChanges[rowId] as PendingChange<T> }));\n }\n\n function resetChanges(rowId: string) {\n setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n delete nextChanges[rowId];\n return nextChanges;\n });\n }\n\n async function saveChanges(rowId: string | undefined = undefined) {\n if (!handleSave) {\n console.warn('Tried to save, but Table has no onSave handler');\n return;\n }\n\n // we save back to pendingChanges, so make a copy of it's state when save was triggered\n const changesToSave = rowId ? { [rowId]: pendingChanges[rowId] } : { ...pendingChanges };\n const changes = Object.keys(changesToSave);\n\n if (changes.length) {\n changes.map(async rowId => {\n const pendingChange = changesToSave[rowId];\n\n const changeSet = getChangesetFromChanges(pendingChange);\n\n try {\n // set saving = true\n setRowSaveStatus(rowId, 'pending');\n\n // re-run validation, maybe a cell is already invalid but has never been blurred\n if (validator) {\n const errors = await validator(changeSet);\n\n if (errors && Object.keys(errors).length) {\n throw errors;\n }\n }\n\n // send new data to the server\n await handleSave(changeSet);\n\n // cleanup changes, we don't need them after saving\n resetChanges(rowId);\n setRowSaveStatus(rowId, 'complete');\n } catch (error) {\n // the onSave handler should throw errors when something fails, e.g. validation, network errors etc\n // this code handles those errors and maps them either to row errors or cell specific errors\n let rowError;\n let cellErrors;\n\n if (typeof error === 'string') {\n rowError = error;\n } else if (error instanceof Error) {\n rowError = error.message;\n\n // most of our apis return error objects within this shape\n if (typeof (error as any).response?.data === 'object') {\n cellErrors = (error as any).response?.data;\n }\n } else if (typeof error === 'object') {\n cellErrors = error;\n }\n\n if (rowError || cellErrors) {\n setPendingChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n nextChanges[rowId]._meta.errors = {\n row: rowError,\n cells: cellErrors,\n hasShownErrorAlert: nextChanges[rowId]._meta.errors?.hasShownErrorAlert ?? false,\n };\n return nextChanges;\n });\n }\n\n setRowSaveStatus(rowId, undefined);\n }\n });\n }\n }\n\n return {\n getCellValue,\n getCellError,\n setCellValue,\n validateCell,\n hasChanges,\n hasErrors,\n getErrors,\n saveChanges,\n resetChanges,\n hasRowErrors,\n hasRowErrorsSeen,\n setRowErrorsSeen,\n getRowSaveStatus,\n setRowSaveStatus,\n getRowMoveReason,\n };\n}\n\nfunction useLastFocusedCellIndex(): [number | undefined, (index: number | undefined) => void] {\n // store the last focused cell, so that up/down arrow key navigation remains in the same column\n const lastFocusedCellIndexRef = React.useRef<number | undefined>(undefined);\n const setLastFocusedCellIndex = React.useCallback((index: number | undefined) => {\n lastFocusedCellIndexRef.current = index;\n }, []);\n\n return [lastFocusedCellIndexRef.current, setLastFocusedCellIndex];\n}\n\nfunction getChangesetFromChanges<TType = unknown>(changes: PendingChange<TType>): TType {\n // extract the original data from the row changes\n const { _meta, ...changeset } = changes ?? {};\n // and mix them in with the changes, ready to send to the server\n return { ..._meta?.original, ...changeset };\n}\n"],"names":["useTableEditing","isEnabled","handleSave","validator","isEditing","toggleEditing","React","useState","isDetailedMode","toggleDetailedMode","lastFocusedCellIndex","setLastFocusedCellIndex","useLastFocusedCellIndex","pendingChangesFns","usePendingChanges","handleBlur","useCallback","event","isClosingDatepicker","isDate","detail","relatedTarget","currentTarget","isElementInsideOrTriggeredFromContainer","saveChanges","useGlobalKeyDown","key","meta","shift","undefined","preventDefault","rowId","console","warn","Promise","resolve","changesToSave","pendingChanges","changes","Object","keys","length","map","pendingChange","changeSet","getChangesetFromChanges","_catch","_temp3","_result","_exit","then","resetChanges","setRowSaveStatus","_temp2","errors","error","rowError","cellErrors","Error","_error$response","message","response","data","_error$response2","setPendingChanges","currentChanges","nextChanges","_meta","row","cells","hasShownErrorAlert","_nextChanges$rowId$_m","_nextChanges$rowId$_m2","e","reject","validateCell","cell","id","_temp","column","saveStates","setSaveState","getCellValue","_pendingChanges$cell$","getCellError","_pendingChanges$cell$2","_pendingChanges$cell$3","_pendingChanges$cell$4","setCellValue","change","rowIndex","rowChanges","_currentChanges$cell$","original","moveReason","_currentChanges$cell$2","_currentChanges$cell$3","reason","willRowMove","filter","k","hasRowErrors","_pendingChanges$rowId","_pendingChanges$rowId2","_pendingChanges$rowId3","_pendingChanges$rowId4","_pendingChanges$rowId5","hasRowErrorsSeen","_pendingChanges$rowId6","setRowErrorsSeen","_pendingChanges$rowId7","getRowSaveStatus","status","currentStates","nextStates","getRowMoveReason","_pendingChanges$rowId8","values","hasChanges","hasErrors","table","tableRef","tableMeta","options","focusIsInsideTable","_tableRef$current","current","contains","document","activeElement","activeRow","rowActive","rowActiveIndex","getRowModel","rows","getErrors","_activeRow","_activeRow2","lastFocusedCellIndexRef","useRef","index","changeset"],"mappings":"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"}
|
|
@@ -44,6 +44,7 @@ function TableGrid(props) {
|
|
|
44
44
|
}))))))), table.instance.getRowModel().rows.length ? ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Body, {
|
|
45
45
|
enableHorizontalArrowKeyNavigation: enableHorizontalArrowKeyNavigation,
|
|
46
46
|
table: table.instance,
|
|
47
|
+
tableElement: table.ref.current,
|
|
47
48
|
scrollToIndex: table.renderer.scrollToIndex,
|
|
48
49
|
style: table.renderer.style
|
|
49
50
|
}, table.renderer.rows), table.meta.footer.isEnabled ? /*#__PURE__*/React__default.createElement(Foot, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../../../../../../../../src/primitives/Table/Core/Table.tsx"],"sourcesContent":["import React from 'react';\nimport { FocusScope } from '@react-aria/focus';\nimport { Header } from './components/Header/Header';\nimport { Body } from './components/Body/Body';\nimport { Foot } from './components/Footer/Footer';\nimport { EmptyStateBody } from './components/Body/EmptyStateBody';\nimport { useTableReturnValue } from './useTable';\nimport { TableToolbar } from './components/Toolbar/Toolbar';\nimport './style.css';\n\ntype TableProps = {\n children: JSX.Element | Array<JSX.Element | null>;\n};\n\nexport function Table(props: TableProps) {\n return <>{props.children}</>;\n}\nTable.Toolbar = TableToolbar;\nTable.Grid = TableGrid;\n\nexport type TableGridProps<TType = unknown> = React.TableHTMLAttributes<HTMLTableElement> & {\n 'data-taco': string;\n enableHorizontalArrowKeyNavigation?: boolean;\n table: useTableReturnValue<TType>;\n};\n\nexport function TableGrid<TType = unknown>(props: TableGridProps<TType>) {\n const { enableHorizontalArrowKeyNavigation, table, ...attributes } = props;\n const handleFocus =\n table.meta.rowActive.rowActiveIndex === undefined\n ? (event: React.FocusEvent) => {\n table.meta.rowActive.handleFocus(event, table.meta.length, table.renderer.scrollToIndex);\n }\n : undefined;\n\n return (\n <>\n <style>{table.stylesheet}</style>\n <FocusScope>\n <table\n {...attributes}\n id={table.id}\n data-table-font-size={table.meta.fontSize.size}\n data-table-grouped={!!table.state.grouping?.length}\n data-table-horizontally-scrolled={table.meta.columnFreezing.isHorizontallyScrolled ? true : undefined}\n data-table-status={table.meta.server.isEnabled ? (table.meta.server.isReady ? 'ready' : undefined) : 'ready'}\n data-table-pause-hover={table.meta.rowActive.isHoverStatePaused ? true : undefined}\n data-table-resizing={table.state.columnSizingInfo.isResizingColumn ? true : undefined}\n data-table-row-height={table.meta.rowHeight.height}\n onFocus={handleFocus}\n onScroll={table.meta.columnFreezing.handleScroll}\n ref={table.ref}\n style={table.style}\n tabIndex={-1}>\n <thead>\n {table.instance.getHeaderGroups().map(headerGroup => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map(props => (\n <Header key={props.id} header={props} scrollToIndex={table.renderer.scrollToIndex} />\n ))}\n </tr>\n ))}\n </thead>\n {table.instance.getRowModel().rows.length ? (\n <>\n <Body\n enableHorizontalArrowKeyNavigation={enableHorizontalArrowKeyNavigation}\n table={table.instance}\n scrollToIndex={table.renderer.scrollToIndex}\n style={table.renderer.style}>\n {table.renderer.rows}\n </Body>\n {table.meta.footer.isEnabled ? <Foot table={table.instance} /> : null}\n </>\n ) : (\n <EmptyStateBody emptyState={table.props.emptyState} />\n )}\n </table>\n </FocusScope>\n </>\n );\n}\n"],"names":["Table","props","React","children","Toolbar","TableToolbar","Grid","TableGrid","enableHorizontalArrowKeyNavigation","table","attributes","handleFocus","meta","rowActive","rowActiveIndex","undefined","event","length","renderer","scrollToIndex","stylesheet","FocusScope","id","fontSize","size","_table$state$grouping","state","grouping","columnFreezing","isHorizontallyScrolled","server","isEnabled","isReady","isHoverStatePaused","columnSizingInfo","isResizingColumn","rowHeight","height","onFocus","onScroll","handleScroll","ref","style","tabIndex","instance","getHeaderGroups","map","headerGroup","key","headers","Header","header","getRowModel","rows","Body","footer","Foot","EmptyStateBody","emptyState"],"mappings":";;;;;;;;SAcgBA,KAAKA,CAACC,KAAiB;EACnC,oBAAOC,4DAAGD,KAAK,CAACE,QAAQ,CAAI;AAChC;AACAH,KAAK,CAACI,OAAO,GAAGC,YAAY;AAC5BL,KAAK,CAACM,IAAI,GAAGC,SAAS;SAQNA,SAASA,CAAkBN,KAA4B;;EACnE,MAAM;IAAEO,kCAAkC;IAAEC,KAAK;IAAE,GAAGC;GAAY,GAAGT,KAAK;EAC1E,MAAMU,WAAW,GACbF,KAAK,CAACG,IAAI,CAACC,SAAS,CAACC,cAAc,KAAKC,SAAS,GAC1CC,KAAuB;IACpBP,KAAK,CAACG,IAAI,CAACC,SAAS,CAACF,WAAW,CAACK,KAAK,EAAEP,KAAK,CAACG,IAAI,CAACK,MAAM,EAAER,KAAK,CAACS,QAAQ,CAACC,aAAa,CAAC;GAC3F,GACDJ,SAAS;EAEnB,oBACIb,yEACIA,4CAAQO,KAAK,CAACW,UAAU,CAAS,eACjClB,6BAACmB,UAAU,qBACPnB,wDACQQ,UAAU;IACdY,EAAE,EAAEb,KAAK,CAACa,EAAE;4BACUb,KAAK,CAACG,IAAI,CAACW,QAAQ,CAACC,IAAI;0BAC1B,CAAC,GAAAC,qBAAA,GAAChB,KAAK,CAACiB,KAAK,CAACC,QAAQ,cAAAF,qBAAA,eAApBA,qBAAA,CAAsBR,MAAM;wCAChBR,KAAK,CAACG,IAAI,CAACgB,cAAc,CAACC,sBAAsB,GAAG,IAAI,GAAGd,SAAS;yBAClFN,KAAK,CAACG,IAAI,CAACkB,MAAM,CAACC,SAAS,GAAItB,KAAK,CAACG,IAAI,CAACkB,MAAM,CAACE,OAAO,GAAG,OAAO,GAAGjB,SAAS,GAAI,OAAO;8BACpFN,KAAK,CAACG,IAAI,CAACC,SAAS,CAACoB,kBAAkB,GAAG,IAAI,GAAGlB,SAAS;2BAC7DN,KAAK,CAACiB,KAAK,CAACQ,gBAAgB,CAACC,gBAAgB,GAAG,IAAI,GAAGpB,SAAS;6BAC9DN,KAAK,CAACG,IAAI,CAACwB,SAAS,CAACC,MAAM;IAClDC,OAAO,EAAE3B,WAAW;IACpB4B,QAAQ,EAAE9B,KAAK,CAACG,IAAI,CAACgB,cAAc,CAACY,YAAY;IAChDC,GAAG,EAAEhC,KAAK,CAACgC,GAAG;IACdC,KAAK,EAAEjC,KAAK,CAACiC,KAAK;IAClBC,QAAQ,EAAE,CAAC;mBACXzC,4CACKO,KAAK,CAACmC,QAAQ,CAACC,eAAe,EAAE,CAACC,GAAG,CAACC,WAAW,mBAC7C7C;IAAI8C,GAAG,EAAED,WAAW,CAACzB;KAChByB,WAAW,CAACE,OAAO,CAACH,GAAG,CAAC7C,KAAK,mBAC1BC,6BAACgD,MAAM;IAACF,GAAG,EAAE/C,KAAK,CAACqB,EAAE;IAAE6B,MAAM,EAAElD,KAAK;IAAEkB,aAAa,EAAEV,KAAK,CAACS,QAAQ,CAACC;IAAiB,CACxF,CAAC,CACD,CACR,CAAC,CACE,EACPV,KAAK,CAACmC,QAAQ,CAACQ,WAAW,EAAE,CAACC,IAAI,CAACpC,MAAM,kBACrCf,yEACIA,6BAACoD,IAAI;IACD9C,kCAAkC,EAAEA,kCAAkC;IACtEC,KAAK,EAAEA,KAAK,CAACmC,QAAQ;
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../../../../../../../../src/primitives/Table/Core/Table.tsx"],"sourcesContent":["import React from 'react';\nimport { FocusScope } from '@react-aria/focus';\nimport { Header } from './components/Header/Header';\nimport { Body } from './components/Body/Body';\nimport { Foot } from './components/Footer/Footer';\nimport { EmptyStateBody } from './components/Body/EmptyStateBody';\nimport { useTableReturnValue } from './useTable';\nimport { TableToolbar } from './components/Toolbar/Toolbar';\nimport './style.css';\n\ntype TableProps = {\n children: JSX.Element | Array<JSX.Element | null>;\n};\n\nexport function Table(props: TableProps) {\n return <>{props.children}</>;\n}\nTable.Toolbar = TableToolbar;\nTable.Grid = TableGrid;\n\nexport type TableGridProps<TType = unknown> = React.TableHTMLAttributes<HTMLTableElement> & {\n 'data-taco': string;\n enableHorizontalArrowKeyNavigation?: boolean;\n table: useTableReturnValue<TType>;\n};\n\nexport function TableGrid<TType = unknown>(props: TableGridProps<TType>) {\n const { enableHorizontalArrowKeyNavigation, table, ...attributes } = props;\n const handleFocus =\n table.meta.rowActive.rowActiveIndex === undefined\n ? (event: React.FocusEvent) => {\n table.meta.rowActive.handleFocus(event, table.meta.length, table.renderer.scrollToIndex);\n }\n : undefined;\n\n return (\n <>\n <style>{table.stylesheet}</style>\n <FocusScope>\n <table\n {...attributes}\n id={table.id}\n data-table-font-size={table.meta.fontSize.size}\n data-table-grouped={!!table.state.grouping?.length}\n data-table-horizontally-scrolled={table.meta.columnFreezing.isHorizontallyScrolled ? true : undefined}\n data-table-status={table.meta.server.isEnabled ? (table.meta.server.isReady ? 'ready' : undefined) : 'ready'}\n data-table-pause-hover={table.meta.rowActive.isHoverStatePaused ? true : undefined}\n data-table-resizing={table.state.columnSizingInfo.isResizingColumn ? true : undefined}\n data-table-row-height={table.meta.rowHeight.height}\n onFocus={handleFocus}\n onScroll={table.meta.columnFreezing.handleScroll}\n ref={table.ref}\n style={table.style}\n tabIndex={-1}>\n <thead>\n {table.instance.getHeaderGroups().map(headerGroup => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map(props => (\n <Header key={props.id} header={props} scrollToIndex={table.renderer.scrollToIndex} />\n ))}\n </tr>\n ))}\n </thead>\n {table.instance.getRowModel().rows.length ? (\n <>\n <Body\n enableHorizontalArrowKeyNavigation={enableHorizontalArrowKeyNavigation}\n table={table.instance}\n tableElement={table.ref.current}\n scrollToIndex={table.renderer.scrollToIndex}\n style={table.renderer.style}>\n {table.renderer.rows}\n </Body>\n {table.meta.footer.isEnabled ? <Foot table={table.instance} /> : null}\n </>\n ) : (\n <EmptyStateBody emptyState={table.props.emptyState} />\n )}\n </table>\n </FocusScope>\n </>\n );\n}\n"],"names":["Table","props","React","children","Toolbar","TableToolbar","Grid","TableGrid","enableHorizontalArrowKeyNavigation","table","attributes","handleFocus","meta","rowActive","rowActiveIndex","undefined","event","length","renderer","scrollToIndex","stylesheet","FocusScope","id","fontSize","size","_table$state$grouping","state","grouping","columnFreezing","isHorizontallyScrolled","server","isEnabled","isReady","isHoverStatePaused","columnSizingInfo","isResizingColumn","rowHeight","height","onFocus","onScroll","handleScroll","ref","style","tabIndex","instance","getHeaderGroups","map","headerGroup","key","headers","Header","header","getRowModel","rows","Body","tableElement","current","footer","Foot","EmptyStateBody","emptyState"],"mappings":";;;;;;;;SAcgBA,KAAKA,CAACC,KAAiB;EACnC,oBAAOC,4DAAGD,KAAK,CAACE,QAAQ,CAAI;AAChC;AACAH,KAAK,CAACI,OAAO,GAAGC,YAAY;AAC5BL,KAAK,CAACM,IAAI,GAAGC,SAAS;SAQNA,SAASA,CAAkBN,KAA4B;;EACnE,MAAM;IAAEO,kCAAkC;IAAEC,KAAK;IAAE,GAAGC;GAAY,GAAGT,KAAK;EAC1E,MAAMU,WAAW,GACbF,KAAK,CAACG,IAAI,CAACC,SAAS,CAACC,cAAc,KAAKC,SAAS,GAC1CC,KAAuB;IACpBP,KAAK,CAACG,IAAI,CAACC,SAAS,CAACF,WAAW,CAACK,KAAK,EAAEP,KAAK,CAACG,IAAI,CAACK,MAAM,EAAER,KAAK,CAACS,QAAQ,CAACC,aAAa,CAAC;GAC3F,GACDJ,SAAS;EAEnB,oBACIb,yEACIA,4CAAQO,KAAK,CAACW,UAAU,CAAS,eACjClB,6BAACmB,UAAU,qBACPnB,wDACQQ,UAAU;IACdY,EAAE,EAAEb,KAAK,CAACa,EAAE;4BACUb,KAAK,CAACG,IAAI,CAACW,QAAQ,CAACC,IAAI;0BAC1B,CAAC,GAAAC,qBAAA,GAAChB,KAAK,CAACiB,KAAK,CAACC,QAAQ,cAAAF,qBAAA,eAApBA,qBAAA,CAAsBR,MAAM;wCAChBR,KAAK,CAACG,IAAI,CAACgB,cAAc,CAACC,sBAAsB,GAAG,IAAI,GAAGd,SAAS;yBAClFN,KAAK,CAACG,IAAI,CAACkB,MAAM,CAACC,SAAS,GAAItB,KAAK,CAACG,IAAI,CAACkB,MAAM,CAACE,OAAO,GAAG,OAAO,GAAGjB,SAAS,GAAI,OAAO;8BACpFN,KAAK,CAACG,IAAI,CAACC,SAAS,CAACoB,kBAAkB,GAAG,IAAI,GAAGlB,SAAS;2BAC7DN,KAAK,CAACiB,KAAK,CAACQ,gBAAgB,CAACC,gBAAgB,GAAG,IAAI,GAAGpB,SAAS;6BAC9DN,KAAK,CAACG,IAAI,CAACwB,SAAS,CAACC,MAAM;IAClDC,OAAO,EAAE3B,WAAW;IACpB4B,QAAQ,EAAE9B,KAAK,CAACG,IAAI,CAACgB,cAAc,CAACY,YAAY;IAChDC,GAAG,EAAEhC,KAAK,CAACgC,GAAG;IACdC,KAAK,EAAEjC,KAAK,CAACiC,KAAK;IAClBC,QAAQ,EAAE,CAAC;mBACXzC,4CACKO,KAAK,CAACmC,QAAQ,CAACC,eAAe,EAAE,CAACC,GAAG,CAACC,WAAW,mBAC7C7C;IAAI8C,GAAG,EAAED,WAAW,CAACzB;KAChByB,WAAW,CAACE,OAAO,CAACH,GAAG,CAAC7C,KAAK,mBAC1BC,6BAACgD,MAAM;IAACF,GAAG,EAAE/C,KAAK,CAACqB,EAAE;IAAE6B,MAAM,EAAElD,KAAK;IAAEkB,aAAa,EAAEV,KAAK,CAACS,QAAQ,CAACC;IAAiB,CACxF,CAAC,CACD,CACR,CAAC,CACE,EACPV,KAAK,CAACmC,QAAQ,CAACQ,WAAW,EAAE,CAACC,IAAI,CAACpC,MAAM,kBACrCf,yEACIA,6BAACoD,IAAI;IACD9C,kCAAkC,EAAEA,kCAAkC;IACtEC,KAAK,EAAEA,KAAK,CAACmC,QAAQ;IACrBW,YAAY,EAAE9C,KAAK,CAACgC,GAAG,CAACe,OAAO;IAC/BrC,aAAa,EAAEV,KAAK,CAACS,QAAQ,CAACC,aAAa;IAC3CuB,KAAK,EAAEjC,KAAK,CAACS,QAAQ,CAACwB;KACrBjC,KAAK,CAACS,QAAQ,CAACmC,IAAI,CACjB,EACN5C,KAAK,CAACG,IAAI,CAAC6C,MAAM,CAAC1B,SAAS,gBAAG7B,6BAACwD,IAAI;IAACjD,KAAK,EAAEA,KAAK,CAACmC;IAAY,GAAG,IAAI,CACtE,mBAEH1C,6BAACyD,cAAc;IAACC,UAAU,EAAEnD,KAAK,CAACR,KAAK,CAAC2D;IAAc,CACzD,CACG,CACC,CACd;AAEX;;;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React__default from 'react';
|
|
2
2
|
import { hasFocusableElement } from '../../../../../utils/dom.js';
|
|
3
|
+
import { isPressingMetaKey } from '../../../../../utils/keyboard.js';
|
|
3
4
|
import { useAugmentedFocusManager } from './util.js';
|
|
4
5
|
|
|
5
6
|
function Body(props) {
|
|
@@ -7,6 +8,7 @@ function Body(props) {
|
|
|
7
8
|
enableHorizontalArrowKeyNavigation = false,
|
|
8
9
|
scrollToIndex,
|
|
9
10
|
table,
|
|
11
|
+
tableElement,
|
|
10
12
|
...attributes
|
|
11
13
|
} = props;
|
|
12
14
|
const ref = React__default.useRef(null);
|
|
@@ -24,12 +26,30 @@ function Body(props) {
|
|
|
24
26
|
return;
|
|
25
27
|
}
|
|
26
28
|
tableMeta.rowActive.setHoverStatePaused(true);
|
|
27
|
-
const
|
|
29
|
+
const isMetaKeyPressed = isPressingMetaKey(event);
|
|
30
|
+
let focusedElement;
|
|
31
|
+
switch (event.key) {
|
|
32
|
+
case 'ArrowLeft':
|
|
33
|
+
focusedElement = isMetaKeyPressed ? focusManager.focusFirst() : focusManager.focusPrevious();
|
|
34
|
+
break;
|
|
35
|
+
case 'ArrowRight':
|
|
36
|
+
focusedElement = isMetaKeyPressed ? focusManager.focusLast() : focusManager.focusNext();
|
|
37
|
+
// Scrolls table all the way to the right
|
|
38
|
+
if (isMetaKeyPressed && tableElement) {
|
|
39
|
+
tableElement.scrollLeft = tableElement.scrollWidth;
|
|
40
|
+
}
|
|
41
|
+
break;
|
|
42
|
+
default:
|
|
43
|
+
focusedElement = event.shiftKey ? focusManager.focusPrevious() : focusManager.focusNext();
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
28
46
|
if (focusedElement) {
|
|
29
47
|
// override default behaviour, since we're handling focus internally now
|
|
30
48
|
event.preventDefault();
|
|
31
49
|
return;
|
|
32
50
|
}
|
|
51
|
+
// The code below only executes when focusedElement was undefined/null. This happens only when arrow-left/shift+tab
|
|
52
|
+
// is pressed on the first cell or arrow-right/tab is pressed on the last cell.
|
|
33
53
|
if (event.shiftKey || event.key === 'ArrowLeft') {
|
|
34
54
|
if (!isFirstRow) {
|
|
35
55
|
// there are no previous elements to focus, go up a row or go outside the table
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Body.js","sources":["../../../../../../../../../../src/primitives/Table/Core/components/Body/Body.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { useAugmentedFocusManager } from './util';\nimport { hasFocusableElement } from '../../../../../utils/dom';\n\ntype BodyProps<TType = unknown> = React.HTMLAttributes<HTMLTableSectionElement> & {\n enableHorizontalArrowKeyNavigation?: boolean;\n scrollToIndex: (index: number) => void;\n table: ReactTable<TType>;\n};\n\nexport function Body<TType = unknown>(props: BodyProps<TType>) {\n const { enableHorizontalArrowKeyNavigation = false, scrollToIndex, table, ...attributes } = props;\n const ref = React.useRef<HTMLTableSectionElement>(null);\n const focusManager = useAugmentedFocusManager();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return;\n }\n\n if (tableMeta.rowActive.rowActiveIndex !== undefined) {\n const isFirstRow = tableMeta.rowActive.rowActiveIndex === 0;\n const isLastRow = tableMeta.rowActive.rowActiveIndex === tableMeta.length - 1;\n if (\n event.key === 'Tab' ||\n (enableHorizontalArrowKeyNavigation && (event.key === 'ArrowLeft' || event.key === 'ArrowRight'))\n ) {\n if (event.key === 'Tab' && !hasFocusableElement((event.target as HTMLElement).closest('tr[data-row-id]'))) {\n return;\n }\n\n tableMeta.rowActive.setHoverStatePaused(true);\n\n const
|
|
1
|
+
{"version":3,"file":"Body.js","sources":["../../../../../../../../../../src/primitives/Table/Core/components/Body/Body.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport { useAugmentedFocusManager } from './util';\nimport { hasFocusableElement } from '../../../../../utils/dom';\nimport { isPressingMetaKey } from '../../../../../utils/keyboard';\nimport { TableRef } from '../../../types';\n\ntype BodyProps<TType = unknown> = React.HTMLAttributes<HTMLTableSectionElement> & {\n enableHorizontalArrowKeyNavigation?: boolean;\n scrollToIndex: (index: number) => void;\n table: ReactTable<TType>;\n tableElement: TableRef | null;\n};\n\nexport function Body<TType = unknown>(props: BodyProps<TType>) {\n const { enableHorizontalArrowKeyNavigation = false, scrollToIndex, table, tableElement, ...attributes } = props;\n const ref = React.useRef<HTMLTableSectionElement>(null);\n const focusManager = useAugmentedFocusManager();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return;\n }\n\n if (tableMeta.rowActive.rowActiveIndex !== undefined) {\n const isFirstRow = tableMeta.rowActive.rowActiveIndex === 0;\n const isLastRow = tableMeta.rowActive.rowActiveIndex === tableMeta.length - 1;\n if (\n event.key === 'Tab' ||\n (enableHorizontalArrowKeyNavigation && (event.key === 'ArrowLeft' || event.key === 'ArrowRight'))\n ) {\n if (event.key === 'Tab' && !hasFocusableElement((event.target as HTMLElement).closest('tr[data-row-id]'))) {\n return;\n }\n\n tableMeta.rowActive.setHoverStatePaused(true);\n\n const isMetaKeyPressed = isPressingMetaKey(event);\n let focusedElement;\n\n switch (event.key) {\n case 'ArrowLeft':\n focusedElement = isMetaKeyPressed ? focusManager.focusFirst() : focusManager.focusPrevious();\n break;\n case 'ArrowRight':\n focusedElement = isMetaKeyPressed ? focusManager.focusLast() : focusManager.focusNext();\n\n // Scrolls table all the way to the right\n if (isMetaKeyPressed && tableElement) {\n tableElement.scrollLeft = tableElement.scrollWidth;\n }\n\n break;\n default:\n focusedElement = event.shiftKey ? focusManager.focusPrevious() : focusManager.focusNext();\n break;\n }\n\n if (focusedElement) {\n // override default behaviour, since we're handling focus internally now\n event.preventDefault();\n return;\n }\n\n // The code below only executes when focusedElement was undefined/null. This happens only when arrow-left/shift+tab\n // is pressed on the first cell or arrow-right/tab is pressed on the last cell.\n if (event.shiftKey || event.key === 'ArrowLeft') {\n if (!isFirstRow) {\n // there are no previous elements to focus, go up a row or go outside the table\n // but only if there are actually any focusable elements in the row\n event.preventDefault();\n const prevIndex = tableMeta.rowActive.rowActiveIndex - 1;\n tableMeta.rowActive.setRowActiveIndex(prevIndex);\n requestAnimationFrame(() => {\n focusManager.focusLast();\n scrollToIndex(prevIndex);\n });\n }\n } else {\n if (!isLastRow) {\n // there are no next elements to focus, go down a row or go outside the table\n // but only if there are actually any focusable elements in the row\n event.preventDefault();\n const nextIndex = tableMeta.rowActive.rowActiveIndex + 1;\n tableMeta.rowActive.setRowActiveIndex(nextIndex);\n requestAnimationFrame(() => {\n focusManager.focusFirst();\n scrollToIndex(nextIndex);\n });\n }\n }\n }\n }\n };\n const handleMouseMove = React.useCallback((event: React.MouseEvent<HTMLTableSectionElement>) => {\n const index = (event.target as HTMLElement)?.closest('tr')?.getAttribute('data-row-index');\n\n if (index) {\n tableMeta.rowActive.setRowHoverIndex(Number.parseInt(index));\n }\n }, []);\n\n // Sometimes this event does not trigger if the mouse leaves the window without leaving boundary of the table\n // this is a browser level bug and there's not much to be done about it\n const handleMouseLeave = React.useCallback(() => tableMeta.rowActive.setRowHoverIndex(undefined), []);\n\n return (\n <tbody\n {...attributes}\n onKeyDown={handleKeyDown}\n onMouseLeave={handleMouseLeave}\n onMouseMove={handleMouseMove}\n ref={ref}\n />\n );\n}\n"],"names":["Body","props","enableHorizontalArrowKeyNavigation","scrollToIndex","table","tableElement","attributes","ref","React","useRef","focusManager","useAugmentedFocusManager","tableMeta","options","meta","handleKeyDown","event","isDefaultPrevented","isPropagationStopped","rowActive","rowActiveIndex","undefined","isFirstRow","isLastRow","length","key","hasFocusableElement","target","closest","setHoverStatePaused","isMetaKeyPressed","isPressingMetaKey","focusedElement","focusFirst","focusPrevious","focusLast","focusNext","scrollLeft","scrollWidth","shiftKey","preventDefault","prevIndex","setRowActiveIndex","requestAnimationFrame","nextIndex","handleMouseMove","useCallback","index","_event$target","_event$target$closest","getAttribute","setRowHoverIndex","Number","parseInt","handleMouseLeave","onKeyDown","onMouseLeave","onMouseMove"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import React__default from 'react';
|
|
|
2
2
|
import { IconButton } from '../../../../../../../../components/IconButton/IconButton.js';
|
|
3
3
|
import { useLocalization } from '../../../../../../../../components/Provider/Localization.js';
|
|
4
4
|
import { TableFilterComparator } from '../../../../../../types.js';
|
|
5
|
+
import { guessComparatorsBasedOnControl } from '../util.js';
|
|
5
6
|
import { FilterColumn } from './FilterColumn.js';
|
|
6
7
|
import { FilterComparator } from './FilterComparator.js';
|
|
7
8
|
import { FilterValue } from './FilterValue.js';
|
|
@@ -28,14 +29,22 @@ function Filter(props) {
|
|
|
28
29
|
}
|
|
29
30
|
} = filter;
|
|
30
31
|
const handleChangeColumn = columnId => {
|
|
31
|
-
var _previousColumn$colum, _nextColumn$columnDef;
|
|
32
|
+
var _previousColumn$colum, _previousColumn$colum2, _nextColumn$columnDef;
|
|
32
33
|
const previousColumn = allColumns.find(column => column.id === id);
|
|
33
34
|
const nextColumn = allColumns.find(column => column.id === columnId);
|
|
34
35
|
// UX requirement: if old column data type is the same as next column data type,
|
|
35
36
|
// then we applying the same filter value for the next column,
|
|
36
37
|
// but when data types are different, we're reseting comparator ans value for the next column
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
if (previousColumn !== null && previousColumn !== void 0 && (_previousColumn$colum = previousColumn.columnDef.meta) !== null && _previousColumn$colum !== void 0 && _previousColumn$colum.dataType && (previousColumn === null || previousColumn === void 0 ? void 0 : (_previousColumn$colum2 = previousColumn.columnDef.meta) === null || _previousColumn$colum2 === void 0 ? void 0 : _previousColumn$colum2.dataType) === (nextColumn === null || nextColumn === void 0 ? void 0 : (_nextColumn$columnDef = nextColumn.columnDef.meta) === null || _nextColumn$columnDef === void 0 ? void 0 : _nextColumn$columnDef.dataType)) {
|
|
39
|
+
handleChange(position, {
|
|
40
|
+
id: columnId,
|
|
41
|
+
value: filter.value
|
|
42
|
+
});
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const validComparators = guessComparatorsBasedOnControl(nextColumn);
|
|
46
|
+
const value = {
|
|
47
|
+
comparator: validComparators[0],
|
|
39
48
|
value: undefined
|
|
40
49
|
};
|
|
41
50
|
handleChange(position, {
|