schummar-table 0.4.0 → 0.5.0-beta-2

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.
Files changed (155) hide show
  1. package/dist/cjs/index.js +3800 -16
  2. package/dist/cjs/index.js.map +1 -0
  3. package/dist/cjs/mui4Theme.js +96 -0
  4. package/dist/cjs/mui4Theme.js.map +1 -0
  5. package/dist/cjs/mui5Theme.js +100 -0
  6. package/dist/cjs/mui5Theme.js.map +1 -0
  7. package/dist/es/index.js +3783 -0
  8. package/dist/es/index.js.map +1 -0
  9. package/dist/es/mui4Theme.js +92 -0
  10. package/dist/es/mui4Theme.js.map +1 -0
  11. package/dist/es/mui5Theme.js +96 -0
  12. package/dist/es/mui5Theme.js.map +1 -0
  13. package/dist/tableTheme.js +1990 -0
  14. package/dist/tableTheme.js.map +1 -0
  15. package/dist/{cjs → types}/components/cell.d.ts +1 -1
  16. package/dist/types/components/columnHeader.d.ts +7 -0
  17. package/dist/{cjs → types}/components/columnSelection.d.ts +0 -0
  18. package/dist/types/components/dateFilter.d.ts +8 -0
  19. package/dist/types/components/datePicker.d.ts +16 -0
  20. package/dist/types/components/expandControl.d.ts +6 -0
  21. package/dist/{cjs → types}/components/export.d.ts +0 -0
  22. package/dist/types/components/filterControl.d.ts +2 -0
  23. package/dist/types/components/formControlLabel.d.ts +5 -0
  24. package/dist/types/components/resizeHandle.d.ts +1 -0
  25. package/dist/{cjs → types}/components/row.d.ts +1 -1
  26. package/dist/{cjs → types}/components/selectComponent.d.ts +0 -0
  27. package/dist/types/components/selectFilter.d.ts +8 -0
  28. package/dist/{cjs → types}/components/sortComponent.d.ts +0 -0
  29. package/dist/types/components/spinnner.d.ts +3 -0
  30. package/dist/{cjs → types/components}/table.d.ts +1 -4
  31. package/dist/types/components/textFilter.d.ts +5 -0
  32. package/dist/{cjs → types}/components/virtualized.d.ts +0 -0
  33. package/dist/types/hooks/useFilter.d.ts +5 -0
  34. package/dist/types/hooks/useTheme.d.ts +1 -0
  35. package/dist/types/index.d.ts +10 -0
  36. package/dist/{cjs → types}/internalState/calcItems.d.ts +0 -0
  37. package/dist/{cjs → types}/internalState/calcProps.d.ts +0 -0
  38. package/dist/{cjs → types}/internalState/cleanupState.d.ts +0 -0
  39. package/dist/{cjs → types}/internalState/filterColumns.d.ts +0 -0
  40. package/dist/{cjs → types}/internalState/syncSelections.d.ts +0 -0
  41. package/dist/{cjs → types}/internalState/tableStateStorage.d.ts +1 -1
  42. package/dist/{cjs → types}/internalState/useTableState.d.ts +0 -0
  43. package/dist/{cjs → types}/misc/csvExport.d.ts +0 -0
  44. package/dist/types/misc/debounce.d.ts +4 -0
  45. package/dist/types/misc/deepPartial.d.ts +3 -0
  46. package/dist/{cjs → types}/misc/helpers.d.ts +2 -1
  47. package/dist/{cjs → types}/misc/queue.d.ts +1 -1
  48. package/dist/{cjs → types}/misc/textMatch.d.ts +0 -0
  49. package/dist/types/misc/throttle.d.ts +4 -0
  50. package/dist/types/theme/defaultClasses.d.ts +15 -0
  51. package/dist/types/theme/defaultColors.d.ts +2 -0
  52. package/dist/types/theme/defaultIcons.d.ts +2 -0
  53. package/dist/types/theme/defaultTexts.d.ts +2 -0
  54. package/dist/types/theme/defaultTheme/badge.d.ts +2 -0
  55. package/dist/types/theme/defaultTheme/button.d.ts +2 -0
  56. package/dist/types/theme/defaultTheme/checkbox.d.ts +2 -0
  57. package/dist/types/theme/defaultTheme/iconButton.d.ts +2 -0
  58. package/dist/types/theme/defaultTheme/index.d.ts +2 -0
  59. package/dist/types/theme/defaultTheme/popover.d.ts +4 -0
  60. package/dist/types/theme/defaultTheme/textField.d.ts +2 -0
  61. package/dist/types/theme/mui4Theme/index.d.ts +8 -0
  62. package/dist/types/theme/mui5Theme/index.d.ts +8 -0
  63. package/dist/types/theme/tableTheme.d.ts +11 -0
  64. package/dist/types/theme/useCssVariables.d.ts +9 -0
  65. package/dist/types/types.d.ts +285 -0
  66. package/package.json +76 -37
  67. package/dist/cjs/components/cell.js +0 -31
  68. package/dist/cjs/components/columnSelection.js +0 -37
  69. package/dist/cjs/components/defaultFilterComponent.d.ts +0 -22
  70. package/dist/cjs/components/defaultFilterComponent.js +0 -91
  71. package/dist/cjs/components/expandComponent.d.ts +0 -5
  72. package/dist/cjs/components/expandComponent.js +0 -38
  73. package/dist/cjs/components/export.js +0 -48
  74. package/dist/cjs/components/filterComponent.d.ts +0 -5
  75. package/dist/cjs/components/filterComponent.js +0 -25
  76. package/dist/cjs/components/row.js +0 -51
  77. package/dist/cjs/components/selectComponent.js +0 -61
  78. package/dist/cjs/components/sortComponent.js +0 -52
  79. package/dist/cjs/components/textFilterComponent.d.ts +0 -11
  80. package/dist/cjs/components/textFilterComponent.js +0 -70
  81. package/dist/cjs/components/useCommonClasses.d.ts +0 -1
  82. package/dist/cjs/components/useCommonClasses.js +0 -49
  83. package/dist/cjs/components/virtualized.js +0 -98
  84. package/dist/cjs/index.d.ts +0 -6
  85. package/dist/cjs/internalState/calcItems.js +0 -85
  86. package/dist/cjs/internalState/calcProps.js +0 -89
  87. package/dist/cjs/internalState/cleanupState.js +0 -43
  88. package/dist/cjs/internalState/filterColumns.js +0 -10
  89. package/dist/cjs/internalState/syncSelections.js +0 -22
  90. package/dist/cjs/internalState/tableStateStorage.js +0 -74
  91. package/dist/cjs/internalState/useTableState.js +0 -62
  92. package/dist/cjs/misc/csvExport.js +0 -15
  93. package/dist/cjs/misc/helpers.js +0 -91
  94. package/dist/cjs/misc/queue.js +0 -42
  95. package/dist/cjs/misc/textMatch.js +0 -23
  96. package/dist/cjs/misc/throttle.d.ts +0 -1
  97. package/dist/cjs/misc/throttle.js +0 -30
  98. package/dist/cjs/package.json +0 -1
  99. package/dist/cjs/table.js +0 -80
  100. package/dist/cjs/types.d.ts +0 -146
  101. package/dist/cjs/types.js +0 -2
  102. package/dist/esm/components/cell.d.ts +0 -6
  103. package/dist/esm/components/cell.js +0 -28
  104. package/dist/esm/components/columnSelection.d.ts +0 -2
  105. package/dist/esm/components/columnSelection.js +0 -33
  106. package/dist/esm/components/defaultFilterComponent.d.ts +0 -22
  107. package/dist/esm/components/defaultFilterComponent.js +0 -86
  108. package/dist/esm/components/expandComponent.d.ts +0 -5
  109. package/dist/esm/components/expandComponent.js +0 -34
  110. package/dist/esm/components/export.d.ts +0 -2
  111. package/dist/esm/components/export.js +0 -44
  112. package/dist/esm/components/filterComponent.d.ts +0 -5
  113. package/dist/esm/components/filterComponent.js +0 -21
  114. package/dist/esm/components/row.d.ts +0 -7
  115. package/dist/esm/components/row.js +0 -47
  116. package/dist/esm/components/selectComponent.d.ts +0 -5
  117. package/dist/esm/components/selectComponent.js +0 -57
  118. package/dist/esm/components/sortComponent.d.ts +0 -4
  119. package/dist/esm/components/sortComponent.js +0 -48
  120. package/dist/esm/components/textFilterComponent.d.ts +0 -11
  121. package/dist/esm/components/textFilterComponent.js +0 -65
  122. package/dist/esm/components/useCommonClasses.d.ts +0 -1
  123. package/dist/esm/components/useCommonClasses.js +0 -46
  124. package/dist/esm/components/virtualized.d.ts +0 -6
  125. package/dist/esm/components/virtualized.js +0 -94
  126. package/dist/esm/index.d.ts +0 -6
  127. package/dist/esm/index.js +0 -4
  128. package/dist/esm/internalState/calcItems.d.ts +0 -3
  129. package/dist/esm/internalState/calcItems.js +0 -81
  130. package/dist/esm/internalState/calcProps.d.ts +0 -2
  131. package/dist/esm/internalState/calcProps.js +0 -85
  132. package/dist/esm/internalState/cleanupState.d.ts +0 -3
  133. package/dist/esm/internalState/cleanupState.js +0 -39
  134. package/dist/esm/internalState/filterColumns.d.ts +0 -3
  135. package/dist/esm/internalState/filterColumns.js +0 -6
  136. package/dist/esm/internalState/syncSelections.d.ts +0 -3
  137. package/dist/esm/internalState/syncSelections.js +0 -18
  138. package/dist/esm/internalState/tableStateStorage.d.ts +0 -11
  139. package/dist/esm/internalState/tableStateStorage.js +0 -70
  140. package/dist/esm/internalState/useTableState.d.ts +0 -3
  141. package/dist/esm/internalState/useTableState.js +0 -58
  142. package/dist/esm/misc/csvExport.d.ts +0 -7
  143. package/dist/esm/misc/csvExport.js +0 -11
  144. package/dist/esm/misc/helpers.d.ts +0 -14
  145. package/dist/esm/misc/helpers.js +0 -77
  146. package/dist/esm/misc/queue.d.ts +0 -6
  147. package/dist/esm/misc/queue.js +0 -38
  148. package/dist/esm/misc/textMatch.d.ts +0 -2
  149. package/dist/esm/misc/textMatch.js +0 -18
  150. package/dist/esm/misc/throttle.d.ts +0 -1
  151. package/dist/esm/misc/throttle.js +0 -26
  152. package/dist/esm/table.d.ts +0 -11
  153. package/dist/esm/table.js +0 -73
  154. package/dist/esm/types.d.ts +0 -146
  155. package/dist/esm/types.js +0 -1
