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.
- package/dist/cjs/index.js +3800 -16
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/mui4Theme.js +96 -0
- package/dist/cjs/mui4Theme.js.map +1 -0
- package/dist/cjs/mui5Theme.js +100 -0
- package/dist/cjs/mui5Theme.js.map +1 -0
- package/dist/es/index.js +3783 -0
- package/dist/es/index.js.map +1 -0
- package/dist/es/mui4Theme.js +92 -0
- package/dist/es/mui4Theme.js.map +1 -0
- package/dist/es/mui5Theme.js +96 -0
- package/dist/es/mui5Theme.js.map +1 -0
- package/dist/tableTheme.js +1990 -0
- package/dist/tableTheme.js.map +1 -0
- package/dist/{cjs → types}/components/cell.d.ts +1 -1
- package/dist/types/components/columnHeader.d.ts +7 -0
- package/dist/{cjs → types}/components/columnSelection.d.ts +0 -0
- package/dist/types/components/dateFilter.d.ts +8 -0
- package/dist/types/components/datePicker.d.ts +16 -0
- package/dist/types/components/expandControl.d.ts +6 -0
- package/dist/{cjs → types}/components/export.d.ts +0 -0
- package/dist/types/components/filterControl.d.ts +2 -0
- package/dist/types/components/formControlLabel.d.ts +5 -0
- package/dist/types/components/resizeHandle.d.ts +1 -0
- package/dist/{cjs → types}/components/row.d.ts +1 -1
- package/dist/{cjs → types}/components/selectComponent.d.ts +0 -0
- package/dist/types/components/selectFilter.d.ts +8 -0
- package/dist/{cjs → types}/components/sortComponent.d.ts +0 -0
- package/dist/types/components/spinnner.d.ts +3 -0
- package/dist/{cjs → types/components}/table.d.ts +1 -4
- package/dist/types/components/textFilter.d.ts +5 -0
- package/dist/{cjs → types}/components/virtualized.d.ts +0 -0
- package/dist/types/hooks/useFilter.d.ts +5 -0
- package/dist/types/hooks/useTheme.d.ts +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/{cjs → types}/internalState/calcItems.d.ts +0 -0
- package/dist/{cjs → types}/internalState/calcProps.d.ts +0 -0
- package/dist/{cjs → types}/internalState/cleanupState.d.ts +0 -0
- package/dist/{cjs → types}/internalState/filterColumns.d.ts +0 -0
- package/dist/{cjs → types}/internalState/syncSelections.d.ts +0 -0
- package/dist/{cjs → types}/internalState/tableStateStorage.d.ts +1 -1
- package/dist/{cjs → types}/internalState/useTableState.d.ts +0 -0
- package/dist/{cjs → types}/misc/csvExport.d.ts +0 -0
- package/dist/types/misc/debounce.d.ts +4 -0
- package/dist/types/misc/deepPartial.d.ts +3 -0
- package/dist/{cjs → types}/misc/helpers.d.ts +2 -1
- package/dist/{cjs → types}/misc/queue.d.ts +1 -1
- package/dist/{cjs → types}/misc/textMatch.d.ts +0 -0
- package/dist/types/misc/throttle.d.ts +4 -0
- package/dist/types/theme/defaultClasses.d.ts +15 -0
- package/dist/types/theme/defaultColors.d.ts +2 -0
- package/dist/types/theme/defaultIcons.d.ts +2 -0
- package/dist/types/theme/defaultTexts.d.ts +2 -0
- package/dist/types/theme/defaultTheme/badge.d.ts +2 -0
- package/dist/types/theme/defaultTheme/button.d.ts +2 -0
- package/dist/types/theme/defaultTheme/checkbox.d.ts +2 -0
- package/dist/types/theme/defaultTheme/iconButton.d.ts +2 -0
- package/dist/types/theme/defaultTheme/index.d.ts +2 -0
- package/dist/types/theme/defaultTheme/popover.d.ts +4 -0
- package/dist/types/theme/defaultTheme/textField.d.ts +2 -0
- package/dist/types/theme/mui4Theme/index.d.ts +8 -0
- package/dist/types/theme/mui5Theme/index.d.ts +8 -0
- package/dist/types/theme/tableTheme.d.ts +11 -0
- package/dist/types/theme/useCssVariables.d.ts +9 -0
- package/dist/types/types.d.ts +285 -0
- package/package.json +76 -37
- package/dist/cjs/components/cell.js +0 -31
- package/dist/cjs/components/columnSelection.js +0 -37
- package/dist/cjs/components/defaultFilterComponent.d.ts +0 -22
- package/dist/cjs/components/defaultFilterComponent.js +0 -91
- package/dist/cjs/components/expandComponent.d.ts +0 -5
- package/dist/cjs/components/expandComponent.js +0 -38
- package/dist/cjs/components/export.js +0 -48
- package/dist/cjs/components/filterComponent.d.ts +0 -5
- package/dist/cjs/components/filterComponent.js +0 -25
- package/dist/cjs/components/row.js +0 -51
- package/dist/cjs/components/selectComponent.js +0 -61
- package/dist/cjs/components/sortComponent.js +0 -52
- package/dist/cjs/components/textFilterComponent.d.ts +0 -11
- package/dist/cjs/components/textFilterComponent.js +0 -70
- package/dist/cjs/components/useCommonClasses.d.ts +0 -1
- package/dist/cjs/components/useCommonClasses.js +0 -49
- package/dist/cjs/components/virtualized.js +0 -98
- package/dist/cjs/index.d.ts +0 -6
- package/dist/cjs/internalState/calcItems.js +0 -85
- package/dist/cjs/internalState/calcProps.js +0 -89
- package/dist/cjs/internalState/cleanupState.js +0 -43
- package/dist/cjs/internalState/filterColumns.js +0 -10
- package/dist/cjs/internalState/syncSelections.js +0 -22
- package/dist/cjs/internalState/tableStateStorage.js +0 -74
- package/dist/cjs/internalState/useTableState.js +0 -62
- package/dist/cjs/misc/csvExport.js +0 -15
- package/dist/cjs/misc/helpers.js +0 -91
- package/dist/cjs/misc/queue.js +0 -42
- package/dist/cjs/misc/textMatch.js +0 -23
- package/dist/cjs/misc/throttle.d.ts +0 -1
- package/dist/cjs/misc/throttle.js +0 -30
- package/dist/cjs/package.json +0 -1
- package/dist/cjs/table.js +0 -80
- package/dist/cjs/types.d.ts +0 -146
- package/dist/cjs/types.js +0 -2
- package/dist/esm/components/cell.d.ts +0 -6
- package/dist/esm/components/cell.js +0 -28
- package/dist/esm/components/columnSelection.d.ts +0 -2
- package/dist/esm/components/columnSelection.js +0 -33
- package/dist/esm/components/defaultFilterComponent.d.ts +0 -22
- package/dist/esm/components/defaultFilterComponent.js +0 -86
- package/dist/esm/components/expandComponent.d.ts +0 -5
- package/dist/esm/components/expandComponent.js +0 -34
- package/dist/esm/components/export.d.ts +0 -2
- package/dist/esm/components/export.js +0 -44
- package/dist/esm/components/filterComponent.d.ts +0 -5
- package/dist/esm/components/filterComponent.js +0 -21
- package/dist/esm/components/row.d.ts +0 -7
- package/dist/esm/components/row.js +0 -47
- package/dist/esm/components/selectComponent.d.ts +0 -5
- package/dist/esm/components/selectComponent.js +0 -57
- package/dist/esm/components/sortComponent.d.ts +0 -4
- package/dist/esm/components/sortComponent.js +0 -48
- package/dist/esm/components/textFilterComponent.d.ts +0 -11
- package/dist/esm/components/textFilterComponent.js +0 -65
- package/dist/esm/components/useCommonClasses.d.ts +0 -1
- package/dist/esm/components/useCommonClasses.js +0 -46
- package/dist/esm/components/virtualized.d.ts +0 -6
- package/dist/esm/components/virtualized.js +0 -94
- package/dist/esm/index.d.ts +0 -6
- package/dist/esm/index.js +0 -4
- package/dist/esm/internalState/calcItems.d.ts +0 -3
- package/dist/esm/internalState/calcItems.js +0 -81
- package/dist/esm/internalState/calcProps.d.ts +0 -2
- package/dist/esm/internalState/calcProps.js +0 -85
- package/dist/esm/internalState/cleanupState.d.ts +0 -3
- package/dist/esm/internalState/cleanupState.js +0 -39
- package/dist/esm/internalState/filterColumns.d.ts +0 -3
- package/dist/esm/internalState/filterColumns.js +0 -6
- package/dist/esm/internalState/syncSelections.d.ts +0 -3
- package/dist/esm/internalState/syncSelections.js +0 -18
- package/dist/esm/internalState/tableStateStorage.d.ts +0 -11
- package/dist/esm/internalState/tableStateStorage.js +0 -70
- package/dist/esm/internalState/useTableState.d.ts +0 -3
- package/dist/esm/internalState/useTableState.js +0 -58
- package/dist/esm/misc/csvExport.d.ts +0 -7
- package/dist/esm/misc/csvExport.js +0 -11
- package/dist/esm/misc/helpers.d.ts +0 -14
- package/dist/esm/misc/helpers.js +0 -77
- package/dist/esm/misc/queue.d.ts +0 -6
- package/dist/esm/misc/queue.js +0 -38
- package/dist/esm/misc/textMatch.d.ts +0 -2
- package/dist/esm/misc/textMatch.js +0 -18
- package/dist/esm/misc/throttle.d.ts +0 -1
- package/dist/esm/misc/throttle.js +0 -26
- package/dist/esm/table.d.ts +0 -11
- package/dist/esm/table.js +0 -73
- package/dist/esm/types.d.ts +0 -146
- 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,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,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;
|
package/dist/cjs/index.d.ts
DELETED
|
@@ -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';
|