@economic/taco 2.2.5 → 2.4.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/Header/components/Agreement/types.d.ts +1 -1
- package/dist/components/Icon/components/PaymentPaid.d.ts +3 -0
- package/dist/components/Icon/components/PaymentUnpaid.d.ts +3 -0
- package/dist/components/Menu/Context.d.ts +2 -0
- package/dist/components/Menu/components/Item.d.ts +3 -2
- package/dist/components/Provider/Localization.d.ts +12 -0
- package/dist/components/Provider/Provider.d.ts +6 -1
- package/dist/components/Table2/types.d.ts +1 -1
- package/dist/components/Table3/Table3.d.ts +1 -1
- package/dist/components/Table3/components/toolbar/Filter/filters/components/Filter.d.ts +1 -2
- package/dist/components/Table3/components/toolbar/Filter/filters/components/FilterComparator.d.ts +4 -4
- package/dist/components/Table3/components/toolbar/Filter/filters/components/FilterValue.d.ts +1 -1
- package/dist/components/Table3/hooks/features/useColumnFreezing.d.ts +2 -1
- package/dist/components/Table3/hooks/features/useSettings.d.ts +2 -0
- package/dist/components/Table3/hooks/listeners/useSettingsStateListener.d.ts +2 -2
- package/dist/components/Table3/hooks/useTable.d.ts +2 -1
- package/dist/components/Table3/types.d.ts +24 -12
- package/dist/esm/packages/taco/src/components/Menu/Context.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Menu/Menu.js +1 -0
- package/dist/esm/packages/taco/src/components/Menu/Menu.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Menu/components/Content.js +32 -2
- package/dist/esm/packages/taco/src/components/Menu/components/Content.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Menu/components/Item.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Provider/Localization.js +13 -1
- package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Provider/Provider.js +11 -4
- package/dist/esm/packages/taco/src/components/Provider/Provider.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Select2/Select2.js +1 -1
- package/dist/esm/packages/taco/src/components/Select2/Select2.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Select2/components/Edit.js +13 -4
- package/dist/esm/packages/taco/src/components/Select2/components/Edit.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Select2/components/Search.js +7 -1
- package/dist/esm/packages/taco/src/components/Select2/components/Search.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Shortcut/Shortcut.js +1 -1
- package/dist/esm/packages/taco/src/components/Shortcut/Shortcut.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/types.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/Table3.js +2 -1
- package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/DisplayCell.js +2 -2
- package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/DisplayCell.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/header/Menu.js +4 -19
- package/dist/esm/packages/taco/src/components/Table3/components/columns/header/Menu.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Selection.js +8 -2
- package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Selection.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/Filters.js +4 -2
- 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/Filter/filters/components/Filter.js +2 -24
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/Filter.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/FilterComparator.js +68 -17
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/FilterComparator.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/FilterValue.js +31 -2
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/FilterValue.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/Placeholder.js +1 -5
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/Placeholder.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js +18 -25
- 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/hooks/useParentStylesheets.js +5 -0
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/hooks/useParentStylesheets.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Search.js +3 -3
- 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/Toolbar.js +6 -2
- 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 +20 -16
- 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/useSettings.js +18 -0
- package/dist/esm/packages/taco/src/components/Table3/hooks/features/useSettings.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table3/hooks/listeners/useSettingsStateListener.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/useConvertChildrenToColumns.js +2 -4
- package/dist/esm/packages/taco/src/components/Table3/hooks/useConvertChildrenToColumns.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/hooks/useTable.js +18 -12
- package/dist/esm/packages/taco/src/components/Table3/hooks/useTable.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/types.js +7 -5
- package/dist/esm/packages/taco/src/components/Table3/types.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/util/filtering.js +24 -6
- package/dist/esm/packages/taco/src/components/Table3/util/filtering.js.map +1 -1
- package/dist/esm/packages/taco/src/hooks/useLocalStorage.js +34 -0
- package/dist/esm/packages/taco/src/hooks/useLocalStorage.js.map +1 -0
- package/dist/esm/packages/taco/src/hooks/useTacoSettings.js +9 -0
- package/dist/esm/packages/taco/src/hooks/useTacoSettings.js.map +1 -0
- package/dist/esm/packages/taco/src/index.js +1 -1
- package/dist/hooks/useLocalStorage.d.ts +1 -0
- package/dist/hooks/useTacoSettings.d.ts +1 -0
- package/dist/taco.cjs.development.js +367 -183
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/package.json +2 -2
- package/types.json +11451 -10602
- package/dist/components/Table3/components/toolbar/Filter/filters/components/Comparator.d.ts +0 -11
|
@@ -5,29 +5,74 @@ import { Table3FilterComparator } from '../../../../../types.js';
|
|
|
5
5
|
|
|
6
6
|
function FilterComparator(props) {
|
|
7
7
|
const {
|
|
8
|
+
column,
|
|
8
9
|
onChange: handleChange,
|
|
9
10
|
value,
|
|
10
|
-
validComparators,
|
|
11
11
|
...attributes
|
|
12
12
|
} = props;
|
|
13
13
|
const {
|
|
14
14
|
texts
|
|
15
15
|
} = useLocalization();
|
|
16
|
+
const validComparators = guessComparatorsBasedOnControl(column);
|
|
16
17
|
React__default.useEffect(() => {
|
|
17
|
-
if (value === undefined) {
|
|
18
|
+
if (value === undefined || !validComparators.includes(value)) {
|
|
18
19
|
handleChange === null || handleChange === void 0 ? void 0 : handleChange(validComparators[0]);
|
|
19
20
|
}
|
|
20
|
-
}, []);
|
|
21
|
+
}, [validComparators]);
|
|
21
22
|
return /*#__PURE__*/React__default.createElement(Select2, Object.assign({}, attributes, {
|
|
22
23
|
className: "!w-32 flex-shrink-0",
|
|
24
|
+
disabled: !column,
|
|
23
25
|
onChange: handleChange,
|
|
24
26
|
value: value
|
|
25
|
-
}), validComparators.map(
|
|
26
|
-
key:
|
|
27
|
-
value:
|
|
28
|
-
}, getComparatorText(
|
|
27
|
+
}), validComparators.map(comparator => /*#__PURE__*/React__default.createElement(Select2.Option, {
|
|
28
|
+
key: comparator,
|
|
29
|
+
value: comparator
|
|
30
|
+
}, getComparatorText(comparator, texts, column))));
|
|
29
31
|
}
|
|
30
|
-
|
|
32
|
+
function guessComparatorsBasedOnControl(column) {
|
|
33
|
+
var _column$columnDef$met;
|
|
34
|
+
const columnMeta = (_column$columnDef$met = column === null || column === void 0 ? void 0 : column.columnDef.meta) !== null && _column$columnDef$met !== void 0 ? _column$columnDef$met : {};
|
|
35
|
+
if (Array.isArray(columnMeta.filters)) {
|
|
36
|
+
return columnMeta.filters;
|
|
37
|
+
}
|
|
38
|
+
if (typeof columnMeta.control === 'function') {
|
|
39
|
+
const renderedControl = columnMeta.control({
|
|
40
|
+
onBlur: () => undefined,
|
|
41
|
+
onFocus: () => undefined,
|
|
42
|
+
setValue: () => undefined,
|
|
43
|
+
value: undefined,
|
|
44
|
+
disabled: false,
|
|
45
|
+
readOnly: false,
|
|
46
|
+
ref: undefined
|
|
47
|
+
});
|
|
48
|
+
if ( /*#__PURE__*/React__default.isValidElement(renderedControl)) {
|
|
49
|
+
const {
|
|
50
|
+
props,
|
|
51
|
+
type
|
|
52
|
+
} = renderedControl;
|
|
53
|
+
if (type.displayName === 'Select2') {
|
|
54
|
+
if (props.multiple) {
|
|
55
|
+
return [Table3FilterComparator.HasAnyOf, Table3FilterComparator.HasAllOf, Table3FilterComparator.IsEqualTo, Table3FilterComparator.HasNoneOf, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty];
|
|
56
|
+
}
|
|
57
|
+
return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// @ts-expect-error -- we ignore it because it conflicts with Table2 also overridding ColumnMeta
|
|
62
|
+
if (columnMeta.dataType === 'number') {
|
|
63
|
+
return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsGreaterThan, Table3FilterComparator.IsLessThan, Table3FilterComparator.IsBetween, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty];
|
|
64
|
+
}
|
|
65
|
+
if (columnMeta.control === 'datepicker' || columnMeta.dataType === 'datetime') {
|
|
66
|
+
return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsBetween, Table3FilterComparator.IsLessThan, Table3FilterComparator.IsGreaterThan, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty, Table3FilterComparator.IsLessThanOrEqualTo, Table3FilterComparator.IsGreaterThanOrEqualTo];
|
|
67
|
+
}
|
|
68
|
+
if (columnMeta.control === 'switch') {
|
|
69
|
+
return [Table3FilterComparator.IsEqualTo];
|
|
70
|
+
}
|
|
71
|
+
return [Table3FilterComparator.Contains, Table3FilterComparator.DoesNotContain, Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty];
|
|
72
|
+
}
|
|
73
|
+
function getComparatorText(comparator, texts, column) {
|
|
74
|
+
var _column$columnDef, _column$columnDef$met2;
|
|
75
|
+
const isDate = (column === null || column === void 0 ? void 0 : (_column$columnDef = column.columnDef) === null || _column$columnDef === void 0 ? void 0 : (_column$columnDef$met2 = _column$columnDef.meta) === null || _column$columnDef$met2 === void 0 ? void 0 : _column$columnDef$met2.control) === 'datepicker';
|
|
31
76
|
switch (comparator) {
|
|
32
77
|
case Table3FilterComparator.Contains:
|
|
33
78
|
return texts.table3.filters.comparators.contains;
|
|
@@ -38,23 +83,29 @@ const getComparatorText = (comparator, texts) => {
|
|
|
38
83
|
case Table3FilterComparator.IsNotEqualTo:
|
|
39
84
|
return texts.table3.filters.comparators.isNotEqualTo;
|
|
40
85
|
case Table3FilterComparator.IsGreaterThan:
|
|
41
|
-
return texts.table3.filters.comparators.isGreaterThan;
|
|
86
|
+
return isDate ? texts.table3.filters.comparators.isAfter : texts.table3.filters.comparators.isGreaterThan;
|
|
42
87
|
case Table3FilterComparator.IsLessThan:
|
|
43
|
-
return texts.table3.filters.comparators.isLessThan;
|
|
88
|
+
return isDate ? texts.table3.filters.comparators.isBefore : texts.table3.filters.comparators.isLessThan;
|
|
44
89
|
case Table3FilterComparator.IsBetween:
|
|
45
90
|
return texts.table3.filters.comparators.isBetween;
|
|
46
|
-
case Table3FilterComparator.IsOneOf:
|
|
47
|
-
return texts.table3.filters.comparators.isOneOf;
|
|
48
|
-
case Table3FilterComparator.IsNoneOf:
|
|
49
|
-
return texts.table3.filters.comparators.isNoneOf;
|
|
50
|
-
case Table3FilterComparator.IsAllOf:
|
|
51
|
-
return texts.table3.filters.comparators.isAllOf;
|
|
52
91
|
case Table3FilterComparator.IsEmpty:
|
|
53
92
|
return texts.table3.filters.comparators.isEmpty;
|
|
54
93
|
case Table3FilterComparator.IsNotEmpty:
|
|
55
94
|
return texts.table3.filters.comparators.isNotEmpty;
|
|
95
|
+
case Table3FilterComparator.IsLessThanOrEqualTo:
|
|
96
|
+
return isDate ? texts.table3.filters.comparators.isOnOrBefore : texts.table3.filters.comparators.isLessThanOrEqualTo;
|
|
97
|
+
case Table3FilterComparator.IsGreaterThanOrEqualTo:
|
|
98
|
+
return isDate ? texts.table3.filters.comparators.isOnOrAfter : texts.table3.filters.comparators.isGreaterThanOrEqualTo;
|
|
99
|
+
case Table3FilterComparator.HasAnyOf:
|
|
100
|
+
return texts.table3.filters.comparators.hasAnyOf;
|
|
101
|
+
case Table3FilterComparator.HasAllOf:
|
|
102
|
+
return texts.table3.filters.comparators.hasAllOf;
|
|
103
|
+
case Table3FilterComparator.HasNoneOf:
|
|
104
|
+
return texts.table3.filters.comparators.hasNoneOf;
|
|
105
|
+
default:
|
|
106
|
+
return '';
|
|
56
107
|
}
|
|
57
|
-
}
|
|
108
|
+
}
|
|
58
109
|
|
|
59
110
|
export { FilterComparator };
|
|
60
111
|
//# sourceMappingURL=FilterComparator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterComparator.js","sources":["../../../../../../../../../../../../src/components/Table3/components/toolbar/Filter/filters/components/FilterComparator.tsx"],"sourcesContent":["import React from 'react';\nimport { Select2, Select2Props } from '../../../../../../Select2/Select2';\nimport { Table3FilterComparator } from '../../../../../types';\nimport { LocalizationTexts, useLocalization } from '../../../../../../Provider/Localization';\n\nexport type FilterComparatorProps = Omit<Select2Props, 'children'> & {\n validComparators: Table3FilterComparator[];\n};\n\nexport function FilterComparator(props: FilterComparatorProps) {\n const { onChange: handleChange, value, validComparators, ...attributes } = props;\n const { texts } = useLocalization();\n\n React.useEffect(() => {\n if (value === undefined) {\n handleChange?.(validComparators[0]);\n }\n }, []);\n\n return (\n <Select2 {...attributes} className=\"!w-32 flex-shrink-0\" onChange={handleChange} value={value}>\n {validComparators.map(comp => (\n <Select2.Option key={comp} value={comp}>\n {getComparatorText(comp, texts)}\n </Select2.Option>\n ))}\n </Select2>\n );\n}\n\nconst getComparatorText = (comparator: Table3FilterComparator, texts: LocalizationTexts) => {\n switch (comparator) {\n case Table3FilterComparator.Contains:\n return texts.table3.filters.comparators.contains;\n\n case Table3FilterComparator.DoesNotContain:\n return texts.table3.filters.comparators.doesNotContain;\n\n case Table3FilterComparator.IsEqualTo:\n return texts.table3.filters.comparators.isEqualTo;\n\n case Table3FilterComparator.IsNotEqualTo:\n return texts.table3.filters.comparators.isNotEqualTo;\n\n case Table3FilterComparator.IsGreaterThan:\n return texts.table3.filters.comparators.isGreaterThan;\n\n case Table3FilterComparator.IsLessThan:\n return texts.table3.filters.comparators.isLessThan;\n\n case Table3FilterComparator.IsBetween:\n return texts.table3.filters.comparators.isBetween;\n\n case Table3FilterComparator.IsOneOf:\n return texts.table3.filters.comparators.isOneOf;\n\n case Table3FilterComparator.IsNoneOf:\n return texts.table3.filters.comparators.isNoneOf;\n\n case Table3FilterComparator.IsAllOf:\n return texts.table3.filters.comparators.isAllOf;\n\n case Table3FilterComparator.IsEmpty:\n return texts.table3.filters.comparators.isEmpty;\n\n case Table3FilterComparator.IsNotEmpty:\n return texts.table3.filters.comparators.isNotEmpty;\n }\n};\n"],"names":["FilterComparator","props","onChange","handleChange","value","validComparators","attributes","texts","useLocalization","React","useEffect","undefined","Select2","className","map","comp","Option","key","getComparatorText","comparator","Table3FilterComparator","Contains","table3","filters","comparators","contains","DoesNotContain","doesNotContain","IsEqualTo","isEqualTo","IsNotEqualTo","isNotEqualTo","IsGreaterThan","isGreaterThan","IsLessThan","isLessThan","IsBetween","isBetween","IsOneOf","isOneOf","IsNoneOf","isNoneOf","IsAllOf","isAllOf","IsEmpty","isEmpty","IsNotEmpty","isNotEmpty"],"mappings":";;;;;SASgBA,gBAAgB,CAACC,KAA4B;EACzD,MAAM;IAAEC,QAAQ,EAAEC,YAAY;IAAEC,KAAK;IAAEC,gBAAgB;IAAE,GAAGC;GAAY,GAAGL,KAAK;EAChF,MAAM;IAAEM;GAAO,GAAGC,eAAe,EAAE;EAEnCC,cAAK,CAACC,SAAS,CAAC;IACZ,IAAIN,KAAK,KAAKO,SAAS,EAAE;MACrBR,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAGE,gBAAgB,CAAC,CAAC,CAAC,CAAC;;GAE1C,EAAE,EAAE,CAAC;EAEN,oBACII,6BAACG,OAAO,oBAAKN,UAAU;IAAEO,SAAS,EAAC,qBAAqB;IAACX,QAAQ,EAAEC,YAAY;IAAEC,KAAK,EAAEA;MACnFC,gBAAgB,CAACS,GAAG,CAACC,IAAI,iBACtBN,6BAACG,OAAO,CAACI,MAAM;IAACC,GAAG,EAAEF,IAAI;IAAEX,KAAK,EAAEW;KAC7BG,iBAAiB,CAACH,IAAI,EAAER,KAAK,CAAC,CAEtC,CAAC,CACI;AAElB;AAEA,MAAMW,iBAAiB,GAAG,CAACC,UAAkC,EAAEZ,KAAwB;EACnF,QAAQY,UAAU;IACd,KAAKC,sBAAsB,CAACC,QAAQ;MAChC,OAAOd,KAAK,CAACe,MAAM,CAACC,OAAO,CAACC,WAAW,CAACC,QAAQ;IAEpD,KAAKL,sBAAsB,CAACM,cAAc;MACtC,OAAOnB,KAAK,CAACe,MAAM,CAACC,OAAO,CAACC,WAAW,CAACG,cAAc;IAE1D,KAAKP,sBAAsB,CAACQ,SAAS;MACjC,OAAOrB,KAAK,CAACe,MAAM,CAACC,OAAO,CAACC,WAAW,CAACK,SAAS;IAErD,KAAKT,sBAAsB,CAACU,YAAY;MACpC,OAAOvB,KAAK,CAACe,MAAM,CAACC,OAAO,CAACC,WAAW,CAACO,YAAY;IAExD,KAAKX,sBAAsB,CAACY,aAAa;MACrC,OAAOzB,KAAK,CAACe,MAAM,CAACC,OAAO,CAACC,WAAW,CAACS,aAAa;IAEzD,KAAKb,sBAAsB,CAACc,UAAU;MAClC,OAAO3B,KAAK,CAACe,MAAM,CAACC,OAAO,CAACC,WAAW,CAACW,UAAU;IAEtD,KAAKf,sBAAsB,CAACgB,SAAS;MACjC,OAAO7B,KAAK,CAACe,MAAM,CAACC,OAAO,CAACC,WAAW,CAACa,SAAS;IAErD,KAAKjB,sBAAsB,CAACkB,OAAO;MAC/B,OAAO/B,KAAK,CAACe,MAAM,CAACC,OAAO,CAACC,WAAW,CAACe,OAAO;IAEnD,KAAKnB,sBAAsB,CAACoB,QAAQ;MAChC,OAAOjC,KAAK,CAACe,MAAM,CAACC,OAAO,CAACC,WAAW,CAACiB,QAAQ;IAEpD,KAAKrB,sBAAsB,CAACsB,OAAO;MAC/B,OAAOnC,KAAK,CAACe,MAAM,CAACC,OAAO,CAACC,WAAW,CAACmB,OAAO;IAEnD,KAAKvB,sBAAsB,CAACwB,OAAO;MAC/B,OAAOrC,KAAK,CAACe,MAAM,CAACC,OAAO,CAACC,WAAW,CAACqB,OAAO;IAEnD,KAAKzB,sBAAsB,CAAC0B,UAAU;MAClC,OAAOvC,KAAK,CAACe,MAAM,CAACC,OAAO,CAACC,WAAW,CAACuB,UAAU;;AAE9D,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"FilterComparator.js","sources":["../../../../../../../../../../../../src/components/Table3/components/toolbar/Filter/filters/components/FilterComparator.tsx"],"sourcesContent":["import React from 'react';\nimport { Column as RTColumn, ColumnMeta } from '@tanstack/react-table';\nimport { Select2, Select2Props } from '../../../../../../Select2/Select2';\nimport { Table3FilterComparator } from '../../../../../types';\nimport { LocalizationTexts, useLocalization } from '../../../../../../Provider/Localization';\n\nexport type FilterComparatorProps<TType = unknown> = Omit<Select2Props, 'children'> & {\n column?: RTColumn<TType, unknown>;\n};\n\nexport function FilterComparator<TType = unknown>(props: FilterComparatorProps<TType>) {\n const { column, onChange: handleChange, value, ...attributes } = props;\n const { texts } = useLocalization();\n\n const validComparators = guessComparatorsBasedOnControl(column);\n\n React.useEffect(() => {\n if (value === undefined || !validComparators.includes(value as number)) {\n handleChange?.(validComparators[0]);\n }\n }, [validComparators]);\n\n return (\n <Select2 {...attributes} className=\"!w-32 flex-shrink-0\" disabled={!column} onChange={handleChange} value={value}>\n {validComparators.map(comparator => (\n <Select2.Option key={comparator} value={comparator}>\n {getComparatorText(comparator, texts, column)}\n </Select2.Option>\n ))}\n </Select2>\n );\n}\n\nfunction guessComparatorsBasedOnControl<TType = unknown>(column?: RTColumn<TType, unknown>) {\n const columnMeta = (column?.columnDef.meta ?? {}) as ColumnMeta<TType, unknown>;\n\n if (Array.isArray(columnMeta.filters)) {\n return columnMeta.filters;\n }\n\n if (typeof columnMeta.control === 'function') {\n const renderedControl = columnMeta.control({\n onBlur: () => undefined,\n onFocus: () => undefined,\n setValue: () => undefined,\n value: undefined,\n disabled: false,\n readOnly: false,\n ref: undefined as any,\n });\n\n if (React.isValidElement(renderedControl)) {\n const { props, type } = renderedControl as any;\n\n if (type.displayName === 'Select2') {\n if (props.multiple) {\n return [\n Table3FilterComparator.HasAnyOf,\n Table3FilterComparator.HasAllOf,\n Table3FilterComparator.IsEqualTo,\n Table3FilterComparator.HasNoneOf,\n Table3FilterComparator.IsEmpty,\n Table3FilterComparator.IsNotEmpty,\n ];\n }\n\n return [\n Table3FilterComparator.IsEqualTo,\n Table3FilterComparator.IsNotEqualTo,\n Table3FilterComparator.IsEmpty,\n Table3FilterComparator.IsNotEmpty,\n ];\n }\n }\n }\n\n // @ts-expect-error -- we ignore it because it conflicts with Table2 also overridding ColumnMeta\n if (columnMeta.dataType === 'number') {\n return [\n Table3FilterComparator.IsEqualTo,\n Table3FilterComparator.IsNotEqualTo,\n Table3FilterComparator.IsGreaterThan,\n Table3FilterComparator.IsLessThan,\n Table3FilterComparator.IsBetween,\n Table3FilterComparator.IsEmpty,\n Table3FilterComparator.IsNotEmpty,\n ];\n }\n\n if (columnMeta.control === 'datepicker' || columnMeta.dataType === 'datetime') {\n return [\n Table3FilterComparator.IsEqualTo,\n Table3FilterComparator.IsNotEqualTo,\n Table3FilterComparator.IsBetween,\n Table3FilterComparator.IsLessThan,\n Table3FilterComparator.IsGreaterThan,\n Table3FilterComparator.IsEmpty,\n Table3FilterComparator.IsNotEmpty,\n Table3FilterComparator.IsLessThanOrEqualTo,\n Table3FilterComparator.IsGreaterThanOrEqualTo,\n ];\n }\n\n if (columnMeta.control === 'switch') {\n return [Table3FilterComparator.IsEqualTo];\n }\n\n return [\n Table3FilterComparator.Contains,\n Table3FilterComparator.DoesNotContain,\n Table3FilterComparator.IsEqualTo,\n Table3FilterComparator.IsNotEqualTo,\n Table3FilterComparator.IsEmpty,\n Table3FilterComparator.IsNotEmpty,\n ];\n}\n\nfunction getComparatorText<TType = unknown>(\n comparator: Table3FilterComparator,\n texts: LocalizationTexts,\n column?: RTColumn<TType, unknown>\n) {\n const isDate = column?.columnDef?.meta?.control === 'datepicker';\n\n switch (comparator) {\n case Table3FilterComparator.Contains:\n return texts.table3.filters.comparators.contains;\n\n case Table3FilterComparator.DoesNotContain:\n return texts.table3.filters.comparators.doesNotContain;\n\n case Table3FilterComparator.IsEqualTo:\n return texts.table3.filters.comparators.isEqualTo;\n\n case Table3FilterComparator.IsNotEqualTo:\n return texts.table3.filters.comparators.isNotEqualTo;\n\n case Table3FilterComparator.IsGreaterThan:\n return isDate ? texts.table3.filters.comparators.isAfter : texts.table3.filters.comparators.isGreaterThan;\n\n case Table3FilterComparator.IsLessThan:\n return isDate ? texts.table3.filters.comparators.isBefore : texts.table3.filters.comparators.isLessThan;\n\n case Table3FilterComparator.IsBetween:\n return texts.table3.filters.comparators.isBetween;\n\n case Table3FilterComparator.IsEmpty:\n return texts.table3.filters.comparators.isEmpty;\n\n case Table3FilterComparator.IsNotEmpty:\n return texts.table3.filters.comparators.isNotEmpty;\n\n case Table3FilterComparator.IsLessThanOrEqualTo:\n return isDate ? texts.table3.filters.comparators.isOnOrBefore : texts.table3.filters.comparators.isLessThanOrEqualTo;\n\n case Table3FilterComparator.IsGreaterThanOrEqualTo:\n return isDate\n ? texts.table3.filters.comparators.isOnOrAfter\n : texts.table3.filters.comparators.isGreaterThanOrEqualTo;\n\n case Table3FilterComparator.HasAnyOf:\n return texts.table3.filters.comparators.hasAnyOf;\n\n case Table3FilterComparator.HasAllOf:\n return texts.table3.filters.comparators.hasAllOf;\n\n case Table3FilterComparator.HasNoneOf:\n return texts.table3.filters.comparators.hasNoneOf;\n\n default:\n return '';\n }\n}\n"],"names":["FilterComparator","props","column","onChange","handleChange","value","attributes","texts","useLocalization","validComparators","guessComparatorsBasedOnControl","React","useEffect","undefined","includes","Select2","className","disabled","map","comparator","Option","key","getComparatorText","columnMeta","columnDef","meta","Array","isArray","filters","control","renderedControl","onBlur","onFocus","setValue","readOnly","ref","isValidElement","type","displayName","multiple","Table3FilterComparator","HasAnyOf","HasAllOf","IsEqualTo","HasNoneOf","IsEmpty","IsNotEmpty","IsNotEqualTo","dataType","IsGreaterThan","IsLessThan","IsBetween","IsLessThanOrEqualTo","IsGreaterThanOrEqualTo","Contains","DoesNotContain","isDate","table3","comparators","contains","doesNotContain","isEqualTo","isNotEqualTo","isAfter","isGreaterThan","isBefore","isLessThan","isBetween","isEmpty","isNotEmpty","isOnOrBefore","isLessThanOrEqualTo","isOnOrAfter","isGreaterThanOrEqualTo","hasAnyOf","hasAllOf","hasNoneOf"],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import React__default from 'react';
|
|
1
|
+
import React__default, { useEffect } from 'react';
|
|
2
|
+
import cn from 'classnames';
|
|
3
|
+
import { useLocalization } from '../../../../../../Provider/Localization.js';
|
|
2
4
|
import { Input } from '../../../../../../Input/Input.js';
|
|
3
5
|
import { Datepicker } from '../../../../../../Datepicker/Datepicker.js';
|
|
4
6
|
import { Switch } from '../../../../../../Switch/Switch.js';
|
|
7
|
+
import { getInputAppearanceClassnames } from '../../../../columns/styles.js';
|
|
5
8
|
import { Table3FilterComparator } from '../../../../../types.js';
|
|
6
9
|
|
|
7
10
|
function FilterValue(props) {
|
|
@@ -11,6 +14,9 @@ function FilterValue(props) {
|
|
|
11
14
|
onChange: handleChange,
|
|
12
15
|
value
|
|
13
16
|
} = props;
|
|
17
|
+
const {
|
|
18
|
+
texts
|
|
19
|
+
} = useLocalization();
|
|
14
20
|
if (comparator === Table3FilterComparator.IsEmpty || comparator === Table3FilterComparator.IsNotEmpty) {
|
|
15
21
|
return null;
|
|
16
22
|
}
|
|
@@ -18,6 +24,14 @@ function FilterValue(props) {
|
|
|
18
24
|
var _column$columnDef$met;
|
|
19
25
|
const fromValue = Array.isArray(value) ? value[0] : undefined;
|
|
20
26
|
const toValue = Array.isArray(value) ? value[1] : undefined;
|
|
27
|
+
if (column === undefined) {
|
|
28
|
+
return /*#__PURE__*/React__default.createElement(Input, {
|
|
29
|
+
"aria-label": texts.table3.filters.emptyFilter.value,
|
|
30
|
+
className: "flex-grow",
|
|
31
|
+
disabled: true,
|
|
32
|
+
value: texts.table3.filters.emptyFilter.value
|
|
33
|
+
});
|
|
34
|
+
}
|
|
21
35
|
if (((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.dataType) === 'datetime') {
|
|
22
36
|
return /*#__PURE__*/React__default.createElement("div", {
|
|
23
37
|
className: "flex flex-grow items-center gap-2"
|
|
@@ -46,6 +60,7 @@ function FilterValue(props) {
|
|
|
46
60
|
}));
|
|
47
61
|
}
|
|
48
62
|
return /*#__PURE__*/React__default.createElement(Control, {
|
|
63
|
+
comparator: comparator,
|
|
49
64
|
column: column,
|
|
50
65
|
onChange: handleChange,
|
|
51
66
|
value: value
|
|
@@ -55,12 +70,18 @@ function Control(props) {
|
|
|
55
70
|
var _column$columnDef$met2, _column$columnDef$met3;
|
|
56
71
|
const {
|
|
57
72
|
column,
|
|
73
|
+
comparator,
|
|
58
74
|
onChange,
|
|
59
75
|
value,
|
|
60
76
|
...attributes
|
|
61
77
|
} = props;
|
|
62
78
|
const controlRenderer = (_column$columnDef$met2 = column.columnDef.meta) === null || _column$columnDef$met2 === void 0 ? void 0 : _column$columnDef$met2.control;
|
|
63
79
|
const dataType = (_column$columnDef$met3 = column.columnDef.meta) === null || _column$columnDef$met3 === void 0 ? void 0 : _column$columnDef$met3.dataType;
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
if (controlRenderer === 'switch') {
|
|
82
|
+
onChange(false);
|
|
83
|
+
}
|
|
84
|
+
}, []);
|
|
64
85
|
if (typeof controlRenderer === 'function') {
|
|
65
86
|
return controlRenderer({
|
|
66
87
|
...attributes,
|
|
@@ -72,11 +93,19 @@ function Control(props) {
|
|
|
72
93
|
onChange: event => onChange(event.detail),
|
|
73
94
|
value: value
|
|
74
95
|
}));
|
|
75
|
-
} else if (controlRenderer === 'switch'
|
|
96
|
+
} else if (controlRenderer === 'switch') {
|
|
76
97
|
return /*#__PURE__*/React__default.createElement(Switch, Object.assign({}, attributes, {
|
|
98
|
+
className: "m-1.5",
|
|
77
99
|
checked: Boolean(value),
|
|
78
100
|
onChange: onChange
|
|
79
101
|
}));
|
|
102
|
+
} else if ((controlRenderer === 'input' || controlRenderer === undefined) && dataType === 'number') {
|
|
103
|
+
return /*#__PURE__*/React__default.createElement(Input, Object.assign({}, attributes, {
|
|
104
|
+
className: cn(getInputAppearanceClassnames(), 'flex-grow'),
|
|
105
|
+
type: "number",
|
|
106
|
+
onChange: event => onChange(event.target.valueAsNumber),
|
|
107
|
+
value: String(value !== null && value !== void 0 ? value : '')
|
|
108
|
+
}));
|
|
80
109
|
}
|
|
81
110
|
return /*#__PURE__*/React__default.createElement(Input, Object.assign({}, attributes, {
|
|
82
111
|
className: "flex-grow",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterValue.js","sources":["../../../../../../../../../../../../src/components/Table3/components/toolbar/Filter/filters/components/FilterValue.tsx"],"sourcesContent":["import React from 'react';\nimport { Column as RTColumn } from '@tanstack/react-table';\nimport { Input } from '../../../../../../Input/Input';\nimport { Table3FilterComparator } from '../../../../../types';\nimport { Datepicker } from '../../../../../../Datepicker/Datepicker';\nimport { Switch } from '../../../../../../Switch/Switch';\n\nexport type FilterValueProps<TType = unknown> = {\n column
|
|
1
|
+
{"version":3,"file":"FilterValue.js","sources":["../../../../../../../../../../../../src/components/Table3/components/toolbar/Filter/filters/components/FilterValue.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { Column as RTColumn } from '@tanstack/react-table';\nimport { Input } from '../../../../../../Input/Input';\nimport { Table3FilterComparator } from '../../../../../types';\nimport { Datepicker } from '../../../../../../Datepicker/Datepicker';\nimport { Switch } from '../../../../../../Switch/Switch';\nimport { getInputAppearanceClassnames } from '../../../../columns/styles';\nimport cn from 'classnames';\nimport { useLocalization } from '../../../../../../Provider/Localization';\n\nexport type FilterValueProps<TType = unknown> = {\n column?: RTColumn<TType, unknown>;\n comparator: Table3FilterComparator;\n onChange: (value: any) => void;\n value: any;\n};\n\nexport function FilterValue<TType = unknown>(props: FilterValueProps<TType>) {\n const { column, comparator, onChange: handleChange, value } = props;\n const { texts } = useLocalization();\n if (comparator === Table3FilterComparator.IsEmpty || comparator === Table3FilterComparator.IsNotEmpty) {\n return null;\n }\n\n if (comparator === Table3FilterComparator.IsBetween) {\n const fromValue = Array.isArray(value) ? value[0] : undefined;\n const toValue = Array.isArray(value) ? value[1] : undefined;\n\n if (column === undefined) {\n return (\n <Input\n aria-label={texts.table3.filters.emptyFilter.value}\n className=\"flex-grow\"\n disabled\n value={texts.table3.filters.emptyFilter.value}\n />\n );\n }\n\n if (column.columnDef.meta?.dataType === 'datetime') {\n return (\n <div className=\"flex flex-grow items-center gap-2\">\n <Control column={column} onChange={value => handleChange([value, toValue])} value={fromValue} />\n <Control column={column} onChange={value => handleChange([fromValue, value])} value={toValue} />\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-grow items-center gap-2\">\n <Control\n column={column}\n onChange={value => handleChange([isNaN(value) ? undefined : value, toValue])}\n placeholder=\"from\"\n value={fromValue ?? ''}\n />\n <Control\n column={column}\n onChange={value => handleChange([fromValue, isNaN(value) ? undefined : value])}\n placeholder=\"to\"\n value={toValue ?? ''}\n />\n </div>\n );\n }\n return <Control comparator={comparator} column={column} onChange={handleChange} value={value} />;\n}\n\nfunction Control(props) {\n const { column, comparator, onChange, value, ...attributes } = props;\n const controlRenderer = column.columnDef.meta?.control;\n const dataType = column.columnDef.meta?.dataType;\n\n useEffect(() => {\n if (controlRenderer === 'switch') {\n onChange(false);\n }\n }, []);\n\n if (typeof controlRenderer === 'function') {\n return controlRenderer({\n ...attributes,\n setValue: value => onChange(value),\n value,\n });\n } else if (controlRenderer === 'datepicker' || dataType === 'datetime') {\n return <Datepicker {...attributes} onChange={event => onChange((event as any).detail)} value={value as Date} />;\n } else if (controlRenderer === 'switch') {\n return <Switch {...attributes} className=\"m-1.5\" checked={Boolean(value)} onChange={onChange} />;\n } else if ((controlRenderer === 'input' || controlRenderer === undefined) && dataType === 'number') {\n return (\n <Input\n {...attributes}\n className={cn(getInputAppearanceClassnames(), 'flex-grow')}\n type=\"number\"\n onChange={event => onChange(event.target.valueAsNumber)}\n value={String(value ?? '')}\n />\n );\n }\n\n return (\n <Input\n {...attributes}\n className=\"flex-grow\"\n onChange={event => onChange(event.target.value)}\n value={String(value ?? '')}\n />\n );\n}\n"],"names":["FilterValue","props","column","comparator","onChange","handleChange","value","texts","useLocalization","Table3FilterComparator","IsEmpty","IsNotEmpty","IsBetween","fromValue","Array","isArray","undefined","toValue","React","Input","table3","filters","emptyFilter","className","disabled","columnDef","meta","dataType","Control","isNaN","placeholder","attributes","controlRenderer","control","useEffect","setValue","Datepicker","event","detail","Switch","checked","Boolean","cn","getInputAppearanceClassnames","type","target","valueAsNumber","String"],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ import { useLocalization } from '../../../../../../Provider/Localization.js';
|
|
|
4
4
|
import { Input } from '../../../../../../Input/Input.js';
|
|
5
5
|
import { FilterColumn } from './FilterColumn.js';
|
|
6
6
|
import { FilterComparator } from './FilterComparator.js';
|
|
7
|
-
import { guessComparatorsBasedOnControl } from './Filter.js';
|
|
8
7
|
|
|
9
8
|
function Placeholder(props) {
|
|
10
9
|
const {
|
|
@@ -26,10 +25,7 @@ function Placeholder(props) {
|
|
|
26
25
|
filters: filters,
|
|
27
26
|
onChange: handleCreate,
|
|
28
27
|
value: null
|
|
29
|
-
}), /*#__PURE__*/React__default.createElement(FilterComparator, {
|
|
30
|
-
disabled: true,
|
|
31
|
-
validComparators: guessComparatorsBasedOnControl()
|
|
32
|
-
}), /*#__PURE__*/React__default.createElement(Input, {
|
|
28
|
+
}), /*#__PURE__*/React__default.createElement(FilterComparator, null), /*#__PURE__*/React__default.createElement(Input, {
|
|
33
29
|
"aria-label": texts.table3.filters.emptyFilter.value,
|
|
34
30
|
className: "flex-grow",
|
|
35
31
|
disabled: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Placeholder.js","sources":["../../../../../../../../../../../../src/components/Table3/components/toolbar/Filter/filters/components/Placeholder.tsx"],"sourcesContent":["import React from 'react';\nimport { Column as RTColumn, ColumnFiltersState } from '@tanstack/react-table';\nimport { Select2Value } from '../../../../../../Select2/Select2';\nimport { useLocalization } from '../../../../../../Provider/Localization';\nimport { Input } from '../../../../../../Input/Input';\nimport { IconButton } from '../../../../../../IconButton/IconButton';\nimport { FilterColumn } from './FilterColumn';\nimport { FilterComparator } from './FilterComparator';\
|
|
1
|
+
{"version":3,"file":"Placeholder.js","sources":["../../../../../../../../../../../../src/components/Table3/components/toolbar/Filter/filters/components/Placeholder.tsx"],"sourcesContent":["import React from 'react';\nimport { Column as RTColumn, ColumnFiltersState } from '@tanstack/react-table';\nimport { Select2Value } from '../../../../../../Select2/Select2';\nimport { useLocalization } from '../../../../../../Provider/Localization';\nimport { Input } from '../../../../../../Input/Input';\nimport { IconButton } from '../../../../../../IconButton/IconButton';\nimport { FilterColumn } from './FilterColumn';\nimport { FilterComparator } from './FilterComparator';\n\nexport type PlaceholderFilterProps<TType = unknown> = {\n allColumns: RTColumn<TType, unknown>[];\n filters: ColumnFiltersState;\n position: number;\n onCreate?: (value: Select2Value) => void;\n onRemove?: () => void;\n};\n\nexport function Placeholder<TType = unknown>(props: PlaceholderFilterProps<TType>) {\n const { allColumns, filters, onCreate: handleCreate, onRemove: handleRemove, position } = props;\n const { texts } = useLocalization();\n\n return (\n <div className=\"flex gap-2\">\n <div className=\"flex w-14 flex-shrink-0 items-center justify-end pr-2 text-right\">\n {position > 0 ? texts.table3.filters.conditions.and : texts.table3.filters.conditions.where}\n </div>\n <FilterColumn allColumns={allColumns} filters={filters} onChange={handleCreate} value={null} />\n <FilterComparator />\n <Input\n aria-label={texts.table3.filters.emptyFilter.value}\n className=\"flex-grow\"\n disabled\n value={texts.table3.filters.emptyFilter.value}\n />\n {handleRemove ? <IconButton appearance=\"discrete\" icon=\"close\" onClick={handleRemove} /> : null}\n </div>\n );\n}\n"],"names":["Placeholder","props","allColumns","filters","onCreate","handleCreate","onRemove","handleRemove","position","texts","useLocalization","React","className","table3","conditions","and","where","FilterColumn","onChange","value","FilterComparator","Input","emptyFilter","disabled","IconButton","appearance","icon","onClick"],"mappings":";;;;;;;SAiBgBA,WAAW,CAAkBC,KAAoC;EAC7E,MAAM;IAAEC,UAAU;IAAEC,OAAO;IAAEC,QAAQ,EAAEC,YAAY;IAAEC,QAAQ,EAAEC,YAAY;IAAEC;GAAU,GAAGP,KAAK;EAC/F,MAAM;IAAEQ;GAAO,GAAGC,eAAe,EAAE;EAEnC,oBACIC;IAAKC,SAAS,EAAC;kBACXD;IAAKC,SAAS,EAAC;KACVJ,QAAQ,GAAG,CAAC,GAAGC,KAAK,CAACI,MAAM,CAACV,OAAO,CAACW,UAAU,CAACC,GAAG,GAAGN,KAAK,CAACI,MAAM,CAACV,OAAO,CAACW,UAAU,CAACE,KAAK,CACzF,eACNL,6BAACM,YAAY;IAACf,UAAU,EAAEA,UAAU;IAAEC,OAAO,EAAEA,OAAO;IAAEe,QAAQ,EAAEb,YAAY;IAAEc,KAAK,EAAE;IAAQ,eAC/FR,6BAACS,gBAAgB,OAAG,eACpBT,6BAACU,KAAK;kBACUZ,KAAK,CAACI,MAAM,CAACV,OAAO,CAACmB,WAAW,CAACH,KAAK;IAClDP,SAAS,EAAC,WAAW;IACrBW,QAAQ;IACRJ,KAAK,EAAEV,KAAK,CAACI,MAAM,CAACV,OAAO,CAACmB,WAAW,CAACH;IAC1C,EACDZ,YAAY,gBAAGI,6BAACa,UAAU;IAACC,UAAU,EAAC,UAAU;IAACC,IAAI,EAAC,OAAO;IAACC,OAAO,EAAEpB;IAAgB,GAAG,IAAI,CAC7F;AAEd;;;;"}
|
package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js
CHANGED
|
@@ -86,30 +86,9 @@ function PrintIFrame({
|
|
|
86
86
|
}) {
|
|
87
87
|
const [contentRef, setContentRef] = React__default.useState(null);
|
|
88
88
|
const [mountNode, setMountNode] = React__default.useState(null);
|
|
89
|
+
const isFirefoxBrowser = React__default.useMemo(() => navigator.userAgent.toLowerCase().includes('firefox'), []);
|
|
89
90
|
const iframeWindow = contentRef === null || contentRef === void 0 ? void 0 : contentRef.contentWindow;
|
|
90
91
|
const stylesReady = useParentStylesheets(iframeWindow);
|
|
91
|
-
// Adds print events to the iframe window.
|
|
92
|
-
React__default.useEffect(() => {
|
|
93
|
-
if (iframeWindow === null || iframeWindow === undefined) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
// Add print events to the window
|
|
97
|
-
if (onAfterPrint) {
|
|
98
|
-
iframeWindow.addEventListener('afterprint', onAfterPrint);
|
|
99
|
-
}
|
|
100
|
-
if (onBeforePrint) {
|
|
101
|
-
iframeWindow.addEventListener('beforeprint', onBeforePrint);
|
|
102
|
-
}
|
|
103
|
-
return () => {
|
|
104
|
-
// Remove print events from the window
|
|
105
|
-
if (onAfterPrint) {
|
|
106
|
-
iframeWindow.removeEventListener('afterprint', onAfterPrint);
|
|
107
|
-
}
|
|
108
|
-
if (onBeforePrint) {
|
|
109
|
-
iframeWindow.removeEventListener('beforeprint', onBeforePrint);
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
}, [iframeWindow]);
|
|
113
92
|
// Calls print method when table has loaded in the iframe.
|
|
114
93
|
React__default.useEffect(() => {
|
|
115
94
|
let intervalId;
|
|
@@ -120,7 +99,8 @@ function PrintIFrame({
|
|
|
120
99
|
intervalId = setInterval(function () {
|
|
121
100
|
try {
|
|
122
101
|
const tableWrapper = mountNode;
|
|
123
|
-
const
|
|
102
|
+
const table = tableWrapper.querySelector('[role="table"]');
|
|
103
|
+
const hasTableRendered = !!table;
|
|
124
104
|
if (hasTableRendered && intervalId) {
|
|
125
105
|
var _contentRef$contentWi;
|
|
126
106
|
clearInterval(intervalId);
|
|
@@ -129,6 +109,12 @@ function PrintIFrame({
|
|
|
129
109
|
// Bug - Even though onBeforePrint is called before printing, the execution doesn't finish before
|
|
130
110
|
// the print dialog shows up, which results into having a visible loading toast.
|
|
131
111
|
onBeforePrint === null || onBeforePrint === void 0 ? void 0 : onBeforePrint();
|
|
112
|
+
// By adding height to the tableWrapper, we make sure the content below absolutely positioned table
|
|
113
|
+
// doesn't hide
|
|
114
|
+
if (isFirefoxBrowser) {
|
|
115
|
+
const tableHeight = `${table.offsetHeight}px`;
|
|
116
|
+
tableWrapper.style.height = tableHeight;
|
|
117
|
+
}
|
|
132
118
|
contentRef === null || contentRef === void 0 ? void 0 : (_contentRef$contentWi = contentRef.contentWindow) === null || _contentRef$contentWi === void 0 ? void 0 : _contentRef$contentWi.print();
|
|
133
119
|
// Calling the onAfterPrint method here as a fallback to do the cleanup, as certain browsers,
|
|
134
120
|
// like Safari, do not trigger the beforeprint or afterprint events when a confirmation dialog
|
|
@@ -167,6 +153,11 @@ function PrintIFrame({
|
|
|
167
153
|
tableWrapper.setAttribute('data-role', 'table-wrapper');
|
|
168
154
|
// Adding h-fit class makes sure that table is rendered with the whole content.
|
|
169
155
|
tableWrapper.classList.add('h-fit');
|
|
156
|
+
tableWrapper.classList.add('[&>[role="table"]]:!h-fit');
|
|
157
|
+
if (isFirefoxBrowser) {
|
|
158
|
+
// Fix for firefox bug which adds page-long whitespace between page's top content and table
|
|
159
|
+
tableWrapper.classList.add('[&>[role="table"]]:!absolute');
|
|
160
|
+
}
|
|
170
161
|
// Safari print preview assigns no width to the table when w-screen class is used.
|
|
171
162
|
// By assigning table a big static width and hiding the horizontal scrollbar, the table on chrome
|
|
172
163
|
// and safari will always take full page width.
|
|
@@ -213,10 +204,12 @@ function PrintIFrame({
|
|
|
213
204
|
};
|
|
214
205
|
// -top-60 -left-60 styles make sure that iframe is added outside of the viewport
|
|
215
206
|
return /*#__PURE__*/React__default.createElement("iframe", {
|
|
216
|
-
ref: setContentRef,
|
|
217
207
|
className: "fixed -left-60 -top-60 !h-0 !w-0",
|
|
218
208
|
frameBorder: "0",
|
|
219
|
-
|
|
209
|
+
ref: setContentRef,
|
|
210
|
+
scrolling: "no",
|
|
211
|
+
// Temporary fix to support printing in firefox: Find another solution while upgrading React
|
|
212
|
+
src: "javascript:void(0);"
|
|
220
213
|
}, mountNode && stylesReady ? /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/React__default.createElement(Table3, Object.assign({}, printTableProps)), mountNode) : null);
|
|
221
214
|
}
|
|
222
215
|
|
|
@@ -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 iframeWindow = contentRef?.contentWindow;\n\n const stylesReady = useParentStylesheets(iframeWindow);\n\n // Adds print events to the iframe window.\n React.useEffect(() => {\n if (iframeWindow === null || iframeWindow === undefined) {\n return;\n }\n\n // Add print events to the window\n if (onAfterPrint) {\n iframeWindow.addEventListener('afterprint', onAfterPrint);\n }\n\n if (onBeforePrint) {\n iframeWindow.addEventListener('beforeprint', onBeforePrint);\n }\n\n return () => {\n // Remove print events from the window\n if (onAfterPrint) {\n iframeWindow.removeEventListener('afterprint', onAfterPrint);\n }\n\n if (onBeforePrint) {\n iframeWindow.removeEventListener('beforeprint', onBeforePrint);\n }\n };\n }, [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 hasTableRendered = !!tableWrapper.querySelector('[role=\"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 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 (!iframeWindow || !stylesReady) {\n return;\n }\n\n const iframeDocument = iframeWindow.document;\n // Only the content inside the main element will get printed along with the table.\n const parentDocumentContent =\n iframeWindow.parent.document.querySelector('main')?.innerHTML || iframeWindow.parent.document.body?.innerHTML || '';\n\n iframeDocument.body.innerHTML = parentDocumentContent;\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 // 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 };\n\n // -top-60 -left-60 styles make sure that iframe is added outside of the viewport\n return (\n <iframe ref={setContentRef} className=\"fixed -left-60 -top-60 !h-0 !w-0\" frameBorder=\"0\" scrolling=\"no\">\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","iframeWindow","contentWindow","stylesReady","useParentStylesheets","useEffect","undefined","addEventListener","removeEventListener","intervalId","timeoutId","setInterval","tableWrapper","hasTableRendered","querySelector","clearInterval","print","setTimeout","clearTimeout","iframeDocument","document","parentDocumentContent","parent","innerHTML","body","tableElement","tableColumnFreezingStyles","createElement","setAttribute","classList","add","parentNode","insertBefore","remove","append","currentNode","printTableProps","actionsForRow","defaultCurrentRowIndex","defaultSettings","rowHeight","enableColumnFreezing","enableRowHeight","enableRowSelection","enableEditing","enablePrinting","enableRowDrag","enableRowDrop","enableRowSelectionSingle","preset","ref","className","frameBorder","scrolling","ReactDOM","createPortal","Table3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAagBA,WAAW,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,YAAY,GAAGN,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEO,aAAa;EAE9C,MAAMC,WAAW,GAAGC,oBAAoB,CAACH,YAAY,CAAC;;EAGtDJ,cAAK,CAACQ,SAAS,CAAC;IACZ,IAAIJ,YAAY,KAAK,IAAI,IAAIA,YAAY,KAAKK,SAAS,EAAE;MACrD;;;IAIJ,IAAId,YAAY,EAAE;MACdS,YAAY,CAACM,gBAAgB,CAAC,YAAY,EAAEf,YAAY,CAAC;;IAG7D,IAAIC,aAAa,EAAE;MACfQ,YAAY,CAACM,gBAAgB,CAAC,aAAa,EAAEd,aAAa,CAAC;;IAG/D,OAAO;;MAEH,IAAID,YAAY,EAAE;QACdS,YAAY,CAACO,mBAAmB,CAAC,YAAY,EAAEhB,YAAY,CAAC;;MAGhE,IAAIC,aAAa,EAAE;QACfQ,YAAY,CAACO,mBAAmB,CAAC,aAAa,EAAEf,aAAa,CAAC;;KAErE;GACJ,EAAE,CAACQ,YAAY,CAAC,CAAC;;EAGlBJ,cAAK,CAACQ,SAAS,CAAC;IACZ,IAAII,UAAwB;IAC5B,IAAIC,SAAuB;;;IAI3B,IAAIX,SAAS,IAAII,WAAW,EAAE;MAC1BM,UAAU,GAAGE,WAAW;QAAA;UACpB,MAAMC,YAAY,GAAGb,SAAS;UAC9B,MAAMc,gBAAgB,GAAG,CAAC,CAACD,YAAY,CAACE,aAAa,CAAC,gBAAgB,CAAC;UAEvE,IAAID,gBAAgB,IAAIJ,UAAU,EAAE;YAAA;YAChCM,aAAa,CAACN,UAAU,CAAC;;;;;YAMzBhB,aAAa,aAAbA,aAAa,uBAAbA,aAAa,EAAI;YAEjBE,UAAU,aAAVA,UAAU,gDAAVA,UAAU,CAAEO,aAAa,0DAAzB,sBAA2Bc,KAAK,EAAE;;;;;;;;YAUlCN,SAAS,GAAGO,UAAU,CAAC;cACnBzB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,EAAI;aACnB,EAAE,CAAC,CAAC;;UACR;SACJ;UAAA;;SAAE,IAAI,CAAC;;IAGZ,OAAO;MACHuB,aAAa,CAACN,UAAU,CAAC;MACzBS,YAAY,CAACR,SAAS,CAAC;KAC1B;GACJ,EAAE,CAACX,SAAS,EAAEI,WAAW,CAAC,CAAC;EAE5BN,cAAK,CAACQ,SAAS,CAAC;;IACZ,IAAI,CAACJ,YAAY,IAAI,CAACE,WAAW,EAAE;MAC/B;;IAGJ,MAAMgB,cAAc,GAAGlB,YAAY,CAACmB,QAAQ;;IAE5C,MAAMC,qBAAqB,GACvB,0BAAApB,YAAY,CAACqB,MAAM,CAACF,QAAQ,CAACN,aAAa,CAAC,MAAM,CAAC,0DAAlD,sBAAoDS,SAAS,gCAAItB,YAAY,CAACqB,MAAM,CAACF,QAAQ,CAACI,IAAI,2DAAjC,uBAAmCD,SAAS,KAAI,EAAE;IAEvHJ,cAAc,CAACK,IAAI,CAACD,SAAS,GAAGF,qBAAqB;IAErD,MAAMI,YAAY,GAAGN,cAAc,CAACL,aAAa,CAAC,gBAAgB,CAAC;IACnE,MAAMY,yBAAyB,GAAGP,cAAc,CAACL,aAAa,CAAC,6CAA6C,CAAC;IAC7G,MAAMF,YAAY,GAAGO,cAAc,CAACQ,aAAa,CAAC,KAAK,CAAC;IAExDf,YAAY,CAACgB,YAAY,CAAC,WAAW,EAAE,eAAe,CAAC;;IAEvDhB,YAAY,CAACiB,SAAS,CAACC,GAAG,CAAC,OAAO,CAAC;;;;IAInClB,YAAY,CAACiB,SAAS,CAACC,GAAG,CAAC,aAAa,CAAC;IAEzC,IAAIL,YAAY,EAAE;MAAA;MACd,yBAAAA,YAAY,CAACM,UAAU,0DAAvB,sBAAyBC,YAAY,CAACpB,YAAY,EAAEa,YAAY,CAAC;MACjEA,YAAY,CAACQ,MAAM,EAAE;KACxB,MAAM;MACHd,cAAc,CAACK,IAAI,CAACU,MAAM,CAACtB,YAAY,CAAC;;;IAI5C,IAAIc,yBAAyB,EAAE;MAC3BA,yBAAyB,CAACO,MAAM,EAAE;;IAGtC,IAAIE,WAAW,GAAGvB,YAAY,CAACmB,UAAgC;IAE/D,OAAOI,WAAW,KAAK,IAAI,IAAIA,WAAW,KAAKhB,cAAc,CAACK,IAAI,EAAE;MAAA;;;MAGhE,gBAAAW,WAAW,iDAAX,aAAaN,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;MACpCK,WAAW,GAAGA,WAAW,CAACJ,UAAgC;;IAG9D/B,YAAY,CAACY,YAAY,CAAC;GAC7B,EAAE,CAACX,YAAY,EAAEE,WAAW,CAAC,CAAC;EAE/B,MAAMiC,eAAe,GAAuB;IACxC,GAAG1C,UAAU;IACb2C,aAAa,EAAE/B,SAAS;;IAExBgC,sBAAsB,EAAE,CAAC,CAAC;IAC1BC,eAAe,EAAE;MACb,IAAG7C,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE6C,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,EAAE3C;GACX;;EAGD,oBACIT;IAAQqD,GAAG,EAAEtD,aAAa;IAAEuD,SAAS,EAAC,kCAAkC;IAACC,WAAW,EAAC,GAAG;IAACC,SAAS,EAAC;KAC9FtD,SAAS,IAAII,WAAW,gBAAGmD,QAAQ,CAACC,YAAY,eAAC1D,6BAAC2D,MAAM,oBAAKpB,eAAe,EAAI,EAAErC,SAAS,CAAC,GAAG,IAAI,CAC/F;AAEjB;;;;"}
|
|
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 (!iframeWindow || !stylesReady) {\n return;\n }\n\n const iframeDocument = iframeWindow.document;\n // Only the content inside the main element will get printed along with the table.\n const parentDocumentContent =\n iframeWindow.parent.document.querySelector('main')?.innerHTML || iframeWindow.parent.document.body?.innerHTML || '';\n\n iframeDocument.body.innerHTML = parentDocumentContent;\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 };\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 frameBorder=\"0\"\n ref={setContentRef}\n scrolling=\"no\"\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","clearInterval","tableHeight","offsetHeight","style","height","print","setTimeout","clearTimeout","iframeDocument","document","parentDocumentContent","parent","innerHTML","body","tableElement","tableColumnFreezingStyles","createElement","setAttribute","classList","add","parentNode","insertBefore","remove","append","currentNode","printTableProps","actionsForRow","undefined","defaultCurrentRowIndex","defaultSettings","rowHeight","enableColumnFreezing","enableRowHeight","enableRowSelection","enableEditing","enablePrinting","enableRowDrag","enableRowDrop","enableRowSelectionSingle","preset","className","frameBorder","ref","scrolling","src","ReactDOM","createPortal","Table3"],"mappings":"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"}
|
|
@@ -12,6 +12,11 @@ const PRINT_STYLES = `
|
|
|
12
12
|
width: auto !important;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
#root {
|
|
16
|
+
/* chrome sometimes crops the bottom content of page and this padding will make sure that we see the whole content*/
|
|
17
|
+
padding-bottom: 20px;
|
|
18
|
+
}
|
|
19
|
+
|
|
15
20
|
[role="table"] {
|
|
16
21
|
border-width: 0 !important;
|
|
17
22
|
overflow-y: hidden !important;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useParentStylesheets.js","sources":["../../../../../../../../../../../src/components/Table3/components/toolbar/PrintButton/hooks/useParentStylesheets.ts"],"sourcesContent":["import React from 'react';\n\nconst PRINT_STYLES = `\n@page {\n margin: 16px;\n}\n\n@media print {\n html, body, #root {\n overflow: auto !important;\n height: auto !important;\n width: auto !important;\n }\n\n [role=\"table\"] {\n border-width: 0 !important;\n overflow-y: hidden !important;\n }\n\n [role=\"table\"] [role=\"columnheader\"] {\n border-bottom-width: 1px !important;\n }\n\n /*\n * Summary row cells\n */\n [role=\"table\"] [role=\"rowgroup\"]:last-child [role=\"cell\"] {\n border-width: 0 !important;\n }\n\n [role=\"table\"] a {\n color: rgb(28 28 28);\n }\n\n [data-taco=\"alert\"],\n [data-taco=\"banner\"],\n [data-taco=\"hanger\"],\n [data-taco=\"toast\"],\n [data-taco=\"table3-toolbar\"],\n [data-taco=\"tooltip\"],\n /*\n * Tour components\n */\n [id^=\"react-joyride\"]\n {\n display: none !important;\n }\n}\n`;\n\nexport function useParentStylesheets(iframeWindow: Window | null | undefined) {\n const [ready, setReady] = React.useState(false);\n\n React.useEffect(() => {\n if (!iframeWindow) {\n return;\n }\n\n const parentDocument = iframeWindow.parent.document;\n const iframeDocument = iframeWindow.document;\n\n // add our custom print styles\n const customPrintStyles = iframeDocument.createElement('style');\n\n if (customPrintStyles) {\n customPrintStyles.innerHTML = PRINT_STYLES;\n iframeDocument.head.appendChild(customPrintStyles);\n }\n\n // Get style tags from the parent\n const parentStylesheets = Array.from(\n parentDocument.querySelectorAll('style:not([data-taco=\"table3-column-freezing-styles\"])')\n );\n // Get linked stylesheets from the parent\n const linkStylesheets = Array.from(parentDocument.querySelectorAll('[rel=\"stylesheet\"]'));\n\n // We want to add tailwind styles specifically but there is no guarenteed way to know which style tag has\n // tailwind styles, so we add all the styles present in the parent frame\n parentStylesheets.forEach(parentStyle => {\n const styleTag = iframeDocument.createElement('style');\n\n styleTag.innerHTML = parentStyle.innerHTML;\n iframeDocument.head.appendChild(styleTag);\n });\n\n // Add all link tags that are stylesheets, to the iframe head, so that we include the taco and client styles\n linkStylesheets.forEach(linkStylesheet => {\n const linkTag = iframeDocument.createElement('link');\n\n linkTag.setAttribute('rel', 'stylesheet');\n linkTag.setAttribute('href', linkStylesheet.getAttribute('href') ?? '');\n\n iframeDocument.head.appendChild(linkTag);\n });\n\n setReady(true);\n }, [iframeWindow]);\n\n return ready;\n}\n"],"names":["PRINT_STYLES","useParentStylesheets","iframeWindow","ready","setReady","React","useState","useEffect","parentDocument","parent","document","iframeDocument","customPrintStyles","createElement","innerHTML","head","appendChild","parentStylesheets","Array","from","querySelectorAll","linkStylesheets","forEach","parentStyle","styleTag","linkStylesheet","linkTag","setAttribute","getAttribute"],"mappings":";;AAEA,MAAMA,YAAY
|
|
1
|
+
{"version":3,"file":"useParentStylesheets.js","sources":["../../../../../../../../../../../src/components/Table3/components/toolbar/PrintButton/hooks/useParentStylesheets.ts"],"sourcesContent":["import React from 'react';\n\nconst PRINT_STYLES = `\n@page {\n margin: 16px;\n}\n\n@media print {\n html, body, #root {\n overflow: auto !important;\n height: auto !important;\n width: auto !important;\n }\n\n #root {\n /* chrome sometimes crops the bottom content of page and this padding will make sure that we see the whole content*/\n padding-bottom: 20px;\n }\n\n [role=\"table\"] {\n border-width: 0 !important;\n overflow-y: hidden !important;\n }\n\n [role=\"table\"] [role=\"columnheader\"] {\n border-bottom-width: 1px !important;\n }\n\n /*\n * Summary row cells\n */\n [role=\"table\"] [role=\"rowgroup\"]:last-child [role=\"cell\"] {\n border-width: 0 !important;\n }\n\n [role=\"table\"] a {\n color: rgb(28 28 28);\n }\n\n [data-taco=\"alert\"],\n [data-taco=\"banner\"],\n [data-taco=\"hanger\"],\n [data-taco=\"toast\"],\n [data-taco=\"table3-toolbar\"],\n [data-taco=\"tooltip\"],\n /*\n * Tour components\n */\n [id^=\"react-joyride\"]\n {\n display: none !important;\n }\n}\n`;\n\nexport function useParentStylesheets(iframeWindow: Window | null | undefined) {\n const [ready, setReady] = React.useState(false);\n\n React.useEffect(() => {\n if (!iframeWindow) {\n return;\n }\n\n const parentDocument = iframeWindow.parent.document;\n const iframeDocument = iframeWindow.document;\n\n // add our custom print styles\n const customPrintStyles = iframeDocument.createElement('style');\n\n if (customPrintStyles) {\n customPrintStyles.innerHTML = PRINT_STYLES;\n iframeDocument.head.appendChild(customPrintStyles);\n }\n\n // Get style tags from the parent\n const parentStylesheets = Array.from(\n parentDocument.querySelectorAll('style:not([data-taco=\"table3-column-freezing-styles\"])')\n );\n // Get linked stylesheets from the parent\n const linkStylesheets = Array.from(parentDocument.querySelectorAll('[rel=\"stylesheet\"]'));\n\n // We want to add tailwind styles specifically but there is no guarenteed way to know which style tag has\n // tailwind styles, so we add all the styles present in the parent frame\n parentStylesheets.forEach(parentStyle => {\n const styleTag = iframeDocument.createElement('style');\n\n styleTag.innerHTML = parentStyle.innerHTML;\n iframeDocument.head.appendChild(styleTag);\n });\n\n // Add all link tags that are stylesheets, to the iframe head, so that we include the taco and client styles\n linkStylesheets.forEach(linkStylesheet => {\n const linkTag = iframeDocument.createElement('link');\n\n linkTag.setAttribute('rel', 'stylesheet');\n linkTag.setAttribute('href', linkStylesheet.getAttribute('href') ?? '');\n\n iframeDocument.head.appendChild(linkTag);\n });\n\n setReady(true);\n }, [iframeWindow]);\n\n return ready;\n}\n"],"names":["PRINT_STYLES","useParentStylesheets","iframeWindow","ready","setReady","React","useState","useEffect","parentDocument","parent","document","iframeDocument","customPrintStyles","createElement","innerHTML","head","appendChild","parentStylesheets","Array","from","querySelectorAll","linkStylesheets","forEach","parentStyle","styleTag","linkStylesheet","linkTag","setAttribute","getAttribute"],"mappings":";;AAEA,MAAMA,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDjB;SAEeC,oBAAoB,CAACC,YAAuC;EACxE,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGC,cAAK,CAACC,QAAQ,CAAC,KAAK,CAAC;EAE/CD,cAAK,CAACE,SAAS,CAAC;IACZ,IAAI,CAACL,YAAY,EAAE;MACf;;IAGJ,MAAMM,cAAc,GAAGN,YAAY,CAACO,MAAM,CAACC,QAAQ;IACnD,MAAMC,cAAc,GAAGT,YAAY,CAACQ,QAAQ;;IAG5C,MAAME,iBAAiB,GAAGD,cAAc,CAACE,aAAa,CAAC,OAAO,CAAC;IAE/D,IAAID,iBAAiB,EAAE;MACnBA,iBAAiB,CAACE,SAAS,GAAGd,YAAY;MAC1CW,cAAc,CAACI,IAAI,CAACC,WAAW,CAACJ,iBAAiB,CAAC;;;IAItD,MAAMK,iBAAiB,GAAGC,KAAK,CAACC,IAAI,CAChCX,cAAc,CAACY,gBAAgB,CAAC,wDAAwD,CAAC,CAC5F;;IAED,MAAMC,eAAe,GAAGH,KAAK,CAACC,IAAI,CAACX,cAAc,CAACY,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;;;IAIzFH,iBAAiB,CAACK,OAAO,CAACC,WAAW;MACjC,MAAMC,QAAQ,GAAGb,cAAc,CAACE,aAAa,CAAC,OAAO,CAAC;MAEtDW,QAAQ,CAACV,SAAS,GAAGS,WAAW,CAACT,SAAS;MAC1CH,cAAc,CAACI,IAAI,CAACC,WAAW,CAACQ,QAAQ,CAAC;KAC5C,CAAC;;IAGFH,eAAe,CAACC,OAAO,CAACG,cAAc;;MAClC,MAAMC,OAAO,GAAGf,cAAc,CAACE,aAAa,CAAC,MAAM,CAAC;MAEpDa,OAAO,CAACC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC;MACzCD,OAAO,CAACC,YAAY,CAAC,MAAM,2BAAEF,cAAc,CAACG,YAAY,CAAC,MAAM,CAAC,yEAAI,EAAE,CAAC;MAEvEjB,cAAc,CAACI,IAAI,CAACC,WAAW,CAACU,OAAO,CAAC;KAC3C,CAAC;IAEFtB,QAAQ,CAAC,IAAI,CAAC;GACjB,EAAE,CAACF,YAAY,CAAC,CAAC;EAElB,OAAOC,KAAK;AAChB;;;;"}
|
|
@@ -119,12 +119,12 @@ function resetHighlightedColumnIndexes(enabled, value, table) {
|
|
|
119
119
|
table.getRowModel().rows.forEach((row, rowIndex) => {
|
|
120
120
|
columns.forEach((column, columnIndex) => {
|
|
121
121
|
try {
|
|
122
|
-
var _column$columnDef$met,
|
|
123
|
-
if (
|
|
122
|
+
var _format, _column$columnDef$met, _format2;
|
|
123
|
+
if (row.original && globalFilterFn(
|
|
124
124
|
// if it's a date, format it first
|
|
125
125
|
isDate(row.original[column.id]) ? (_format = format(row.original[column.id])) !== null && _format !== void 0 ? _format : '' :
|
|
126
126
|
// if its marked as a date but isn't a date, try to format it
|
|
127
|
-
column.columnDef.meta.dataType === 'datetime' ? (_format2 = format(parseFromISOString(row.original[column.id]))) !== null && _format2 !== void 0 ? _format2 : '' :
|
|
127
|
+
((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.dataType) === 'datetime' ? (_format2 = format(parseFromISOString(row.original[column.id]))) !== null && _format2 !== void 0 ? _format2 : '' :
|
|
128
128
|
// otherwise just string compare
|
|
129
129
|
String(row.original[column.id]), value)) {
|
|
130
130
|
indexes.push([rowIndex, columnIndex]);
|