@@ -1,91 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DefaultFilterComponent = exports.DefaultFilter = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const core_1 = require("@material-ui/core");
6
- const icons_1 = require("@material-ui/icons");
7
- const react_1 = require("react");
8
- const helpers_1 = require("../misc/helpers");
9
- const table_1 = require("../table");
10
- class DefaultFilter {
11
- constructor(values, filter) {
12
- this.values = values;
13
- this.filter = filter;
14
- }
15
- }
16
- exports.DefaultFilter = DefaultFilter;
17
- const useClasses = (0, core_1.makeStyles)((theme) => ({
18
- view: {
19
- padding: theme.spacing(2),
20
- display: 'grid',
21
- '& > :first-child': {
22
- marginBottom: theme.spacing(2),
23
- },
24
- },
25
- }));
26
- function DefaultFilterComponent({ filterBy: _filterBy, options: _options, compare = helpers_1.defaultEquals, stringValue = helpers_1.asString, render = stringValue, }) {
27
- var _a;
28
- const classes = useClasses();
29
- const state = (0, table_1.useTableContext)();
30
- const columnId = (0, table_1.useColumnContext)();
31
- const filterBy = (0, react_1.useCallback)((value, item) => {
32
- const values = _filterBy ? _filterBy(value, item) : value;
33
- return values instanceof Array ? values : [values];
34
- }, [_filterBy]);
35
- const { text, options, filter } = state.useState((state) => {
36
- const column = state.activeColumns.find((column) => column.id === columnId);
37
- const _filter = state.filters.get(columnId);
38
- const filter = _filter instanceof DefaultFilter ? _filter : undefined;
39
- let options = _options !== null && _options !== void 0 ? _options : (0, helpers_1.orderBy)((0, helpers_1.uniq)((0, helpers_1.flatMap)(state.items, (item) => (column ? filterBy(column.value(item), item) : []))));
40
- if (filter)
41
- options = options.concat([...filter.values].filter((value) => !options.includes(value)));
42
- return { text: state.props.text, options, filter };
43
- }, [_options, columnId, filterBy]);
44
- const [input, setInput] = (0, react_1.useState)('');
45
- const filtered = options.filter((option) => !input || stringValue(option).toLowerCase().includes(input.toLowerCase()));
46
- function toggle(value) {
47
- var _a;
48
- const column = state.getState().activeColumns.find((column) => column.id === columnId);
49
- if (!column)
50
- return;
51
- const newValues = new Set(filter === null || filter === void 0 ? void 0 : filter.values);
52
- if (newValues === null || newValues === void 0 ? void 0 : newValues.has(value))
53
- newValues.delete(value);
54
- else
55
- newValues === null || newValues === void 0 ? void 0 : newValues.add(value);
56
- const newFilter = newValues.size === 0
57
- ? undefined
58
- : new DefaultFilter(newValues, (item) => {
59
- const itemValues = filterBy(column.value(item), item);
60
- return [...newValues].some((value) => itemValues.some((itemValue) => compare(value, itemValue)));
61
- });
62
- if (!column.filter) {
63
- state.update((state) => {
64
- if (newFilter)
65
- state.filters.set(column.id, newFilter);
66
- else
67
- state.filters.delete(column.id);
68
- });
69
- }
70
- (_a = column.onFilterChange) === null || _a === void 0 ? void 0 : _a.call(column, newFilter);
71
- }
72
- function deselectAll() {
73
- var _a;
74
- const column = state.getState().activeColumns.find((column) => column.id === columnId);
75
- if (!column)
76
- return;
77
- if (!column.filter) {
78
- state.update((state) => {
79
- state.filters.delete(column.id);
80
- });
81
- }
82
- (_a = column.onFilterChange) === null || _a === void 0 ? void 0 : _a.call(column);
83
- }
84
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: classes.view }, { children: [(0, jsx_runtime_1.jsx)(core_1.TextField, { value: input, onChange: (e) => setInput(e.target.value), InputProps: {
85
- endAdornment: input ? ((0, jsx_runtime_1.jsx)(core_1.IconButton, Object.assign({ onClick: () => setInput('') }, { children: (0, jsx_runtime_1.jsx)(icons_1.Clear, {}, void 0) }), void 0)) : ((0, jsx_runtime_1.jsx)(icons_1.Search, {}, void 0)),
86
- } }, void 0), (0, jsx_runtime_1.jsx)(core_1.Button, Object.assign({ variant: "outlined", onClick: deselectAll, disabled: !filter }, { children: (_a = text === null || text === void 0 ? void 0 : text.deselectAll) !== null && _a !== void 0 ? _a : 'Deselect all' }), void 0), filtered.map((value, index) => {
87
- var _a;
88
- return ((0, jsx_runtime_1.jsx)(core_1.FormControlLabel, { control: (0, jsx_runtime_1.jsx)(core_1.Checkbox, { checked: (_a = filter === null || filter === void 0 ? void 0 : filter.values.has(value)) !== null && _a !== void 0 ? _a : false, onChange: () => toggle(value) }, void 0), label: render(value) }, index));
89
- })] }), void 0));
90
- }
91
- exports.DefaultFilterComponent = DefaultFilterComponent;
@@ -1,5 +0,0 @@
1
- /// <reference types="react" />
2
- import { Id } from '../types';
3
- export declare function ExpandComponent<T>({ itemId }: {
4
- itemId: Id;
5
- }): JSX.Element;
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExpandComponent = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const core_1 = require("@material-ui/core");
6
- const icons_1 = require("@material-ui/icons");
7
- const helpers_1 = require("../misc/helpers");
8
- const table_1 = require("../table");
9
- function ExpandComponent({ itemId }) {
10
- const state = (0, table_1.useTableContext)();
11
- const isExpanded = state.useState((state) => state.expanded.has(itemId), [itemId]);
12
- function toggle() {
13
- const { props: { expanded: controlledExpanded, expandOnlyOne, onExpandedChange }, expanded, activeItemsById, } = state.getState();
14
- const newExpanded = new Set(expanded);
15
- if (expandOnlyOne)
16
- newExpanded.clear();
17
- if (isExpanded)
18
- newExpanded.delete(itemId);
19
- else {
20
- newExpanded.add(itemId);
21
- const item = activeItemsById.get(itemId);
22
- for (const ancestor of item ? (0, helpers_1.getAncestors)(activeItemsById, item) : []) {
23
- newExpanded.add(ancestor);
24
- }
25
- }
26
- onExpandedChange === null || onExpandedChange === void 0 ? void 0 : onExpandedChange(newExpanded);
27
- if (!controlledExpanded) {
28
- state.update((state) => {
29
- state.expanded = newExpanded;
30
- });
31
- }
32
- }
33
- return ((0, jsx_runtime_1.jsx)(core_1.IconButton, Object.assign({ size: "small", onClick: toggle }, { children: (0, jsx_runtime_1.jsx)(icons_1.ChevronRight, { style: {
34
- transition: 'all 500ms',
35
- transform: isExpanded ? 'rotate3d(0, 0, 1, 90deg)' : 'none',
36
- } }, void 0) }), void 0));
37
- }
38
- exports.ExpandComponent = ExpandComponent;
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Export = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const core_1 = require("@material-ui/core");
6
- const icons_1 = require("@material-ui/icons");
7
- const react_1 = require("react");
8
- const csvExport_1 = require("../misc/csvExport");
9
- const table_1 = require("../table");
10
- const useClasses = (0, core_1.makeStyles)((theme) => ({
11
- dialog: {
12
- padding: theme.spacing(2),
13
- display: 'grid',
14
- justifyItems: 'stretch',
15
- '& > *': {
16
- justifyContent: 'start',
17
- },
18
- },
19
- }));
20
- function Export() {
21
- const classes = useClasses();
22
- const [anchor, setAnchor] = (0, react_1.useState)(null);
23
- const state = (0, table_1.useTableContext)();
24
- const textTitle = state.useState('props.text.exportTitle');
25
- const textCopy = state.useState('props.text.exportCopy');
26
- const textDownload = state.useState('props.text.exportDownload');
27
- const generate = (options) => {
28
- const { activeColumns, activeItems } = state.getState();
29
- const data = [
30
- activeColumns.map((column) => String(column.id)),
31
- ...activeItems.map((item) => activeColumns.map((column) => column.exportCell(column.value(item), item))),
32
- ];
33
- return (0, csvExport_1.csvExport)(data, options);
34
- };
35
- const copy = () => {
36
- navigator.clipboard.writeText(generate(state.getState().props.enableExport.copy));
37
- };
38
- const download = () => {
39
- const a = document.createElement('a');
40
- a.href = 'data:text/csv;charset=utf-8,' + encodeURIComponent(generate(state.getState().props.enableExport.download));
41
- a.download = 'export.csv';
42
- document.body.appendChild(a);
43
- a.click();
44
- document.body.removeChild(a);
45
- };
46
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(core_1.IconButton, Object.assign({ color: "inherit", size: "small", onClick: (e) => setAnchor(e.currentTarget) }, { children: (0, jsx_runtime_1.jsx)(icons_1.CloudDownload, {}, void 0) }), void 0), (0, jsx_runtime_1.jsx)(core_1.Popover, Object.assign({ open: !!anchor, onClose: () => setAnchor(null), anchorEl: anchor, anchorOrigin: { vertical: 'bottom', horizontal: 'center' }, transformOrigin: { vertical: 'top', horizontal: 'left' } }, { children: (0, jsx_runtime_1.jsxs)("div", Object.assign({ className: classes.dialog }, { children: [(0, jsx_runtime_1.jsx)(core_1.Typography, Object.assign({ variant: "caption" }, { children: textTitle !== null && textTitle !== void 0 ? textTitle : 'Export' }), void 0), (0, jsx_runtime_1.jsx)(core_1.Button, Object.assign({ startIcon: (0, jsx_runtime_1.jsx)(icons_1.AssignmentReturn, {}, void 0), fullWidth: true, onClick: copy }, { children: textCopy !== null && textCopy !== void 0 ? textCopy : 'In die Zwischenablage' }), void 0), (0, jsx_runtime_1.jsx)(core_1.Button, Object.assign({ startIcon: (0, jsx_runtime_1.jsx)(icons_1.CloudDownload, {}, void 0), fullWidth: true, onClick: download }, { children: textDownload !== null && textDownload !== void 0 ? textDownload : 'Herunterladen' }), void 0)] }), void 0) }), void 0)] }, void 0));
47
- }
48
- exports.Export = Export;
@@ -1,5 +0,0 @@
1
- /// <reference types="react" />
2
- export declare type Filter<T> = {
3
- filter(item: T): boolean;
4
- };
5
- export declare function FilterComponent<T>(): JSX.Element | null;
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FilterComponent = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const core_1 = require("@material-ui/core");
6
- const icons_1 = require("@material-ui/icons");
7
- const react_1 = require("react");
8
- const table_1 = require("../table");
9
- const useClasses = (0, core_1.makeStyles)((theme) => ({
10
- active: {
11
- background: theme.palette.primary.main,
12
- },
13
- }));
14
- function FilterComponent() {
15
- const state = (0, table_1.useTableContext)();
16
- const columnId = (0, table_1.useColumnContext)();
17
- const classes = useClasses();
18
- const isActive = state.useState((state) => !!state.filters.get(columnId), [columnId]);
19
- const filterComponent = state.useState((state) => { var _a; return (_a = state.activeColumns.find((column) => column.id === columnId)) === null || _a === void 0 ? void 0 : _a.filterComponent; });
20
- const [anchor, setAnchor] = (0, react_1.useState)(null);
21
- if (!filterComponent)
22
- return null;
23
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(core_1.IconButton, Object.assign({ size: "small", color: "inherit", onClick: (e) => setAnchor(e.currentTarget), className: isActive ? classes.active : undefined }, { children: isActive ? (0, jsx_runtime_1.jsx)(icons_1.FilterList, {}, void 0) : (0, jsx_runtime_1.jsx)(icons_1.ArrowDropDown, {}, void 0) }), void 0), (0, jsx_runtime_1.jsx)(core_1.Popover, Object.assign({ open: !!anchor, onClose: () => setAnchor(null), anchorEl: anchor, anchorOrigin: { vertical: 'bottom', horizontal: 'center' }, transformOrigin: { vertical: 'top', horizontal: 'center' } }, { children: filterComponent }), void 0)] }, void 0));
24
- }
25
- exports.FilterComponent = FilterComponent;
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Row = exports.calcClassName = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const helpers_1 = require("../misc/helpers");
7
- const table_1 = require("../table");
8
- const cell_1 = require("./cell");
9
- const expandComponent_1 = require("./expandComponent");
10
- const selectComponent_1 = require("./selectComponent");
11
- const useCommonClasses_1 = require("./useCommonClasses");
12
- function calcClassName(classes, item, index) {
13
- return (0, helpers_1.c)((classes === null || classes === void 0 ? void 0 : classes.cell) instanceof Function ? classes.cell(item, index) : classes === null || classes === void 0 ? void 0 : classes.cell, (classes === null || classes === void 0 ? void 0 : classes.evenCell) === undefined ? undefined : { [classes.evenCell]: index % 2 === 0 }, (classes === null || classes === void 0 ? void 0 : classes.oddCell) === undefined ? undefined : { [classes.oddCell]: index % 2 === 1 });
14
- }
15
- exports.calcClassName = calcClassName;
16
- exports.Row = (0, react_1.memo)(function Row({ itemId, rowIndex }) {
17
- var _a, _b;
18
- const commonClasses = (0, useCommonClasses_1.useCommonClasses)();
19
- const state = (0, table_1.useTableContext)();
20
- const divRef = (0, react_1.useRef)(null);
21
- const { className, indent, hasChildren, hasDeferredChildren, columnIds, enableSelection, rowAction } = state.useState((state) => {
22
- var _a, _b;
23
- const item = state.activeItemsById.get(itemId);
24
- const index = !item ? -1 : state.activeItems.indexOf(item);
25
- return {
26
- className: calcClassName(state.props.classes, item, index),
27
- indent: item ? (0, helpers_1.getAncestors)(state.activeItemsById, item).size : 0,
28
- hasChildren: !!(item === null || item === void 0 ? void 0 : item.children.length),
29
- hasDeferredChildren: item && ((_b = (_a = state.props).hasDeferredChildren) === null || _b === void 0 ? void 0 : _b.call(_a, item)),
30
- columnIds: state.activeColumns.map((column) => column.id),
31
- enableSelection: state.props.enableSelection,
32
- rowAction: state.props.rowAction instanceof Function ? (item ? state.props.rowAction(item, index) : null) : state.props.rowAction,
33
- };
34
- }, [itemId]);
35
- (0, react_1.useEffect)(() => {
36
- const div = divRef.current;
37
- if (!div)
38
- return;
39
- const o = new ResizeObserver(() => {
40
- if (!document.contains(div))
41
- return;
42
- state.update((state) => {
43
- state.rowHeights.set(itemId, div.offsetHeight);
44
- });
45
- });
46
- o.observe(div);
47
- return () => o.disconnect();
48
- }, [divRef.current]);
49
- (_b = (_a = state.getState().props).debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'render row', itemId);
50
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: (0, helpers_1.c)(commonClasses.cellFill, className), ref: divRef }, void 0), (0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, helpers_1.c)(commonClasses.cell, commonClasses.firstCell, className) }, { children: [(0, jsx_runtime_1.jsx)("div", { style: { width: indent * 20 } }, void 0), enableSelection && (0, jsx_runtime_1.jsx)(selectComponent_1.SelectComponent, { itemId: itemId }, void 0), (hasChildren || hasDeferredChildren) && (0, jsx_runtime_1.jsx)(expandComponent_1.ExpandComponent, { itemId: itemId }, void 0), rowAction] }), void 0), columnIds.map((columnId) => ((0, jsx_runtime_1.jsx)(table_1.ColumnContext.Provider, Object.assign({ value: columnId }, { children: (0, jsx_runtime_1.jsx)(cell_1.Cell, { itemId: itemId, rowIndex: rowIndex }, void 0) }), columnId))), (0, jsx_runtime_1.jsx)("div", { className: (0, helpers_1.c)(commonClasses.cellFill, className) }, void 0)] }, void 0));
51
- });
@@ -1,61 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SelectComponent = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const core_1 = require("@material-ui/core");
6
- const helpers_1 = require("../misc/helpers");
7
- const table_1 = require("../table");
8
- const useClasses = (0, core_1.makeStyles)({
9
- justifiedCheckbox: {
10
- justifySelf: 'start',
11
- color: 'inherit',
12
- },
13
- });
14
- function SelectComponent({ itemId }) {
15
- const classes = useClasses();
16
- const state = (0, table_1.useTableContext)();
17
- const isSelected = state.useState((state) => {
18
- const itemIds = itemId ? [itemId] : [...state.activeItemsById.keys()];
19
- return state.activeItemsById.size > 0 && itemIds.every((itemId) => state.selection.has(itemId));
20
- }, [itemId]);
21
- function toggle(e) {
22
- const mouseEvent = e.nativeEvent;
23
- const { activeItems, activeItemsById, lastSelectedId, selection, props: { selectSyncChildren, selection: controlledSelection, onSelectionChange }, } = state.getState();
24
- let range;
25
- if (mouseEvent.shiftKey && itemId) {
26
- const a = lastSelectedId ? activeItems.findIndex((i) => lastSelectedId === i.id) : 0;
27
- const b = activeItems.findIndex((item) => item.id === itemId);
28
- range = activeItems.slice(Math.min(a, b), Math.max(a, b) + 1);
29
- }
30
- else {
31
- const item = itemId ? activeItemsById.get(itemId) : undefined;
32
- range = item ? [item] : activeItems;
33
- }
34
- const newSelection = new Set(selection);
35
- for (const item of range) {
36
- if (isSelected)
37
- newSelection.delete(item.id);
38
- else
39
- newSelection.add(item.id);
40
- }
41
- if (selectSyncChildren && isSelected) {
42
- for (const ancestor of (0, helpers_1.getAncestors)(activeItemsById, ...range)) {
43
- newSelection.delete(ancestor);
44
- }
45
- for (const descendant of (0, helpers_1.getDescendants)(...range)) {
46
- newSelection.delete(descendant);
47
- }
48
- }
49
- onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(newSelection);
50
- if (!controlledSelection) {
51
- state.update((state) => {
52
- state.selection = newSelection;
53
- });
54
- }
55
- state.update((state) => {
56
- state.lastSelectedId = itemId;
57
- });
58
- }
59
- return (0, jsx_runtime_1.jsx)(core_1.Checkbox, { className: classes.justifiedCheckbox, checked: isSelected, onChange: toggle }, void 0);
60
- }
61
- exports.SelectComponent = SelectComponent;
@@ -1,52 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SortComponent = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const core_1 = require("@material-ui/core");
6
- const icons_1 = require("@material-ui/icons");
7
- const table_1 = require("../table");
8
- const useClasses = (0, core_1.makeStyles)({
9
- sortView: {
10
- userSelect: 'none',
11
- display: 'grid',
12
- gridTemplateColumns: 'minmax(0, 1fr) max-content',
13
- alignItems: 'center',
14
- cursor: 'pointer',
15
- '& > div': {
16
- overflow: 'hidden',
17
- textOverflow: 'ellipsis',
18
- },
19
- },
20
- empty: {
21
- width: 20,
22
- },
23
- });
24
- function SortComponent({ children }) {
25
- const classes = useClasses();
26
- const state = (0, table_1.useTableContext)();
27
- const columnId = (0, table_1.useColumnContext)();
28
- const { direction, index } = state.useState((state) => {
29
- var _a, _b;
30
- const index = (_a = state.sort.findIndex((s) => s.columnId === columnId)) !== null && _a !== void 0 ? _a : -1;
31
- return {
32
- direction: (_b = state.sort[index]) === null || _b === void 0 ? void 0 : _b.direction,
33
- index: index >= 0 ? index + 1 : undefined,
34
- };
35
- });
36
- function toggle(e) {
37
- const { props: { sort: controlledSort, onSortChange }, } = state.getState();
38
- const newDirection = direction === 'asc' ? 'desc' : 'asc';
39
- const newSort = (e.getModifierState('Control') ? state.getState().sort.filter((s) => s.columnId !== columnId) : []).concat({
40
- columnId,
41
- direction: newDirection,
42
- });
43
- onSortChange === null || onSortChange === void 0 ? void 0 : onSortChange(newSort);
44
- if (!controlledSort) {
45
- state.update((state) => {
46
- state.sort = newSort;
47
- });
48
- }
49
- }
50
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: classes.sortView, onClick: toggle }, { children: [(0, jsx_runtime_1.jsx)("div", { children: children }, void 0), (0, jsx_runtime_1.jsx)(core_1.Badge, Object.assign({ badgeContent: index }, { children: direction === 'asc' ? ((0, jsx_runtime_1.jsx)(icons_1.ArrowUpward, { fontSize: "small" }, void 0)) : direction === 'desc' ? ((0, jsx_runtime_1.jsx)(icons_1.ArrowDownward, { fontSize: "small" }, void 0)) : ((0, jsx_runtime_1.jsx)("div", { className: classes.empty }, void 0)) }), void 0)] }), void 0));
51
- }
52
- exports.SortComponent = SortComponent;
@@ -1,11 +0,0 @@
1
- /// <reference types="react" />
2
- import { Filter } from './filterComponent';
3
- export declare class TextFilter<T> implements Filter<T> {
4
- readonly query: string;
5
- readonly filter: (item: T) => boolean;
6
- constructor(query: string, filter: (item: T) => boolean);
7
- }
8
- export declare function TextFilterComponent<T, V>({ filterBy, compare, }: {
9
- filterBy?: (value: V, item: T) => string;
10
- compare?: (a: string, b: string) => boolean;
11
- }): JSX.Element;
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TextFilterComponent = exports.TextFilter = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const core_1 = require("@material-ui/core");
6
- const icons_1 = require("@material-ui/icons");
7
- const react_1 = require("react");
8
- const helpers_1 = require("../misc/helpers");
9
- const textMatch_1 = require("../misc/textMatch");
10
- const table_1 = require("../table");
11
- class TextFilter {
12
- constructor(query, filter) {
13
- this.query = query;
14
- this.filter = filter;
15
- }
16
- }
17
- exports.TextFilter = TextFilter;
18
- const useClasses = (0, core_1.makeStyles)((theme) => ({
19
- view: {
20
- padding: theme.spacing(2),
21
- display: 'grid',
22
- '& > :first-child': {
23
- marginBottom: theme.spacing(2),
24
- },
25
- },
26
- }));
27
- function TextFilterComponent({ filterBy = helpers_1.asString, compare = textMatch_1.textMatch, }) {
28
- var _a;
29
- const classes = useClasses();
30
- const state = (0, table_1.useTableContext)();
31
- const columnId = (0, table_1.useColumnContext)();
32
- const _filter = state.useState((state) => {
33
- var _a;
34
- const column = state.activeColumns.find((column) => column.id === columnId);
35
- return (_a = state.filters.get(columnId)) !== null && _a !== void 0 ? _a : column === null || column === void 0 ? void 0 : column.defaultFilter;
36
- }, [columnId]);
37
- const filter = _filter instanceof TextFilter ? _filter : undefined;
38
- const [input, setInput] = (0, react_1.useState)();
39
- (0, react_1.useEffect)(() => {
40
- if (input === undefined)
41
- return;
42
- const handle = setTimeout(() => {
43
- var _a;
44
- const column = state.getState().activeColumns.find((column) => column.id === columnId);
45
- if (!column)
46
- return;
47
- const newFilter = input
48
- ? new TextFilter(input, (item) => {
49
- const itemValue = filterBy(column.value(item), item);
50
- return compare(itemValue, input);
51
- })
52
- : undefined;
53
- if (!column.filter) {
54
- state.update((state) => {
55
- if (newFilter)
56
- state.filters.set(column.id, newFilter);
57
- else
58
- state.filters.delete(column.id);
59
- });
60
- }
61
- (_a = column.onFilterChange) === null || _a === void 0 ? void 0 : _a.call(column, newFilter);
62
- setInput(undefined);
63
- }, 500);
64
- return () => clearTimeout(handle);
65
- }, [input]);
66
- return ((0, jsx_runtime_1.jsx)("div", Object.assign({ className: classes.view }, { children: (0, jsx_runtime_1.jsx)(core_1.TextField, { value: (_a = input !== null && input !== void 0 ? input : filter === null || filter === void 0 ? void 0 : filter.query) !== null && _a !== void 0 ? _a : '', onChange: (e) => setInput(e.target.value), InputProps: {
67
- endAdornment: (filter === null || filter === void 0 ? void 0 : filter.query) ? ((0, jsx_runtime_1.jsx)(core_1.IconButton, Object.assign({ onClick: () => setInput('') }, { children: (0, jsx_runtime_1.jsx)(icons_1.Clear, {}, void 0) }), void 0)) : ((0, jsx_runtime_1.jsx)(icons_1.Search, {}, void 0)),
68
- } }, void 0) }), void 0));
69
- }
70
- exports.TextFilterComponent = TextFilterComponent;
@@ -1 +0,0 @@
1
- export declare const useCommonClasses: (props?: any) => import("@material-ui/styles").ClassNameMap<"table" | "text" | "cell" | "sticky" | "headerCell" | "cellFill" | "firstCell" | "headerFill" | "deferredPlaceholder">;
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useCommonClasses = void 0;
4
- const core_1 = require("@material-ui/core");
5
- const cell = (theme) => ({
6
- padding: theme.spacing(0.1, 1),
7
- display: 'flex',
8
- alignItems: 'center',
9
- borderBottom: `1px solid ${theme.palette.grey[200]}`,
10
- whiteSpace: 'nowrap',
11
- overflow: 'hidden',
12
- });
13
- exports.useCommonClasses = (0, core_1.makeStyles)((theme) => ({
14
- table: {
15
- position: 'relative',
16
- display: 'grid',
17
- },
18
- cell: cell(theme),
19
- cellFill: {
20
- borderBottom: `1px solid ${theme.palette.grey[200]}`,
21
- },
22
- headerCell: Object.assign(Object.assign({}, cell(theme)), { borderBottom: `2px solid ${theme.palette.grey[400]}`, gridTemplateColumns: 'minmax(0, 1fr) max-content', background: theme.palette.common.white, '&:not(:first-child)': {
23
- borderLeft: `1px solid ${theme.palette.background.default}`,
24
- } }),
25
- firstCell: {
26
- justifyContent: 'start',
27
- },
28
- sticky: {
29
- position: 'sticky',
30
- top: 0,
31
- zIndex: 1,
32
- },
33
- headerFill: {
34
- borderBottom: `3px solid ${theme.palette.grey[200]}`,
35
- background: theme.palette.common.white,
36
- },
37
- deferredPlaceholder: {
38
- padding: theme.spacing(1),
39
- borderBottom: `1px solid ${theme.palette.grey[200]}`,
40
- gridColumn: '1 / -1',
41
- display: 'grid',
42
- justifyContent: 'center',
43
- },
44
- text: {
45
- minWidth: 0,
46
- overflow: 'hidden',
47
- textOverflow: 'ellipsis',
48
- },
49
- }));
@@ -1,98 +0,0 @@
1
- "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.Virtualized = void 0;
15
- const jsx_runtime_1 = require("react/jsx-runtime");
16
- const react_1 = require("react");
17
- const throttle_1 = require("../misc/throttle");
18
- const table_1 = require("../table");
19
- const onAncestorScroll = (x, onScroll) => {
20
- const find = (x) => (x.parentElement ? [x.parentElement, ...find(x.parentElement)] : [document]);
21
- const ancestors = find(x);
22
- for (const ancestor of ancestors) {
23
- ancestor.addEventListener('scroll', onScroll);
24
- }
25
- return () => {
26
- for (const ancestor of ancestors) {
27
- ancestor.removeEventListener('scroll', onScroll);
28
- }
29
- };
30
- };
31
- const findScrollRoot = (x) => {
32
- const parent = x.parentElement;
33
- if (!parent)
34
- return document.documentElement;
35
- if (parent.scrollHeight > parent.clientHeight)
36
- return parent;
37
- return findScrollRoot(parent);
38
- };
39
- const relativeOffset = (x, y) => {
40
- if (x.offsetParent === y.offsetParent || !x.offsetParent)
41
- return x.offsetTop - y.offsetTop;
42
- if (x.offsetParent instanceof HTMLElement)
43
- return relativeOffset(x.offsetParent, y) + x.offsetTop;
44
- return 0;
45
- };
46
- function Virtualized(_a) {
47
- var _b, _c, _d, _e;
48
- var { header, children } = _a, props = __rest(_a, ["header", "children"]);
49
- const state = (0, table_1.useTableContext)();
50
- const virtual = state.useState('props.virtual');
51
- const probeRef = (0, react_1.useRef)(null);
52
- const [counter, setCounter] = (0, react_1.useState)(0);
53
- const { itemIds = [], from = 0, to, before = 0, after = 0, } = state.useState((state) => {
54
- var _a;
55
- const itemIds = state.activeItems.map((item) => item.id);
56
- const root = probeRef.current && findScrollRoot(probeRef.current);
57
- if (!state.props.virtual)
58
- return { itemIds };
59
- if (!probeRef.current || !root || !document.contains(root))
60
- return {};
61
- const { rowHeight, initalRowHeight, overscan = 200, overscanTop, overscanBottom, } = (_a = (state.props.virtual instanceof Object ? state.props.virtual : undefined)) !== null && _a !== void 0 ? _a : {};
62
- let totalHeight = 0;
63
- const rowHeights = itemIds.map((itemId, index) => {
64
- var _a, _b;
65
- const h = (_b = (_a = rowHeight !== null && rowHeight !== void 0 ? rowHeight : state.rowHeights.get(itemId)) !== null && _a !== void 0 ? _a : initalRowHeight) !== null && _b !== void 0 ? _b : (index === 0 ? 100 : totalHeight / index);
66
- totalHeight += h;
67
- return h;
68
- });
69
- const probeOffset = relativeOffset(probeRef.current, root);
70
- const headerHeight = probeRef.current.offsetTop;
71
- const topOfTable = root.scrollTop - probeOffset + headerHeight;
72
- const bottomOfTable = topOfTable + root.clientHeight - headerHeight;
73
- let from = 0, to = itemIds.length, before = 0, after = 0;
74
- for (const h of rowHeights) {
75
- if (before + h > topOfTable - (overscanTop !== null && overscanTop !== void 0 ? overscanTop : overscan))
76
- break;
77
- from++;
78
- before += h;
79
- }
80
- for (const h of rowHeights.reverse()) {
81
- if (after + h > totalHeight - bottomOfTable - (overscanBottom !== null && overscanBottom !== void 0 ? overscanBottom : overscan))
82
- break;
83
- to--;
84
- after += h;
85
- }
86
- return { itemIds: itemIds.slice(from, to), from, to, before, after };
87
- }, [probeRef.current, counter]);
88
- const throttleScroll = (_c = (_b = (typeof virtual === 'boolean' ? undefined : virtual)) === null || _b === void 0 ? void 0 : _b.throttleScroll) !== null && _c !== void 0 ? _c : 500;
89
- const incCounter = (0, react_1.useMemo)(() => (0, throttle_1.throttle)(() => setCounter((c) => c + 1), throttleScroll), [throttleScroll]);
90
- (0, react_1.useEffect)(() => {
91
- if (!virtual || !probeRef.current)
92
- return;
93
- return onAncestorScroll(probeRef.current, incCounter);
94
- }, [probeRef.current, incCounter]);
95
- (_e = (_d = state.getState().props).debug) === null || _e === void 0 ? void 0 : _e.call(_d, `Virtualalized render ${from} to ${to}`);
96
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({}, props, { children: [header, virtual && (0, jsx_runtime_1.jsx)("div", { style: { gridColumn: '1 / -1', height: before }, ref: probeRef }, void 0), children(itemIds, from), virtual && (0, jsx_runtime_1.jsx)("div", { style: { gridColumn: '1 / -1', height: after } }, void 0)] }), void 0));
97
- }
98
- exports.Virtualized = Virtualized;
@@ -1,6 +0,0 @@
1
- export { DefaultFilter, DefaultFilterComponent } from './components/defaultFilterComponent';
2
- export type { Filter } from './components/filterComponent';
3
- export { TextFilter, TextFilterComponent } from './components/textFilterComponent';
4
- export { termMatch, textMatch } from './misc/textMatch';
5
- export { ColumnContext, Table, TableContext, useColumnContext, useTableContext } from './table';
6
- export type { Column, Id, InternalColumn, Rows, Sort, SortDirection, TableProps } from './types';