@popmenu/table 0.126.4 → 0.127.1
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/build/cjs/components/ColumnFilterChip/ColumnFilterChip.d.ts +0 -1
- package/build/cjs/components/ColumnFilterResetButton/ColumnFilterResetButton.d.ts +0 -1
- package/build/cjs/components/FilterPanel/FilterControl/FilterControl.d.ts +0 -1
- package/build/cjs/components/FilterPanel/FilterControl/SelectFilter/SelectFilter.d.ts +0 -1
- package/build/cjs/components/FilterPanel/FilterControl/ToggleFilter/ToggleFilter.d.ts +0 -1
- package/build/cjs/components/FilterPanel/FilterPanel.d.ts +0 -1
- package/build/cjs/components/FilterPanel/FilterPanelContext/FilterPanelContext.d.ts +1 -1
- package/build/cjs/components/FilterPanel/FilterPanelProps.d.ts +2 -2
- package/build/cjs/components/FilterPanel/Panel/Panel.d.ts +1 -2
- package/build/cjs/components/FilterPanel/Trigger/Trigger.d.ts +1 -1
- package/build/cjs/components/GlobalFilter/GlobalFilter.d.ts +0 -1
- package/build/cjs/components/GlobalFilter/index.d.ts +1 -1
- package/build/cjs/components/RowActions/RowActions.d.ts +0 -1
- package/build/cjs/components/RowActions/index.d.ts +1 -1
- package/build/cjs/components/Table/Table.d.ts +0 -1
- package/build/cjs/components/Table/TableStyles.d.ts +1 -1
- package/build/cjs/components/Table/index.d.ts +1 -1
- package/build/cjs/components/TableBody/TableBody.d.ts +1 -1
- package/build/cjs/components/TableCell/TableCell.d.ts +1 -1
- package/build/cjs/components/TableContext/index.d.ts +2 -3
- package/build/cjs/components/TableControlsContainer/TableControlsContainer.d.ts +0 -1
- package/build/cjs/components/TableControlsContainer/TableControlsContainerProps.d.ts +1 -1
- package/build/cjs/components/TableFooter/TableFooter.d.ts +1 -1
- package/build/cjs/components/TableHeader/TableHeader.d.ts +1 -1
- package/build/cjs/components/TableHeaderCell/TableHeaderCell.d.ts +0 -1
- package/build/cjs/components/TableHeaderCell/TableHeaderCellProps.d.ts +1 -1
- package/build/cjs/components/TableHeaderCell/index.d.ts +1 -1
- package/build/cjs/components/TableHeaderRow/TableHeaderRow.d.ts +1 -1
- package/build/cjs/components/TableRow/TableRow.d.ts +1 -1
- package/build/cjs/components/index.d.ts +6 -3
- package/build/cjs/hooks/useColumnFilters.d.ts +1 -1
- package/build/cjs/index.js +469 -451
- package/build/cjs/index.js.map +1 -1
- package/build/esm/components/ColumnFilterChip/ColumnFilterChip.d.ts +0 -1
- package/build/esm/components/ColumnFilterChip/ColumnFilterChip.js +5 -6
- package/build/esm/components/ColumnFilterChip/ColumnFilterChip.js.map +1 -1
- package/build/esm/components/ColumnFilterChip/ColumnFilterChipStyles.js +1 -1
- package/build/esm/components/ColumnFilterChip/ColumnFilterChipStyles.js.map +1 -1
- package/build/esm/components/ColumnFilterResetButton/ColumnFilterResetButton.d.ts +0 -1
- package/build/esm/components/ColumnFilterResetButton/ColumnFilterResetButton.js +3 -4
- package/build/esm/components/ColumnFilterResetButton/ColumnFilterResetButton.js.map +1 -1
- package/build/esm/components/FilterPanel/FilterControl/FilterControl.d.ts +0 -1
- package/build/esm/components/FilterPanel/FilterControl/FilterControl.js +5 -6
- package/build/esm/components/FilterPanel/FilterControl/FilterControl.js.map +1 -1
- package/build/esm/components/FilterPanel/FilterControl/SelectFilter/SelectFilter.d.ts +0 -1
- package/build/esm/components/FilterPanel/FilterControl/SelectFilter/SelectFilter.js +28 -30
- package/build/esm/components/FilterPanel/FilterControl/SelectFilter/SelectFilter.js.map +1 -1
- package/build/esm/components/FilterPanel/FilterControl/SelectFilter/SelectFilterStyles.js +2 -2
- package/build/esm/components/FilterPanel/FilterControl/SelectFilter/SelectFilterStyles.js.map +1 -1
- package/build/esm/components/FilterPanel/FilterControl/ToggleFilter/ToggleFilter.d.ts +0 -1
- package/build/esm/components/FilterPanel/FilterControl/ToggleFilter/ToggleFilter.js +8 -8
- package/build/esm/components/FilterPanel/FilterControl/ToggleFilter/ToggleFilter.js.map +1 -1
- package/build/esm/components/FilterPanel/FilterPanel.d.ts +0 -1
- package/build/esm/components/FilterPanel/FilterPanel.js +5 -5
- package/build/esm/components/FilterPanel/FilterPanel.js.map +1 -1
- package/build/esm/components/FilterPanel/FilterPanelContext/FilterPanelContext.d.ts +1 -1
- package/build/esm/components/FilterPanel/FilterPanelContext/FilterPanelContext.js +3 -3
- package/build/esm/components/FilterPanel/FilterPanelContext/FilterPanelContext.js.map +1 -1
- package/build/esm/components/FilterPanel/FilterPanelProps.d.ts +2 -2
- package/build/esm/components/FilterPanel/Panel/Panel.d.ts +1 -2
- package/build/esm/components/FilterPanel/Panel/Panel.js +21 -23
- package/build/esm/components/FilterPanel/Panel/Panel.js.map +1 -1
- package/build/esm/components/FilterPanel/Panel/PanelStyles.js +3 -3
- package/build/esm/components/FilterPanel/Panel/PanelStyles.js.map +1 -1
- package/build/esm/components/FilterPanel/Trigger/Trigger.d.ts +1 -1
- package/build/esm/components/FilterPanel/Trigger/Trigger.js +3 -3
- package/build/esm/components/FilterPanel/Trigger/Trigger.js.map +1 -1
- package/build/esm/components/FilterPanel/Trigger/TriggerStyles.js +1 -1
- package/build/esm/components/FilterPanel/Trigger/TriggerStyles.js.map +1 -1
- package/build/esm/components/GlobalFilter/GlobalFilter.d.ts +0 -1
- package/build/esm/components/GlobalFilter/GlobalFilter.js +6 -7
- package/build/esm/components/GlobalFilter/GlobalFilter.js.map +1 -1
- package/build/esm/components/GlobalFilter/GlobalFilterStyles.js +1 -1
- package/build/esm/components/GlobalFilter/GlobalFilterStyles.js.map +1 -1
- package/build/esm/components/GlobalFilter/index.d.ts +1 -1
- package/build/esm/components/RowActions/RowActions.d.ts +0 -1
- package/build/esm/components/RowActions/RowActions.js +14 -18
- package/build/esm/components/RowActions/RowActions.js.map +1 -1
- package/build/esm/components/RowActions/index.d.ts +1 -1
- package/build/esm/components/Table/Table.d.ts +0 -1
- package/build/esm/components/Table/Table.js +76 -56
- package/build/esm/components/Table/Table.js.map +1 -1
- package/build/esm/components/Table/TableStyles.d.ts +1 -1
- package/build/esm/components/Table/TableStyles.js +17 -22
- package/build/esm/components/Table/TableStyles.js.map +1 -1
- package/build/esm/components/Table/index.d.ts +1 -1
- package/build/esm/components/TableBody/TableBody.d.ts +1 -1
- package/build/esm/components/TableBody/TableBody.js +3 -4
- package/build/esm/components/TableBody/TableBody.js.map +1 -1
- package/build/esm/components/TableCell/TableCell.d.ts +1 -1
- package/build/esm/components/TableCell/TableCell.js +4 -5
- package/build/esm/components/TableCell/TableCell.js.map +1 -1
- package/build/esm/components/TableCell/TableCellStyles.js +4 -4
- package/build/esm/components/TableCell/TableCellStyles.js.map +1 -1
- package/build/esm/components/TableContext/index.d.ts +2 -3
- package/build/esm/components/TableContext/index.js +1 -1
- package/build/esm/components/TableContext/index.js.map +1 -1
- package/build/esm/components/TableControlsContainer/TableControlsContainer.d.ts +0 -1
- package/build/esm/components/TableControlsContainer/TableControlsContainer.js +26 -10
- package/build/esm/components/TableControlsContainer/TableControlsContainer.js.map +1 -1
- package/build/esm/components/TableControlsContainer/TableControlsContainerProps.d.ts +1 -1
- package/build/esm/components/TableFooter/TableFooter.d.ts +1 -1
- package/build/esm/components/TableFooter/TableFooter.js +1 -1
- package/build/esm/components/TableFooter/TableFooter.js.map +1 -1
- package/build/esm/components/TableHeader/TableHeader.d.ts +1 -1
- package/build/esm/components/TableHeader/TableHeader.js +3 -4
- package/build/esm/components/TableHeader/TableHeader.js.map +1 -1
- package/build/esm/components/TableHeaderCell/TableHeaderCell.d.ts +0 -1
- package/build/esm/components/TableHeaderCell/TableHeaderCell.js +13 -15
- package/build/esm/components/TableHeaderCell/TableHeaderCell.js.map +1 -1
- package/build/esm/components/TableHeaderCell/TableHeaderCellProps.d.ts +1 -1
- package/build/esm/components/TableHeaderCell/TableHeaderCellStyles.js +3 -6
- package/build/esm/components/TableHeaderCell/TableHeaderCellStyles.js.map +1 -1
- package/build/esm/components/TableHeaderCell/index.d.ts +1 -1
- package/build/esm/components/TableHeaderRow/TableHeaderRow.d.ts +1 -1
- package/build/esm/components/TableHeaderRow/TableHeaderRow.js +3 -4
- package/build/esm/components/TableHeaderRow/TableHeaderRow.js.map +1 -1
- package/build/esm/components/TableRow/TableRow.d.ts +1 -1
- package/build/esm/components/TableRow/TableRow.js +4 -5
- package/build/esm/components/TableRow/TableRow.js.map +1 -1
- package/build/esm/components/TableRow/TableRowStyles.js +4 -4
- package/build/esm/components/TableRow/TableRowStyles.js.map +1 -1
- package/build/esm/components/index.d.ts +6 -3
- package/build/esm/hooks/useColumnFilters.d.ts +1 -1
- package/build/esm/hooks/useColumnFilters.js +33 -35
- package/build/esm/hooks/useColumnFilters.js.map +1 -1
- package/build/esm/hooks/useStagedColumnFilters.js +22 -27
- package/build/esm/hooks/useStagedColumnFilters.js.map +1 -1
- package/build/esm/index.js +2 -2
- package/build/esm/util/coercedValueIncludesString.js +2 -2
- package/build/esm/util/coercedValueIncludesString.js.map +1 -1
- package/build/esm/util/getTableMinHeight.js +11 -11
- package/build/esm/util/getTableMinHeight.js.map +1 -1
- package/build/esm/util/tableConstants.js +1 -1
- package/build/esm/util/tableConstants.js.map +1 -1
- package/build/esm/util/validateRowAction.js +5 -5
- package/build/esm/util/validateRowAction.js.map +1 -1
- package/package.json +3 -2
package/build/cjs/index.js
CHANGED
|
@@ -1,113 +1,252 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var tslib = require('tslib');
|
|
4
3
|
var React = require('react');
|
|
5
4
|
var core = require('@material-ui/core');
|
|
6
|
-
var lab = require('@material-ui/lab');
|
|
7
5
|
var commonUi = require('@popmenu/common-ui');
|
|
8
|
-
var reactTable = require('@tanstack/react-table');
|
|
9
6
|
var webIcons = require('@popmenu/web-icons');
|
|
7
|
+
var lab = require('@material-ui/lab');
|
|
8
|
+
var reactTable = require('@tanstack/react-table');
|
|
10
9
|
var adminUi = require('@popmenu/admin-ui');
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
root:
|
|
14
|
-
'
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
11
|
+
const useStyles$6 = core.makeStyles({
|
|
12
|
+
root: {
|
|
13
|
+
justifySelf: 'start',
|
|
14
|
+
maxWidth: 300,
|
|
15
|
+
minWidth: 200,
|
|
16
|
+
width: '100%',
|
|
17
|
+
gridArea: 'globalFilter',
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const GlobalFilter = (props) => {
|
|
22
|
+
const { value, setValue, ...restProps } = props;
|
|
23
|
+
const classes = useStyles$6();
|
|
24
|
+
const handleChange = (e) => {
|
|
25
|
+
setValue(e.target.value);
|
|
26
|
+
};
|
|
27
|
+
return (React.createElement(core.TextField, { className: classes.root, variant: "outlined", value: value, onChange: handleChange, InputProps: {
|
|
28
|
+
startAdornment: (React.createElement(core.InputAdornment, { position: "start" },
|
|
29
|
+
React.createElement(commonUi.Icon, { icon: webIcons.Search }))),
|
|
30
|
+
}, ...restProps }));
|
|
31
|
+
};
|
|
19
32
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
33
|
+
const validateAction = (action) => {
|
|
34
|
+
const { icon, label, onClick } = action;
|
|
35
|
+
const onClickIsValid = typeof onClick === 'function';
|
|
36
|
+
const labelIsValid = typeof label === 'string';
|
|
37
|
+
const iconIsValid = icon && React.isValidElement(React.createElement(icon));
|
|
38
|
+
return onClickIsValid && labelIsValid && iconIsValid;
|
|
24
39
|
};
|
|
25
40
|
|
|
26
|
-
|
|
41
|
+
const RowActions = (props) => {
|
|
42
|
+
const { context, actions } = props;
|
|
43
|
+
const validActions = actions.filter(validateAction);
|
|
44
|
+
const [anchorEl, setAnchorEl] = React.useState(null);
|
|
45
|
+
const openMenu = (event) => {
|
|
46
|
+
setAnchorEl(event.currentTarget);
|
|
47
|
+
};
|
|
48
|
+
const closeMenu = () => {
|
|
49
|
+
setAnchorEl(null);
|
|
50
|
+
};
|
|
51
|
+
const actionsCount = validActions.length;
|
|
52
|
+
let mainActions;
|
|
53
|
+
let overflowActions;
|
|
54
|
+
if (actionsCount <= 3) {
|
|
55
|
+
mainActions = validActions;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const [firstAction, secondAction, ...restActions] = validActions;
|
|
59
|
+
mainActions = [firstAction, secondAction];
|
|
60
|
+
overflowActions = restActions;
|
|
61
|
+
}
|
|
62
|
+
return (React.createElement(commonUi.Box, { display: "flex" },
|
|
63
|
+
mainActions.map(({ label, onClick, icon, ...restProps }) => (React.createElement(commonUi.Tooltip, { title: label, key: label },
|
|
64
|
+
React.createElement(commonUi.IconButton, { size: "small", onClick: () => onClick(context), ...restProps },
|
|
65
|
+
React.createElement(commonUi.Icon, { icon: icon }))))),
|
|
66
|
+
overflowActions && (React.createElement(React.Fragment, null,
|
|
67
|
+
React.createElement(commonUi.IconButton, { size: "small", onClick: openMenu },
|
|
68
|
+
React.createElement(commonUi.Icon, { icon: webIcons.More })),
|
|
69
|
+
React.createElement(commonUi.Menu, { anchorEl: anchorEl, open: Boolean(anchorEl), onClose: closeMenu }, overflowActions.map((action) => (React.createElement(commonUi.MenuItem, { key: action.label, onClick: () => action.onClick(context) }, action.label))))))));
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const useColumnFilters = (table) => {
|
|
73
|
+
const selectedColumnFilters = getSelectedColumnFilters(table.getState());
|
|
74
|
+
const columnFilters = getColumnFilters(table.getAllFlatColumns());
|
|
75
|
+
const hasColumnFilters = columnFilters.length > 0;
|
|
76
|
+
const deselectColumnFilter = makeDeselectColumnFilter(table);
|
|
77
|
+
const formatSelectedFilterText = makeFormatSelectedFilterText(table);
|
|
78
|
+
const resetColumnFilters = table.resetColumnFilters;
|
|
79
|
+
return {
|
|
80
|
+
selectedColumnFilters,
|
|
81
|
+
columnFilters,
|
|
82
|
+
hasColumnFilters,
|
|
83
|
+
deselectColumnFilter,
|
|
84
|
+
formatSelectedFilterText,
|
|
85
|
+
resetColumnFilters,
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
function getSelectedColumnFilters(state) {
|
|
89
|
+
const { columnFilters } = state;
|
|
90
|
+
const selectedColumnFilters = columnFilters.reduce((acc, columnFilter) => {
|
|
91
|
+
const { id, value } = columnFilter;
|
|
92
|
+
const selections = [];
|
|
93
|
+
if (value) {
|
|
94
|
+
if (Array.isArray(value)) {
|
|
95
|
+
value.forEach((innerValue) => {
|
|
96
|
+
selections.push({ id, value: innerValue });
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
else if (typeof value === 'string' || typeof value === 'number') {
|
|
100
|
+
selections.push({ id, value });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return [...acc, ...selections];
|
|
104
|
+
}, []);
|
|
105
|
+
return selectedColumnFilters;
|
|
106
|
+
}
|
|
107
|
+
function getColumnFilters(columns) {
|
|
108
|
+
return columns
|
|
109
|
+
.map((column) => {
|
|
110
|
+
const { meta } = column.columnDef;
|
|
111
|
+
if (meta?.filter) {
|
|
112
|
+
return { columnId: column.id, ...meta.filter };
|
|
113
|
+
}
|
|
114
|
+
})
|
|
115
|
+
.filter(Boolean);
|
|
116
|
+
}
|
|
117
|
+
function makeDeselectColumnFilter(table) {
|
|
118
|
+
return function (columnFilter) {
|
|
119
|
+
const column = table.getColumn(columnFilter.id);
|
|
120
|
+
column.setFilterValue((prev) => {
|
|
121
|
+
if (Array.isArray(prev)) {
|
|
122
|
+
return prev.filter((value) => value !== columnFilter.value);
|
|
123
|
+
}
|
|
124
|
+
else if (typeof prev === 'string' || typeof prev === 'number') {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
return prev;
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function makeFormatSelectedFilterText(table) {
|
|
132
|
+
return function (columnFilter) {
|
|
133
|
+
const column = table.getColumn(columnFilter.id);
|
|
134
|
+
const { meta } = column.columnDef;
|
|
135
|
+
const name = meta?.filter.name || '';
|
|
136
|
+
const optionMatch = meta?.filter.options.find((option) => option.value === columnFilter.value);
|
|
137
|
+
const label = optionMatch?.label;
|
|
138
|
+
return [name, label];
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const useStagedColumnFilters = (selectedColumnFilters) => {
|
|
143
|
+
const [columnInputValues, setColumnInputValues] = React.useState(() => selectedColumnFilters.reduce((acc, { id, value }) => {
|
|
144
|
+
if (acc.has(id)) {
|
|
145
|
+
const existingValue = acc.get(id);
|
|
146
|
+
// If the existing value is a string, convert it to an array and add the new value
|
|
147
|
+
if (typeof existingValue === 'string') {
|
|
148
|
+
acc.set(id, [existingValue, value]);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
existingValue.push(value);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
acc.set(id, value);
|
|
156
|
+
}
|
|
157
|
+
return acc;
|
|
158
|
+
}, new Map()));
|
|
159
|
+
const filterState = {
|
|
160
|
+
update: (columnId, value) => setColumnInputValues(columnInputValues.set(columnId, value)),
|
|
161
|
+
get: (columnId) => columnInputValues.get(columnId),
|
|
162
|
+
clear: () => {
|
|
163
|
+
columnInputValues.clear();
|
|
164
|
+
setColumnInputValues(columnInputValues);
|
|
165
|
+
},
|
|
166
|
+
delete: (columnFilter) => {
|
|
167
|
+
const values = columnInputValues.get(columnFilter.id);
|
|
168
|
+
if (values && Array.isArray(values)) {
|
|
169
|
+
const valueIndex = values.indexOf(columnFilter.value);
|
|
170
|
+
values.splice(valueIndex, 1);
|
|
171
|
+
if (values.length > 0) {
|
|
172
|
+
columnInputValues.set(columnFilter.id, values);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
columnInputValues.delete(columnFilter.id);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
columnInputValues.delete(columnFilter.id);
|
|
180
|
+
}
|
|
181
|
+
setColumnInputValues(columnInputValues);
|
|
182
|
+
},
|
|
183
|
+
exist: () => columnInputValues.size > 0,
|
|
184
|
+
};
|
|
185
|
+
return filterState;
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
const tableConstants = {
|
|
27
189
|
tableTypography: 'body1',
|
|
28
190
|
cellPaddingFactor: 2};
|
|
29
191
|
|
|
30
|
-
|
|
192
|
+
const coercedValueIncludesString = (row, columnId, value) => {
|
|
31
193
|
if (value === '')
|
|
32
194
|
return true;
|
|
33
|
-
|
|
195
|
+
const cellValue = row.getValue(columnId);
|
|
34
196
|
return String(cellValue).toLowerCase().includes(value.toLowerCase());
|
|
35
197
|
};
|
|
36
198
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (rootRef
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
199
|
+
const getTableMinHeight = (rootRef, pageSize) => {
|
|
200
|
+
const defaultBodyRowHeight = 56;
|
|
201
|
+
const defaultHeaderRowHeight = 57;
|
|
202
|
+
const defaultFooterHeight = 88;
|
|
203
|
+
let minHeight = defaultBodyRowHeight * pageSize + defaultHeaderRowHeight + defaultFooterHeight;
|
|
204
|
+
if (rootRef?.current) {
|
|
205
|
+
const rootTableNode = rootRef.current;
|
|
206
|
+
const headerRowNode = rootTableNode.querySelector(`[data-table-element="header-row"]`);
|
|
207
|
+
const bodyRowNode = rootTableNode.querySelector(`[data-table-element="body-row"]`);
|
|
46
208
|
if (headerRowNode && bodyRowNode) {
|
|
47
|
-
|
|
48
|
-
|
|
209
|
+
const headerRowHeight = headerRowNode.getBoundingClientRect().height;
|
|
210
|
+
const bodyRowHeight = bodyRowNode.getBoundingClientRect().height;
|
|
49
211
|
minHeight = headerRowHeight + bodyRowHeight * pageSize + defaultFooterHeight;
|
|
50
212
|
}
|
|
51
213
|
}
|
|
52
214
|
return minHeight;
|
|
53
215
|
};
|
|
54
216
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
var root = useTableCellStyles(props).root;
|
|
64
|
-
return (React.createElement("td", tslib.__assign({ className: root }, restProps), children));
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
var TableBody = function (props) {
|
|
68
|
-
var children = props.children, restProps = tslib.__rest(props, ["children"]);
|
|
69
|
-
return React.createElement("tbody", tslib.__assign({}, restProps), children);
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
var useStyles$6 = core.makeStyles(function (_a) {
|
|
73
|
-
var typography = _a.typography;
|
|
74
|
-
return ({
|
|
75
|
-
root: function (_a) {
|
|
76
|
-
var fullWidth = _a.fullWidth;
|
|
77
|
-
return ({
|
|
78
|
-
display: fullWidth ? 'flex' : 'inline-flex',
|
|
79
|
-
flexDirection: 'column',
|
|
80
|
-
});
|
|
81
|
-
},
|
|
82
|
-
table: function (_a) {
|
|
83
|
-
var fullWidth = _a.fullWidth;
|
|
84
|
-
return (tslib.__assign(tslib.__assign({ borderCollapse: 'collapse' }, (fullWidth && { width: '100%' })), typography[tableConstants.tableTypography]));
|
|
85
|
-
},
|
|
86
|
-
tableContainer: function () { return ({
|
|
87
|
-
maxWidth: '100%',
|
|
88
|
-
overflowX: 'auto',
|
|
89
|
-
overflowY: 'hidden',
|
|
90
|
-
}); },
|
|
91
|
-
});
|
|
217
|
+
const useStyles$5 = core.makeStyles({
|
|
218
|
+
chip: {
|
|
219
|
+
overflow: 'visible',
|
|
220
|
+
height: 'auto',
|
|
221
|
+
},
|
|
222
|
+
label: {
|
|
223
|
+
whiteSpace: 'normal',
|
|
224
|
+
},
|
|
92
225
|
});
|
|
93
226
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
227
|
+
const ColumnFilterChip = (props) => {
|
|
228
|
+
const { columnFilter, onClick, label } = props;
|
|
229
|
+
const classes = useStyles$5();
|
|
230
|
+
return (React.createElement(commonUi.Chip, { className: classes.chip, onDelete: () => onClick(columnFilter), label: React.createElement(commonUi.Box, { display: "flex", gridGap: 4, flexWrap: "wrap" },
|
|
231
|
+
React.createElement(commonUi.Typography, null,
|
|
232
|
+
label[0],
|
|
233
|
+
":"),
|
|
234
|
+
React.createElement(commonUi.Typography, { className: classes.label, weight: "semi-bold", component: 'span' }, label[1])) }));
|
|
97
235
|
};
|
|
98
236
|
|
|
99
|
-
|
|
100
|
-
|
|
237
|
+
const ColumnFilterResetButton = (props) => {
|
|
238
|
+
const { children = 'Clear All', ...restProps } = props;
|
|
239
|
+
return (React.createElement(adminUi.Button, { variant: "text", textTransform: "none", ...restProps }, children));
|
|
101
240
|
};
|
|
102
241
|
|
|
103
|
-
|
|
242
|
+
const useStyles$4 = core.makeStyles((theme) => ({
|
|
104
243
|
buttonBox: {
|
|
105
244
|
'& > :last-child': {
|
|
106
245
|
marginLeft: theme.spacing(2),
|
|
107
246
|
},
|
|
108
247
|
display: 'flex',
|
|
109
248
|
justifyContent: 'flex-end',
|
|
110
|
-
padding:
|
|
249
|
+
padding: `0px ${theme.spacing(3)}px ${theme.spacing(3)}px ${theme.spacing(3)}px`,
|
|
111
250
|
},
|
|
112
251
|
buttonLabel: {
|
|
113
252
|
fontWeight: 400,
|
|
@@ -152,9 +291,20 @@ var useStyles$5 = core.makeStyles(function (theme) { return ({
|
|
|
152
291
|
selectInput: {
|
|
153
292
|
margin: '8px 0',
|
|
154
293
|
},
|
|
155
|
-
})
|
|
294
|
+
}));
|
|
295
|
+
|
|
296
|
+
const TableContext = React.createContext({});
|
|
297
|
+
|
|
298
|
+
const FilterPanelContext = React.createContext(null);
|
|
299
|
+
const useFilterPanelContext = () => {
|
|
300
|
+
const context = React.useContext(FilterPanelContext);
|
|
301
|
+
if (!context) {
|
|
302
|
+
throw new Error('useFilterPanelContext has to be used within <FilterPanelContext.Provider>');
|
|
303
|
+
}
|
|
304
|
+
return context;
|
|
305
|
+
};
|
|
156
306
|
|
|
157
|
-
|
|
307
|
+
const useStyles$3 = core.makeStyles((theme) => ({
|
|
158
308
|
icon: {
|
|
159
309
|
marginRight: theme.spacing(1.5),
|
|
160
310
|
marginTop: theme.spacing(0.5),
|
|
@@ -171,64 +321,52 @@ var useStyles$4 = core.makeStyles(function (theme) { return ({
|
|
|
171
321
|
hidden: {
|
|
172
322
|
display: 'none',
|
|
173
323
|
},
|
|
174
|
-
})
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
var SelectFilter = function (props) {
|
|
188
|
-
var _a, _b, _c;
|
|
189
|
-
var options = props.options, columnId = props.columnId, multiple = props.multiple;
|
|
190
|
-
var classes = useStyles$4();
|
|
191
|
-
var _d = React.useContext(TableContext), table = _d.table, stagedColumnFilters = _d.stagedColumnFilters, stageFilterSelections = _d.stageFilterSelections;
|
|
192
|
-
var _e = React.useState(false), open = _e[0], setOpen = _e[1];
|
|
193
|
-
var _f = useFilterPanelContext().anchorState, setAnchorEl = _f[1];
|
|
194
|
-
var column = table.getColumn(columnId);
|
|
195
|
-
var meta = column.columnDef.meta;
|
|
196
|
-
var filterName = (_a = meta === null || meta === void 0 ? void 0 : meta.filter) === null || _a === void 0 ? void 0 : _a.name;
|
|
197
|
-
var value = '';
|
|
324
|
+
}));
|
|
325
|
+
|
|
326
|
+
const SelectFilter = (props) => {
|
|
327
|
+
const { options, columnId, multiple } = props;
|
|
328
|
+
const classes = useStyles$3();
|
|
329
|
+
const { table, stagedColumnFilters, stageFilterSelections } = React.useContext(TableContext);
|
|
330
|
+
const [open, setOpen] = React.useState(false);
|
|
331
|
+
const { anchorState: [, setAnchorEl], } = useFilterPanelContext();
|
|
332
|
+
const column = table.getColumn(columnId);
|
|
333
|
+
const { meta } = column.columnDef;
|
|
334
|
+
const filterName = meta?.filter?.name;
|
|
335
|
+
let value = '';
|
|
198
336
|
if (stageFilterSelections && !!stagedColumnFilters.get(columnId)) {
|
|
199
337
|
value = stagedColumnFilters.get(columnId);
|
|
200
338
|
}
|
|
201
339
|
else {
|
|
202
340
|
value = column.getFilterValue();
|
|
203
341
|
}
|
|
204
|
-
|
|
205
|
-
|
|
342
|
+
const fallbackValue = multiple ? [] : '';
|
|
343
|
+
const filteredOptions = options.map((option) => {
|
|
206
344
|
if (Array.isArray(value)) {
|
|
207
345
|
if (value.includes(option.value)) {
|
|
208
|
-
return
|
|
346
|
+
return { ...option, hide: !stageFilterSelections };
|
|
209
347
|
}
|
|
210
348
|
}
|
|
211
349
|
if (typeof value === 'string' || typeof value === 'number') {
|
|
212
350
|
if (value === option.value) {
|
|
213
|
-
return
|
|
351
|
+
return { ...option, hide: !stageFilterSelections };
|
|
214
352
|
}
|
|
215
353
|
}
|
|
216
|
-
return
|
|
354
|
+
return { ...option, hide: false };
|
|
217
355
|
});
|
|
218
|
-
|
|
219
|
-
|
|
356
|
+
const filteredOptionsCount = filteredOptions.filter((option) => !option?.hide).length;
|
|
357
|
+
let renderedValue = '';
|
|
220
358
|
if (!stageFilterSelections && value && filteredOptions && filteredOptionsCount > 0) {
|
|
221
359
|
if (typeof value === 'string' || typeof value === 'number') {
|
|
222
|
-
renderedValue =
|
|
360
|
+
renderedValue = filteredOptions.find((option) => option.value === value)?.label ?? filterName;
|
|
223
361
|
}
|
|
224
362
|
else if (Array.isArray(value) && value.length > 0) {
|
|
225
|
-
renderedValue = value.length
|
|
363
|
+
renderedValue = `${value.length} selected`;
|
|
226
364
|
}
|
|
227
365
|
else {
|
|
228
366
|
renderedValue = filterName;
|
|
229
367
|
}
|
|
230
368
|
}
|
|
231
|
-
|
|
369
|
+
const handleChange = (event) => {
|
|
232
370
|
event.stopPropagation();
|
|
233
371
|
if (stageFilterSelections) {
|
|
234
372
|
stagedColumnFilters.update(columnId, event.target.value);
|
|
@@ -238,7 +376,7 @@ var SelectFilter = function (props) {
|
|
|
238
376
|
setAnchorEl(null);
|
|
239
377
|
}
|
|
240
378
|
};
|
|
241
|
-
|
|
379
|
+
const handleItemClick = () => {
|
|
242
380
|
if (multiple) {
|
|
243
381
|
if (!stageFilterSelections && filteredOptionsCount === 1) {
|
|
244
382
|
setOpen(false);
|
|
@@ -250,8 +388,8 @@ var SelectFilter = function (props) {
|
|
|
250
388
|
};
|
|
251
389
|
return (React.createElement(core.Box, { className: classes.selectContainer },
|
|
252
390
|
React.createElement(core.FormControl, { variant: "outlined", fullWidth: true },
|
|
253
|
-
React.createElement(core.InputLabel, { id:
|
|
254
|
-
React.createElement(core.Select, { variant: "outlined", open: open, onOpen:
|
|
391
|
+
React.createElement(core.InputLabel, { id: `select-filter-label-${filterName}` }, filterName || 'filter'),
|
|
392
|
+
React.createElement(core.Select, { variant: "outlined", open: open, onOpen: () => setOpen(true), onClose: () => setOpen(false), value: value || fallbackValue, displayEmpty: true, multiple: multiple, renderValue: stageFilterSelections ? undefined : () => React.createElement(commonUi.Typography, null, renderedValue), label: filterName || 'filter', labelId: `select-filter-label-${filterName}`, disabled: !filteredOptionsCount, IconComponent: webIcons.ChevronDown, onChange: handleChange, fullWidth: true, classes: {
|
|
255
393
|
root: classes.selectRoot,
|
|
256
394
|
icon: classes.icon,
|
|
257
395
|
}, MenuProps: {
|
|
@@ -265,188 +403,66 @@ var SelectFilter = function (props) {
|
|
|
265
403
|
horizontal: 'left',
|
|
266
404
|
},
|
|
267
405
|
getContentAnchorEl: null,
|
|
268
|
-
} }, filteredOptions.map(
|
|
269
|
-
return (React.createElement(commonUi.MenuItem, { classes: { root: option.hide ? classes.hidden : undefined }, key:
|
|
406
|
+
} }, filteredOptions.map((option, index) => {
|
|
407
|
+
return (React.createElement(commonUi.MenuItem, { classes: { root: option.hide ? classes.hidden : undefined }, key: `option-${value}-${index}`, value: option.value, onClick: handleItemClick }, option.label));
|
|
270
408
|
})))));
|
|
271
409
|
};
|
|
272
410
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
411
|
+
const ToggleFilter = (props) => {
|
|
412
|
+
const table = React.useContext(TableContext).table;
|
|
413
|
+
const { columnId } = props;
|
|
414
|
+
const column = table.getColumn(columnId);
|
|
415
|
+
const meta = column.columnDef.meta;
|
|
416
|
+
const filterName = meta.filter.name;
|
|
417
|
+
const value = column.getFilterValue();
|
|
418
|
+
const handleChange = (event, checked) => {
|
|
281
419
|
event.stopPropagation();
|
|
282
420
|
column.setFilterValue(checked);
|
|
283
421
|
};
|
|
284
422
|
return React.createElement(core.FormControlLabel, { control: React.createElement(core.Switch, { checked: value, onChange: handleChange }), label: filterName });
|
|
285
423
|
};
|
|
286
424
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
425
|
+
const FilterControl = (props) => {
|
|
426
|
+
const { input, ...columnFilter } = props;
|
|
427
|
+
const inputDictionary = {
|
|
290
428
|
text: core.TextField,
|
|
291
429
|
select: SelectFilter,
|
|
292
430
|
'multi-select': SelectFilter,
|
|
293
431
|
toggle: ToggleFilter,
|
|
294
432
|
};
|
|
295
|
-
|
|
433
|
+
const propsDictionary = {
|
|
296
434
|
select: { multiple: false },
|
|
297
435
|
'multi-select': { multiple: true },
|
|
298
436
|
};
|
|
299
437
|
// @ts-expect-error - todo.
|
|
300
|
-
return React.createElement("div", null, React.createElement(inputDictionary[input],
|
|
438
|
+
return React.createElement("div", null, React.createElement(inputDictionary[input], { ...columnFilter, ...propsDictionary[input] }));
|
|
301
439
|
};
|
|
302
440
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
selectedColumnFilters: selectedColumnFilters,
|
|
312
|
-
columnFilters: columnFilters,
|
|
313
|
-
hasColumnFilters: hasColumnFilters,
|
|
314
|
-
deselectColumnFilter: deselectColumnFilter,
|
|
315
|
-
formatSelectedFilterText: formatSelectedFilterText,
|
|
316
|
-
resetColumnFilters: resetColumnFilters,
|
|
317
|
-
};
|
|
318
|
-
};
|
|
319
|
-
function getSelectedColumnFilters(state) {
|
|
320
|
-
var columnFilters = state.columnFilters;
|
|
321
|
-
var selectedColumnFilters = columnFilters.reduce(function (acc, columnFilter) {
|
|
322
|
-
var id = columnFilter.id, value = columnFilter.value;
|
|
323
|
-
var selections = [];
|
|
324
|
-
if (value) {
|
|
325
|
-
if (Array.isArray(value)) {
|
|
326
|
-
value.forEach(function (innerValue) {
|
|
327
|
-
selections.push({ id: id, value: innerValue });
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
else if (typeof value === 'string' || typeof value === 'number') {
|
|
331
|
-
selections.push({ id: id, value: value });
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
return tslib.__spreadArray(tslib.__spreadArray([], acc), selections);
|
|
335
|
-
}, []);
|
|
336
|
-
return selectedColumnFilters;
|
|
337
|
-
}
|
|
338
|
-
function getColumnFilters(columns) {
|
|
339
|
-
return columns
|
|
340
|
-
.map(function (column) {
|
|
341
|
-
var meta = column.columnDef.meta;
|
|
342
|
-
if (meta === null || meta === void 0 ? void 0 : meta.filter) {
|
|
343
|
-
return tslib.__assign({ columnId: column.id }, meta.filter);
|
|
344
|
-
}
|
|
345
|
-
})
|
|
346
|
-
.filter(Boolean);
|
|
347
|
-
}
|
|
348
|
-
function makeDeselectColumnFilter(table) {
|
|
349
|
-
return function (columnFilter) {
|
|
350
|
-
var column = table.getColumn(columnFilter.id);
|
|
351
|
-
column.setFilterValue(function (prev) {
|
|
352
|
-
if (Array.isArray(prev)) {
|
|
353
|
-
return prev.filter(function (value) { return value !== columnFilter.value; });
|
|
354
|
-
}
|
|
355
|
-
else if (typeof prev === 'string' || typeof prev === 'number') {
|
|
356
|
-
return null;
|
|
357
|
-
}
|
|
358
|
-
return prev;
|
|
359
|
-
});
|
|
360
|
-
};
|
|
361
|
-
}
|
|
362
|
-
function makeFormatSelectedFilterText(table) {
|
|
363
|
-
return function (columnFilter) {
|
|
364
|
-
var column = table.getColumn(columnFilter.id);
|
|
365
|
-
var meta = column.columnDef.meta;
|
|
366
|
-
var name = (meta === null || meta === void 0 ? void 0 : meta.filter.name) || '';
|
|
367
|
-
var optionMatch = meta === null || meta === void 0 ? void 0 : meta.filter.options.find(function (option) { return option.value === columnFilter.value; });
|
|
368
|
-
var label = optionMatch === null || optionMatch === void 0 ? void 0 : optionMatch.label;
|
|
369
|
-
return [name, label];
|
|
370
|
-
};
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
var useStagedColumnFilters = function (selectedColumnFilters) {
|
|
374
|
-
var _a = React.useState(function () {
|
|
375
|
-
return selectedColumnFilters.reduce(function (acc, _a) {
|
|
376
|
-
var id = _a.id, value = _a.value;
|
|
377
|
-
if (acc.has(id)) {
|
|
378
|
-
var existingValue = acc.get(id);
|
|
379
|
-
// If the existing value is a string, convert it to an array and add the new value
|
|
380
|
-
if (typeof existingValue === 'string') {
|
|
381
|
-
acc.set(id, [existingValue, value]);
|
|
382
|
-
}
|
|
383
|
-
else {
|
|
384
|
-
existingValue.push(value);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
else {
|
|
388
|
-
acc.set(id, value);
|
|
389
|
-
}
|
|
390
|
-
return acc;
|
|
391
|
-
}, new Map());
|
|
392
|
-
}), columnInputValues = _a[0], setColumnInputValues = _a[1];
|
|
393
|
-
var filterState = {
|
|
394
|
-
update: function (columnId, value) {
|
|
395
|
-
return setColumnInputValues(columnInputValues.set(columnId, value));
|
|
396
|
-
},
|
|
397
|
-
get: function (columnId) { return columnInputValues.get(columnId); },
|
|
398
|
-
clear: function () {
|
|
399
|
-
columnInputValues.clear();
|
|
400
|
-
setColumnInputValues(columnInputValues);
|
|
401
|
-
},
|
|
402
|
-
delete: function (columnFilter) {
|
|
403
|
-
var values = columnInputValues.get(columnFilter.id);
|
|
404
|
-
if (values && Array.isArray(values)) {
|
|
405
|
-
var valueIndex = values.indexOf(columnFilter.value);
|
|
406
|
-
values.splice(valueIndex, 1);
|
|
407
|
-
if (values.length > 0) {
|
|
408
|
-
columnInputValues.set(columnFilter.id, values);
|
|
409
|
-
}
|
|
410
|
-
else {
|
|
411
|
-
columnInputValues.delete(columnFilter.id);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
else {
|
|
415
|
-
columnInputValues.delete(columnFilter.id);
|
|
416
|
-
}
|
|
417
|
-
setColumnInputValues(columnInputValues);
|
|
418
|
-
},
|
|
419
|
-
exist: function () { return columnInputValues.size > 0; },
|
|
420
|
-
};
|
|
421
|
-
return filterState;
|
|
422
|
-
};
|
|
423
|
-
|
|
424
|
-
var Panel = function (props) {
|
|
425
|
-
var anchorEl = props.anchorEl, onClose = props.onClose;
|
|
426
|
-
var classes = useStyles$5();
|
|
427
|
-
var _a = React.useContext(TableContext), table = _a.table, stagedColumnFilters = _a.stagedColumnFilters, stageFilterSelections = _a.stageFilterSelections;
|
|
428
|
-
var paperRef = React.useRef(null);
|
|
429
|
-
var _b = useColumnFilters(table), columnFilters = _b.columnFilters, resetColumnFilters = _b.resetColumnFilters;
|
|
430
|
-
var handleClick = function (e) {
|
|
431
|
-
var _a;
|
|
432
|
-
var rect = (_a = paperRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
|
|
441
|
+
const Panel = (props) => {
|
|
442
|
+
const { anchorEl, onClose } = props;
|
|
443
|
+
const classes = useStyles$4();
|
|
444
|
+
const { table, stagedColumnFilters, stageFilterSelections } = React.useContext(TableContext);
|
|
445
|
+
const paperRef = React.useRef(null);
|
|
446
|
+
const { columnFilters, resetColumnFilters } = useColumnFilters(table);
|
|
447
|
+
const handleClick = (e) => {
|
|
448
|
+
const rect = paperRef.current?.getBoundingClientRect();
|
|
433
449
|
if (rect) {
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
450
|
+
const buffer = 10;
|
|
451
|
+
const mouseX = e.nativeEvent.x;
|
|
452
|
+
const mouseY = e.nativeEvent.y;
|
|
453
|
+
const xHit = rect.x - buffer < mouseX && mouseX < rect.x + rect.width + buffer;
|
|
454
|
+
const yHit = rect.y - buffer < mouseY && mouseY < rect.y + rect.height + buffer;
|
|
439
455
|
if (!xHit || !yHit) {
|
|
440
456
|
onClose();
|
|
441
457
|
}
|
|
442
458
|
}
|
|
443
459
|
};
|
|
444
|
-
|
|
460
|
+
const handleApplyClick = () => {
|
|
445
461
|
if (stagedColumnFilters.exist()) {
|
|
446
|
-
columnFilters.forEach(
|
|
447
|
-
|
|
462
|
+
columnFilters.forEach((columnFilter) => {
|
|
463
|
+
const columnInputValue = stagedColumnFilters.get(columnFilter.columnId);
|
|
448
464
|
if (columnInputValue) {
|
|
449
|
-
|
|
465
|
+
const column = table.getColumn(columnFilter.columnId);
|
|
450
466
|
column.setFilterValue(columnInputValue);
|
|
451
467
|
}
|
|
452
468
|
});
|
|
@@ -456,10 +472,10 @@ var Panel = function (props) {
|
|
|
456
472
|
}
|
|
457
473
|
onClose();
|
|
458
474
|
};
|
|
459
|
-
|
|
475
|
+
const handleCancelClick = () => {
|
|
460
476
|
onClose();
|
|
461
477
|
};
|
|
462
|
-
|
|
478
|
+
const open = Boolean(anchorEl);
|
|
463
479
|
return (React.createElement(commonUi.Popover, { onClick: handleClick, anchorEl: anchorEl, anchorOrigin: {
|
|
464
480
|
vertical: 'bottom',
|
|
465
481
|
horizontal: 'right',
|
|
@@ -474,34 +490,34 @@ var Panel = function (props) {
|
|
|
474
490
|
horizontal: 'right',
|
|
475
491
|
} },
|
|
476
492
|
React.createElement(commonUi.Paper, { className: classes.filterPopoverContents, elevation: 2 },
|
|
477
|
-
React.createElement(commonUi.Box,
|
|
493
|
+
React.createElement(commonUi.Box, { ref: paperRef, padding: 3 },
|
|
478
494
|
React.createElement(commonUi.Typography, { className: classes.menuTitle }, "Filter By"),
|
|
479
|
-
columnFilters.map(
|
|
495
|
+
columnFilters.map((columnFilter, i) => (React.createElement(FilterControl, { ...columnFilter, key: i })))),
|
|
480
496
|
stageFilterSelections && (React.createElement(commonUi.Box, { className: classes.buttonBox },
|
|
481
497
|
React.createElement(adminUi.Button, { variant: "secondary", onClick: handleCancelClick }, "Cancel"),
|
|
482
498
|
React.createElement(adminUi.Button, { onClick: handleApplyClick }, "Apply"))))));
|
|
483
499
|
};
|
|
484
500
|
|
|
485
|
-
|
|
501
|
+
const useStyles$2 = core.makeStyles({
|
|
486
502
|
root: {
|
|
487
503
|
justifySelf: 'end',
|
|
488
504
|
gridArea: 'columnFilter',
|
|
489
505
|
},
|
|
490
506
|
});
|
|
491
507
|
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
508
|
+
const Trigger = (props) => {
|
|
509
|
+
const { label = 'Filter', onClick } = props;
|
|
510
|
+
const classes = useStyles$2();
|
|
495
511
|
return (React.createElement(adminUi.Button, { className: classes.root, onClick: onClick, startIcon: React.createElement(commonUi.Icon, { icon: webIcons.Filter }), textTransform: "none", variant: "ghost" }, label));
|
|
496
512
|
};
|
|
497
513
|
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
514
|
+
const FilterPanel = () => {
|
|
515
|
+
const [anchorEl, setAnchorEl] = React.useState(null);
|
|
516
|
+
const { stageFilterSelections, stagedColumnFilters } = React.useContext(TableContext);
|
|
517
|
+
const handleClick = (event) => {
|
|
502
518
|
setAnchorEl(event.currentTarget);
|
|
503
519
|
};
|
|
504
|
-
|
|
520
|
+
const handleClose = () => {
|
|
505
521
|
if (stageFilterSelections)
|
|
506
522
|
stagedColumnFilters.clear();
|
|
507
523
|
setAnchorEl(null);
|
|
@@ -511,31 +527,75 @@ var FilterPanel = function () {
|
|
|
511
527
|
React.createElement(Panel, { onClose: handleClose, anchorEl: anchorEl })));
|
|
512
528
|
};
|
|
513
529
|
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
minWidth: 200,
|
|
519
|
-
width: '100%',
|
|
520
|
-
gridArea: 'globalFilter',
|
|
521
|
-
},
|
|
522
|
-
});
|
|
530
|
+
const TableBody = (props) => {
|
|
531
|
+
const { children, ...restProps } = props;
|
|
532
|
+
return React.createElement("tbody", { ...restProps }, children);
|
|
533
|
+
};
|
|
523
534
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
535
|
+
const useTableCellStyles = core.makeStyles((theme) => ({
|
|
536
|
+
root: () => ({
|
|
537
|
+
padding: theme.spacing(tableConstants.cellPaddingFactor),
|
|
538
|
+
}),
|
|
539
|
+
}));
|
|
540
|
+
|
|
541
|
+
const TableCell = (props) => {
|
|
542
|
+
const { children, ...restProps } = props;
|
|
543
|
+
const { root } = useTableCellStyles(props);
|
|
544
|
+
return (React.createElement("td", { className: root, ...restProps }, children));
|
|
545
|
+
};
|
|
546
|
+
|
|
547
|
+
const TableControlsContainer = (props) => {
|
|
548
|
+
const { showTitle, showGlobalSearch, showColumnFilter } = props;
|
|
549
|
+
let gridTemplateAreas;
|
|
550
|
+
switch (true) {
|
|
551
|
+
case showTitle && showGlobalSearch && showColumnFilter:
|
|
552
|
+
gridTemplateAreas = `
|
|
553
|
+
"title ."
|
|
554
|
+
"globalFilter columnFilter"
|
|
555
|
+
`;
|
|
556
|
+
break;
|
|
557
|
+
case showTitle && !showGlobalSearch && showColumnFilter:
|
|
558
|
+
gridTemplateAreas = `
|
|
559
|
+
"title columnFilter"
|
|
560
|
+
`;
|
|
561
|
+
break;
|
|
562
|
+
case !showTitle && showGlobalSearch && showColumnFilter:
|
|
563
|
+
gridTemplateAreas = `
|
|
564
|
+
"globalFilter columnFilter"
|
|
565
|
+
`;
|
|
566
|
+
break;
|
|
567
|
+
case showTitle && !showGlobalSearch && !showColumnFilter:
|
|
568
|
+
gridTemplateAreas = `
|
|
569
|
+
"title ."
|
|
570
|
+
`;
|
|
571
|
+
break;
|
|
572
|
+
case !showTitle && !showGlobalSearch && showColumnFilter:
|
|
573
|
+
gridTemplateAreas = `
|
|
574
|
+
". columnFilter"
|
|
575
|
+
`;
|
|
576
|
+
break;
|
|
577
|
+
case !showTitle && showGlobalSearch && !showColumnFilter:
|
|
578
|
+
gridTemplateAreas = `
|
|
579
|
+
"globalFilter ."
|
|
580
|
+
`;
|
|
581
|
+
break;
|
|
582
|
+
case showTitle && showGlobalSearch && !showColumnFilter:
|
|
583
|
+
gridTemplateAreas = `
|
|
584
|
+
"title ."
|
|
585
|
+
"globalFilter ."
|
|
586
|
+
`;
|
|
587
|
+
break;
|
|
588
|
+
}
|
|
589
|
+
return (React.createElement(core.Box, { display: "grid", gridTemplateColumns: "repeat(2, minmax(150px, 1fr))", gridTemplateAreas: gridTemplateAreas, gridGap: 16, marginBottom: 3 }, props.children));
|
|
534
590
|
};
|
|
535
591
|
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
592
|
+
const TableFooter = (props) => {
|
|
593
|
+
return (React.createElement(commonUi.Box, { display: "flex", justifyContent: "center", alignItems: "end", paddingTop: 3, paddingBottom: 4 }, props.children));
|
|
594
|
+
};
|
|
595
|
+
|
|
596
|
+
const TableHeader = (props) => {
|
|
597
|
+
const { children, ...restProps } = props;
|
|
598
|
+
return React.createElement("thead", { ...restProps }, children);
|
|
539
599
|
};
|
|
540
600
|
|
|
541
601
|
// const getWidth = (props: TableHeaderCellProps) => {
|
|
@@ -558,7 +618,7 @@ var TableHeaderRow = function (props) {
|
|
|
558
618
|
// }
|
|
559
619
|
// return width
|
|
560
620
|
// }
|
|
561
|
-
|
|
621
|
+
const useStyles$1 = core.makeStyles((theme) => ({
|
|
562
622
|
root: {
|
|
563
623
|
borderBottomStyle: 'solid',
|
|
564
624
|
borderBottomWidth: 2,
|
|
@@ -568,146 +628,146 @@ var useStyles$1 = core.makeStyles(function (theme) { return ({
|
|
|
568
628
|
fontWeight: 500,
|
|
569
629
|
},
|
|
570
630
|
box: {
|
|
571
|
-
cursor:
|
|
572
|
-
var sortable = _a.sortable;
|
|
573
|
-
return (sortable ? 'pointer' : 'default');
|
|
574
|
-
},
|
|
631
|
+
cursor: ({ sortable }) => (sortable ? 'pointer' : 'default'),
|
|
575
632
|
},
|
|
576
|
-
})
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
var sortIndicators = {
|
|
633
|
+
}));
|
|
634
|
+
|
|
635
|
+
const TableHeaderCell = (props) => {
|
|
636
|
+
const { children, context, ...restProps } = props;
|
|
637
|
+
const sortable = context.header.column.getCanSort();
|
|
638
|
+
const sorted = context.header.column.getIsSorted();
|
|
639
|
+
const handleSort = context.header.column.getToggleSortingHandler();
|
|
640
|
+
const classes = useStyles$1({ ...props, sortable });
|
|
641
|
+
const { spacing, palette } = core.useTheme();
|
|
642
|
+
const sortIndicators = {
|
|
587
643
|
asc: webIcons.ChevronUp,
|
|
588
644
|
desc: webIcons.ChevronDown,
|
|
589
645
|
};
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
? { 'data-tour-id':
|
|
646
|
+
const idBase = context.table.options.meta?.idBase;
|
|
647
|
+
const dataTourIdProps = idBase && sortable
|
|
648
|
+
? { 'data-tour-id': `sort-${idBase}-on-${context.header.column.id}`.toLowerCase().replace(/\s+/g, '-') }
|
|
593
649
|
: {};
|
|
594
|
-
return (React.createElement("th",
|
|
595
|
-
React.createElement(commonUi.Box,
|
|
650
|
+
return (React.createElement("th", { className: classes.root, ...restProps },
|
|
651
|
+
React.createElement(commonUi.Box, { className: classes.box, display: "flex", alignItems: "center", gridGap: spacing(1), onClick: handleSort, ...dataTourIdProps },
|
|
596
652
|
children,
|
|
597
653
|
sortable && !sorted && React.createElement(commonUi.Icon, { icon: webIcons.Sort, color: palette.grey[500] }),
|
|
598
654
|
sortable && sorted && React.createElement(commonUi.Icon, { icon: sortIndicators[sorted] }))));
|
|
599
655
|
};
|
|
600
656
|
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
height: 'auto',
|
|
605
|
-
},
|
|
606
|
-
label: {
|
|
607
|
-
whiteSpace: 'normal',
|
|
608
|
-
},
|
|
609
|
-
});
|
|
610
|
-
|
|
611
|
-
var ColumnFilterChip = function (props) {
|
|
612
|
-
var columnFilter = props.columnFilter, onClick = props.onClick, label = props.label;
|
|
613
|
-
var classes = useStyles();
|
|
614
|
-
return (React.createElement(commonUi.Chip, { className: classes.chip, onDelete: function () { return onClick(columnFilter); }, label: React.createElement(commonUi.Box, { display: "flex", gridGap: 4, flexWrap: "wrap" },
|
|
615
|
-
React.createElement(commonUi.Typography, null,
|
|
616
|
-
label[0],
|
|
617
|
-
":"),
|
|
618
|
-
React.createElement(commonUi.Typography, tslib.__assign({ className: classes.label, weight: "semi-bold" }, { component: 'span' }), label[1])) }));
|
|
657
|
+
const TableHeaderRow = (props) => {
|
|
658
|
+
const { children, ...restProps } = props;
|
|
659
|
+
return (React.createElement("tr", { "data-table-element": 'header-row', ...restProps }, children));
|
|
619
660
|
};
|
|
620
661
|
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
case showTitle && !showGlobalSearch && showColumnFilter:
|
|
629
|
-
gridTemplateAreas = "\n \"title columnFilter\"\n ";
|
|
630
|
-
break;
|
|
631
|
-
case !showTitle && showGlobalSearch && showColumnFilter:
|
|
632
|
-
gridTemplateAreas = "\n \"globalFilter columnFilter\"\n ";
|
|
633
|
-
break;
|
|
634
|
-
case showTitle && !showGlobalSearch && !showColumnFilter:
|
|
635
|
-
gridTemplateAreas = "\n \"title .\"\n ";
|
|
636
|
-
break;
|
|
637
|
-
case !showTitle && !showGlobalSearch && showColumnFilter:
|
|
638
|
-
gridTemplateAreas = "\n \". columnFilter\"\n ";
|
|
639
|
-
break;
|
|
640
|
-
case !showTitle && showGlobalSearch && !showColumnFilter:
|
|
641
|
-
gridTemplateAreas = "\n \"globalFilter .\"\n ";
|
|
642
|
-
break;
|
|
643
|
-
case showTitle && showGlobalSearch && !showColumnFilter:
|
|
644
|
-
gridTemplateAreas = "\n \"title .\"\n \"globalFilter .\"\n ";
|
|
645
|
-
break;
|
|
646
|
-
}
|
|
647
|
-
return (React.createElement(core.Box, { display: "grid", gridTemplateColumns: "repeat(2, minmax(150px, 1fr))", gridTemplateAreas: gridTemplateAreas, gridGap: 16, marginBottom: 3 }, props.children));
|
|
648
|
-
};
|
|
662
|
+
const useTableRowStyles = core.makeStyles((theme) => ({
|
|
663
|
+
root: () => ({
|
|
664
|
+
'&:nth-child(even)': {
|
|
665
|
+
backgroundColor: theme.palette.grey[100],
|
|
666
|
+
},
|
|
667
|
+
}),
|
|
668
|
+
}));
|
|
649
669
|
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
670
|
+
const TableRow = (props) => {
|
|
671
|
+
const { children, ...restProps } = props;
|
|
672
|
+
const { root } = useTableRowStyles(props);
|
|
673
|
+
return (React.createElement("tr", { "data-table-element": "body-row", className: root, ...restProps }, children));
|
|
653
674
|
};
|
|
654
675
|
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
676
|
+
const useStyles = core.makeStyles(({ typography }) => ({
|
|
677
|
+
root: ({ fullWidth }) => ({
|
|
678
|
+
display: fullWidth ? 'flex' : 'inline-flex',
|
|
679
|
+
flexDirection: 'column',
|
|
680
|
+
}),
|
|
681
|
+
table: ({ fullWidth }) => ({
|
|
682
|
+
borderCollapse: 'collapse',
|
|
683
|
+
...(fullWidth && { width: '100%' }),
|
|
684
|
+
// @ts-expect-error - todo.
|
|
685
|
+
...typography[tableConstants.tableTypography],
|
|
686
|
+
}),
|
|
687
|
+
tableContainer: () => ({
|
|
688
|
+
maxWidth: '100%',
|
|
689
|
+
overflowX: 'auto',
|
|
690
|
+
overflowY: 'hidden',
|
|
691
|
+
}),
|
|
692
|
+
}));
|
|
693
|
+
|
|
694
|
+
const Table = ({ title, data, columns, enableSortingRemoval = true, fullWidth = true, loading, searchable = false, sortable = false, filterState: externalFilterState, globalFilterState: externalGlobalFilterState, paginationState: externalPaginationState, sortingState: externalSortingState, visibilityState: externalVisibilityState, paginated = true, pageCount, GlobalFilterProps, Empty, idBase, stageFilterSelections, }) => {
|
|
695
|
+
const classes = useStyles({ fullWidth });
|
|
696
|
+
const rootRef = React.useRef(null);
|
|
659
697
|
// Prepare Empty State
|
|
660
|
-
|
|
661
|
-
|
|
698
|
+
const isEmpty = data.length === 0;
|
|
699
|
+
const isEmptyComponentValid = Empty && React.isValidElement(React.createElement(Empty));
|
|
662
700
|
// Prepare Sorting
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
701
|
+
const [sorting, setSorting] = externalSortingState || [];
|
|
702
|
+
const isControlledColumnSort = Boolean(externalSortingState);
|
|
703
|
+
const controlledColumnSortOptions = { onSortingChange: setSorting, manualSorting: true };
|
|
666
704
|
// Prepare Global Filtering
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
705
|
+
const [globalFilter, setGlobalFilter] = externalGlobalFilterState || [];
|
|
706
|
+
const isControlledGlobalFilter = Boolean(externalGlobalFilterState);
|
|
707
|
+
const controlledGlobalFilterOptions = { onGlobalFilterChange: setGlobalFilter, manualFiltering: true };
|
|
670
708
|
// Prepare ColumnFiltering
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
709
|
+
const [columnFilters, setColumnFilters] = externalFilterState || [];
|
|
710
|
+
const isControlledColumnFilters = Boolean(externalFilterState);
|
|
711
|
+
const controlledColumnFiltersOptions = { onColumnFiltersChange: setColumnFilters, manualFiltering: true };
|
|
674
712
|
// Prepare Pagination
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
713
|
+
const [pagination, setPagination] = externalPaginationState || [];
|
|
714
|
+
const isControlledPagination = Boolean(externalPaginationState && pageCount);
|
|
715
|
+
const controlledPaginationOptions = { manualPagination: true, onPaginationChange: setPagination, pageCount };
|
|
678
716
|
// Prepare Column Visibility
|
|
679
|
-
|
|
680
|
-
|
|
717
|
+
const [columnVisibility] = externalVisibilityState || [];
|
|
718
|
+
const isControlledColumnVisibility = Boolean(externalVisibilityState);
|
|
681
719
|
// Init table instance
|
|
682
|
-
|
|
683
|
-
|
|
720
|
+
const table = reactTable.useReactTable({
|
|
721
|
+
data,
|
|
722
|
+
columns,
|
|
723
|
+
state: {
|
|
724
|
+
...(isControlledPagination && { pagination }),
|
|
725
|
+
...(isControlledGlobalFilter && { globalFilter }),
|
|
726
|
+
...(isControlledColumnFilters && { columnFilters }),
|
|
727
|
+
...(isControlledColumnVisibility && { columnVisibility }),
|
|
728
|
+
...(isControlledColumnSort && { sorting }),
|
|
729
|
+
},
|
|
730
|
+
enableSorting: sortable,
|
|
731
|
+
enableSortingRemoval,
|
|
732
|
+
globalFilterFn: coercedValueIncludesString,
|
|
733
|
+
getCoreRowModel: reactTable.getCoreRowModel(),
|
|
734
|
+
getSortedRowModel: reactTable.getSortedRowModel(),
|
|
735
|
+
getFilteredRowModel: reactTable.getFilteredRowModel(),
|
|
736
|
+
...(paginated && { getPaginationRowModel: reactTable.getPaginationRowModel() }),
|
|
737
|
+
...(isControlledPagination && controlledPaginationOptions),
|
|
738
|
+
...(isControlledGlobalFilter && controlledGlobalFilterOptions),
|
|
739
|
+
...(isControlledColumnFilters && controlledColumnFiltersOptions),
|
|
740
|
+
...(isControlledColumnSort && controlledColumnSortOptions),
|
|
741
|
+
meta: { idBase: idBase },
|
|
742
|
+
});
|
|
743
|
+
const { selectedColumnFilters, hasColumnFilters, deselectColumnFilter, formatSelectedFilterText, resetColumnFilters, } = useColumnFilters(table);
|
|
684
744
|
// stagedColumnFilters is only used when stageFilterSelections is enabled
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
745
|
+
const stagedColumnFilters = useStagedColumnFilters(selectedColumnFilters);
|
|
746
|
+
const handlePagination = (_e, pageNumber) => {
|
|
747
|
+
const pageIndex = pageNumber - 1;
|
|
688
748
|
table.setPageIndex(pageIndex);
|
|
689
749
|
};
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
return (React.createElement(TableContext.Provider, { value: { table
|
|
695
|
-
React.createElement(commonUi.Box,
|
|
696
|
-
|
|
697
|
-
|
|
750
|
+
const showTitle = Boolean(title);
|
|
751
|
+
const showGlobalSearch = Boolean(searchable || isControlledGlobalFilter);
|
|
752
|
+
const showColumnFilter = Boolean(hasColumnFilters);
|
|
753
|
+
const showControls = Boolean(showTitle || showGlobalSearch || showColumnFilter);
|
|
754
|
+
return (React.createElement(TableContext.Provider, { value: { table, stagedColumnFilters, stageFilterSelections } },
|
|
755
|
+
React.createElement(commonUi.Box, { className: classes.root, ref: rootRef, "data-table-element": "root", ...(table.getPageCount() > 1 && {
|
|
756
|
+
minHeight: getTableMinHeight(rootRef, table.getState().pagination.pageSize),
|
|
757
|
+
}) },
|
|
698
758
|
showControls && (React.createElement(commonUi.Box, null,
|
|
699
759
|
React.createElement(TableControlsContainer, { showTitle: showTitle, showGlobalSearch: showGlobalSearch, showColumnFilter: showColumnFilter },
|
|
700
760
|
showTitle && (React.createElement(core.Typography, { style: { gridArea: 'title', alignSelf: 'center', fontSize: '18px', lineHeight: '27px' } }, title)),
|
|
701
|
-
showGlobalSearch && (React.createElement(GlobalFilter,
|
|
761
|
+
showGlobalSearch && (React.createElement(GlobalFilter, { ...GlobalFilterProps, value: table.getState().globalFilter, setValue: table.setGlobalFilter })),
|
|
702
762
|
showColumnFilter && React.createElement(FilterPanel, null)),
|
|
703
763
|
React.createElement(commonUi.Box, { display: "flex", flexWrap: "wrap", gridGap: 8 },
|
|
704
|
-
selectedColumnFilters.map(
|
|
764
|
+
selectedColumnFilters.map((selectedColumnFilter, i) => (React.createElement(ColumnFilterChip, { key: `selected-column-filter-chip-${i}`, columnFilter: selectedColumnFilter, label: formatSelectedFilterText(selectedColumnFilter), onClick: (columnFilter) => {
|
|
705
765
|
if (stageFilterSelections) {
|
|
706
766
|
stagedColumnFilters.delete(columnFilter);
|
|
707
767
|
}
|
|
708
768
|
deselectColumnFilter(columnFilter);
|
|
709
|
-
} }))
|
|
710
|
-
selectedColumnFilters.length >= 1 && (React.createElement(ColumnFilterResetButton, { onClick:
|
|
769
|
+
} }))),
|
|
770
|
+
selectedColumnFilters.length >= 1 && (React.createElement(ColumnFilterResetButton, { onClick: () => {
|
|
711
771
|
if (stageFilterSelections) {
|
|
712
772
|
stagedColumnFilters.clear();
|
|
713
773
|
}
|
|
@@ -715,8 +775,8 @@ var Table = function (_a) {
|
|
|
715
775
|
} }))))),
|
|
716
776
|
React.createElement(commonUi.Box, { className: classes.tableContainer, flexGrow: loading || isEmpty ? 0 : 1 },
|
|
717
777
|
React.createElement("table", { className: classes.table },
|
|
718
|
-
React.createElement(TableHeader, null, table.getHeaderGroups().map(
|
|
719
|
-
!loading && (React.createElement(TableBody, null, table.getRowModel().rows.map(
|
|
778
|
+
React.createElement(TableHeader, null, table.getHeaderGroups().map((headerGroup) => (React.createElement(TableHeaderRow, { key: headerGroup.id }, headerGroup.headers.map((header) => (React.createElement(TableHeaderCell, { key: header.id, context: header.getContext() }, reactTable.flexRender(header.column.columnDef.header, header.getContext())))))))),
|
|
779
|
+
!loading && (React.createElement(TableBody, null, table.getRowModel().rows.map((row) => (React.createElement(TableRow, { key: row.id }, row.getVisibleCells().map((cell) => (React.createElement(TableCell, { key: cell.id }, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()))))))))))),
|
|
720
780
|
isEmpty && isEmptyComponentValid && Empty && !loading && (React.createElement(commonUi.Box, { display: "flex", flexDirection: "column", justifyContent: "center", alignItems: "center", p: 2, flexGrow: 1 }, React.createElement(Empty))),
|
|
721
781
|
loading && (React.createElement(commonUi.Box, { display: "flex", flexDirection: "column", justifyContent: "center", alignItems: "center", p: 2, flexGrow: 1 },
|
|
722
782
|
React.createElement(commonUi.CircularProgress, { size: 80, color: "inherit" }))),
|
|
@@ -724,48 +784,6 @@ var Table = function (_a) {
|
|
|
724
784
|
React.createElement(lab.Pagination, { page: table.getState().pagination.pageIndex + 1, count: table.getPageCount(), onChange: handlePagination, disabled: loading }))))));
|
|
725
785
|
};
|
|
726
786
|
|
|
727
|
-
var validateAction = function (action) {
|
|
728
|
-
var icon = action.icon, label = action.label, onClick = action.onClick;
|
|
729
|
-
var onClickIsValid = typeof onClick === 'function';
|
|
730
|
-
var labelIsValid = typeof label === 'string';
|
|
731
|
-
var iconIsValid = icon && React.isValidElement(React.createElement(icon));
|
|
732
|
-
return onClickIsValid && labelIsValid && iconIsValid;
|
|
733
|
-
};
|
|
734
|
-
|
|
735
|
-
var RowActions = function (props) {
|
|
736
|
-
var context = props.context, actions = props.actions;
|
|
737
|
-
var validActions = actions.filter(validateAction);
|
|
738
|
-
var _a = React.useState(null), anchorEl = _a[0], setAnchorEl = _a[1];
|
|
739
|
-
var openMenu = function (event) {
|
|
740
|
-
setAnchorEl(event.currentTarget);
|
|
741
|
-
};
|
|
742
|
-
var closeMenu = function () {
|
|
743
|
-
setAnchorEl(null);
|
|
744
|
-
};
|
|
745
|
-
var actionsCount = validActions.length;
|
|
746
|
-
var mainActions;
|
|
747
|
-
var overflowActions;
|
|
748
|
-
if (actionsCount <= 3) {
|
|
749
|
-
mainActions = validActions;
|
|
750
|
-
}
|
|
751
|
-
else {
|
|
752
|
-
var firstAction = validActions[0], secondAction = validActions[1], restActions = validActions.slice(2);
|
|
753
|
-
mainActions = [firstAction, secondAction];
|
|
754
|
-
overflowActions = restActions;
|
|
755
|
-
}
|
|
756
|
-
return (React.createElement(commonUi.Box, { display: "flex" },
|
|
757
|
-
mainActions.map(function (_a) {
|
|
758
|
-
var label = _a.label, onClick = _a.onClick, icon = _a.icon, restProps = tslib.__rest(_a, ["label", "onClick", "icon"]);
|
|
759
|
-
return (React.createElement(commonUi.Tooltip, { title: label, key: label },
|
|
760
|
-
React.createElement(commonUi.IconButton, tslib.__assign({ size: "small", onClick: function () { return onClick(context); } }, restProps),
|
|
761
|
-
React.createElement(commonUi.Icon, { icon: icon }))));
|
|
762
|
-
}),
|
|
763
|
-
overflowActions && (React.createElement(React.Fragment, null,
|
|
764
|
-
React.createElement(commonUi.IconButton, { size: "small", onClick: openMenu },
|
|
765
|
-
React.createElement(commonUi.Icon, { icon: webIcons.More })),
|
|
766
|
-
React.createElement(commonUi.Menu, { anchorEl: anchorEl, open: Boolean(anchorEl), onClose: closeMenu }, overflowActions.map(function (action) { return (React.createElement(commonUi.MenuItem, { key: action.label, onClick: function () { return action.onClick(context); } }, action.label)); }))))));
|
|
767
|
-
};
|
|
768
|
-
|
|
769
787
|
exports.GlobalFilter = GlobalFilter;
|
|
770
788
|
exports.RowActions = RowActions;
|
|
771
789
|
exports.Table = Table;
|