@economic/taco 2.7.4 → 2.8.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/components/Icon/components/CircleInformation.d.ts +3 -0
- package/dist/components/Icon/components/CircleQuestionmark.d.ts +3 -0
- package/dist/components/Icon/components/CircleWarning.d.ts +3 -0
- package/dist/components/Icon/components/index.d.ts +1 -1
- package/dist/components/Input/Input.d.ts +1 -1
- package/dist/components/Menu/components/Item.d.ts +1 -1
- package/dist/components/Menu/components/Link.d.ts +1 -1
- package/dist/components/Navigation2/components/Link.d.ts +1 -1
- package/dist/components/Select2/Select2.d.ts +1 -0
- package/dist/components/Select2/components/Option.d.ts +1 -1
- package/dist/components/Select2/components/Search.d.ts +1 -1
- package/dist/components/Select2/components/Trigger.d.ts +1 -0
- package/dist/components/Table3/components/columns/footer/Summary.d.ts +1 -0
- package/dist/components/Tag/Tag.d.ts +1 -1
- package/dist/esm/index.css +18 -3
- package/dist/esm/packages/taco/src/components/Combobox/Combobox.js +8 -1
- package/dist/esm/packages/taco/src/components/Combobox/Combobox.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Dialog/components/Content.js +0 -9
- package/dist/esm/packages/taco/src/components/Dialog/components/Content.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Icon/components/CircleInformation.js +19 -0
- package/dist/esm/packages/taco/src/components/Icon/components/CircleInformation.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Icon/components/CircleQuestionmark.js +19 -0
- package/dist/esm/packages/taco/src/components/Icon/components/CircleQuestionmark.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Icon/components/CircleWarning.js +19 -0
- package/dist/esm/packages/taco/src/components/Icon/components/CircleWarning.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Icon/components/index.js +6 -0
- package/dist/esm/packages/taco/src/components/Icon/components/index.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Provider/Localization.js +1 -1
- package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Select2/Select2.js +4 -4
- package/dist/esm/packages/taco/src/components/Select2/Select2.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Select2/components/Trigger.js +28 -7
- package/dist/esm/packages/taco/src/components/Select2/components/Trigger.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/Table3.js +8 -2
- package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingCell.js +3 -5
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingCell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingControl.js +15 -4
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingControl.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/controls/TextareaControl.js +35 -13
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/controls/TextareaControl.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/footer/Summary.js +12 -2
- package/dist/esm/packages/taco/src/components/Table3/components/columns/footer/Summary.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/header/Header.js +4 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/header/Header.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/EditButton.js +0 -9
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/EditButton.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/Filters.js +2 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/Filters.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useEditing.js +15 -8
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useEditing.js.map +1 -1
- package/dist/esm/packages/taco/src/hooks/useGlobalKeyDown.js +2 -2
- package/dist/esm/packages/taco/src/hooks/useGlobalKeyDown.js.map +1 -1
- package/dist/esm/packages/taco/src/index.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Button.js +5 -0
- package/dist/esm/packages/taco/src/primitives/Button.js.map +1 -1
- package/dist/esm/packages/taco/src/utils/keyboard.js +24 -19
- package/dist/esm/packages/taco/src/utils/keyboard.js.map +1 -1
- package/dist/index.css +18 -3
- package/dist/taco.cjs.development.js +212 -86
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/dist/utils/keyboard.d.ts +2 -1
- package/package.json +2 -2
- package/types.json +17771 -11839
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Filters.js","sources":["../../../../../../../../../../../src/components/Table3/components/toolbar/Filter/filters/Filters.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { Table as RTable, Column as RTColumn } from '@tanstack/react-table';\nimport { Button } from '../../../../../Button/Button';\nimport { Icon } from '../../../../../Icon/Icon';\nimport { Popover } from '../../../../../Popover/Popover';\nimport { Table3FilterValue, Table3FilterComparator, Table3Filter } from '../../../../types';\nimport { Shortcut } from '../../../../../Shortcut/Shortcut';\nimport { useGlobalKeyDown } from '../../../../../../hooks/useGlobalKeyDown';\nimport { useLocalization } from '../../../../../Provider/Localization';\nimport { isInternalColumn } from '../../../../util/columns';\nimport { Placeholder } from './components/Placeholder';\nimport { Filter } from './components/Filter';\nimport { Group } from '../../../../../Group/Group';\n\nfunction sortByHeader<TType = unknown>(a: RTColumn<TType>, b: RTColumn<TType>) {\n return (a.columnDef.meta?.header as string)?.localeCompare?.(b.columnDef.meta?.header as string);\n}\n\nexport type FiltersProps<TType = unknown> = {\n total: number;\n table: RTable<TType>;\n};\n\nexport function Filters<TType = unknown>(props: FiltersProps<TType>) {\n const { total, table } = props;\n const { texts } = useLocalization();\n const ref = React.useRef<HTMLButtonElement>(null);\n const allColumns = table\n .getAllLeafColumns()\n .filter(column => !isInternalColumn(column.id))\n .sort(sortByHeader);\n const appliedFilters = table.getState().columnFilters;\n\n useGlobalKeyDown({ key: 'f', meta: true, shift: true }, (event: KeyboardEvent) => {\n event.preventDefault();\n ref.current?.click();\n });\n\n // state, since we \"apply\" filters\n const [filters, setFilters] = React.useState<Table3Filter[]>(table.getState().columnFilters as Table3Filter[]);\n const [placeholderCount, setPlaceholderCount] = React.useState(1);\n\n // filters\n const handleChangeFilter = (currentId: string, filter: { id: string; value: Table3FilterValue }) => {\n setFilters(currentFilters => {\n const nextFilters = [...currentFilters];\n const index = nextFilters.findIndex(f => f.id === currentId);\n nextFilters[index] = filter;\n return nextFilters;\n });\n };\n\n const handleRemoveFilter = (columnId: string) => {\n if (filters.length === 1 && placeholderCount === 0) {\n setPlaceholderCount(count => count + 1);\n }\n\n setFilters(currentFilters => currentFilters.filter(f => f.id !== columnId));\n };\n\n // placeholders\n const handleCreateFilterFromPlaceholder = (columnId: string) => {\n setFilters(currentFilters => [\n ...currentFilters,\n {\n id: columnId,\n value: {\n comparator: Table3FilterComparator.Contains,\n value: undefined,\n },\n },\n ]);\n handleRemovePlaceholder();\n };\n\n const handleCreatePlaceholder = () => {\n setPlaceholderCount(count => count + 1);\n };\n\n const handleRemovePlaceholder = () => {\n setPlaceholderCount(count => count - 1);\n };\n\n //\n const handleApply = () => {\n table.setColumnFilters(\n filters.filter(f => {\n const controlRenderer = (allColumns.find(c => c.id === f.id) as RTColumn<TType, unknown>).columnDef.meta?.control;\n if (\n f.value.comparator === Table3FilterComparator.IsEmpty ||\n f.value.comparator === Table3FilterComparator.IsNotEmpty ||\n controlRenderer === 'switch'\n ) {\n return true;\n }\n return !!f.value.value;\n })\n );\n };\n\n const handleClear = () => {\n table.resetColumnFilters();\n setFilters([]);\n setPlaceholderCount(1);\n };\n\n return (\n <Button\n aria-label={texts.table3.filters.tooltip}\n className={cn({\n '!wcag-blue-100': appliedFilters.length,\n })}\n popover={popoverProps => (\n <Popover {...popoverProps}>\n <Popover.Content>\n <div className=\"flex w-[40rem] flex-col gap-4\">\n <div className=\"flex h-8\">\n <div className=\"flex w-full items-center gap-2\">\n <h4 className=\"mb-0 inline-flex\">{texts.table3.filters.button}</h4>\n <p className=\"text-grey-700 mb-0 mr-auto mt-px inline-flex\">\n {texts.table3.filters.total\n .replace('[CURRENT]', String(table.getFilteredRowModel().rows.length))\n .replace('[TOTAL]', String(total))}\n </p>\n </div>\n </div>\n <div className=\"flex flex-col gap-2\">\n {filters.map((filter, index) => (\n <Filter\n key={`filter_${index}`}\n allColumns={allColumns as RTColumn<unknown, unknown>[]}\n filter={filter}\n filters={filters}\n position={index}\n onChange={handleChangeFilter}\n onRemove={handleRemoveFilter}\n />\n ))}\n {[...Array(placeholderCount)].map((_, index) => (\n <Placeholder\n key={`placeholder_${index}`}\n allColumns={allColumns as RTColumn<unknown, unknown>[]}\n filters={filters}\n position={filters.length + index}\n onCreate={handleCreateFilterFromPlaceholder as any}\n onRemove={\n placeholderCount > 1 || filters.length > 0 ? handleRemovePlaceholder : undefined\n }\n />\n ))}\n <div className=\"justify-start\">\n <Button appearance=\"discrete\" onClick={handleCreatePlaceholder}>\n + {texts.table3.filters.buttons.addFilter}\n </Button>\n </div>\n </div>\n <Group className=\"ml-auto\">\n <Popover.Close>\n <Button>Cancel</Button>\n </Popover.Close>\n <Button onClick={handleClear}>Clear</Button>\n <Button appearance=\"primary\" onClick={handleApply}>\n Apply\n </Button>\n </Group>\n </div>\n </Popover.Content>\n </Popover>\n )}\n ref={ref}\n tooltip={\n <>\n {texts.table3.filters.tooltip}\n <Shortcut className=\"ml-2\" keys={{ key: 'f', meta: true, shift: true }} />\n </>\n }>\n <Icon name={appliedFilters.length ? 'filter-solid' : 'filter'} />\n {texts.table3.filters.button} {appliedFilters.length ? `(${appliedFilters.length})` : ''}\n </Button>\n );\n}\n"],"names":["sortByHeader","a","b","_a$columnDef$meta","columnDef","meta","_a$columnDef$meta$hea","header","_a$columnDef$meta$hea2","localeCompare","call","_b$columnDef$meta","Filters","props","total","table","texts","useLocalization","ref","React","useRef","allColumns","getAllLeafColumns","filter","column","isInternalColumn","id","sort","appliedFilters","getState","columnFilters","useGlobalKeyDown","key","shift","event","preventDefault","_ref$current","current","click","filters","setFilters","useState","placeholderCount","setPlaceholderCount","handleChangeFilter","currentId","currentFilters","nextFilters","index","findIndex","f","handleRemoveFilter","columnId","length","count","handleCreateFilterFromPlaceholder","value","comparator","Table3FilterComparator","Contains","undefined","handleRemovePlaceholder","handleCreatePlaceholder","handleApply","setColumnFilters","controlRenderer","_allColumns$find$colu","find","c","control","IsEmpty","IsNotEmpty","handleClear","resetColumnFilters","Button","table3","tooltip","className","cn","popover","popoverProps","Popover","Content","button","replace","String","getFilteredRowModel","rows","map","Filter","position","onChange","onRemove","Array","_","Placeholder","onCreate","appearance","onClick","buttons","addFilter","Group","Close","Shortcut","keys","Icon","name"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"Filters.js","sources":["../../../../../../../../../../../src/components/Table3/components/toolbar/Filter/filters/Filters.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { Table as RTable, Column as RTColumn } from '@tanstack/react-table';\nimport { Button } from '../../../../../Button/Button';\nimport { Icon } from '../../../../../Icon/Icon';\nimport { Popover } from '../../../../../Popover/Popover';\nimport { Table3FilterValue, Table3FilterComparator, Table3Filter } from '../../../../types';\nimport { Shortcut } from '../../../../../Shortcut/Shortcut';\nimport { useGlobalKeyDown } from '../../../../../../hooks/useGlobalKeyDown';\nimport { useLocalization } from '../../../../../Provider/Localization';\nimport { isInternalColumn } from '../../../../util/columns';\nimport { Placeholder } from './components/Placeholder';\nimport { Filter } from './components/Filter';\nimport { Group } from '../../../../../Group/Group';\n\nfunction sortByHeader<TType = unknown>(a: RTColumn<TType>, b: RTColumn<TType>) {\n return (a.columnDef.meta?.header as string)?.localeCompare?.(b.columnDef.meta?.header as string);\n}\n\nexport type FiltersProps<TType = unknown> = {\n total: number;\n table: RTable<TType>;\n};\n\nexport function Filters<TType = unknown>(props: FiltersProps<TType>) {\n const { total, table } = props;\n const { locale, texts } = useLocalization();\n const ref = React.useRef<HTMLButtonElement>(null);\n const allColumns = table\n .getAllLeafColumns()\n .filter(column => !isInternalColumn(column.id))\n .sort(sortByHeader);\n const appliedFilters = table.getState().columnFilters;\n\n useGlobalKeyDown({ key: 'f', meta: true, shift: true }, (event: KeyboardEvent) => {\n event.preventDefault();\n ref.current?.click();\n });\n\n // state, since we \"apply\" filters\n const [filters, setFilters] = React.useState<Table3Filter[]>(table.getState().columnFilters as Table3Filter[]);\n const [placeholderCount, setPlaceholderCount] = React.useState(1);\n\n // filters\n const handleChangeFilter = (currentId: string, filter: { id: string; value: Table3FilterValue }) => {\n setFilters(currentFilters => {\n const nextFilters = [...currentFilters];\n const index = nextFilters.findIndex(f => f.id === currentId);\n nextFilters[index] = filter;\n return nextFilters;\n });\n };\n\n const handleRemoveFilter = (columnId: string) => {\n if (filters.length === 1 && placeholderCount === 0) {\n setPlaceholderCount(count => count + 1);\n }\n\n setFilters(currentFilters => currentFilters.filter(f => f.id !== columnId));\n };\n\n // placeholders\n const handleCreateFilterFromPlaceholder = (columnId: string) => {\n setFilters(currentFilters => [\n ...currentFilters,\n {\n id: columnId,\n value: {\n comparator: Table3FilterComparator.Contains,\n value: undefined,\n },\n },\n ]);\n handleRemovePlaceholder();\n };\n\n const handleCreatePlaceholder = () => {\n setPlaceholderCount(count => count + 1);\n };\n\n const handleRemovePlaceholder = () => {\n setPlaceholderCount(count => count - 1);\n };\n\n //\n const handleApply = () => {\n table.setColumnFilters(\n filters.filter(f => {\n const controlRenderer = (allColumns.find(c => c.id === f.id) as RTColumn<TType, unknown>).columnDef.meta?.control;\n if (\n f.value.comparator === Table3FilterComparator.IsEmpty ||\n f.value.comparator === Table3FilterComparator.IsNotEmpty ||\n controlRenderer === 'switch'\n ) {\n return true;\n }\n return !!f.value.value;\n })\n );\n };\n\n const handleClear = () => {\n table.resetColumnFilters();\n setFilters([]);\n setPlaceholderCount(1);\n };\n\n return (\n <Button\n aria-label={texts.table3.filters.tooltip}\n className={cn({\n '!wcag-blue-100': appliedFilters.length,\n })}\n popover={popoverProps => (\n <Popover {...popoverProps}>\n <Popover.Content>\n <div className=\"flex w-[40rem] flex-col gap-4\">\n <div className=\"flex h-8\">\n <div className=\"flex w-full items-center gap-2\">\n <h4 className=\"mb-0 inline-flex\">{texts.table3.filters.button}</h4>\n <p className=\"text-grey-700 mb-0 mr-auto mt-px inline-flex\">\n {texts.table3.filters.total\n .replace(\n '[CURRENT]',\n new Intl.NumberFormat(locale).format(table.getFilteredRowModel().rows.length)\n )\n .replace('[TOTAL]', new Intl.NumberFormat(locale).format(total))}\n </p>\n </div>\n </div>\n <div className=\"flex flex-col gap-2\">\n {filters.map((filter, index) => (\n <Filter\n key={`filter_${index}`}\n allColumns={allColumns as RTColumn<unknown, unknown>[]}\n filter={filter}\n filters={filters}\n position={index}\n onChange={handleChangeFilter}\n onRemove={handleRemoveFilter}\n />\n ))}\n {[...Array(placeholderCount)].map((_, index) => (\n <Placeholder\n key={`placeholder_${index}`}\n allColumns={allColumns as RTColumn<unknown, unknown>[]}\n filters={filters}\n position={filters.length + index}\n onCreate={handleCreateFilterFromPlaceholder as any}\n onRemove={\n placeholderCount > 1 || filters.length > 0 ? handleRemovePlaceholder : undefined\n }\n />\n ))}\n <div className=\"justify-start\">\n <Button appearance=\"discrete\" onClick={handleCreatePlaceholder}>\n + {texts.table3.filters.buttons.addFilter}\n </Button>\n </div>\n </div>\n <Group className=\"ml-auto\">\n <Popover.Close>\n <Button>Cancel</Button>\n </Popover.Close>\n <Button onClick={handleClear}>Clear</Button>\n <Button appearance=\"primary\" onClick={handleApply}>\n Apply\n </Button>\n </Group>\n </div>\n </Popover.Content>\n </Popover>\n )}\n ref={ref}\n tooltip={\n <>\n {texts.table3.filters.tooltip}\n <Shortcut className=\"ml-2\" keys={{ key: 'f', meta: true, shift: true }} />\n </>\n }>\n <Icon name={appliedFilters.length ? 'filter-solid' : 'filter'} />\n {texts.table3.filters.button} {appliedFilters.length ? `(${appliedFilters.length})` : ''}\n </Button>\n );\n}\n"],"names":["sortByHeader","a","b","_a$columnDef$meta","columnDef","meta","_a$columnDef$meta$hea","header","_a$columnDef$meta$hea2","localeCompare","call","_b$columnDef$meta","Filters","props","total","table","locale","texts","useLocalization","ref","React","useRef","allColumns","getAllLeafColumns","filter","column","isInternalColumn","id","sort","appliedFilters","getState","columnFilters","useGlobalKeyDown","key","shift","event","preventDefault","_ref$current","current","click","filters","setFilters","useState","placeholderCount","setPlaceholderCount","handleChangeFilter","currentId","currentFilters","nextFilters","index","findIndex","f","handleRemoveFilter","columnId","length","count","handleCreateFilterFromPlaceholder","value","comparator","Table3FilterComparator","Contains","undefined","handleRemovePlaceholder","handleCreatePlaceholder","handleApply","setColumnFilters","controlRenderer","_allColumns$find$colu","find","c","control","IsEmpty","IsNotEmpty","handleClear","resetColumnFilters","Button","table3","tooltip","className","cn","popover","popoverProps","Popover","Content","button","replace","Intl","NumberFormat","format","getFilteredRowModel","rows","map","Filter","position","onChange","onRemove","Array","_","Placeholder","onCreate","appearance","onClick","buttons","addFilter","Group","Close","Shortcut","keys","Icon","name"],"mappings":"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"}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import React__default from 'react';
|
2
|
+
import { shouldTriggerShortcut } from '../../../../utils/keyboard.js';
|
2
3
|
import _ from 'lodash-es';
|
3
4
|
|
4
5
|
var SavingStateValue;
|
@@ -56,14 +57,20 @@ function useEditing(isEnabled, onSave) {
|
|
56
57
|
if (event.defaultPrevented) {
|
57
58
|
return;
|
58
59
|
}
|
59
|
-
if (event
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
60
|
+
if (shouldTriggerShortcut(event, {
|
61
|
+
key: 'e',
|
62
|
+
meta: true,
|
63
|
+
shift: false
|
64
|
+
})) {
|
65
|
+
setIsEditing(editing => !editing);
|
66
|
+
} else if (shouldTriggerShortcut(event, {
|
67
|
+
key: 's',
|
68
|
+
meta: true,
|
69
|
+
shift: false
|
70
|
+
})) {
|
71
|
+
// Prevent default browser save
|
72
|
+
event.preventDefault();
|
73
|
+
saveChangesIfNeeded();
|
67
74
|
}
|
68
75
|
}, [isEditing]);
|
69
76
|
const handleBlur = React__default.useCallback(event => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useEditing.js","sources":["../../../../../../../../../src/components/Table3/hooks/features/useEditing.tsx"],"sourcesContent":["import React from 'react';\nimport _ from 'lodash';\nimport { Cell as RTCell } from '@tanstack/react-table';\nimport { IndicatorReason } from '../../components/columns/cell/Indicator';\n\nexport enum SavingStateValue {\n Saving = 'saving',\n Saved = 'saved',\n Error = 'error',\n}\n\nexport type SavingState = {\n state: SavingStateValue;\n};\n\nexport function useEditing<TType = unknown>(isEnabled: boolean, onSave?: (row: TType) => void) {\n // used to switch the table into editing mode\n const [isEditing, setIsEditing] = React.useState(false);\n // Saving indicator need to show saving state per row, saving state can have at lkeast two states 'saving', 'saved',\n // 'saved' should remain for a few seconds to show tick icon after row has been saved.\n const [savingStates, setSavingStates] = React.useState<Record<string, SavingState> | null>(null);\n\n // sets of row changes pending save, either they have not saved yet or they have errors\n const [changes, setChanges] = React.useState<Record<string, TType> | null>(null);\n\n const [detailModeEditing, setDetailModeEditing] = React.useState(false);\n\n function getCellValue<T extends TType>(cell: RTCell<T, unknown>) {\n return changes ? changes[cell.row.id]?.[cell.column.id] : undefined;\n }\n\n // Saves editing cell value into editing state.\n function setCellValue<T extends TType>(cell: RTCell<T, unknown>, value: unknown) {\n setChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n\n if (nextChanges[cell.row.id]) {\n nextChanges[cell.row.id][cell.column.id] = value;\n // we should probably delete the cell if it has just reverted back to its original value\n } else {\n nextChanges[cell.row.id] = { ...cell.row.original, [cell.column.id]: value };\n }\n\n return nextChanges;\n });\n }\n\n // Removes changes from editing state by row id\n function resetChange(rowId: string) {\n let currentChanges: Record<string, TType> | null = changes ? { ...changes } : {};\n if (currentChanges) {\n delete currentChanges[rowId];\n }\n const changeset = Object.keys(currentChanges);\n if (changeset.length === 0) {\n currentChanges = null;\n }\n\n setChanges(currentChanges);\n }\n\n const handleKeyDown = React.useCallback(\n (event: KeyboardEvent) => {\n if (event.defaultPrevented) {\n return;\n }\n\n if (event.ctrlKey || event.metaKey) {\n if (event.key === 'e') {\n setIsEditing(editing => !editing);\n } else if (event.key === 's') {\n // Prevent default browser save\n event.preventDefault();\n saveChangesIfNeeded();\n }\n }\n },\n [isEditing]\n );\n\n const handleBlur = React.useCallback((event: React.FocusEvent) => {\n if (event.target === event.currentTarget) {\n saveChangesIfNeeded();\n }\n }, []);\n\n // Creates initial saving states from changes object\n const addSavingStates = () => {\n const changeset = Object.keys(changes || {});\n const additionalSavingStates = _.reduce(\n changeset,\n (result, value) => {\n return { ...result, [value]: { state: SavingStateValue.Saving } };\n },\n {}\n );\n setSavingStates({ ...savingStates, ...additionalSavingStates });\n };\n\n // Repoves edititng state by row is. Used in delayed saving indicator.\n const removeSavingState = (rowId: string) => {\n const newSavingStates = { ...savingStates };\n delete newSavingStates[rowId];\n setSavingStates(newSavingStates);\n };\n\n // Checks if we have changes, then saves them\n const saveChangesIfNeeded = async () => {\n if (!changes) {\n return;\n }\n\n const changeset = Object.keys(changes);\n if (onSave && changeset.length) {\n addSavingStates();\n\n const responses = await Promise.allSettled(changeset.map(rowId => onSave(changes[rowId])));\n\n setChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n\n responses.forEach((response, index) => {\n const rowId = changeset[index];\n\n if (response.status === 'fulfilled') {\n delete nextChanges[rowId];\n }\n });\n\n return nextChanges;\n });\n\n setSavingStates(savingStates => {\n const nextSavingStates = savingStates ? { ...savingStates } : {};\n responses.forEach((response, index) => {\n const rowId = changeset[index];\n\n if (response.status === 'fulfilled') {\n nextSavingStates[rowId] = { state: SavingStateValue.Saved };\n } else {\n // add the error when validation is added\n nextSavingStates[rowId] = { state: SavingStateValue.Error };\n }\n });\n return nextSavingStates;\n });\n }\n };\n\n const [rowMoveReason, setRowMoveReason] = React.useState<Record<string, IndicatorReason | null>>({});\n\n const removeRowMoveReason = (columnId: string) => {\n setRowMoveReason(prevState => {\n const newState = { ...prevState };\n delete newState[columnId];\n\n return newState;\n });\n };\n\n const showWarning = React.useCallback(\n event => {\n if (isEditing && changes && Object.keys(changes).length > 0) {\n event.returnValue = true;\n return true;\n }\n\n return false;\n },\n [isEditing, changes]\n );\n\n React.useEffect(() => {\n window.addEventListener('beforeunload', showWarning);\n\n return () => {\n window.removeEventListener('beforeunload', showWarning);\n };\n }, [showWarning]);\n\n return {\n isEnabled,\n isEditing,\n toggleEditing: setIsEditing,\n changes,\n getCellValue,\n setCellValue,\n saveChangesIfNeeded,\n detailModeEditing,\n setDetailModeEditing,\n rowMoveReason,\n setRowMoveReason,\n removeRowMoveReason,\n handleKeyDown,\n handleBlur,\n resetChange,\n savingStates,\n removeSavingState,\n };\n}\n"],"names":["SavingStateValue","useEditing","isEnabled","onSave","isEditing","setIsEditing","React","useState","savingStates","setSavingStates","changes","setChanges","detailModeEditing","setDetailModeEditing","getCellValue","cell","_changes$cell$row$id","row","id","column","undefined","setCellValue","value","currentChanges","nextChanges","original","resetChange","rowId","changeset","Object","keys","length","handleKeyDown","useCallback","event","defaultPrevented","ctrlKey","metaKey","key","editing","preventDefault","saveChangesIfNeeded","handleBlur","target","currentTarget","addSavingStates","additionalSavingStates","_","reduce","result","state","Saving","removeSavingState","newSavingStates","Promise","resolve","_temp","allSettled","map","then","responses","forEach","response","index","status","nextSavingStates","Saved","Error","e","reject","rowMoveReason","setRowMoveReason","removeRowMoveReason","columnId","prevState","newState","showWarning","returnValue","useEffect","window","addEventListener","removeEventListener","toggleEditing"],"mappings":";;;IAKYA;AAAZ,WAAYA,gBAAgB;EACxBA,qCAAiB;EACjBA,mCAAe;EACfA,mCAAe;AACnB,CAAC,EAJWA,gBAAgB,KAAhBA,gBAAgB;SAUZC,UAAUA,CAAkBC,SAAkB,EAAEC,MAA6B;;EAEzF,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAGC,cAAK,CAACC,QAAQ,CAAC,KAAK,CAAC;;;EAGvD,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGH,cAAK,CAACC,QAAQ,CAAqC,IAAI,CAAC;;EAGhG,MAAM,CAACG,OAAO,EAAEC,UAAU,CAAC,GAAGL,cAAK,CAACC,QAAQ,CAA+B,IAAI,CAAC;EAEhF,MAAM,CAACK,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGP,cAAK,CAACC,QAAQ,CAAC,KAAK,CAAC;EAEvE,SAASO,YAAYA,CAAkBC,IAAwB;;IAC3D,OAAOL,OAAO,IAAAM,oBAAA,GAAGN,OAAO,CAACK,IAAI,CAACE,GAAG,CAACC,EAAE,CAAC,cAAAF,oBAAA,uBAApBA,oBAAA,CAAuBD,IAAI,CAACI,MAAM,CAACD,EAAE,CAAC,GAAGE,SAAS;;;EAIvE,SAASC,YAAYA,CAAkBN,IAAwB,EAAEO,KAAc;IAC3EX,UAAU,CAACY,cAAc;MACrB,MAAMC,WAAW,GAAG;QAAE,GAAGD;OAAgB;MAEzC,IAAIC,WAAW,CAACT,IAAI,CAACE,GAAG,CAACC,EAAE,CAAC,EAAE;QAC1BM,WAAW,CAACT,IAAI,CAACE,GAAG,CAACC,EAAE,CAAC,CAACH,IAAI,CAACI,MAAM,CAACD,EAAE,CAAC,GAAGI,KAAK;;OAEnD,MAAM;QACHE,WAAW,CAACT,IAAI,CAACE,GAAG,CAACC,EAAE,CAAC,GAAG;UAAE,GAAGH,IAAI,CAACE,GAAG,CAACQ,QAAQ;UAAE,CAACV,IAAI,CAACI,MAAM,CAACD,EAAE,GAAGI;SAAO;;MAGhF,OAAOE,WAAW;KACrB,CAAC;;;EAIN,SAASE,WAAWA,CAACC,KAAa;IAC9B,IAAIJ,cAAc,GAAiCb,OAAO,GAAG;MAAE,GAAGA;KAAS,GAAG,EAAE;IAChF,IAAIa,cAAc,EAAE;MAChB,OAAOA,cAAc,CAACI,KAAK,CAAC;;IAEhC,MAAMC,SAAS,GAAGC,MAAM,CAACC,IAAI,CAACP,cAAc,CAAC;IAC7C,IAAIK,SAAS,CAACG,MAAM,KAAK,CAAC,EAAE;MACxBR,cAAc,GAAG,IAAI;;IAGzBZ,UAAU,CAACY,cAAc,CAAC;;EAG9B,MAAMS,aAAa,GAAG1B,cAAK,CAAC2B,WAAW,CAClCC,KAAoB;IACjB,IAAIA,KAAK,CAACC,gBAAgB,EAAE;MACxB;;IAGJ,IAAID,KAAK,CAACE,OAAO,IAAIF,KAAK,CAACG,OAAO,EAAE;MAChC,IAAIH,KAAK,CAACI,GAAG,KAAK,GAAG,EAAE;QACnBjC,YAAY,CAACkC,OAAO,IAAI,CAACA,OAAO,CAAC;OACpC,MAAM,IAAIL,KAAK,CAACI,GAAG,KAAK,GAAG,EAAE;;QAE1BJ,KAAK,CAACM,cAAc,EAAE;QACtBC,mBAAmB,EAAE;;;GAGhC,EACD,CAACrC,SAAS,CAAC,CACd;EAED,MAAMsC,UAAU,GAAGpC,cAAK,CAAC2B,WAAW,CAAEC,KAAuB;IACzD,IAAIA,KAAK,CAACS,MAAM,KAAKT,KAAK,CAACU,aAAa,EAAE;MACtCH,mBAAmB,EAAE;;GAE5B,EAAE,EAAE,CAAC;;EAGN,MAAMI,eAAe,GAAGA;IACpB,MAAMjB,SAAS,GAAGC,MAAM,CAACC,IAAI,CAACpB,OAAO,IAAI,EAAE,CAAC;IAC5C,MAAMoC,sBAAsB,GAAGC,CAAC,CAACC,MAAM,CACnCpB,SAAS,EACT,CAACqB,MAAM,EAAE3B,KAAK;MACV,OAAO;QAAE,GAAG2B,MAAM;QAAE,CAAC3B,KAAK,GAAG;UAAE4B,KAAK,EAAElD,gBAAgB,CAACmD;;OAAU;KACpE,EACD,EAAE,CACL;IACD1C,eAAe,CAAC;MAAE,GAAGD,YAAY;MAAE,GAAGsC;KAAwB,CAAC;GAClE;;EAGD,MAAMM,iBAAiB,GAAIzB,KAAa;IACpC,MAAM0B,eAAe,GAAG;MAAE,GAAG7C;KAAc;IAC3C,OAAO6C,eAAe,CAAC1B,KAAK,CAAC;IAC7BlB,eAAe,CAAC4C,eAAe,CAAC;GACnC;;EAGD,MAAMZ,mBAAmB;IAAA;MACrB,IAAI,CAAC/B,OAAO,EAAE;QACV,OAAA4C,OAAA,CAAAC,OAAA;;MAGJ,MAAM3B,SAAS,GAAGC,MAAM,CAACC,IAAI,CAACpB,OAAO,CAAC;MAAC,MAAA8C,KAAA;QAAA,IACnCrD,MAAM,IAAIyB,SAAS,CAACG,MAAM;UAC1Bc,eAAe,EAAE;UAAC,OAAAS,OAAA,CAAAC,OAAA,CAEMD,OAAO,CAACG,UAAU,CAAC7B,SAAS,CAAC8B,GAAG,CAAC/B,KAAK,IAAIxB,MAAM,CAACO,OAAO,CAACiB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAAgC,IAAA,WAApFC,SAAS;YAEfjD,UAAU,CAACY,cAAc;cACrB,MAAMC,WAAW,GAAG;gBAAE,GAAGD;eAAgB;cAEzCqC,SAAS,CAACC,OAAO,CAAC,CAACC,QAAQ,EAAEC,KAAK;gBAC9B,MAAMpC,KAAK,GAAGC,SAAS,CAACmC,KAAK,CAAC;gBAE9B,IAAID,QAAQ,CAACE,MAAM,KAAK,WAAW,EAAE;kBACjC,OAAOxC,WAAW,CAACG,KAAK,CAAC;;eAEhC,CAAC;cAEF,OAAOH,WAAW;aACrB,CAAC;YAEFf,eAAe,CAACD,YAAY;cACxB,MAAMyD,gBAAgB,GAAGzD,YAAY,GAAG;gBAAE,GAAGA;eAAc,GAAG,EAAE;cAChEoD,SAAS,CAACC,OAAO,CAAC,CAACC,QAAQ,EAAEC,KAAK;gBAC9B,MAAMpC,KAAK,GAAGC,SAAS,CAACmC,KAAK,CAAC;gBAE9B,IAAID,QAAQ,CAACE,MAAM,KAAK,WAAW,EAAE;kBACjCC,gBAAgB,CAACtC,KAAK,CAAC,GAAG;oBAAEuB,KAAK,EAAElD,gBAAgB,CAACkE;mBAAO;iBAC9D,MAAM;;kBAEHD,gBAAgB,CAACtC,KAAK,CAAC,GAAG;oBAAEuB,KAAK,EAAElD,gBAAgB,CAACmE;mBAAO;;eAElE,CAAC;cACF,OAAOF,gBAAgB;aAC1B,CAAC;;;;MAAC,OAAAX,OAAA,CAAAC,OAAA,CAAAC,KAAA,IAAAA,KAAA,CAAAG,IAAA,GAAAH,KAAA,CAAAG,IAAA;KAEV,QAAAS,CAAA;MAAA,OAAAd,OAAA,CAAAe,MAAA,CAAAD,CAAA;;;EAED,MAAM,CAACE,aAAa,EAAEC,gBAAgB,CAAC,GAAGjE,cAAK,CAACC,QAAQ,CAAyC,EAAE,CAAC;EAEpG,MAAMiE,mBAAmB,GAAIC,QAAgB;IACzCF,gBAAgB,CAACG,SAAS;MACtB,MAAMC,QAAQ,GAAG;QAAE,GAAGD;OAAW;MACjC,OAAOC,QAAQ,CAACF,QAAQ,CAAC;MAEzB,OAAOE,QAAQ;KAClB,CAAC;GACL;EAED,MAAMC,WAAW,GAAGtE,cAAK,CAAC2B,WAAW,CACjCC,KAAK;IACD,IAAI9B,SAAS,IAAIM,OAAO,IAAImB,MAAM,CAACC,IAAI,CAACpB,OAAO,CAAC,CAACqB,MAAM,GAAG,CAAC,EAAE;MACzDG,KAAK,CAAC2C,WAAW,GAAG,IAAI;MACxB,OAAO,IAAI;;IAGf,OAAO,KAAK;GACf,EACD,CAACzE,SAAS,EAAEM,OAAO,CAAC,CACvB;EAEDJ,cAAK,CAACwE,SAAS,CAAC;IACZC,MAAM,CAACC,gBAAgB,CAAC,cAAc,EAAEJ,WAAW,CAAC;IAEpD,OAAO;MACHG,MAAM,CAACE,mBAAmB,CAAC,cAAc,EAAEL,WAAW,CAAC;KAC1D;GACJ,EAAE,CAACA,WAAW,CAAC,CAAC;EAEjB,OAAO;IACH1E,SAAS;IACTE,SAAS;IACT8E,aAAa,EAAE7E,YAAY;IAC3BK,OAAO;IACPI,YAAY;IACZO,YAAY;IACZoB,mBAAmB;IACnB7B,iBAAiB;IACjBC,oBAAoB;IACpByD,aAAa;IACbC,gBAAgB;IAChBC,mBAAmB;IACnBxC,aAAa;IACbU,UAAU;IACVhB,WAAW;IACXlB,YAAY;IACZ4C;GACH;AACL;;;;"}
|
1
|
+
{"version":3,"file":"useEditing.js","sources":["../../../../../../../../../src/components/Table3/hooks/features/useEditing.tsx"],"sourcesContent":["import React from 'react';\nimport _ from 'lodash';\nimport { Cell as RTCell } from '@tanstack/react-table';\n\nimport { IndicatorReason } from '../../components/columns/cell/Indicator';\nimport { shouldTriggerShortcut } from '../../../../utils/keyboard';\n\nexport enum SavingStateValue {\n Saving = 'saving',\n Saved = 'saved',\n Error = 'error',\n}\n\nexport type SavingState = {\n state: SavingStateValue;\n};\n\nexport function useEditing<TType = unknown>(isEnabled: boolean, onSave?: (row: TType) => void) {\n // used to switch the table into editing mode\n const [isEditing, setIsEditing] = React.useState(false);\n // Saving indicator need to show saving state per row, saving state can have at lkeast two states 'saving', 'saved',\n // 'saved' should remain for a few seconds to show tick icon after row has been saved.\n const [savingStates, setSavingStates] = React.useState<Record<string, SavingState> | null>(null);\n\n // sets of row changes pending save, either they have not saved yet or they have errors\n const [changes, setChanges] = React.useState<Record<string, TType> | null>(null);\n\n const [detailModeEditing, setDetailModeEditing] = React.useState(false);\n\n function getCellValue<T extends TType>(cell: RTCell<T, unknown>) {\n return changes ? changes[cell.row.id]?.[cell.column.id] : undefined;\n }\n\n // Saves editing cell value into editing state.\n function setCellValue<T extends TType>(cell: RTCell<T, unknown>, value: unknown) {\n setChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n\n if (nextChanges[cell.row.id]) {\n nextChanges[cell.row.id][cell.column.id] = value;\n // we should probably delete the cell if it has just reverted back to its original value\n } else {\n nextChanges[cell.row.id] = { ...cell.row.original, [cell.column.id]: value };\n }\n\n return nextChanges;\n });\n }\n\n // Removes changes from editing state by row id\n function resetChange(rowId: string) {\n let currentChanges: Record<string, TType> | null = changes ? { ...changes } : {};\n if (currentChanges) {\n delete currentChanges[rowId];\n }\n const changeset = Object.keys(currentChanges);\n if (changeset.length === 0) {\n currentChanges = null;\n }\n\n setChanges(currentChanges);\n }\n\n const handleKeyDown = React.useCallback(\n (event: KeyboardEvent) => {\n if (event.defaultPrevented) {\n return;\n }\n\n if (shouldTriggerShortcut(event, { key: 'e', meta: true, shift: false })) {\n setIsEditing(editing => !editing);\n } else if (shouldTriggerShortcut(event, { key: 's', meta: true, shift: false })) {\n // Prevent default browser save\n event.preventDefault();\n saveChangesIfNeeded();\n }\n },\n [isEditing]\n );\n\n const handleBlur = React.useCallback((event: React.FocusEvent) => {\n if (event.target === event.currentTarget) {\n saveChangesIfNeeded();\n }\n }, []);\n\n // Creates initial saving states from changes object\n const addSavingStates = () => {\n const changeset = Object.keys(changes || {});\n const additionalSavingStates = _.reduce(\n changeset,\n (result, value) => {\n return { ...result, [value]: { state: SavingStateValue.Saving } };\n },\n {}\n );\n setSavingStates({ ...savingStates, ...additionalSavingStates });\n };\n\n // Repoves edititng state by row is. Used in delayed saving indicator.\n const removeSavingState = (rowId: string) => {\n const newSavingStates = { ...savingStates };\n delete newSavingStates[rowId];\n setSavingStates(newSavingStates);\n };\n\n // Checks if we have changes, then saves them\n const saveChangesIfNeeded = async () => {\n if (!changes) {\n return;\n }\n\n const changeset = Object.keys(changes);\n if (onSave && changeset.length) {\n addSavingStates();\n\n const responses = await Promise.allSettled(changeset.map(rowId => onSave(changes[rowId])));\n\n setChanges(currentChanges => {\n const nextChanges = { ...currentChanges };\n\n responses.forEach((response, index) => {\n const rowId = changeset[index];\n\n if (response.status === 'fulfilled') {\n delete nextChanges[rowId];\n }\n });\n\n return nextChanges;\n });\n\n setSavingStates(savingStates => {\n const nextSavingStates = savingStates ? { ...savingStates } : {};\n responses.forEach((response, index) => {\n const rowId = changeset[index];\n\n if (response.status === 'fulfilled') {\n nextSavingStates[rowId] = { state: SavingStateValue.Saved };\n } else {\n // add the error when validation is added\n nextSavingStates[rowId] = { state: SavingStateValue.Error };\n }\n });\n return nextSavingStates;\n });\n }\n };\n\n const [rowMoveReason, setRowMoveReason] = React.useState<Record<string, IndicatorReason | null>>({});\n\n const removeRowMoveReason = (columnId: string) => {\n setRowMoveReason(prevState => {\n const newState = { ...prevState };\n delete newState[columnId];\n\n return newState;\n });\n };\n\n const showWarning = React.useCallback(\n event => {\n if (isEditing && changes && Object.keys(changes).length > 0) {\n event.returnValue = true;\n return true;\n }\n\n return false;\n },\n [isEditing, changes]\n );\n\n React.useEffect(() => {\n window.addEventListener('beforeunload', showWarning);\n\n return () => {\n window.removeEventListener('beforeunload', showWarning);\n };\n }, [showWarning]);\n\n return {\n isEnabled,\n isEditing,\n toggleEditing: setIsEditing,\n changes,\n getCellValue,\n setCellValue,\n saveChangesIfNeeded,\n detailModeEditing,\n setDetailModeEditing,\n rowMoveReason,\n setRowMoveReason,\n removeRowMoveReason,\n handleKeyDown,\n handleBlur,\n resetChange,\n savingStates,\n removeSavingState,\n };\n}\n"],"names":["SavingStateValue","useEditing","isEnabled","onSave","isEditing","setIsEditing","React","useState","savingStates","setSavingStates","changes","setChanges","detailModeEditing","setDetailModeEditing","getCellValue","cell","_changes$cell$row$id","row","id","column","undefined","setCellValue","value","currentChanges","nextChanges","original","resetChange","rowId","changeset","Object","keys","length","handleKeyDown","useCallback","event","defaultPrevented","shouldTriggerShortcut","key","meta","shift","editing","preventDefault","saveChangesIfNeeded","handleBlur","target","currentTarget","addSavingStates","additionalSavingStates","_","reduce","result","state","Saving","removeSavingState","newSavingStates","Promise","resolve","_temp","allSettled","map","then","responses","forEach","response","index","status","nextSavingStates","Saved","Error","e","reject","rowMoveReason","setRowMoveReason","removeRowMoveReason","columnId","prevState","newState","showWarning","returnValue","useEffect","window","addEventListener","removeEventListener","toggleEditing"],"mappings":"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"}
|
@@ -5,7 +5,7 @@ const useGlobalKeyDown = (shortcut, handler) => {
|
|
5
5
|
React__default.useEffect(() => {
|
6
6
|
let handleKeyDown;
|
7
7
|
if (shortcut) {
|
8
|
-
handleKeyDown = createShortcutKeyDownHandler(shortcut, handler);
|
8
|
+
handleKeyDown = createShortcutKeyDownHandler(shortcut, handler, false);
|
9
9
|
document.addEventListener('keydown', handleKeyDown);
|
10
10
|
}
|
11
11
|
return () => {
|
@@ -13,7 +13,7 @@ const useGlobalKeyDown = (shortcut, handler) => {
|
|
13
13
|
document.removeEventListener('keydown', handleKeyDown);
|
14
14
|
}
|
15
15
|
};
|
16
|
-
}, [shortcut]);
|
16
|
+
}, [shortcut, handler]);
|
17
17
|
};
|
18
18
|
|
19
19
|
export { useGlobalKeyDown };
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useGlobalKeyDown.js","sources":["../../../../../../src/hooks/useGlobalKeyDown.ts"],"sourcesContent":["import React from 'react';\nimport { createShortcutKeyDownHandler, KeyDownHandlerOptions } from '../utils/keyboard';\n\nexport const useGlobalKeyDown = (\n shortcut: string | KeyDownHandlerOptions | undefined,\n handler: (event: KeyboardEvent) => void\n) => {\n React.useEffect(() => {\n let handleKeyDown;\n\n if (shortcut) {\n handleKeyDown = createShortcutKeyDownHandler(\n shortcut,\n handler as (event: KeyboardEvent | React.KeyboardEvent) => void\n );\n\n document.addEventListener('keydown', handleKeyDown);\n }\n\n return () => {\n if (handleKeyDown) {\n document.removeEventListener('keydown', handleKeyDown);\n }\n };\n }, [shortcut]);\n};\n"],"names":["useGlobalKeyDown","shortcut","handler","React","useEffect","handleKeyDown","createShortcutKeyDownHandler","document","addEventListener","removeEventListener"],"mappings":";;;MAGaA,gBAAgB,GAAGA,CAC5BC,QAAoD,EACpDC,OAAuC;EAEvCC,cAAK,CAACC,SAAS,CAAC;IACZ,IAAIC,aAAa;IAEjB,IAAIJ,QAAQ,EAAE;MACVI,aAAa,GAAGC,4BAA4B,CACxCL,QAAQ,EACRC,OAA+D,
|
1
|
+
{"version":3,"file":"useGlobalKeyDown.js","sources":["../../../../../../src/hooks/useGlobalKeyDown.ts"],"sourcesContent":["import React from 'react';\nimport { createShortcutKeyDownHandler, KeyDownHandlerOptions } from '../utils/keyboard';\n\nexport const useGlobalKeyDown = (\n shortcut: string | KeyDownHandlerOptions | undefined,\n handler: (event: KeyboardEvent) => void\n) => {\n React.useEffect(() => {\n let handleKeyDown;\n\n if (shortcut) {\n handleKeyDown = createShortcutKeyDownHandler(\n shortcut,\n handler as (event: KeyboardEvent | React.KeyboardEvent) => void,\n false\n );\n\n document.addEventListener('keydown', handleKeyDown);\n }\n\n return () => {\n if (handleKeyDown) {\n document.removeEventListener('keydown', handleKeyDown);\n }\n };\n }, [shortcut, handler]);\n};\n"],"names":["useGlobalKeyDown","shortcut","handler","React","useEffect","handleKeyDown","createShortcutKeyDownHandler","document","addEventListener","removeEventListener"],"mappings":";;;MAGaA,gBAAgB,GAAGA,CAC5BC,QAAoD,EACpDC,OAAuC;EAEvCC,cAAK,CAACC,SAAS,CAAC;IACZ,IAAIC,aAAa;IAEjB,IAAIJ,QAAQ,EAAE;MACVI,aAAa,GAAGC,4BAA4B,CACxCL,QAAQ,EACRC,OAA+D,EAC/D,KAAK,CACR;MAEDK,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEH,aAAa,CAAC;;IAGvD,OAAO;MACH,IAAIA,aAAa,EAAE;QACfE,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAEJ,aAAa,CAAC;;KAE7D;GACJ,EAAE,CAACJ,QAAQ,EAAEC,OAAO,CAAC,CAAC;AAC3B;;;;"}
|
@@ -9,7 +9,7 @@ export { Accordion } from './components/Accordion/Accordion.js';
|
|
9
9
|
export { VisuallyHidden } from './components/VisuallyHidden/VisuallyHidden.js';
|
10
10
|
export { Badge } from './components/Badge/Badge.js';
|
11
11
|
export { useMergedRef } from './hooks/useMergedRef.js';
|
12
|
-
export { createShortcutKeyDownHandler, isEventTriggeredOnInteractiveElement, isMacOs } from './utils/keyboard.js';
|
12
|
+
export { createShortcutKeyDownHandler, isEventTriggeredOnInteractiveElement, isMacOs, shouldTriggerShortcut } from './utils/keyboard.js';
|
13
13
|
export { Tooltip } from './components/Tooltip/Tooltip.js';
|
14
14
|
export { Base, IconButton } from './components/IconButton/IconButton.js';
|
15
15
|
export { LocalizationContext, LocalizationProvider, defaultLocalisationTexts, defaultLocalizationContext, useLocalization } from './components/Provider/Localization.js';
|
@@ -13,6 +13,11 @@ const Button = /*#__PURE__*/forwardRef(function Button(props, ref) {
|
|
13
13
|
const internalRef = useMergedRef(ref);
|
14
14
|
useGlobalKeyDown(shortcut, () => {
|
15
15
|
var _internalRef$current;
|
16
|
+
const dialog = document.querySelector('[role="dialog"]');
|
17
|
+
// Don't trigger the click on the button if it is outside of the dialog
|
18
|
+
if (dialog && !(dialog !== null && dialog !== void 0 && dialog.contains(internalRef.current))) {
|
19
|
+
return;
|
20
|
+
}
|
16
21
|
(_internalRef$current = internalRef.current) === null || _internalRef$current === void 0 ? void 0 : _internalRef$current.click();
|
17
22
|
});
|
18
23
|
const Tag = props.href ? 'a' : 'button';
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Button.js","sources":["../../../../../../src/primitives/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport { KeyDownHandlerOptions } from '../utils/keyboard';\nimport { useMergedRef } from '../hooks/useMergedRef';\nimport { useGlobalKeyDown } from '../hooks/useGlobalKeyDown';\n\ntype ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> & {\n /** Content should be a text */\n children: React.ReactNode;\n /** Provides url for buttons being used as a link */\n href?: string;\n shortcut?: string | KeyDownHandlerOptions;\n /** Provides target for buttons being used as a link */\n target?: '_self' | '_blank' | '_parent' | '_top';\n};\n\nconst Button = React.forwardRef(function Button(props: ButtonProps, ref: React.Ref<HTMLButtonElement | HTMLAnchorElement>) {\n const { disabled, shortcut, target, type = 'button', ...otherProps } = props;\n const internalRef = useMergedRef<HTMLButtonElement | HTMLAnchorElement>(ref);\n\n useGlobalKeyDown(shortcut, () => {\n internalRef.current?.click();\n });\n\n const Tag = props.href ? 'a' : 'button';\n\n return (\n <Tag\n {...otherProps}\n aria-disabled={disabled ? 'true' : undefined}\n disabled={disabled}\n target={Tag === 'a' ? target : undefined}\n type={Tag !== 'a' ? type : undefined}\n ref={internalRef as any}>\n {React.Children.count(props.children) > 1\n ? React.Children.map(props.children, child => (typeof child === 'string' ? <span>{child}</span> : child))\n : props.children}\n </Tag>\n );\n});\n\nexport { Button };\nexport type { ButtonProps };\n"],"names":["Button","React","props","ref","disabled","shortcut","target","type","otherProps","internalRef","useMergedRef","useGlobalKeyDown","
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../../../../../src/primitives/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport { KeyDownHandlerOptions } from '../utils/keyboard';\nimport { useMergedRef } from '../hooks/useMergedRef';\nimport { useGlobalKeyDown } from '../hooks/useGlobalKeyDown';\n\ntype ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> & {\n /** Content should be a text */\n children: React.ReactNode;\n /** Provides url for buttons being used as a link */\n href?: string;\n shortcut?: string | KeyDownHandlerOptions;\n /** Provides target for buttons being used as a link */\n target?: '_self' | '_blank' | '_parent' | '_top';\n};\n\nconst Button = React.forwardRef(function Button(props: ButtonProps, ref: React.Ref<HTMLButtonElement | HTMLAnchorElement>) {\n const { disabled, shortcut, target, type = 'button', ...otherProps } = props;\n const internalRef = useMergedRef<HTMLButtonElement | HTMLAnchorElement>(ref);\n\n useGlobalKeyDown(shortcut, () => {\n const dialog = document.querySelector('[role=\"dialog\"]');\n\n // Don't trigger the click on the button if it is outside of the dialog\n if (dialog && !dialog?.contains(internalRef.current)) {\n return;\n }\n\n internalRef.current?.click();\n });\n\n const Tag = props.href ? 'a' : 'button';\n\n return (\n <Tag\n {...otherProps}\n aria-disabled={disabled ? 'true' : undefined}\n disabled={disabled}\n target={Tag === 'a' ? target : undefined}\n type={Tag !== 'a' ? type : undefined}\n ref={internalRef as any}>\n {React.Children.count(props.children) > 1\n ? React.Children.map(props.children, child => (typeof child === 'string' ? <span>{child}</span> : child))\n : props.children}\n </Tag>\n );\n});\n\nexport { Button };\nexport type { ButtonProps };\n"],"names":["Button","React","props","ref","disabled","shortcut","target","type","otherProps","internalRef","useMergedRef","useGlobalKeyDown","dialog","document","querySelector","contains","current","_internalRef$current","click","Tag","href","undefined","count","children","map","child"],"mappings":";;;;MAeMA,MAAM,gBAAGC,UAAgB,CAAC,SAASD,MAAMA,CAACE,KAAkB,EAAEC,GAAqD;EACrH,MAAM;IAAEC,QAAQ;IAAEC,QAAQ;IAAEC,MAAM;IAAEC,IAAI,GAAG,QAAQ;IAAE,GAAGC;GAAY,GAAGN,KAAK;EAC5E,MAAMO,WAAW,GAAGC,YAAY,CAAwCP,GAAG,CAAC;EAE5EQ,gBAAgB,CAACN,QAAQ,EAAE;;IACvB,MAAMO,MAAM,GAAGC,QAAQ,CAACC,aAAa,CAAC,iBAAiB,CAAC;;IAGxD,IAAIF,MAAM,IAAI,EAACA,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEG,QAAQ,CAACN,WAAW,CAACO,OAAO,CAAC,GAAE;MAClD;;IAGJ,CAAAC,oBAAA,GAAAR,WAAW,CAACO,OAAO,cAAAC,oBAAA,uBAAnBA,oBAAA,CAAqBC,KAAK,EAAE;GAC/B,CAAC;EAEF,MAAMC,GAAG,GAAGjB,KAAK,CAACkB,IAAI,GAAG,GAAG,GAAG,QAAQ;EAEvC,oBACInB,cAACkB,GAAG,oBACIX,UAAU;qBACCJ,QAAQ,GAAG,MAAM,GAAGiB,SAAS;IAC5CjB,QAAQ,EAAEA,QAAQ;IAClBE,MAAM,EAAEa,GAAG,KAAK,GAAG,GAAGb,MAAM,GAAGe,SAAS;IACxCd,IAAI,EAAEY,GAAG,KAAK,GAAG,GAAGZ,IAAI,GAAGc,SAAS;IACpClB,GAAG,EAAEM;MACJR,QAAc,CAACqB,KAAK,CAACpB,KAAK,CAACqB,QAAQ,CAAC,GAAG,CAAC,GACnCtB,QAAc,CAACuB,GAAG,CAACtB,KAAK,CAACqB,QAAQ,EAAEE,KAAK,IAAK,OAAOA,KAAK,KAAK,QAAQ,gBAAGxB,4BAAOwB,KAAK,CAAQ,GAAGA,KAAM,CAAC,GACvGvB,KAAK,CAACqB,QAAQ,CAClB;AAEd,CAAC;;;;"}
|
@@ -2,29 +2,34 @@ function isEventTriggeredOnInteractiveElement(eventTarget) {
|
|
2
2
|
const element = eventTarget;
|
3
3
|
return ['A', 'BUTTON', 'INPUT', 'TEXTAREA', 'SELECT'].includes(element.tagName) && !element.hidden && !element.disabled && !element.readOnly;
|
4
4
|
}
|
5
|
-
function
|
5
|
+
function shouldTriggerShortcut(event, key) {
|
6
|
+
const keyOptions = typeof key === 'string' ? {
|
7
|
+
key,
|
8
|
+
meta: false,
|
9
|
+
shift: false
|
10
|
+
} : key;
|
11
|
+
if (keyOptions.meta && (isMacOs() ? !event.metaKey : !event.ctrlKey) || !keyOptions.meta && (isMacOs() ? event.metaKey : event.ctrlKey)) {
|
12
|
+
return false;
|
13
|
+
}
|
14
|
+
if (keyOptions.shift && !event.shiftKey || keyOptions.shift === false && event.shiftKey) {
|
15
|
+
return false;
|
16
|
+
}
|
17
|
+
return event.key.toLowerCase() === keyOptions.key.toLowerCase();
|
18
|
+
}
|
19
|
+
function createShortcutKeyDownHandler(key, handler, stopPropagation = true) {
|
6
20
|
return function (event) {
|
7
|
-
const keyOptions = typeof key === 'string' ? {
|
8
|
-
key,
|
9
|
-
meta: false,
|
10
|
-
shift: false
|
11
|
-
} : key;
|
12
21
|
if (event.target !== event.currentTarget && isEventTriggeredOnInteractiveElement(event.target)) {
|
13
22
|
return;
|
14
23
|
}
|
15
|
-
|
16
|
-
return;
|
17
|
-
}
|
18
|
-
if (keyOptions.shift && !event.shiftKey || keyOptions.shift === false && event.shiftKey) {
|
19
|
-
return;
|
20
|
-
}
|
21
|
-
const condition = event.key.toLowerCase() === keyOptions.key.toLowerCase();
|
24
|
+
const condition = shouldTriggerShortcut(event, key);
|
22
25
|
if (condition) {
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
if (stopPropagation) {
|
27
|
+
var _event$stopImmediateP;
|
28
|
+
// stops react handlers bubbling up to global
|
29
|
+
event.stopPropagation();
|
30
|
+
// stops global handlers bubbling up to other global
|
31
|
+
(_event$stopImmediateP = event.stopImmediatePropagation) === null || _event$stopImmediateP === void 0 ? void 0 : _event$stopImmediateP.call(event);
|
32
|
+
}
|
28
33
|
handler(event);
|
29
34
|
}
|
30
35
|
};
|
@@ -34,5 +39,5 @@ const isMacOs = () => {
|
|
34
39
|
return (_window = window) === null || _window === void 0 ? void 0 : _window.navigator.userAgent.includes('Mac');
|
35
40
|
};
|
36
41
|
|
37
|
-
export { createShortcutKeyDownHandler, isEventTriggeredOnInteractiveElement, isMacOs };
|
42
|
+
export { createShortcutKeyDownHandler, isEventTriggeredOnInteractiveElement, isMacOs, shouldTriggerShortcut };
|
38
43
|
//# sourceMappingURL=keyboard.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"keyboard.js","sources":["../../../../../../src/utils/keyboard.ts"],"sourcesContent":["import React from 'react';\n\nexport type KeyDownHandlerOptions = { key: string; meta?: boolean; shift?: boolean };\n\nexport function isEventTriggeredOnInteractiveElement(eventTarget: EventTarget | null) {\n const element = eventTarget as HTMLElement;\n\n return (\n ['A', 'BUTTON', 'INPUT', 'TEXTAREA', 'SELECT'].includes(element.tagName) &&\n !element.hidden &&\n !(element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | HTMLButtonElement).disabled &&\n !(element as HTMLInputElement | HTMLTextAreaElement).readOnly\n );\n}\n\nexport function
|
1
|
+
{"version":3,"file":"keyboard.js","sources":["../../../../../../src/utils/keyboard.ts"],"sourcesContent":["import React from 'react';\n\nexport type KeyDownHandlerOptions = { key: string; meta?: boolean; shift?: boolean };\n\nexport function isEventTriggeredOnInteractiveElement(eventTarget: EventTarget | null) {\n const element = eventTarget as HTMLElement;\n\n return (\n ['A', 'BUTTON', 'INPUT', 'TEXTAREA', 'SELECT'].includes(element.tagName) &&\n !element.hidden &&\n !(element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | HTMLButtonElement).disabled &&\n !(element as HTMLInputElement | HTMLTextAreaElement).readOnly\n );\n}\n\nexport function shouldTriggerShortcut<T = Element>(\n event: KeyboardEvent | React.KeyboardEvent<T>,\n key: string | KeyDownHandlerOptions\n) {\n const keyOptions: KeyDownHandlerOptions = typeof key === 'string' ? { key, meta: false, shift: false } : key;\n\n if (\n (keyOptions.meta && (isMacOs() ? !event.metaKey : !event.ctrlKey)) ||\n (!keyOptions.meta && (isMacOs() ? event.metaKey : event.ctrlKey))\n ) {\n return false;\n }\n\n if ((keyOptions.shift && !event.shiftKey) || (keyOptions.shift === false && event.shiftKey)) {\n return false;\n }\n\n return event.key.toLowerCase() === keyOptions.key.toLowerCase();\n}\n\nexport function createShortcutKeyDownHandler<T = Element>(\n key: string | KeyDownHandlerOptions,\n handler: (event: KeyboardEvent | React.KeyboardEvent<T>) => void,\n stopPropagation = true\n) {\n return function (event: KeyboardEvent | React.KeyboardEvent<T>) {\n if (event.target !== event.currentTarget && isEventTriggeredOnInteractiveElement(event.target as HTMLElement)) {\n return;\n }\n\n const condition = shouldTriggerShortcut(event, key);\n\n if (condition) {\n if (stopPropagation) {\n // stops react handlers bubbling up to global\n event.stopPropagation();\n // stops global handlers bubbling up to other global\n (event as KeyboardEvent).stopImmediatePropagation?.();\n }\n\n handler(event);\n }\n };\n}\n\nexport const isMacOs = () => window?.navigator.userAgent.includes('Mac');\n"],"names":["isEventTriggeredOnInteractiveElement","eventTarget","element","includes","tagName","hidden","disabled","readOnly","shouldTriggerShortcut","event","key","keyOptions","meta","shift","isMacOs","metaKey","ctrlKey","shiftKey","toLowerCase","createShortcutKeyDownHandler","handler","stopPropagation","target","currentTarget","condition","_event$stopImmediateP","stopImmediatePropagation","call","_window","window","navigator","userAgent"],"mappings":"SAIgBA,oCAAoCA,CAACC,WAA+B;EAChF,MAAMC,OAAO,GAAGD,WAA0B;EAE1C,OACI,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAACE,QAAQ,CAACD,OAAO,CAACE,OAAO,CAAC,IACxE,CAACF,OAAO,CAACG,MAAM,IACf,CAAEH,OAA0F,CAACI,QAAQ,IACrG,CAAEJ,OAAkD,CAACK,QAAQ;AAErE;SAEgBC,qBAAqBA,CACjCC,KAA6C,EAC7CC,GAAmC;EAEnC,MAAMC,UAAU,GAA0B,OAAOD,GAAG,KAAK,QAAQ,GAAG;IAAEA,GAAG;IAAEE,IAAI,EAAE,KAAK;IAAEC,KAAK,EAAE;GAAO,GAAGH,GAAG;EAE5G,IACKC,UAAU,CAACC,IAAI,KAAKE,OAAO,EAAE,GAAG,CAACL,KAAK,CAACM,OAAO,GAAG,CAACN,KAAK,CAACO,OAAO,CAAC,IAChE,CAACL,UAAU,CAACC,IAAI,KAAKE,OAAO,EAAE,GAAGL,KAAK,CAACM,OAAO,GAAGN,KAAK,CAACO,OAAO,CAAE,EACnE;IACE,OAAO,KAAK;;EAGhB,IAAKL,UAAU,CAACE,KAAK,IAAI,CAACJ,KAAK,CAACQ,QAAQ,IAAMN,UAAU,CAACE,KAAK,KAAK,KAAK,IAAIJ,KAAK,CAACQ,QAAS,EAAE;IACzF,OAAO,KAAK;;EAGhB,OAAOR,KAAK,CAACC,GAAG,CAACQ,WAAW,EAAE,KAAKP,UAAU,CAACD,GAAG,CAACQ,WAAW,EAAE;AACnE;SAEgBC,4BAA4BA,CACxCT,GAAmC,EACnCU,OAAgE,EAChEC,eAAe,GAAG,IAAI;EAEtB,OAAO,UAAUZ,KAA6C;IAC1D,IAAIA,KAAK,CAACa,MAAM,KAAKb,KAAK,CAACc,aAAa,IAAIvB,oCAAoC,CAACS,KAAK,CAACa,MAAqB,CAAC,EAAE;MAC3G;;IAGJ,MAAME,SAAS,GAAGhB,qBAAqB,CAACC,KAAK,EAAEC,GAAG,CAAC;IAEnD,IAAIc,SAAS,EAAE;MACX,IAAIH,eAAe,EAAE;QAAA,IAAAI,qBAAA;;QAEjBhB,KAAK,CAACY,eAAe,EAAE;;QAEtB,CAAAI,qBAAA,GAAAhB,KAAuB,CAACiB,wBAAwB,cAAAD,qBAAA,uBAAhDA,qBAAA,CAAAE,IAAA,CAAAlB,MAAoD;;MAGzDW,OAAO,CAACX,KAAK,CAAC;;GAErB;AACL;MAEaK,OAAO,GAAGA;EAAA,IAAAc,OAAA;EAAA,QAAAA,OAAA,GAAMC,MAAM,cAAAD,OAAA,uBAANA,OAAA,CAAQE,SAAS,CAACC,SAAS,CAAC5B,QAAQ,CAAC,KAAK,CAAC;AAAA;;;;"}
|
package/dist/index.css
CHANGED
@@ -640,7 +640,8 @@
|
|
640
640
|
|
641
641
|
/* cells */
|
642
642
|
[role='cell'],
|
643
|
-
[role='columnheader']
|
643
|
+
[role='columnheader'],
|
644
|
+
[data-taco='table2-footer-summary'] {
|
644
645
|
@apply border-grey-300;
|
645
646
|
}
|
646
647
|
|
@@ -649,6 +650,12 @@
|
|
649
650
|
@apply flex px-4;
|
650
651
|
}
|
651
652
|
|
653
|
+
/* In cases where row height might differ from default one (example: textarea without truncate or changing of font size or row height),
|
654
|
+
we need to prevent editing controls to take all available space */
|
655
|
+
[role='cell']:not([data-highlighted='true']) {
|
656
|
+
@apply items-start;
|
657
|
+
}
|
658
|
+
|
652
659
|
[role='cell'][data-align='left'],
|
653
660
|
[role='columnheader'][data-align='left'] {
|
654
661
|
@apply justify-start text-left;
|
@@ -668,6 +675,12 @@
|
|
668
675
|
@apply border-b;
|
669
676
|
}
|
670
677
|
|
678
|
+
/* Removes a pixel space between the row and spacer div, so that the spacer div's top border appears like
|
679
|
+
bottom border of the cells */
|
680
|
+
[role='row']:last-child [role='cell'] {
|
681
|
+
@apply -mb-px;
|
682
|
+
}
|
683
|
+
|
671
684
|
/* row/cell backgrounds */
|
672
685
|
|
673
686
|
[role='columnheader'] {
|
@@ -778,7 +791,8 @@
|
|
778
791
|
}
|
779
792
|
|
780
793
|
[data-font-size='small'] [role='cell'] [data-taco='input'],
|
781
|
-
[data-font-size='small'] [role='cell'] [data-taco='Select2']
|
794
|
+
[data-font-size='small'] [role='cell'] [data-taco='Select2'],
|
795
|
+
[data-font-size='small'] [role='cell'] [data-taco='textarea'] {
|
782
796
|
@apply h-6 min-h-[theme(spacing.6)] px-1.5 text-xs;
|
783
797
|
}
|
784
798
|
|
@@ -823,7 +837,8 @@
|
|
823
837
|
}
|
824
838
|
|
825
839
|
[data-font-size='large'] [role='cell'] [data-taco='input'],
|
826
|
-
[data-font-size='large'] [role='cell'] [data-taco='Select2']
|
840
|
+
[data-font-size='large'] [role='cell'] [data-taco='Select2'],
|
841
|
+
[data-font-size='large'] [role='cell'] [data-taco='textarea'] {
|
827
842
|
@apply h-10 px-2.5 text-lg;
|
828
843
|
}
|
829
844
|
|