@economic/taco 2.8.0 → 2.9.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/Icon/components/Lock.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/Menu.d.ts +2 -1
- package/dist/components/Menu/components/Content.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/Menu/components/Separator.d.ts +4 -2
- package/dist/components/Menu/components/SubMenu.d.ts +1 -1
- package/dist/components/Navigation2/components/Link.d.ts +1 -1
- package/dist/components/Select2/components/Option.d.ts +1 -1
- package/dist/components/Select2/components/Search.d.ts +1 -1
- package/dist/components/Table3/components/columns/styles.d.ts +1 -0
- package/dist/components/Table3/components/toolbar/ColumnSettings.d.ts +3 -2
- package/dist/components/Table3/components/toolbar/Filter/filters/Filters.d.ts +1 -1
- package/dist/components/Table3/components/toolbar/PrintButton/WarningDialog.d.ts +2 -1
- package/dist/components/Table3/components/toolbar/Settings.d.ts +6 -0
- package/dist/components/Table3/hooks/features/useCurrentRow.d.ts +3 -3
- package/dist/components/Table3/hooks/useCssGrid.d.ts +1 -1
- package/dist/components/Tag/Tag.d.ts +1 -1
- package/dist/esm/packages/taco/src/components/Combobox/Combobox.js +1 -8
- package/dist/esm/packages/taco/src/components/Combobox/Combobox.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Header/components/Agreement/Display.js +1 -1
- package/dist/esm/packages/taco/src/components/Icon/components/Lock.js +19 -0
- package/dist/esm/packages/taco/src/components/Icon/components/Lock.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Icon/components/index.js +2 -0
- package/dist/esm/packages/taco/src/components/Icon/components/index.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Layout/components/Sidebar.js +1 -1
- package/dist/esm/packages/taco/src/components/Menu/Menu.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Menu/components/Separator.js +7 -6
- package/dist/esm/packages/taco/src/components/Menu/components/Separator.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Provider/Localization.js +3 -3
- package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
- package/dist/esm/packages/taco/src/components/SearchInput2/SearchInput2.js +1 -1
- package/dist/esm/packages/taco/src/components/SearchInput2/SearchInput2.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table/hooks/useTableKeyboardNavigation.js +2 -2
- package/dist/esm/packages/taco/src/components/Table/hooks/useTableKeyboardNavigation.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/Table3.js +9 -4
- package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/Cell.js +3 -2
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/Cell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingCell.js +3 -2
- 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/styles.js +2 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/styles.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/ColumnSettings.js +34 -35
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/ColumnSettings.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/Filters.js +19 -7
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/Filters.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintButton.js +66 -18
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintButton.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js +12 -8
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/WarningDialog.js +5 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/WarningDialog.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Search.js +2 -2
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Search.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Settings.js +61 -0
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Settings.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Toolbar.js +8 -35
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Toolbar.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useColumnFreezing.js +3 -2
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useColumnFreezing.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useCurrentRow.js +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useCurrentRow.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useRowClick.js +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useRowClick.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useRowSelection.js +5 -2
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useRowSelection.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/listeners/useCurrentRowListener.js +2 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/listeners/useCurrentRowListener.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/listeners/useEditingStateListener.js +8 -4
- package/dist/esm/packages/taco/src/components/Table3/hooks/listeners/useEditingStateListener.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/listeners/useShortcutsListener.js +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/listeners/useShortcutsListener.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/useCssGrid.js +7 -3
- package/dist/esm/packages/taco/src/components/Table3/hooks/useCssGrid.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/useTable.js +9 -4
- package/dist/esm/packages/taco/src/components/Table3/hooks/useTable.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Tooltip/Tooltip.js +10 -12
- package/dist/esm/packages/taco/src/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/packages/taco/src/index.js +2 -2
- package/dist/taco.cjs.development.js +377 -247
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/package.json +14 -14
- package/types.json +14107 -11816
package/dist/esm/packages/taco/src/components/Table3/components/toolbar/ColumnSettings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnSettings.js","sources":["../../../../../../../../../src/components/Table3/components/toolbar/ColumnSettings.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { Table as RTable, Column as RTColumn, TableMeta } from '@tanstack/react-table';\nimport { isInternalColumn } from '../../util/columns';\nimport { useLocalization } from '../../../Provider/Localization';\nimport { Checkbox } from '../../../Checkbox/Checkbox';\nimport { Popover } from '../../../Popover/Popover';\nimport { Input } from '../../../Input/Input';\nimport * as SortablePrimitive from '../../../../primitives/Sortable/Sortable';\nimport { Icon } from '../../../Icon/Icon';\nimport { ensureOrdering } from '../../hooks/features/useColumnOrdering';\nimport { Button } from '../../../Button/Button';\n\ntype ColumnProps<TType = unknown> = React.HTMLAttributes<HTMLDivElement> & {\n column: RTColumn<TType, unknown>;\n draggable?: boolean;\n};\n\nconst Column = React.forwardRef(function Column<TType = unknown>(props: ColumnProps<TType>, ref: React.Ref<HTMLDivElement>) {\n const { column, draggable = false, ...dragAttributes } = props;\n const canHide = column.getCanHide();\n\n const className = cn('group/column flex items-center gap-x-2 rounded py-1 px-2', {\n 'hover:bg-grey-200': canHide || draggable,\n 'hover:cursor-pointer': canHide,\n 'active:cursor-move active:bg-grey-300': draggable,\n });\n\n const attributes = draggable ? dragAttributes : undefined;\n const isVisible = column.getIsVisible();\n\n return (\n <div {...attributes} key={column.id} className={className} onClick={() => column.toggleVisibility(!isVisible)} ref={ref}>\n {draggable ? <Icon name=\"drag\" className=\"text-grey-500 group-hover/column:text-grey-700 -mx-2 !h-5\" /> : null}\n <span className=\"flex-grow truncate\">{column.columnDef.meta?.header}</span>\n {canHide ? <Checkbox checked={isVisible} onChange={() => column.toggleVisibility(!isVisible)} /> : null}\n </div>\n );\n});\n\nexport type ColumnSettingsProps<TType = unknown> = {\n table: RTable<TType>;\n};\n\nexport function ColumnSettings<TType = unknown>(props: ColumnSettingsProps<TType>) {\n const { table } = props;\n const { texts } = useLocalization();\n const [query, setQuery] = React.useState('');\n const allColumns = table.getAllLeafColumns();\n const tableMeta = table.options.meta as TableMeta<TType>;\n const columns = React.useMemo(\n () =>\n allColumns\n .filter(column => !isInternalColumn(column.id))\n .filter(column =>\n query?.length ? column.columnDef.meta?.header.toLowerCase().includes(query.toLowerCase()) : true\n ),\n [allColumns, query]\n );\n\n const listClassName = 'flex max-h-64 flex-col gap-y-px overflow-auto';\n\n const handleReorder = (activeId, overId) => {\n if (columns.find(column => column.id === overId && column.columnDef.meta?.enableOrdering === false)) {\n return;\n }\n\n table.setColumnOrder(currentOrder =>\n ensureOrdering(\n allColumns,\n SortablePrimitive.arrayMove(\n currentOrder,\n currentOrder.findIndex(c => c === activeId),\n currentOrder.findIndex(c => c === overId)\n )\n )\n );\n };\n\n return (\n <Button\n popover={popoverProps => (\n <Popover {...popoverProps}>\n <Popover.Content>\n <div className=\"flex w-60 flex-col gap-2\">\n {table.options.enableHiding ? (\n <Input\n onChange={event => setQuery(event.target.value)}\n placeholder={texts.table3.columnSettings.search}\n value={query}\n />\n ) : null}\n {tableMeta.columnOrdering.isEnabled && columns.length && !query?.length ? (\n <SortablePrimitive.Container reorder={handleReorder}>\n <SortablePrimitive.List id=\"columns\" className={listClassName}>\n {columns.map(column => (\n <SortablePrimitive.Item\n key={column.id}\n id={column.id}\n disabled={!column.columnDef.meta?.enableOrdering}\n asChild>\n <Column\n column={column as any}\n draggable={column.columnDef.meta?.enableOrdering}\n />\n </SortablePrimitive.Item>\n ))}\n </SortablePrimitive.List>\n </SortablePrimitive.Container>\n ) : (\n <div className={listClassName}>\n {columns.length\n ? columns.map(column => <Column column={column as any} key={column.id} />)\n : texts.table3.columnSettings.noResults}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover>\n )}>\n <Icon name=\"columns\" />\n {texts.table3.columnSettings.button}\n </Button>\n );\n}\n"],"names":["Column","React","forwardRef","props","ref","column","draggable","dragAttributes","canHide","getCanHide","className","cn","attributes","undefined","isVisible","getIsVisible","key","id","onClick","toggleVisibility","Icon","name","columnDef","meta","_column$columnDef$met","header","Checkbox","checked","onChange","ColumnSettings","table","texts","useLocalization","query","setQuery","useState","allColumns","getAllLeafColumns","tableMeta","options","columns","useMemo","filter","isInternalColumn","_column$columnDef$met2","length","toLowerCase","includes","listClassName","handleReorder","activeId","overId","find","_column$columnDef$met3","enableOrdering","setColumnOrder","currentOrder","ensureOrdering","SortablePrimitive","findIndex","c","Button","popover","popoverProps","Popover","Content","enableHiding","Input","event","target","value","placeholder","table3","columnSettings","search","columnOrdering","isEnabled","reorder","map","_column$columnDef$met4","_column$columnDef$met5","disabled","asChild","noResults","button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ColumnSettings.js","sources":["../../../../../../../../../src/components/Table3/components/toolbar/ColumnSettings.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'classnames';\nimport { Table as RTable, Column as RTColumn, TableMeta } from '@tanstack/react-table';\nimport { isInternalColumn } from '../../util/columns';\nimport { useLocalization } from '../../../Provider/Localization';\nimport { Checkbox } from '../../../Checkbox/Checkbox';\nimport { Popover, PopoverProps } from '../../../Popover/Popover';\nimport { Input } from '../../../Input/Input';\nimport * as SortablePrimitive from '../../../../primitives/Sortable/Sortable';\nimport { Icon } from '../../../Icon/Icon';\nimport { ensureOrdering } from '../../hooks/features/useColumnOrdering';\n\ntype ColumnProps<TType = unknown> = React.HTMLAttributes<HTMLDivElement> & {\n column: RTColumn<TType, unknown>;\n draggable?: boolean;\n};\n\nconst Column = React.forwardRef(function Column<TType = unknown>(props: ColumnProps<TType>, ref: React.Ref<HTMLDivElement>) {\n const { column, draggable = false, ...dragAttributes } = props;\n const canHide = column.getCanHide();\n\n const className = cn('group/column flex items-center gap-x-2 rounded py-1 px-2', {\n 'hover:bg-grey-200': canHide || draggable,\n 'hover:cursor-pointer': canHide,\n 'active:cursor-move active:bg-grey-300': draggable,\n });\n\n const attributes = draggable ? dragAttributes : undefined;\n const isVisible = column.getIsVisible();\n\n return (\n <div {...attributes} key={column.id} className={className} onClick={() => column.toggleVisibility(!isVisible)} ref={ref}>\n {draggable ? <Icon name=\"drag\" className=\"text-grey-500 group-hover/column:text-grey-700 -mx-2 !h-5\" /> : null}\n <span className=\"flex-grow truncate\">{column.columnDef.meta?.header}</span>\n {canHide ? <Checkbox checked={isVisible} onChange={() => column.toggleVisibility(!isVisible)} /> : null}\n </div>\n );\n});\n\nexport type ColumnSettingsProps<TType = unknown> = PopoverProps & {\n table: RTable<TType>;\n};\n\nexport function ColumnSettingsPopover<TType = unknown>(props: ColumnSettingsProps<TType>) {\n const { table, trigger, ...popoverProps } = props;\n const { texts } = useLocalization();\n const [query, setQuery] = React.useState('');\n const allColumns = table.getAllLeafColumns();\n const tableMeta = table.options.meta as TableMeta<TType>;\n const columns = React.useMemo(\n () =>\n allColumns\n .filter(column => !isInternalColumn(column.id))\n .filter(column =>\n query?.length ? column.columnDef.meta?.header.toLowerCase().includes(query.toLowerCase()) : true\n ),\n [allColumns, query]\n );\n\n const listClassName = 'flex max-h-64 flex-col gap-y-px overflow-auto';\n\n const handleReorder = (activeId, overId) => {\n if (columns.find(column => column.id === overId && column.columnDef.meta?.enableOrdering === false)) {\n return;\n }\n\n table.setColumnOrder(currentOrder =>\n ensureOrdering(\n allColumns,\n SortablePrimitive.arrayMove(\n currentOrder,\n currentOrder.findIndex(c => c === activeId),\n currentOrder.findIndex(c => c === overId)\n )\n )\n );\n };\n\n return (\n <Popover {...popoverProps} anchor={trigger}>\n <Popover.Content>\n <div className=\"flex w-60 flex-col gap-2\">\n {table.options.enableHiding ? (\n <Input\n onChange={event => setQuery(event.target.value)}\n placeholder={texts.table3.columnSettings.search}\n value={query}\n />\n ) : null}\n {tableMeta.columnOrdering.isEnabled && columns.length && !query?.length ? (\n <SortablePrimitive.Container reorder={handleReorder}>\n <SortablePrimitive.List id=\"columns\" className={listClassName}>\n {columns.map(column => (\n <SortablePrimitive.Item\n key={column.id}\n id={column.id}\n disabled={!column.columnDef.meta?.enableOrdering}\n asChild>\n <Column column={column as any} draggable={column.columnDef.meta?.enableOrdering} />\n </SortablePrimitive.Item>\n ))}\n </SortablePrimitive.List>\n </SortablePrimitive.Container>\n ) : (\n <div className={listClassName}>\n {columns.length\n ? columns.map(column => <Column column={column as any} key={column.id} />)\n : texts.table3.columnSettings.noResults}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover>\n );\n}\n"],"names":["Column","React","forwardRef","props","ref","column","draggable","dragAttributes","canHide","getCanHide","className","cn","attributes","undefined","isVisible","getIsVisible","key","id","onClick","toggleVisibility","Icon","name","columnDef","meta","_column$columnDef$met","header","Checkbox","checked","onChange","ColumnSettingsPopover","table","trigger","popoverProps","texts","useLocalization","query","setQuery","useState","allColumns","getAllLeafColumns","tableMeta","options","columns","useMemo","filter","isInternalColumn","_column$columnDef$met2","length","toLowerCase","includes","listClassName","handleReorder","activeId","overId","find","_column$columnDef$met3","enableOrdering","setColumnOrder","currentOrder","ensureOrdering","SortablePrimitive","findIndex","c","Popover","anchor","Content","enableHiding","Input","event","target","value","placeholder","table3","columnSettings","search","columnOrdering","isEnabled","reorder","map","_column$columnDef$met4","_column$columnDef$met5","disabled","asChild","noResults"],"mappings":"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"}
|
package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/Filters.js
CHANGED
|
@@ -2,6 +2,7 @@ import React__default from 'react';
|
|
|
2
2
|
import cn from 'classnames';
|
|
3
3
|
import { Icon } from '../../../../../Icon/Icon.js';
|
|
4
4
|
import { useGlobalKeyDown } from '../../../../../../hooks/useGlobalKeyDown.js';
|
|
5
|
+
import { IconButton } from '../../../../../IconButton/IconButton.js';
|
|
5
6
|
import { useLocalization } from '../../../../../Provider/Localization.js';
|
|
6
7
|
import { Button } from '../../../../../Button/Button.js';
|
|
7
8
|
import { Popover } from '../../../../../Popover/Popover.js';
|
|
@@ -11,12 +12,13 @@ import { isInternalColumn } from '../../../../util/columns.js';
|
|
|
11
12
|
import { Table3FilterComparator } from '../../../../types.js';
|
|
12
13
|
import { Placeholder } from './components/Placeholder.js';
|
|
13
14
|
import { Filter } from './components/Filter.js';
|
|
15
|
+
import { useIsLargeScreen } from '../../../../../../hooks/useIsLargeScreen.js';
|
|
14
16
|
|
|
15
17
|
function sortByHeader(a, b) {
|
|
16
18
|
var _a$columnDef$meta, _a$columnDef$meta$hea, _a$columnDef$meta$hea2, _b$columnDef$meta;
|
|
17
19
|
return (_a$columnDef$meta = a.columnDef.meta) === null || _a$columnDef$meta === void 0 ? void 0 : (_a$columnDef$meta$hea = _a$columnDef$meta.header) === null || _a$columnDef$meta$hea === void 0 ? void 0 : (_a$columnDef$meta$hea2 = _a$columnDef$meta$hea.localeCompare) === null || _a$columnDef$meta$hea2 === void 0 ? void 0 : _a$columnDef$meta$hea2.call(_a$columnDef$meta$hea, (_b$columnDef$meta = b.columnDef.meta) === null || _b$columnDef$meta === void 0 ? void 0 : _b$columnDef$meta.header);
|
|
18
20
|
}
|
|
19
|
-
function
|
|
21
|
+
function FiltersButton(props) {
|
|
20
22
|
const {
|
|
21
23
|
total,
|
|
22
24
|
table
|
|
@@ -26,6 +28,7 @@ function Filters(props) {
|
|
|
26
28
|
texts
|
|
27
29
|
} = useLocalization();
|
|
28
30
|
const ref = React__default.useRef(null);
|
|
31
|
+
const isLargeScreen = useIsLargeScreen();
|
|
29
32
|
const allColumns = table.getAllLeafColumns().filter(column => !isInternalColumn(column.id)).sort(sortByHeader);
|
|
30
33
|
const appliedFilters = table.getState().columnFilters;
|
|
31
34
|
useGlobalKeyDown({
|
|
@@ -88,8 +91,8 @@ function Filters(props) {
|
|
|
88
91
|
setFilters([]);
|
|
89
92
|
setPlaceholderCount(1);
|
|
90
93
|
};
|
|
91
|
-
|
|
92
|
-
|
|
94
|
+
const buttonProps = {
|
|
95
|
+
'aria-label': texts.table3.filters.tooltip,
|
|
93
96
|
className: cn({
|
|
94
97
|
'!wcag-blue-100': appliedFilters.length
|
|
95
98
|
}),
|
|
@@ -133,7 +136,7 @@ function Filters(props) {
|
|
|
133
136
|
appearance: "primary",
|
|
134
137
|
onClick: handleApply
|
|
135
138
|
}, "Apply"))))),
|
|
136
|
-
ref
|
|
139
|
+
ref,
|
|
137
140
|
tooltip: /*#__PURE__*/React__default.createElement(React__default.Fragment, null, texts.table3.filters.tooltip, /*#__PURE__*/React__default.createElement(Shortcut, {
|
|
138
141
|
className: "ml-2",
|
|
139
142
|
keys: {
|
|
@@ -142,10 +145,19 @@ function Filters(props) {
|
|
|
142
145
|
shift: true
|
|
143
146
|
}
|
|
144
147
|
}))
|
|
145
|
-
}
|
|
148
|
+
};
|
|
149
|
+
if (!isLargeScreen && !appliedFilters.length) {
|
|
150
|
+
return /*#__PURE__*/React__default.createElement(IconButton, Object.assign({}, buttonProps, {
|
|
151
|
+
icon: "filter"
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
return /*#__PURE__*/React__default.createElement(Button, Object.assign({}, buttonProps), /*#__PURE__*/React__default.createElement(Icon, {
|
|
155
|
+
className: cn({
|
|
156
|
+
'-mr-1.5': !isLargeScreen
|
|
157
|
+
}),
|
|
146
158
|
name: appliedFilters.length ? 'filter-solid' : 'filter'
|
|
147
|
-
}), texts.table3.filters.button
|
|
159
|
+
}), isLargeScreen ? texts.table3.filters.button : '', appliedFilters.length ? `(${appliedFilters.length})` : '');
|
|
148
160
|
}
|
|
149
161
|
|
|
150
|
-
export {
|
|
162
|
+
export { FiltersButton };
|
|
151
163
|
//# sourceMappingURL=Filters.js.map
|
|
@@ -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 { 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
|
+
{"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';\nimport { useIsLargeScreen } from '../../../../../../hooks/useIsLargeScreen';\nimport { IconButton } from '../../../../../IconButton/IconButton';\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 FiltersButton<TType = unknown>(props: FiltersProps<TType>) {\n const { total, table } = props;\n const { locale, texts } = useLocalization();\n const ref = React.useRef<HTMLButtonElement>(null);\n const isLargeScreen = useIsLargeScreen();\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 const buttonProps = {\n 'aria-label': texts.table3.filters.tooltip,\n className: cn({ '!wcag-blue-100': appliedFilters.length }),\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={placeholderCount > 1 || filters.length > 0 ? handleRemovePlaceholder : undefined}\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,\n tooltip: (\n <>\n {texts.table3.filters.tooltip}\n <Shortcut className=\"ml-2\" keys={{ key: 'f', meta: true, shift: true }} />\n </>\n ),\n };\n\n if (!isLargeScreen && !appliedFilters.length) {\n return <IconButton {...buttonProps} icon=\"filter\" />;\n }\n return (\n <Button {...buttonProps}>\n <Icon className={cn({ '-mr-1.5': !isLargeScreen })} name={appliedFilters.length ? 'filter-solid' : 'filter'} />\n {isLargeScreen ? texts.table3.filters.button : ''}\n {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","FiltersButton","props","total","table","locale","texts","useLocalization","ref","React","useRef","isLargeScreen","useIsLargeScreen","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","buttonProps","table3","tooltip","className","cn","popover","popoverProps","Popover","Content","button","replace","Intl","NumberFormat","format","getFilteredRowModel","rows","map","Filter","position","onChange","onRemove","Array","_","Placeholder","onCreate","Button","appearance","onClick","buttons","addFilter","Group","Close","Shortcut","keys","IconButton","icon","Icon","name"],"mappings":"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"}
|
package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintButton.js
CHANGED
|
@@ -26,20 +26,23 @@ function PrintButton(props) {
|
|
|
26
26
|
const {
|
|
27
27
|
printWarningDialogVisibility
|
|
28
28
|
} = tableMeta.printing;
|
|
29
|
+
// When changing printTableId, update packages/taco/src/components/Table3/Table3.tsx file and other usages where
|
|
30
|
+
// printTableId is used to figure out whether the table is a print table or not.
|
|
29
31
|
const printTableId = `${tableProps.id}_print`;
|
|
32
|
+
const excludeUnmatchedResults = tableMeta.search.excludeUnmatchedResults;
|
|
30
33
|
const defaultSettings = React__default.useMemo(() => ({
|
|
31
34
|
columnFreezingIndex: tableMeta.columnFreezing.frozenColumnIndex,
|
|
32
35
|
columnOrder: state.columnOrder,
|
|
33
36
|
columnSizing: state.columnSizing,
|
|
34
37
|
columnVisibility: state.columnVisibility,
|
|
35
|
-
excludeUnmatchedRecordsInSearch:
|
|
38
|
+
excludeUnmatchedRecordsInSearch: excludeUnmatchedResults,
|
|
36
39
|
fontSize: tableMeta.fontSize.size,
|
|
37
40
|
rowHeight: tableMeta.rowHeight.height,
|
|
38
41
|
sorting: state.sorting,
|
|
39
42
|
// we don't save these, but we must pass them to print
|
|
40
43
|
columnFilters: state.columnFilters,
|
|
41
44
|
globalFilter: state.globalFilter
|
|
42
|
-
}), [tableMeta.columnFreezing.frozenColumnIndex, state.columnOrder, state.columnSizing, state.columnVisibility,
|
|
45
|
+
}), [tableMeta.columnFreezing.frozenColumnIndex, state.columnOrder, state.columnSizing, state.columnVisibility, excludeUnmatchedResults, tableMeta.fontSize.size, tableMeta.rowHeight.height, state.sorting, state.columnFilters, state.globalFilter]);
|
|
43
46
|
const iframeTableProps = {
|
|
44
47
|
...tableProps,
|
|
45
48
|
defaultSettings,
|
|
@@ -55,20 +58,51 @@ function PrintButton(props) {
|
|
|
55
58
|
// Starts custom printing
|
|
56
59
|
(_buttonRef$current = buttonRef.current) === null || _buttonRef$current === void 0 ? void 0 : _buttonRef$current.click();
|
|
57
60
|
});
|
|
58
|
-
const
|
|
61
|
+
const handleLoadingError = error => {
|
|
59
62
|
var _loadingToastRef$curr;
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
const errorMessage = `${texts.table3.print.error}: ${error}`;
|
|
64
|
+
console.error(errorMessage);
|
|
65
|
+
(_loadingToastRef$curr = loadingToastRef.current) === null || _loadingToastRef$curr === void 0 ? void 0 : _loadingToastRef$curr.error(errorMessage);
|
|
66
|
+
};
|
|
67
|
+
const restoreTableDataWithoutSearch = function () {
|
|
68
|
+
try {
|
|
69
|
+
const _temp = _catch(function () {
|
|
70
|
+
var _tableMeta$printing$l, _tableMeta$printing;
|
|
71
|
+
return Promise.resolve((_tableMeta$printing$l = (_tableMeta$printing = tableMeta.printing).loadAll) === null || _tableMeta$printing$l === void 0 ? void 0 : _tableMeta$printing$l.call(_tableMeta$printing, table.getState().sorting, table.getState().columnFilters, undefined)).then(function () {});
|
|
72
|
+
}, function (error) {
|
|
73
|
+
handleLoadingError(error);
|
|
74
|
+
});
|
|
75
|
+
return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
|
|
76
|
+
} catch (e) {
|
|
77
|
+
return Promise.reject(e);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const handleAfterPrint = function () {
|
|
81
|
+
try {
|
|
82
|
+
function _temp3() {
|
|
83
|
+
var _loadingToastRef$curr2;
|
|
84
|
+
setIsPrinting(false);
|
|
85
|
+
(_loadingToastRef$curr2 = loadingToastRef.current) === null || _loadingToastRef$curr2 === void 0 ? void 0 : _loadingToastRef$curr2.close();
|
|
86
|
+
}
|
|
87
|
+
const _temp2 = function () {
|
|
88
|
+
if (tableMeta.printing.loadAll && excludeUnmatchedResults) {
|
|
89
|
+
return Promise.resolve(restoreTableDataWithoutSearch()).then(function () {});
|
|
90
|
+
}
|
|
91
|
+
}();
|
|
92
|
+
return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2));
|
|
93
|
+
} catch (e) {
|
|
94
|
+
return Promise.reject(e);
|
|
95
|
+
}
|
|
62
96
|
};
|
|
63
97
|
const handleBeforePrint = () => {
|
|
64
|
-
var _loadingToastRef$
|
|
65
|
-
(_loadingToastRef$
|
|
98
|
+
var _loadingToastRef$curr3;
|
|
99
|
+
(_loadingToastRef$curr3 = loadingToastRef.current) === null || _loadingToastRef$curr3 === void 0 ? void 0 : _loadingToastRef$curr3.close();
|
|
66
100
|
};
|
|
67
101
|
const handlePrint = function () {
|
|
68
102
|
try {
|
|
69
103
|
let _exit = false;
|
|
70
|
-
function
|
|
71
|
-
if (_exit) return
|
|
104
|
+
function _temp6(_result3) {
|
|
105
|
+
if (_exit) return _result3;
|
|
72
106
|
if (hasNonSafeCellCount && printWarningDialogVisibility) {
|
|
73
107
|
setShowWarningDialog(true);
|
|
74
108
|
} else {
|
|
@@ -81,7 +115,7 @@ function PrintButton(props) {
|
|
|
81
115
|
let hasNonSafeCellCount = false;
|
|
82
116
|
// if loadAll is not defined, just print with what we've got
|
|
83
117
|
// don't compare length to data.length because the api might be choosing not to return all for performance
|
|
84
|
-
const
|
|
118
|
+
const _temp5 = function () {
|
|
85
119
|
if (!tableMeta.printing.loadAll) {
|
|
86
120
|
const {
|
|
87
121
|
data
|
|
@@ -89,8 +123,12 @@ function PrintButton(props) {
|
|
|
89
123
|
const cellCount = getCellCount(data);
|
|
90
124
|
hasNonSafeCellCount = cellCount > SAFE_PRINT_CELL_COUNT;
|
|
91
125
|
} else {
|
|
92
|
-
const
|
|
93
|
-
return Promise.resolve(tableMeta.printing.loadAll(table.getState().sorting, table.getState().columnFilters,
|
|
126
|
+
const _temp4 = _catch(function () {
|
|
127
|
+
return Promise.resolve(tableMeta.printing.loadAll(table.getState().sorting, table.getState().columnFilters,
|
|
128
|
+
// We need to pass search query to the server when printing, to be able to render correct data set in iFrame,
|
|
129
|
+
// But in "display" table, search is performed only on client side, so we'll need to request data again without search query,
|
|
130
|
+
// when printing will be finished.
|
|
131
|
+
excludeUnmatchedResults ? tableMeta.search.query : undefined)).then(function () {
|
|
94
132
|
// After the loadAll call above, the data changes. Hence, it becomes essential to acquire the data after
|
|
95
133
|
// this call rather than before it.
|
|
96
134
|
const {
|
|
@@ -100,17 +138,14 @@ function PrintButton(props) {
|
|
|
100
138
|
hasNonSafeCellCount = cellCount > SAFE_PRINT_CELL_COUNT;
|
|
101
139
|
});
|
|
102
140
|
}, function (error) {
|
|
103
|
-
|
|
104
|
-
const errorMessage = `${texts.table3.print.error}: ${error}`;
|
|
105
|
-
console.error(errorMessage);
|
|
106
|
-
(_loadingToastRef$curr3 = loadingToastRef.current) === null || _loadingToastRef$curr3 === void 0 ? void 0 : _loadingToastRef$curr3.error(errorMessage);
|
|
141
|
+
handleLoadingError(error);
|
|
107
142
|
// in case of error, we return early
|
|
108
143
|
_exit = true;
|
|
109
144
|
});
|
|
110
|
-
if (
|
|
145
|
+
if (_temp4 && _temp4.then) return _temp4.then(function () {});
|
|
111
146
|
}
|
|
112
147
|
}();
|
|
113
|
-
return Promise.resolve(
|
|
148
|
+
return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5));
|
|
114
149
|
} catch (e) {
|
|
115
150
|
return Promise.reject(e);
|
|
116
151
|
}
|
|
@@ -118,6 +153,18 @@ function PrintButton(props) {
|
|
|
118
153
|
const handleWarningDialogAccept = () => {
|
|
119
154
|
setIsPrinting(true);
|
|
120
155
|
};
|
|
156
|
+
const handleWarningDialogCancel = function () {
|
|
157
|
+
try {
|
|
158
|
+
const _temp7 = function () {
|
|
159
|
+
if (tableMeta.printing.loadAll && excludeUnmatchedResults) {
|
|
160
|
+
return Promise.resolve(restoreTableDataWithoutSearch()).then(function () {});
|
|
161
|
+
}
|
|
162
|
+
}();
|
|
163
|
+
return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(function () {}) : void 0);
|
|
164
|
+
} catch (e) {
|
|
165
|
+
return Promise.reject(e);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
121
168
|
const handleWarningDialogClose = () => {
|
|
122
169
|
var _loadingToastRef$curr4;
|
|
123
170
|
(_loadingToastRef$curr4 = loadingToastRef.current) === null || _loadingToastRef$curr4 === void 0 ? void 0 : _loadingToastRef$curr4.close();
|
|
@@ -138,6 +185,7 @@ function PrintButton(props) {
|
|
|
138
185
|
open: showWarningDialog,
|
|
139
186
|
onAccept: handleWarningDialogAccept,
|
|
140
187
|
onClose: handleWarningDialogClose,
|
|
188
|
+
onCancel: handleWarningDialogCancel,
|
|
141
189
|
onVisibilityChange: tableMeta.printing.setPrintWarningDialogVisibility
|
|
142
190
|
}));
|
|
143
191
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrintButton.js","sources":["../../../../../../../../../../src/components/Table3/components/toolbar/PrintButton/PrintButton.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as RTable, TableMeta } from '@tanstack/react-table';\n\nimport { IconButton } from '../../../../IconButton/IconButton';\nimport { useLocalization } from '../../../../Provider/Localization';\nimport { ToastReference, useToast } from '../../../../Toast/Toaster';\nimport { PrintIFrame } from './PrintIFrame';\nimport { Table3Props } from '../../../types';\nimport { useGlobalKeyDown } from '../../../../../hooks/useGlobalKeyDown';\nimport { WarningDialog } from './WarningDialog';\n\nconst SAFE_PRINT_CELL_COUNT = 10000;\n\nexport type PrintButtonProps<TType = unknown> = React.HTMLAttributes<HTMLButtonElement> & {\n table: RTable<TType>;\n tableProps: Table3Props<TType>;\n};\n\nexport function PrintButton<TType = unknown>(props: PrintButtonProps<TType>) {\n const { table, tableProps } = props;\n const { texts } = useLocalization();\n const toast = useToast();\n\n const [isPrinting, setIsPrinting] = React.useState(false);\n const [showWarningDialog, setShowWarningDialog] = React.useState(false);\n const loadingToastRef = React.useRef<ToastReference | null>(null);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n const tableMeta = table.options.meta as TableMeta<TType>;\n const state = table.getState();\n const { printWarningDialogVisibility } = tableMeta.printing;\n\n const printTableId = `${tableProps.id}_print`;\n\n const defaultSettings = React.useMemo(\n () => ({\n columnFreezingIndex: tableMeta.columnFreezing.frozenColumnIndex,\n columnOrder: state.columnOrder,\n columnSizing: state.columnSizing,\n columnVisibility: state.columnVisibility,\n excludeUnmatchedRecordsInSearch: tableMeta.search.excludeUnmatchedResults,\n fontSize: tableMeta.fontSize.size,\n rowHeight: tableMeta.rowHeight.height,\n sorting: state.sorting,\n // we don't save these, but we must pass them to print\n columnFilters: state.columnFilters,\n globalFilter: state.globalFilter,\n }),\n [\n tableMeta.columnFreezing.frozenColumnIndex,\n state.columnOrder,\n state.columnSizing,\n state.columnVisibility,\n tableMeta.search.excludeUnmatchedResults,\n tableMeta.fontSize.size,\n tableMeta.rowHeight.height,\n state.sorting,\n state.columnFilters,\n state.globalFilter,\n ]\n );\n\n const iframeTableProps = { ...tableProps, defaultSettings, id: printTableId };\n\n useGlobalKeyDown({ key: 'p', meta: true, shift: false }, (event: KeyboardEvent) => {\n event.preventDefault();\n // Starts custom printing\n buttonRef.current?.click();\n });\n\n const handleAfterPrint = () => {\n setIsPrinting(false);\n loadingToastRef.current?.close();\n };\n\n const handleBeforePrint = () => {\n loadingToastRef.current?.close();\n };\n\n const handlePrint = async () => {\n loadingToastRef.current = toast.loading(texts.table3.print.loading as any);\n\n const getCellCount = (data: TType[]) => (data.length ? data.length * Object.keys(data[0]).length : 0);\n let hasNonSafeCellCount = false;\n\n // if loadAll is not defined, just print with what we've got\n // don't compare length to data.length because the api might be choosing not to return all for performance\n if (!tableMeta.printing.loadAll) {\n const { data } = tableProps;\n const cellCount = getCellCount(data);\n\n hasNonSafeCellCount = cellCount > SAFE_PRINT_CELL_COUNT;\n } else {\n try {\n await tableMeta.printing.loadAll(\n table.getState().sorting,\n table.getState().columnFilters,\n tableMeta.search.query\n );\n\n // After the loadAll call above, the data changes. Hence, it becomes essential to acquire the data after\n // this call rather than before it.\n const { data } = tableProps;\n const cellCount = getCellCount(data);\n\n hasNonSafeCellCount = cellCount > SAFE_PRINT_CELL_COUNT;\n } catch (error) {\n const errorMessage = `${texts.table3.print.error}: ${error}`;\n\n console.error(errorMessage);\n loadingToastRef.current?.error(errorMessage);\n\n // in case of error, we return early\n return;\n }\n }\n\n if (hasNonSafeCellCount && printWarningDialogVisibility) {\n setShowWarningDialog(true);\n } else {\n // only set printing (mount the iframe) when the data has loaded, it prevents repaint performance slow downs\n setIsPrinting(true);\n }\n };\n\n const handleWarningDialogAccept = () => {\n setIsPrinting(true);\n };\n\n const handleWarningDialogClose = () => {\n loadingToastRef.current?.close();\n setShowWarningDialog(false);\n };\n\n return (\n <>\n <IconButton\n disabled={isPrinting}\n icon=\"print\"\n onClick={handlePrint}\n aria-label={texts.table3.print.tooltip}\n tooltip={texts.table3.print.tooltip}\n ref={buttonRef}\n />\n {isPrinting && iframeTableProps.data !== null && (\n <PrintIFrame\n onAfterPrint={handleAfterPrint}\n onBeforePrint={handleBeforePrint}\n tableProps={iframeTableProps as Table3Props<TType>}\n />\n )}\n <WarningDialog\n open={showWarningDialog}\n onAccept={handleWarningDialogAccept}\n onClose={handleWarningDialogClose}\n onVisibilityChange={tableMeta.printing.setPrintWarningDialogVisibility}\n />\n </>\n );\n}\n"],"names":["SAFE_PRINT_CELL_COUNT","PrintButton","props","table","tableProps","texts","useLocalization","toast","useToast","isPrinting","setIsPrinting","React","useState","showWarningDialog","setShowWarningDialog","loadingToastRef","useRef","buttonRef","tableMeta","options","meta","state","getState","printWarningDialogVisibility","printing","printTableId","id","defaultSettings","useMemo","columnFreezingIndex","columnFreezing","frozenColumnIndex","columnOrder","columnSizing","columnVisibility","excludeUnmatchedRecordsInSearch","search","excludeUnmatchedResults","fontSize","size","rowHeight","height","sorting","columnFilters","globalFilter","iframeTableProps","useGlobalKeyDown","key","shift","event","preventDefault","_buttonRef$current","current","click","handleAfterPrint","_loadingToastRef$curr","close","handleBeforePrint","_loadingToastRef$curr2","handlePrint","hasNonSafeCellCount","loading","table3","print","getCellCount","data","length","Object","keys","_temp2","loadAll","cellCount","_temp","_catch","Promise","resolve","query","then","error","_loadingToastRef$curr3","errorMessage","console","_exit","_temp3","e","reject","handleWarningDialogAccept","handleWarningDialogClose","_loadingToastRef$curr4","IconButton","disabled","icon","onClick","tooltip","ref","PrintIFrame","onAfterPrint","onBeforePrint","WarningDialog","open","onAccept","onClose","onVisibilityChange","setPrintWarningDialogVisibility"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PrintButton.js","sources":["../../../../../../../../../../src/components/Table3/components/toolbar/PrintButton/PrintButton.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as RTable, TableMeta } from '@tanstack/react-table';\n\nimport { IconButton } from '../../../../IconButton/IconButton';\nimport { useLocalization } from '../../../../Provider/Localization';\nimport { ToastReference, useToast } from '../../../../Toast/Toaster';\nimport { PrintIFrame } from './PrintIFrame';\nimport { Table3Props } from '../../../types';\nimport { useGlobalKeyDown } from '../../../../../hooks/useGlobalKeyDown';\nimport { WarningDialog } from './WarningDialog';\n\nconst SAFE_PRINT_CELL_COUNT = 10000;\n\nexport type PrintButtonProps<TType = unknown> = React.HTMLAttributes<HTMLButtonElement> & {\n table: RTable<TType>;\n tableProps: Table3Props<TType>;\n};\n\nexport function PrintButton<TType = unknown>(props: PrintButtonProps<TType>) {\n const { table, tableProps } = props;\n const { texts } = useLocalization();\n const toast = useToast();\n\n const [isPrinting, setIsPrinting] = React.useState(false);\n const [showWarningDialog, setShowWarningDialog] = React.useState(false);\n const loadingToastRef = React.useRef<ToastReference | null>(null);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n const tableMeta = table.options.meta as TableMeta<TType>;\n const state = table.getState();\n const { printWarningDialogVisibility } = tableMeta.printing;\n\n // When changing printTableId, update packages/taco/src/components/Table3/Table3.tsx file and other usages where\n // printTableId is used to figure out whether the table is a print table or not.\n const printTableId = `${tableProps.id}_print`;\n const excludeUnmatchedResults = tableMeta.search.excludeUnmatchedResults;\n\n const defaultSettings = React.useMemo(\n () => ({\n columnFreezingIndex: tableMeta.columnFreezing.frozenColumnIndex,\n columnOrder: state.columnOrder,\n columnSizing: state.columnSizing,\n columnVisibility: state.columnVisibility,\n excludeUnmatchedRecordsInSearch: excludeUnmatchedResults,\n fontSize: tableMeta.fontSize.size,\n rowHeight: tableMeta.rowHeight.height,\n sorting: state.sorting,\n // we don't save these, but we must pass them to print\n columnFilters: state.columnFilters,\n globalFilter: state.globalFilter,\n }),\n [\n tableMeta.columnFreezing.frozenColumnIndex,\n state.columnOrder,\n state.columnSizing,\n state.columnVisibility,\n excludeUnmatchedResults,\n tableMeta.fontSize.size,\n tableMeta.rowHeight.height,\n state.sorting,\n state.columnFilters,\n state.globalFilter,\n ]\n );\n\n const iframeTableProps = { ...tableProps, defaultSettings, id: printTableId };\n\n useGlobalKeyDown({ key: 'p', meta: true, shift: false }, (event: KeyboardEvent) => {\n event.preventDefault();\n // Starts custom printing\n buttonRef.current?.click();\n });\n\n const handleLoadingError = (error: any) => {\n const errorMessage = `${texts.table3.print.error}: ${error}`;\n\n console.error(errorMessage);\n loadingToastRef.current?.error(errorMessage);\n };\n\n const restoreTableDataWithoutSearch = async () => {\n try {\n await tableMeta.printing.loadAll?.(table.getState().sorting, table.getState().columnFilters, undefined);\n } catch (error) {\n handleLoadingError(error);\n return;\n }\n };\n\n const handleAfterPrint = async () => {\n if (tableMeta.printing.loadAll && excludeUnmatchedResults) {\n await restoreTableDataWithoutSearch();\n }\n setIsPrinting(false);\n loadingToastRef.current?.close();\n };\n\n const handleBeforePrint = () => {\n loadingToastRef.current?.close();\n };\n\n const handlePrint = async () => {\n loadingToastRef.current = toast.loading(texts.table3.print.loading as any);\n\n const getCellCount = (data: TType[]) => (data.length ? data.length * Object.keys(data[0]).length : 0);\n let hasNonSafeCellCount = false;\n\n // if loadAll is not defined, just print with what we've got\n // don't compare length to data.length because the api might be choosing not to return all for performance\n if (!tableMeta.printing.loadAll) {\n const { data } = tableProps;\n const cellCount = getCellCount(data);\n\n hasNonSafeCellCount = cellCount > SAFE_PRINT_CELL_COUNT;\n } else {\n try {\n await tableMeta.printing.loadAll(\n table.getState().sorting,\n table.getState().columnFilters,\n // We need to pass search query to the server when printing, to be able to render correct data set in iFrame,\n // But in \"display\" table, search is performed only on client side, so we'll need to request data again without search query,\n // when printing will be finished.\n excludeUnmatchedResults ? tableMeta.search.query : undefined\n );\n\n // After the loadAll call above, the data changes. Hence, it becomes essential to acquire the data after\n // this call rather than before it.\n const { data } = tableProps;\n const cellCount = getCellCount(data);\n\n hasNonSafeCellCount = cellCount > SAFE_PRINT_CELL_COUNT;\n } catch (error) {\n handleLoadingError(error);\n\n // in case of error, we return early\n return;\n }\n }\n\n if (hasNonSafeCellCount && printWarningDialogVisibility) {\n setShowWarningDialog(true);\n } else {\n // only set printing (mount the iframe) when the data has loaded, it prevents repaint performance slow downs\n setIsPrinting(true);\n }\n };\n\n const handleWarningDialogAccept = () => {\n setIsPrinting(true);\n };\n\n const handleWarningDialogCancel = async () => {\n if (tableMeta.printing.loadAll && excludeUnmatchedResults) {\n await restoreTableDataWithoutSearch();\n }\n };\n\n const handleWarningDialogClose = () => {\n loadingToastRef.current?.close();\n setShowWarningDialog(false);\n };\n\n return (\n <>\n <IconButton\n disabled={isPrinting}\n icon=\"print\"\n onClick={handlePrint}\n aria-label={texts.table3.print.tooltip}\n tooltip={texts.table3.print.tooltip}\n ref={buttonRef}\n />\n {isPrinting && iframeTableProps.data !== null && (\n <PrintIFrame\n onAfterPrint={handleAfterPrint}\n onBeforePrint={handleBeforePrint}\n tableProps={iframeTableProps as Table3Props<TType>}\n />\n )}\n <WarningDialog\n open={showWarningDialog}\n onAccept={handleWarningDialogAccept}\n onClose={handleWarningDialogClose}\n onCancel={handleWarningDialogCancel}\n onVisibilityChange={tableMeta.printing.setPrintWarningDialogVisibility}\n />\n </>\n );\n}\n"],"names":["SAFE_PRINT_CELL_COUNT","PrintButton","props","table","tableProps","texts","useLocalization","toast","useToast","isPrinting","setIsPrinting","React","useState","showWarningDialog","setShowWarningDialog","loadingToastRef","useRef","buttonRef","tableMeta","options","meta","state","getState","printWarningDialogVisibility","printing","printTableId","id","excludeUnmatchedResults","search","defaultSettings","useMemo","columnFreezingIndex","columnFreezing","frozenColumnIndex","columnOrder","columnSizing","columnVisibility","excludeUnmatchedRecordsInSearch","fontSize","size","rowHeight","height","sorting","columnFilters","globalFilter","iframeTableProps","useGlobalKeyDown","key","shift","event","preventDefault","_buttonRef$current","current","click","handleLoadingError","error","errorMessage","table3","print","console","_loadingToastRef$curr","restoreTableDataWithoutSearch","_tableMeta$printing$l","_tableMeta$printing","Promise","resolve","loadAll","call","undefined","then","_temp","e","reject","handleAfterPrint","_loadingToastRef$curr2","close","_temp2","_temp3","handleBeforePrint","_loadingToastRef$curr3","handlePrint","hasNonSafeCellCount","loading","getCellCount","data","length","Object","keys","_temp5","cellCount","_temp4","_catch","query","_exit","_temp6","handleWarningDialogAccept","handleWarningDialogCancel","_temp7","handleWarningDialogClose","_loadingToastRef$curr4","IconButton","disabled","icon","onClick","tooltip","ref","PrintIFrame","onAfterPrint","onBeforePrint","WarningDialog","open","onAccept","onClose","onCancel","onVisibilityChange","setPrintWarningDialogVisibility"],"mappings":"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"}
|
package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js
CHANGED
|
@@ -66,14 +66,14 @@ import '../../../../../hooks/useBoundaryOverflowDetection.js';
|
|
|
66
66
|
import '../../../../Table2/Table2.js';
|
|
67
67
|
import '../../../../../hooks/useLazyEffect.js';
|
|
68
68
|
import '../../../../Textarea/Textarea.js';
|
|
69
|
+
import '../../../../../hooks/useMatchMedia.js';
|
|
70
|
+
import '../../../../../hooks/useIsLargeScreen.js';
|
|
69
71
|
import { useParentStylesheets } from './hooks/useParentStylesheets.js';
|
|
70
72
|
import '../../../hooks/useTableDataLoader.js';
|
|
71
73
|
import { Table3 } from '../../../Table3.js';
|
|
72
74
|
import '../../../../Tabs/Tabs.js';
|
|
73
75
|
import '../../../../Tour/Tour.js';
|
|
74
|
-
import '../../../../../hooks/useMatchMedia.js';
|
|
75
76
|
import '../../../../Header/Header.js';
|
|
76
|
-
import '../../../../../hooks/useIsLargeScreen.js';
|
|
77
77
|
import '../../../../Layout/Layout.js';
|
|
78
78
|
import '../../../../Navigation2/components/Link.js';
|
|
79
79
|
import '../../../../Navigation2/Navigation2.js';
|
|
@@ -87,6 +87,7 @@ function PrintIFrame({
|
|
|
87
87
|
const [contentRef, setContentRef] = React__default.useState(null);
|
|
88
88
|
const [mountNode, setMountNode] = React__default.useState(null);
|
|
89
89
|
const isFirefoxBrowser = React__default.useMemo(() => navigator.userAgent.toLowerCase().includes('firefox'), []);
|
|
90
|
+
const isSafariBrowser = React__default.useMemo(() => navigator.userAgent.toLowerCase().includes('safari') && !navigator.userAgent.toLowerCase().includes('chrome'), []);
|
|
90
91
|
const iframeWindow = contentRef === null || contentRef === void 0 ? void 0 : contentRef.contentWindow;
|
|
91
92
|
const stylesReady = useParentStylesheets(iframeWindow);
|
|
92
93
|
// Calls print method when table has loaded in the iframe.
|
|
@@ -155,13 +156,16 @@ function PrintIFrame({
|
|
|
155
156
|
tableWrapper.classList.add('h-fit');
|
|
156
157
|
tableWrapper.classList.add('[&>[role="table"]]:!h-fit');
|
|
157
158
|
if (isFirefoxBrowser) {
|
|
158
|
-
// Fix for firefox bug which adds page-long whitespace between page's top content and table
|
|
159
|
+
// Fix for firefox bug which adds page-long whitespace between page's top content and table.
|
|
159
160
|
tableWrapper.classList.add('[&>[role="table"]]:!absolute');
|
|
160
161
|
}
|
|
161
|
-
//
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
162
|
+
// Makes sure table takes the full screen width.
|
|
163
|
+
if (isSafariBrowser) {
|
|
164
|
+
// Safari browser doesn't apply correct width to the columns when w-screen is used.
|
|
165
|
+
tableWrapper.classList.add('w-full');
|
|
166
|
+
} else {
|
|
167
|
+
tableWrapper.classList.add('w-screen');
|
|
168
|
+
}
|
|
165
169
|
if (tableElement) {
|
|
166
170
|
var _tableElement$parentN;
|
|
167
171
|
(_tableElement$parentN = tableElement.parentNode) === null || _tableElement$parentN === void 0 ? void 0 : _tableElement$parentN.insertBefore(tableWrapper, tableElement);
|
|
@@ -206,7 +210,7 @@ function PrintIFrame({
|
|
|
206
210
|
};
|
|
207
211
|
// -top-60 -left-60 styles make sure that iframe is added outside of the viewport
|
|
208
212
|
return /*#__PURE__*/React__default.createElement("iframe", {
|
|
209
|
-
className: "fixed -left-
|
|
213
|
+
className: "fixed -left-[6000px] -top-[6000px] -z-50 !h-0 !w-0",
|
|
210
214
|
ref: setContentRef,
|
|
211
215
|
// Temporary fix to support printing in firefox: Find another solution while upgrading React
|
|
212
216
|
src: "javascript:void(0);"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrintIFrame.js","sources":["../../../../../../../../../../src/components/Table3/components/toolbar/PrintButton/PrintIFrame.tsx"],"sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Table3 } from '../../../../..';\nimport { Table3Props } from '../../../types';\nimport { useParentStylesheets } from './hooks/useParentStylesheets';\n\nexport type PrintIFrameProps<TType = unknown> = {\n onAfterPrint?: () => void;\n onBeforePrint?: () => void;\n tableProps: Table3Props<TType>;\n};\n\nexport function PrintIFrame<TType = unknown>({ onAfterPrint, onBeforePrint, tableProps }: PrintIFrameProps<TType>) {\n const [contentRef, setContentRef] = React.useState<HTMLIFrameElement | null>(null);\n const [mountNode, setMountNode] = React.useState<HTMLElement | null>(null);\n\n const isFirefoxBrowser = React.useMemo(() => navigator.userAgent.toLowerCase().includes('firefox'), []);\n\n const iframeWindow = contentRef?.contentWindow;\n\n const stylesReady = useParentStylesheets(iframeWindow);\n\n // Calls print method when table has loaded in the iframe.\n React.useEffect(() => {\n let intervalId: NodeJS.Timer;\n let timeoutId: NodeJS.Timer;\n\n // Invoke the print functionality on the window once the table has finished rendering and all print styles are\n // added.\n if (mountNode && stylesReady) {\n intervalId = setInterval(async () => {\n const tableWrapper = mountNode;\n const table = tableWrapper.querySelector('[role=\"table\"]') as HTMLElement;\n const hasTableRendered = !!table;\n\n if (hasTableRendered && intervalId) {\n clearInterval(intervalId);\n\n // Calling the onBeforePrint method here as a fallback because certain browsers, like Safari,\n // do not call the beforeprint event.\n // Bug - Even though onBeforePrint is called before printing, the execution doesn't finish before\n // the print dialog shows up, which results into having a visible loading toast.\n onBeforePrint?.();\n\n // By adding height to the tableWrapper, we make sure the content below absolutely positioned table\n // doesn't hide\n if (isFirefoxBrowser) {\n const tableHeight = `${table.offsetHeight}px`;\n tableWrapper.style.height = tableHeight;\n }\n\n contentRef?.contentWindow?.print();\n\n // Calling the onAfterPrint method here as a fallback to do the cleanup, as certain browsers,\n // like Safari, do not trigger the beforeprint or afterprint events when a confirmation dialog\n // asking if the user wants to print the document, is cancelled.\n\n // Added a setTimeout to prevent calling onAfterPrint immediately after the print function\n // to ensure that the print dialog doesn't close abruptly. Although this behavior is uncommon,\n // there are cases where the print function may not run synchronously, causing onAfterPrint to be\n // invoked right after it.\n timeoutId = setTimeout(() => {\n onAfterPrint?.();\n }, 0);\n }\n }, 1000);\n }\n\n return () => {\n clearInterval(intervalId);\n clearTimeout(timeoutId);\n };\n }, [mountNode, stylesReady]);\n\n React.useEffect(() => {\n if (!contentRef || !iframeWindow || !stylesReady) {\n return;\n }\n\n // get the closest parent/container of the table, and the table itself\n const parentElement = contentRef?.closest('[role=dialog], [data-taco=drawer], main') ?? iframeWindow.parent.document.body;\n\n const iframeDocument = iframeWindow.document;\n iframeDocument.body.innerHTML = parentElement?.innerHTML ?? '';\n\n const tableElement = iframeDocument.querySelector('[role=\"table\"]');\n const tableColumnFreezingStyles = iframeDocument.querySelector('[data-taco=\"table3-column-freezing-styles\"]');\n const tableWrapper = iframeDocument.createElement('div');\n\n tableWrapper.setAttribute('data-role', 'table-wrapper');\n // Adding h-fit class makes sure that table is rendered with the whole content.\n tableWrapper.classList.add('h-fit');\n tableWrapper.classList.add('[&>[role=\"table\"]]:!h-fit');\n\n if (isFirefoxBrowser) {\n // Fix for firefox bug which adds page-long whitespace between page's top content and table\n tableWrapper.classList.add('[&>[role=\"table\"]]:!absolute');\n }\n\n // Safari print preview assigns no width to the table when w-screen class is used.\n // By assigning table a big static width and hiding the horizontal scrollbar, the table on chrome\n // and safari will always take full page width.\n tableWrapper.classList.add('w-[10000px]');\n\n if (tableElement) {\n tableElement.parentNode?.insertBefore(tableWrapper, tableElement);\n tableElement.remove();\n } else {\n iframeDocument.body.append(tableWrapper);\n }\n\n // Remove the already existing column freezing styles.\n if (tableColumnFreezingStyles) {\n tableColumnFreezingStyles.remove();\n }\n\n let currentNode = tableWrapper.parentNode as HTMLElement | null;\n\n while (currentNode !== null && currentNode !== iframeDocument.body) {\n // Add the 'h-fit' class to the 'table-wrapper' element's parent chain.\n // This ensures that the table is not cropped and fits within its container.\n currentNode?.classList.add('!h-fit');\n currentNode = currentNode.parentNode as HTMLElement | null;\n }\n\n setMountNode(tableWrapper);\n }, [iframeWindow, stylesReady]);\n\n const printTableProps: Table3Props<TType> = {\n ...tableProps,\n actionsForRow: undefined,\n // Not the best way to remove the active/current row styles, but a temporary solution for now\n defaultCurrentRowIndex: -1,\n defaultSettings: {\n ...tableProps?.defaultSettings,\n rowHeight: 'short',\n },\n enableColumnFreezing: false,\n enableRowHeight: true,\n enableRowSelection: false,\n enableEditing: false,\n enablePrinting: false,\n enableRowDrag: false,\n enableRowDrop: false,\n enableRowSelectionSingle: false,\n preset: undefined,\n // The presence of the onChangeSettings prop ensures that settings won't be stored in local storage.\n onChangeSettings: () => undefined,\n };\n\n // -top-60 -left-60 styles make sure that iframe is added outside of the viewport\n return (\n <iframe\n className=\"fixed -left-60 -top-60 !h-0 !w-0\"\n ref={setContentRef}\n // Temporary fix to support printing in firefox: Find another solution while upgrading React\n src=\"javascript:void(0);\">\n {mountNode && stylesReady ? ReactDOM.createPortal(<Table3 {...printTableProps} />, mountNode) : null}\n </iframe>\n );\n}\n"],"names":["PrintIFrame","onAfterPrint","onBeforePrint","tableProps","contentRef","setContentRef","React","useState","mountNode","setMountNode","isFirefoxBrowser","useMemo","navigator","userAgent","toLowerCase","includes","iframeWindow","contentWindow","stylesReady","useParentStylesheets","useEffect","intervalId","timeoutId","setInterval","tableWrapper","table","querySelector","hasTableRendered","_contentRef$contentWi","clearInterval","tableHeight","offsetHeight","style","height","print","setTimeout","Promise","resolve","e","reject","clearTimeout","parentElement","_contentRef$closest","closest","parent","document","body","iframeDocument","innerHTML","_parentElement$innerH","tableElement","tableColumnFreezingStyles","createElement","setAttribute","classList","add","_tableElement$parentN","parentNode","insertBefore","remove","append","currentNode","_currentNode","printTableProps","actionsForRow","undefined","defaultCurrentRowIndex","defaultSettings","rowHeight","enableColumnFreezing","enableRowHeight","enableRowSelection","enableEditing","enablePrinting","enableRowDrag","enableRowDrop","enableRowSelectionSingle","preset","onChangeSettings","className","ref","src","ReactDOM","createPortal","Table3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PrintIFrame.js","sources":["../../../../../../../../../../src/components/Table3/components/toolbar/PrintButton/PrintIFrame.tsx"],"sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Table3 } from '../../../../..';\nimport { Table3Props } from '../../../types';\nimport { useParentStylesheets } from './hooks/useParentStylesheets';\n\nexport type PrintIFrameProps<TType = unknown> = {\n onAfterPrint?: () => void;\n onBeforePrint?: () => void;\n tableProps: Table3Props<TType>;\n};\n\nexport function PrintIFrame<TType = unknown>({ onAfterPrint, onBeforePrint, tableProps }: PrintIFrameProps<TType>) {\n const [contentRef, setContentRef] = React.useState<HTMLIFrameElement | null>(null);\n const [mountNode, setMountNode] = React.useState<HTMLElement | null>(null);\n\n const isFirefoxBrowser = React.useMemo(() => navigator.userAgent.toLowerCase().includes('firefox'), []);\n const isSafariBrowser = React.useMemo(\n () => navigator.userAgent.toLowerCase().includes('safari') && !navigator.userAgent.toLowerCase().includes('chrome'),\n []\n );\n\n const iframeWindow = contentRef?.contentWindow;\n\n const stylesReady = useParentStylesheets(iframeWindow);\n\n // Calls print method when table has loaded in the iframe.\n React.useEffect(() => {\n let intervalId: NodeJS.Timer;\n let timeoutId: NodeJS.Timer;\n\n // Invoke the print functionality on the window once the table has finished rendering and all print styles are\n // added.\n if (mountNode && stylesReady) {\n intervalId = setInterval(async () => {\n const tableWrapper = mountNode;\n const table = tableWrapper.querySelector('[role=\"table\"]') as HTMLElement;\n const hasTableRendered = !!table;\n\n if (hasTableRendered && intervalId) {\n clearInterval(intervalId);\n\n // Calling the onBeforePrint method here as a fallback because certain browsers, like Safari,\n // do not call the beforeprint event.\n // Bug - Even though onBeforePrint is called before printing, the execution doesn't finish before\n // the print dialog shows up, which results into having a visible loading toast.\n onBeforePrint?.();\n\n // By adding height to the tableWrapper, we make sure the content below absolutely positioned table\n // doesn't hide\n if (isFirefoxBrowser) {\n const tableHeight = `${table.offsetHeight}px`;\n tableWrapper.style.height = tableHeight;\n }\n\n contentRef?.contentWindow?.print();\n\n // Calling the onAfterPrint method here as a fallback to do the cleanup, as certain browsers,\n // like Safari, do not trigger the beforeprint or afterprint events when a confirmation dialog\n // asking if the user wants to print the document, is cancelled.\n\n // Added a setTimeout to prevent calling onAfterPrint immediately after the print function\n // to ensure that the print dialog doesn't close abruptly. Although this behavior is uncommon,\n // there are cases where the print function may not run synchronously, causing onAfterPrint to be\n // invoked right after it.\n timeoutId = setTimeout(() => {\n onAfterPrint?.();\n }, 0);\n }\n }, 1000);\n }\n\n return () => {\n clearInterval(intervalId);\n clearTimeout(timeoutId);\n };\n }, [mountNode, stylesReady]);\n\n React.useEffect(() => {\n if (!contentRef || !iframeWindow || !stylesReady) {\n return;\n }\n\n // get the closest parent/container of the table, and the table itself\n const parentElement = contentRef?.closest('[role=dialog], [data-taco=drawer], main') ?? iframeWindow.parent.document.body;\n\n const iframeDocument = iframeWindow.document;\n iframeDocument.body.innerHTML = parentElement?.innerHTML ?? '';\n\n const tableElement = iframeDocument.querySelector('[role=\"table\"]');\n const tableColumnFreezingStyles = iframeDocument.querySelector('[data-taco=\"table3-column-freezing-styles\"]');\n const tableWrapper = iframeDocument.createElement('div');\n\n tableWrapper.setAttribute('data-role', 'table-wrapper');\n // Adding h-fit class makes sure that table is rendered with the whole content.\n tableWrapper.classList.add('h-fit');\n tableWrapper.classList.add('[&>[role=\"table\"]]:!h-fit');\n\n if (isFirefoxBrowser) {\n // Fix for firefox bug which adds page-long whitespace between page's top content and table.\n tableWrapper.classList.add('[&>[role=\"table\"]]:!absolute');\n }\n\n // Makes sure table takes the full screen width.\n if (isSafariBrowser) {\n // Safari browser doesn't apply correct width to the columns when w-screen is used.\n tableWrapper.classList.add('w-full');\n } else {\n tableWrapper.classList.add('w-screen');\n }\n\n if (tableElement) {\n tableElement.parentNode?.insertBefore(tableWrapper, tableElement);\n tableElement.remove();\n } else {\n iframeDocument.body.append(tableWrapper);\n }\n\n // Remove the already existing column freezing styles.\n if (tableColumnFreezingStyles) {\n tableColumnFreezingStyles.remove();\n }\n\n let currentNode = tableWrapper.parentNode as HTMLElement | null;\n\n while (currentNode !== null && currentNode !== iframeDocument.body) {\n // Add the 'h-fit' class to the 'table-wrapper' element's parent chain.\n // This ensures that the table is not cropped and fits within its container.\n currentNode?.classList.add('!h-fit');\n currentNode = currentNode.parentNode as HTMLElement | null;\n }\n\n setMountNode(tableWrapper);\n }, [iframeWindow, stylesReady]);\n\n const printTableProps: Table3Props<TType> = {\n ...tableProps,\n actionsForRow: undefined,\n // Not the best way to remove the active/current row styles, but a temporary solution for now\n defaultCurrentRowIndex: -1,\n defaultSettings: {\n ...tableProps?.defaultSettings,\n rowHeight: 'short',\n },\n enableColumnFreezing: false,\n enableRowHeight: true,\n enableRowSelection: false,\n enableEditing: false,\n enablePrinting: false,\n enableRowDrag: false,\n enableRowDrop: false,\n enableRowSelectionSingle: false,\n preset: undefined,\n // The presence of the onChangeSettings prop ensures that settings won't be stored in local storage.\n onChangeSettings: () => undefined,\n };\n\n // -top-60 -left-60 styles make sure that iframe is added outside of the viewport\n return (\n <iframe\n className=\"fixed -left-[6000px] -top-[6000px] -z-50 !h-0 !w-0\"\n ref={setContentRef}\n // Temporary fix to support printing in firefox: Find another solution while upgrading React\n src=\"javascript:void(0);\">\n {mountNode && stylesReady ? ReactDOM.createPortal(<Table3 {...printTableProps} />, mountNode) : null}\n </iframe>\n );\n}\n"],"names":["PrintIFrame","onAfterPrint","onBeforePrint","tableProps","contentRef","setContentRef","React","useState","mountNode","setMountNode","isFirefoxBrowser","useMemo","navigator","userAgent","toLowerCase","includes","isSafariBrowser","iframeWindow","contentWindow","stylesReady","useParentStylesheets","useEffect","intervalId","timeoutId","setInterval","tableWrapper","table","querySelector","hasTableRendered","_contentRef$contentWi","clearInterval","tableHeight","offsetHeight","style","height","print","setTimeout","Promise","resolve","e","reject","clearTimeout","parentElement","_contentRef$closest","closest","parent","document","body","iframeDocument","innerHTML","_parentElement$innerH","tableElement","tableColumnFreezingStyles","createElement","setAttribute","classList","add","_tableElement$parentN","parentNode","insertBefore","remove","append","currentNode","_currentNode","printTableProps","actionsForRow","undefined","defaultCurrentRowIndex","defaultSettings","rowHeight","enableColumnFreezing","enableRowHeight","enableRowSelection","enableEditing","enablePrinting","enableRowDrag","enableRowDrop","enableRowSelectionSingle","preset","onChangeSettings","className","ref","src","ReactDOM","createPortal","Table3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAagBA,WAAWA,CAAkB;EAAEC,YAAY;EAAEC,aAAa;EAAEC;CAAqC;EAC7G,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAGC,cAAK,CAACC,QAAQ,CAA2B,IAAI,CAAC;EAClF,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAGH,cAAK,CAACC,QAAQ,CAAqB,IAAI,CAAC;EAE1E,MAAMG,gBAAgB,GAAGJ,cAAK,CAACK,OAAO,CAAC,MAAMC,SAAS,CAACC,SAAS,CAACC,WAAW,EAAE,CAACC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;EACvG,MAAMC,eAAe,GAAGV,cAAK,CAACK,OAAO,CACjC,MAAMC,SAAS,CAACC,SAAS,CAACC,WAAW,EAAE,CAACC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAACH,SAAS,CAACC,SAAS,CAACC,WAAW,EAAE,CAACC,QAAQ,CAAC,QAAQ,CAAC,EACnH,EAAE,CACL;EAED,MAAME,YAAY,GAAGb,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEc,aAAa;EAE9C,MAAMC,WAAW,GAAGC,oBAAoB,CAACH,YAAY,CAAC;;EAGtDX,cAAK,CAACe,SAAS,CAAC;IACZ,IAAIC,UAAwB;IAC5B,IAAIC,SAAuB;;;IAI3B,IAAIf,SAAS,IAAIW,WAAW,EAAE;MAC1BG,UAAU,GAAGE,WAAW;QAAA;UACpB,MAAMC,YAAY,GAAGjB,SAAS;UAC9B,MAAMkB,KAAK,GAAGD,YAAY,CAACE,aAAa,CAAC,gBAAgB,CAAgB;UACzE,MAAMC,gBAAgB,GAAG,CAAC,CAACF,KAAK;UAEhC,IAAIE,gBAAgB,IAAIN,UAAU,EAAE;YAAA,IAAAO,qBAAA;YAChCC,aAAa,CAACR,UAAU,CAAC;;;;;YAMzBpB,aAAa,aAAbA,aAAa,uBAAbA,aAAa,EAAI;;;YAIjB,IAAIQ,gBAAgB,EAAE;cAClB,MAAMqB,WAAW,MAAML,KAAK,CAACM,gBAAgB;cAC7CP,YAAY,CAACQ,KAAK,CAACC,MAAM,GAAGH,WAAW;;YAG3C3B,UAAU,aAAVA,UAAU,wBAAAyB,qBAAA,GAAVzB,UAAU,CAAEc,aAAa,cAAAW,qBAAA,uBAAzBA,qBAAA,CAA2BM,KAAK,EAAE;;;;;;;;YAUlCZ,SAAS,GAAGa,UAAU,CAAC;cACnBnC,YAAY,aAAZA,YAAY,uBAAZA,YAAY,EAAI;aACnB,EAAE,CAAC,CAAC;;UACR,OAAAoC,OAAA,CAAAC,OAAA;SACJ,QAAAC,CAAA;UAAA,OAAAF,OAAA,CAAAG,MAAA,CAAAD,CAAA;;SAAE,IAAI,CAAC;;IAGZ,OAAO;MACHT,aAAa,CAACR,UAAU,CAAC;MACzBmB,YAAY,CAAClB,SAAS,CAAC;KAC1B;GACJ,EAAE,CAACf,SAAS,EAAEW,WAAW,CAAC,CAAC;EAE5Bb,cAAK,CAACe,SAAS,CAAC;;IACZ,IAAI,CAACjB,UAAU,IAAI,CAACa,YAAY,IAAI,CAACE,WAAW,EAAE;MAC9C;;;IAIJ,MAAMuB,aAAa,IAAAC,mBAAA,GAAGvC,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEwC,OAAO,CAAC,yCAAyC,CAAC,cAAAD,mBAAA,cAAAA,mBAAA,GAAI1B,YAAY,CAAC4B,MAAM,CAACC,QAAQ,CAACC,IAAI;IAEzH,MAAMC,cAAc,GAAG/B,YAAY,CAAC6B,QAAQ;IAC5CE,cAAc,CAACD,IAAI,CAACE,SAAS,IAAAC,qBAAA,GAAGR,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEO,SAAS,cAAAC,qBAAA,cAAAA,qBAAA,GAAI,EAAE;IAE9D,MAAMC,YAAY,GAAGH,cAAc,CAACrB,aAAa,CAAC,gBAAgB,CAAC;IACnE,MAAMyB,yBAAyB,GAAGJ,cAAc,CAACrB,aAAa,CAAC,6CAA6C,CAAC;IAC7G,MAAMF,YAAY,GAAGuB,cAAc,CAACK,aAAa,CAAC,KAAK,CAAC;IAExD5B,YAAY,CAAC6B,YAAY,CAAC,WAAW,EAAE,eAAe,CAAC;;IAEvD7B,YAAY,CAAC8B,SAAS,CAACC,GAAG,CAAC,OAAO,CAAC;IACnC/B,YAAY,CAAC8B,SAAS,CAACC,GAAG,CAAC,2BAA2B,CAAC;IAEvD,IAAI9C,gBAAgB,EAAE;;MAElBe,YAAY,CAAC8B,SAAS,CAACC,GAAG,CAAC,8BAA8B,CAAC;;;IAI9D,IAAIxC,eAAe,EAAE;;MAEjBS,YAAY,CAAC8B,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;KACvC,MAAM;MACH/B,YAAY,CAAC8B,SAAS,CAACC,GAAG,CAAC,UAAU,CAAC;;IAG1C,IAAIL,YAAY,EAAE;MAAA,IAAAM,qBAAA;MACd,CAAAA,qBAAA,GAAAN,YAAY,CAACO,UAAU,cAAAD,qBAAA,uBAAvBA,qBAAA,CAAyBE,YAAY,CAAClC,YAAY,EAAE0B,YAAY,CAAC;MACjEA,YAAY,CAACS,MAAM,EAAE;KACxB,MAAM;MACHZ,cAAc,CAACD,IAAI,CAACc,MAAM,CAACpC,YAAY,CAAC;;;IAI5C,IAAI2B,yBAAyB,EAAE;MAC3BA,yBAAyB,CAACQ,MAAM,EAAE;;IAGtC,IAAIE,WAAW,GAAGrC,YAAY,CAACiC,UAAgC;IAE/D,OAAOI,WAAW,KAAK,IAAI,IAAIA,WAAW,KAAKd,cAAc,CAACD,IAAI,EAAE;MAAA,IAAAgB,YAAA;;;MAGhE,CAAAA,YAAA,GAAAD,WAAW,cAAAC,YAAA,uBAAXA,YAAA,CAAaR,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;MACpCM,WAAW,GAAGA,WAAW,CAACJ,UAAgC;;IAG9DjD,YAAY,CAACgB,YAAY,CAAC;GAC7B,EAAE,CAACR,YAAY,EAAEE,WAAW,CAAC,CAAC;EAE/B,MAAM6C,eAAe,GAAuB;IACxC,GAAG7D,UAAU;IACb8D,aAAa,EAAEC,SAAS;;IAExBC,sBAAsB,EAAE,CAAC,CAAC;IAC1BC,eAAe,EAAE;MACb,IAAGjE,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEiE,eAAe;MAC9BC,SAAS,EAAE;KACd;IACDC,oBAAoB,EAAE,KAAK;IAC3BC,eAAe,EAAE,IAAI;IACrBC,kBAAkB,EAAE,KAAK;IACzBC,aAAa,EAAE,KAAK;IACpBC,cAAc,EAAE,KAAK;IACrBC,aAAa,EAAE,KAAK;IACpBC,aAAa,EAAE,KAAK;IACpBC,wBAAwB,EAAE,KAAK;IAC/BC,MAAM,EAAEZ,SAAS;;IAEjBa,gBAAgB,EAAEA,MAAMb;GAC3B;;EAGD,oBACI5D;IACI0E,SAAS,EAAC,oDAAoD;IAC9DC,GAAG,EAAE5E,aAAa;;IAElB6E,GAAG,EAAC;KACH1E,SAAS,IAAIW,WAAW,gBAAGgE,QAAQ,CAACC,YAAY,eAAC9E,6BAAC+E,MAAM,oBAAKrB,eAAe,EAAI,EAAExD,SAAS,CAAC,GAAG,IAAI,CAC/F;AAEjB;;;;"}
|
package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/WarningDialog.js
CHANGED
|
@@ -8,6 +8,7 @@ import { Group } from '../../../../Group/Group.js';
|
|
|
8
8
|
|
|
9
9
|
const WarningDialog = ({
|
|
10
10
|
onAccept,
|
|
11
|
+
onCancel,
|
|
11
12
|
onClose,
|
|
12
13
|
onVisibilityChange,
|
|
13
14
|
...props
|
|
@@ -41,7 +42,10 @@ const WarningDialog = ({
|
|
|
41
42
|
checked: hideWarningDialog,
|
|
42
43
|
onChange: setHideWarningDialog
|
|
43
44
|
}), /*#__PURE__*/React__default.createElement(Group, null, /*#__PURE__*/React__default.createElement(Button, {
|
|
44
|
-
onClick:
|
|
45
|
+
onClick: () => {
|
|
46
|
+
handleClose();
|
|
47
|
+
onCancel();
|
|
48
|
+
}
|
|
45
49
|
}, texts.table3.print.warningDialog.cancelButtonText), /*#__PURE__*/React__default.createElement(Button, {
|
|
46
50
|
appearance: "primary",
|
|
47
51
|
autoFocus: true,
|