@cdx-ui/data-grid 0.3.11 → 0.3.13
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/README.md +3 -1
- package/coverage.svg +1 -1
- package/lib/commonjs/DataGrid.js +490 -81
- package/lib/commonjs/DataGrid.js.map +1 -1
- package/lib/commonjs/DataGridFilterPanel.js +547 -0
- package/lib/commonjs/DataGridFilterPanel.js.map +1 -0
- package/lib/commonjs/adapter/columnTypes.js +256 -0
- package/lib/commonjs/adapter/columnTypes.js.map +1 -0
- package/lib/commonjs/adapter/columns.js +140 -4
- package/lib/commonjs/adapter/columns.js.map +1 -1
- package/lib/commonjs/adapter/filterOperators.js +422 -0
- package/lib/commonjs/adapter/filterOperators.js.map +1 -0
- package/lib/commonjs/adapter/pinning.js +105 -0
- package/lib/commonjs/adapter/pinning.js.map +1 -0
- package/lib/commonjs/adapter/selectColumn.js +11 -0
- package/lib/commonjs/adapter/selectColumn.js.map +1 -1
- package/lib/commonjs/adapter/treeData.js +195 -0
- package/lib/commonjs/adapter/treeData.js.map +1 -0
- package/lib/commonjs/index.js +26 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/numberCells.js +280 -0
- package/lib/commonjs/numberCells.js.map +1 -0
- package/lib/commonjs/styles.js +107 -1
- package/lib/commonjs/styles.js.map +1 -1
- package/lib/commonjs/types.js +39 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/useDataGridTable.js +234 -18
- package/lib/commonjs/useDataGridTable.js.map +1 -1
- package/lib/module/DataGrid.js +497 -88
- package/lib/module/DataGrid.js.map +1 -1
- package/lib/module/DataGridFilterPanel.js +540 -0
- package/lib/module/DataGridFilterPanel.js.map +1 -0
- package/lib/module/adapter/columnTypes.js +240 -0
- package/lib/module/adapter/columnTypes.js.map +1 -0
- package/lib/module/adapter/columns.js +137 -4
- package/lib/module/adapter/columns.js.map +1 -1
- package/lib/module/adapter/filterOperators.js +406 -0
- package/lib/module/adapter/filterOperators.js.map +1 -0
- package/lib/module/adapter/pinning.js +94 -0
- package/lib/module/adapter/pinning.js.map +1 -0
- package/lib/module/adapter/selectColumn.js +11 -1
- package/lib/module/adapter/selectColumn.js.map +1 -1
- package/lib/module/adapter/treeData.js +187 -0
- package/lib/module/adapter/treeData.js.map +1 -0
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/numberCells.js +275 -0
- package/lib/module/numberCells.js.map +1 -0
- package/lib/module/styles.js +106 -0
- package/lib/module/styles.js.map +1 -1
- package/lib/module/types.js +38 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/useDataGridTable.js +238 -22
- package/lib/module/useDataGridTable.js.map +1 -1
- package/lib/typescript/DataGrid.d.ts.map +1 -1
- package/lib/typescript/DataGridFilterPanel.d.ts +52 -0
- package/lib/typescript/DataGridFilterPanel.d.ts.map +1 -0
- package/lib/typescript/adapter/columnTypes.d.ts +32 -0
- package/lib/typescript/adapter/columnTypes.d.ts.map +1 -0
- package/lib/typescript/adapter/columns.d.ts +14 -5
- package/lib/typescript/adapter/columns.d.ts.map +1 -1
- package/lib/typescript/adapter/filterOperators.d.ts +43 -0
- package/lib/typescript/adapter/filterOperators.d.ts.map +1 -0
- package/lib/typescript/adapter/pinning.d.ts +26 -0
- package/lib/typescript/adapter/pinning.d.ts.map +1 -0
- package/lib/typescript/adapter/selectColumn.d.ts +8 -0
- package/lib/typescript/adapter/selectColumn.d.ts.map +1 -1
- package/lib/typescript/adapter/treeData.d.ts +36 -0
- package/lib/typescript/adapter/treeData.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +4 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/numberCells.d.ts +46 -0
- package/lib/typescript/numberCells.d.ts.map +1 -0
- package/lib/typescript/styles.d.ts +32 -0
- package/lib/typescript/styles.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +154 -7
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/useDataGridTable.d.ts +40 -4
- package/lib/typescript/useDataGridTable.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/DataGrid.tsx +745 -95
- package/src/DataGridFilterPanel.tsx +648 -0
- package/src/adapter/columnTypes.ts +327 -0
- package/src/adapter/columns.test.ts +75 -1
- package/src/adapter/columns.ts +192 -3
- package/src/adapter/filterOperators.test.ts +292 -0
- package/src/adapter/filterOperators.ts +524 -0
- package/src/adapter/pinning.ts +134 -0
- package/src/adapter/selectColumn.ts +12 -1
- package/src/adapter/treeData.ts +228 -0
- package/src/index.ts +19 -0
- package/src/numberCells.tsx +379 -0
- package/src/styles.ts +131 -0
- package/src/types.ts +190 -7
- package/src/useDataGridTable.test.ts +69 -0
- package/src/useDataGridTable.ts +338 -17
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { Platform, View } from 'react-native';
|
|
5
|
+
import { OverlayContainer, useAnchoredOverlay, useDismissOverlay, useEscapeKey } from '@cdx-ui/primitives';
|
|
6
|
+
import { mergeRefs } from '@cdx-ui/utils';
|
|
7
|
+
import { Button, DateField, DatePicker, IconButton, Input, Select, Text } from '@cdx-ui/components';
|
|
8
|
+
import { Add, Close, Delete } from '@cdx-ui/icons';
|
|
9
|
+
import { filterOperatorNeedsValue, filterValueToInputText, getDefaultFilterOperator, getFilterOperatorLabel, getGridFilterOperators, headerFilterValueFromText, isActiveFilterItem } from './adapter/filterOperators';
|
|
10
|
+
import { dataGridFilterPanelColumnVariants, dataGridFilterPanelFieldVariants, dataGridFilterPanelFooterVariants, dataGridFilterPanelLogicVariants, dataGridFilterPanelOperatorVariants, dataGridFilterPanelRowVariants, dataGridFilterPanelValueVariants, dataGridFilterPanelVariants } from './styles';
|
|
11
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
12
|
+
const LOGIC_OPERATORS = [{
|
|
13
|
+
value: 'and',
|
|
14
|
+
label: 'And'
|
|
15
|
+
}, {
|
|
16
|
+
value: 'or',
|
|
17
|
+
label: 'Or'
|
|
18
|
+
}];
|
|
19
|
+
const BOOLEAN_FILTER_VALUES = [{
|
|
20
|
+
value: 'any',
|
|
21
|
+
label: 'any'
|
|
22
|
+
}, {
|
|
23
|
+
value: 'true',
|
|
24
|
+
label: 'true'
|
|
25
|
+
}, {
|
|
26
|
+
value: 'false',
|
|
27
|
+
label: 'false'
|
|
28
|
+
}];
|
|
29
|
+
function booleanSelectValue(value) {
|
|
30
|
+
if (value === true || value === 'true') {
|
|
31
|
+
return 'true';
|
|
32
|
+
}
|
|
33
|
+
if (value === false || value === 'false') {
|
|
34
|
+
return 'false';
|
|
35
|
+
}
|
|
36
|
+
return 'any';
|
|
37
|
+
}
|
|
38
|
+
function booleanFilterItem(field, operator, next) {
|
|
39
|
+
if (next === 'true') {
|
|
40
|
+
return {
|
|
41
|
+
field,
|
|
42
|
+
operator,
|
|
43
|
+
value: true
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (next === 'false') {
|
|
47
|
+
return {
|
|
48
|
+
field,
|
|
49
|
+
operator,
|
|
50
|
+
value: false
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
field,
|
|
55
|
+
operator
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function logicOperatorLabel(operator) {
|
|
59
|
+
return operator === 'or' ? 'Or' : 'And';
|
|
60
|
+
}
|
|
61
|
+
export function filterPlaceholder(col, operator) {
|
|
62
|
+
if (operator === 'isAnyOf') {
|
|
63
|
+
return 'a, b';
|
|
64
|
+
}
|
|
65
|
+
switch (col?.type) {
|
|
66
|
+
case 'number':
|
|
67
|
+
return '0';
|
|
68
|
+
case 'date':
|
|
69
|
+
case 'dateTime':
|
|
70
|
+
return 'YYYY-MM-DD';
|
|
71
|
+
case 'boolean':
|
|
72
|
+
return 'true';
|
|
73
|
+
default:
|
|
74
|
+
return 'Filter value';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function isDateColumn(col) {
|
|
78
|
+
return col?.type === 'date' || col?.type === 'dateTime';
|
|
79
|
+
}
|
|
80
|
+
function padDatePart(value) {
|
|
81
|
+
return String(value).padStart(2, '0');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** `DatePicker` speaks `YYYY-MM-DD`. The filter model keeps a local `Date`. */
|
|
85
|
+
function dateValueToPickerValue(value) {
|
|
86
|
+
let wire;
|
|
87
|
+
if (value instanceof Date && Number.isFinite(value.getTime())) {
|
|
88
|
+
wire = `${String(value.getFullYear())}-${padDatePart(value.getMonth() + 1)}-${padDatePart(value.getDate())}`;
|
|
89
|
+
} else if (typeof value === 'string' && pickerValueToDate(value.slice(0, 10))) {
|
|
90
|
+
wire = value.slice(0, 10);
|
|
91
|
+
}
|
|
92
|
+
return wire;
|
|
93
|
+
}
|
|
94
|
+
function pickerValueToDate(value) {
|
|
95
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value);
|
|
96
|
+
if (!match) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
const year = Number(match[1]);
|
|
100
|
+
const month = Number(match[2]);
|
|
101
|
+
const day = Number(match[3]);
|
|
102
|
+
const date = new Date(year, month - 1, day);
|
|
103
|
+
return date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day ? date : undefined;
|
|
104
|
+
}
|
|
105
|
+
function FilterDateValue({
|
|
106
|
+
value,
|
|
107
|
+
accessibilityLabel,
|
|
108
|
+
onChange
|
|
109
|
+
}) {
|
|
110
|
+
return /*#__PURE__*/_jsxs(DatePicker, {
|
|
111
|
+
value: dateValueToPickerValue(value),
|
|
112
|
+
onValueChange: next => onChange(next === undefined ? undefined : pickerValueToDate(next)),
|
|
113
|
+
className: "w-full gap-0",
|
|
114
|
+
children: [/*#__PURE__*/_jsxs(DateField.Group, {
|
|
115
|
+
size: "small",
|
|
116
|
+
fullWidth: true,
|
|
117
|
+
children: [/*#__PURE__*/_jsx(DateField.Input, {}), /*#__PURE__*/_jsx(DateField.Suffix, {
|
|
118
|
+
children: /*#__PURE__*/_jsx(DatePicker.Trigger, {
|
|
119
|
+
children: /*#__PURE__*/_jsx(DatePicker.TriggerIndicator, {})
|
|
120
|
+
})
|
|
121
|
+
})]
|
|
122
|
+
}), /*#__PURE__*/_jsx(DatePicker.Popover, {
|
|
123
|
+
children: /*#__PURE__*/_jsx(DatePicker.Calendar, {
|
|
124
|
+
"aria-label": accessibilityLabel
|
|
125
|
+
})
|
|
126
|
+
})]
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
export function createDefaultFilterItem(columns) {
|
|
130
|
+
if (columns.length === 0) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
const col = columns[0];
|
|
134
|
+
return {
|
|
135
|
+
field: col.field,
|
|
136
|
+
operator: getDefaultFilterOperator(col.type)
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function createFilterItemForField(columns, field) {
|
|
140
|
+
const col = field === undefined ? undefined : columns.find(candidate => candidate.field === field);
|
|
141
|
+
return col && col.filterable !== false ? {
|
|
142
|
+
field: col.field,
|
|
143
|
+
operator: getDefaultFilterOperator(col.type)
|
|
144
|
+
} : undefined;
|
|
145
|
+
}
|
|
146
|
+
const FOCUSABLE_SELECTOR = 'input, textarea, button, [tabindex]:not([tabindex="-1"])';
|
|
147
|
+
function focusFirstControl(container) {
|
|
148
|
+
const element = container;
|
|
149
|
+
const control = element?.querySelector(FOCUSABLE_SELECTOR);
|
|
150
|
+
if (!control) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
control.focus();
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
function focusOpener(ref) {
|
|
157
|
+
const element = ref.current;
|
|
158
|
+
if (Platform.OS === 'web' && typeof element?.focus === 'function') {
|
|
159
|
+
element.focus();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** The control that opened the panel and, for a column opener, the field it targets. */
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Open state for the filter panel. Opening for a field shows the field's first item, even a
|
|
167
|
+
* value-less one, and leaves the model alone. When the field has none, it appends
|
|
168
|
+
* `{ field, operator }` and drops value-less items on other fields, as the append branch of MUI X
|
|
169
|
+
* `showFilterPanel(field)` does. MUI also rewrites the model when the field has an item.
|
|
170
|
+
*/
|
|
171
|
+
export function useDataGridFilterPanel({
|
|
172
|
+
columns,
|
|
173
|
+
filterModel,
|
|
174
|
+
onFilterModelChange
|
|
175
|
+
}) {
|
|
176
|
+
const [opener, setOpener] = useState(null);
|
|
177
|
+
const requestRef = useRef(0);
|
|
178
|
+
const openForField = useCallback((field, ref) => {
|
|
179
|
+
const item = createFilterItemForField(columns, field);
|
|
180
|
+
if (!item) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (!filterModel.some(candidate => candidate.field === field)) {
|
|
184
|
+
onFilterModelChange([...filterModel.filter(isActiveFilterItem), item]);
|
|
185
|
+
}
|
|
186
|
+
requestRef.current += 1;
|
|
187
|
+
setOpener({
|
|
188
|
+
ref,
|
|
189
|
+
field,
|
|
190
|
+
request: requestRef.current
|
|
191
|
+
});
|
|
192
|
+
}, [columns, filterModel, onFilterModelChange]);
|
|
193
|
+
const toggle = useCallback(ref => {
|
|
194
|
+
setOpener(current => current?.ref === ref ? null : {
|
|
195
|
+
ref
|
|
196
|
+
});
|
|
197
|
+
}, []);
|
|
198
|
+
const close = useCallback(({
|
|
199
|
+
restoreFocus
|
|
200
|
+
}) => {
|
|
201
|
+
if (opener && restoreFocus) {
|
|
202
|
+
focusOpener(opener.ref);
|
|
203
|
+
}
|
|
204
|
+
setOpener(null);
|
|
205
|
+
}, [opener]);
|
|
206
|
+
return {
|
|
207
|
+
opener,
|
|
208
|
+
openForField,
|
|
209
|
+
toggle,
|
|
210
|
+
close
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function resolveItemOperator(col, item) {
|
|
214
|
+
const operators = getGridFilterOperators(col?.type);
|
|
215
|
+
return item.operator !== undefined && operators.includes(item.operator) ? item.operator : getDefaultFilterOperator(col?.type);
|
|
216
|
+
}
|
|
217
|
+
function itemWithValueText(col, field, operator, text) {
|
|
218
|
+
if (!filterOperatorNeedsValue(operator)) {
|
|
219
|
+
return {
|
|
220
|
+
field,
|
|
221
|
+
operator
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
field,
|
|
226
|
+
operator,
|
|
227
|
+
value: text.trim().length > 0 ? headerFilterValueFromText(col, operator, text) : undefined
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
function FilterPanelRow({
|
|
231
|
+
index,
|
|
232
|
+
operatorFieldRef,
|
|
233
|
+
valueFieldRef,
|
|
234
|
+
item,
|
|
235
|
+
columns,
|
|
236
|
+
logicOperator,
|
|
237
|
+
onLogicOperatorChange,
|
|
238
|
+
onChange,
|
|
239
|
+
onRemove
|
|
240
|
+
}) {
|
|
241
|
+
const col = columns.find(candidate => candidate.field === item.field);
|
|
242
|
+
const operator = resolveItemOperator(col, item);
|
|
243
|
+
const operators = getGridFilterOperators(col?.type);
|
|
244
|
+
const valueText = filterValueToInputText(item.value);
|
|
245
|
+
const rowLabel = `filter ${(index + 1).toString()}`;
|
|
246
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
247
|
+
className: dataGridFilterPanelRowVariants(),
|
|
248
|
+
accessibilityRole: "none",
|
|
249
|
+
children: [/*#__PURE__*/_jsx(IconButton, {
|
|
250
|
+
as: Close,
|
|
251
|
+
variant: "ghost",
|
|
252
|
+
color: "neutral",
|
|
253
|
+
size: "small",
|
|
254
|
+
iconClassName: "size-4",
|
|
255
|
+
accessibilityLabel: `Remove ${rowLabel}`,
|
|
256
|
+
onPress: onRemove
|
|
257
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
258
|
+
className: dataGridFilterPanelLogicVariants(),
|
|
259
|
+
children: index === 1 ? /*#__PURE__*/_jsxs(Select, {
|
|
260
|
+
items: [...LOGIC_OPERATORS],
|
|
261
|
+
value: logicOperator,
|
|
262
|
+
onValueChange: next => {
|
|
263
|
+
const nextOperator = LOGIC_OPERATORS.find(candidate => candidate.value === next);
|
|
264
|
+
if (nextOperator) {
|
|
265
|
+
onLogicOperatorChange(nextOperator.value);
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
size: "small",
|
|
269
|
+
className: "w-full",
|
|
270
|
+
accessibilityLabel: "Logic operator",
|
|
271
|
+
children: [/*#__PURE__*/_jsx(Select.Trigger, {
|
|
272
|
+
children: /*#__PURE__*/_jsx(Select.Value, {})
|
|
273
|
+
}), /*#__PURE__*/_jsx(Select.Content, {
|
|
274
|
+
children: LOGIC_OPERATORS.map(candidate => /*#__PURE__*/_jsx(Select.Item, {
|
|
275
|
+
value: candidate.value,
|
|
276
|
+
children: /*#__PURE__*/_jsx(Select.ItemLabel, {
|
|
277
|
+
children: candidate.label
|
|
278
|
+
})
|
|
279
|
+
}, candidate.value))
|
|
280
|
+
})]
|
|
281
|
+
}) : index > 1 ? /*#__PURE__*/_jsx(Text, {
|
|
282
|
+
className: "px-3 text-sm text-content-secondary",
|
|
283
|
+
children: logicOperatorLabel(logicOperator)
|
|
284
|
+
}) : null
|
|
285
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
286
|
+
className: dataGridFilterPanelFieldVariants({
|
|
287
|
+
size: 'column'
|
|
288
|
+
}),
|
|
289
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
290
|
+
className: "text-xs text-content-secondary",
|
|
291
|
+
children: "Columns"
|
|
292
|
+
}), /*#__PURE__*/_jsxs(Select, {
|
|
293
|
+
items: columns.map(candidate => ({
|
|
294
|
+
value: candidate.field,
|
|
295
|
+
label: candidate.headerName ?? candidate.field
|
|
296
|
+
})),
|
|
297
|
+
value: item.field,
|
|
298
|
+
onValueChange: next => {
|
|
299
|
+
const nextCol = columns.find(candidate => candidate.field === next);
|
|
300
|
+
if (nextCol && nextCol.field !== item.field) {
|
|
301
|
+
onChange({
|
|
302
|
+
field: nextCol.field,
|
|
303
|
+
operator: getDefaultFilterOperator(nextCol.type)
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
size: "small",
|
|
308
|
+
className: dataGridFilterPanelColumnVariants(),
|
|
309
|
+
accessibilityLabel: `Column for ${rowLabel}`,
|
|
310
|
+
children: [/*#__PURE__*/_jsx(Select.Trigger, {
|
|
311
|
+
children: /*#__PURE__*/_jsx(Select.Value, {})
|
|
312
|
+
}), /*#__PURE__*/_jsx(Select.Content, {
|
|
313
|
+
children: columns.map(candidate => /*#__PURE__*/_jsx(Select.Item, {
|
|
314
|
+
value: candidate.field,
|
|
315
|
+
children: /*#__PURE__*/_jsx(Select.ItemLabel, {
|
|
316
|
+
children: candidate.headerName ?? candidate.field
|
|
317
|
+
})
|
|
318
|
+
}, candidate.field))
|
|
319
|
+
})]
|
|
320
|
+
})]
|
|
321
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
322
|
+
ref: operatorFieldRef,
|
|
323
|
+
className: dataGridFilterPanelFieldVariants({
|
|
324
|
+
size: 'operator'
|
|
325
|
+
}),
|
|
326
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
327
|
+
className: "text-xs text-content-secondary",
|
|
328
|
+
children: "Operator"
|
|
329
|
+
}), /*#__PURE__*/_jsxs(Select, {
|
|
330
|
+
items: operators.map(candidate => ({
|
|
331
|
+
value: candidate,
|
|
332
|
+
label: getFilterOperatorLabel(candidate)
|
|
333
|
+
})),
|
|
334
|
+
value: operator,
|
|
335
|
+
onValueChange: next => {
|
|
336
|
+
const nextOperator = operators.find(candidate => candidate === next);
|
|
337
|
+
if (nextOperator === undefined) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
if (!filterOperatorNeedsValue(nextOperator)) {
|
|
341
|
+
onChange({
|
|
342
|
+
field: item.field,
|
|
343
|
+
operator: nextOperator
|
|
344
|
+
});
|
|
345
|
+
} else if (isDateColumn(col)) {
|
|
346
|
+
onChange({
|
|
347
|
+
field: item.field,
|
|
348
|
+
operator: nextOperator,
|
|
349
|
+
value: item.value
|
|
350
|
+
});
|
|
351
|
+
} else if (col?.type === 'boolean') {
|
|
352
|
+
onChange(booleanFilterItem(item.field, nextOperator, booleanSelectValue(item.value)));
|
|
353
|
+
} else {
|
|
354
|
+
onChange(itemWithValueText(col, item.field, nextOperator, valueText));
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
size: "small",
|
|
358
|
+
className: dataGridFilterPanelOperatorVariants(),
|
|
359
|
+
accessibilityLabel: `Operator for ${rowLabel}`,
|
|
360
|
+
children: [/*#__PURE__*/_jsx(Select.Trigger, {
|
|
361
|
+
children: /*#__PURE__*/_jsx(Select.Value, {})
|
|
362
|
+
}), /*#__PURE__*/_jsx(Select.Content, {
|
|
363
|
+
children: operators.map(candidate => /*#__PURE__*/_jsx(Select.Item, {
|
|
364
|
+
value: candidate,
|
|
365
|
+
children: /*#__PURE__*/_jsx(Select.ItemLabel, {
|
|
366
|
+
children: getFilterOperatorLabel(candidate)
|
|
367
|
+
})
|
|
368
|
+
}, candidate))
|
|
369
|
+
})]
|
|
370
|
+
})]
|
|
371
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
372
|
+
ref: valueFieldRef,
|
|
373
|
+
className: dataGridFilterPanelFieldVariants({
|
|
374
|
+
size: 'value'
|
|
375
|
+
}),
|
|
376
|
+
children: filterOperatorNeedsValue(operator) ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
377
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
378
|
+
className: "text-xs text-content-secondary",
|
|
379
|
+
children: "Value"
|
|
380
|
+
}), isDateColumn(col) ? /*#__PURE__*/_jsx(FilterDateValue, {
|
|
381
|
+
value: item.value,
|
|
382
|
+
accessibilityLabel: `Value for ${rowLabel}`,
|
|
383
|
+
onChange: date => onChange(date === undefined ? {
|
|
384
|
+
field: item.field,
|
|
385
|
+
operator
|
|
386
|
+
} : {
|
|
387
|
+
field: item.field,
|
|
388
|
+
operator,
|
|
389
|
+
value: date
|
|
390
|
+
})
|
|
391
|
+
}) : col?.type === 'boolean' ? /*#__PURE__*/_jsxs(Select, {
|
|
392
|
+
items: [...BOOLEAN_FILTER_VALUES],
|
|
393
|
+
value: booleanSelectValue(item.value),
|
|
394
|
+
onValueChange: next => onChange(booleanFilterItem(item.field, operator, next)),
|
|
395
|
+
size: "small",
|
|
396
|
+
className: dataGridFilterPanelValueVariants(),
|
|
397
|
+
accessibilityLabel: `Value for ${rowLabel}`,
|
|
398
|
+
children: [/*#__PURE__*/_jsx(Select.Trigger, {
|
|
399
|
+
children: /*#__PURE__*/_jsx(Select.Value, {})
|
|
400
|
+
}), /*#__PURE__*/_jsx(Select.Content, {
|
|
401
|
+
children: BOOLEAN_FILTER_VALUES.map(candidate => /*#__PURE__*/_jsx(Select.Item, {
|
|
402
|
+
value: candidate.value,
|
|
403
|
+
children: /*#__PURE__*/_jsx(Select.ItemLabel, {
|
|
404
|
+
children: candidate.label
|
|
405
|
+
})
|
|
406
|
+
}, candidate.value))
|
|
407
|
+
})]
|
|
408
|
+
}) : /*#__PURE__*/_jsx(Input, {
|
|
409
|
+
size: "small",
|
|
410
|
+
className: dataGridFilterPanelValueVariants(),
|
|
411
|
+
children: /*#__PURE__*/_jsx(Input.Field, {
|
|
412
|
+
value: valueText,
|
|
413
|
+
onChangeText: text => onChange(itemWithValueText(col, item.field, operator, text)),
|
|
414
|
+
placeholder: filterPlaceholder(col, operator),
|
|
415
|
+
accessibilityLabel: `Value for ${rowLabel}`
|
|
416
|
+
})
|
|
417
|
+
})]
|
|
418
|
+
}) : null
|
|
419
|
+
})]
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
export function DataGridFilterPanel({
|
|
423
|
+
columns,
|
|
424
|
+
filterModel,
|
|
425
|
+
onFilterModelChange,
|
|
426
|
+
logicOperator,
|
|
427
|
+
onLogicOperatorChange,
|
|
428
|
+
onClose,
|
|
429
|
+
opener
|
|
430
|
+
}) {
|
|
431
|
+
const anchored = opener.field !== undefined;
|
|
432
|
+
const panelRef = useRef(null);
|
|
433
|
+
const operatorFieldRef = useRef(null);
|
|
434
|
+
const valueFieldRef = useRef(null);
|
|
435
|
+
const focusedRequestRef = useRef(undefined);
|
|
436
|
+
const {
|
|
437
|
+
floatingRef,
|
|
438
|
+
onFloatingLayout,
|
|
439
|
+
style: anchoredStyle,
|
|
440
|
+
position
|
|
441
|
+
} = useAnchoredOverlay(opener.ref, anchored, {
|
|
442
|
+
placement: 'bottom-start',
|
|
443
|
+
collisionBehavior: 'flip-shift',
|
|
444
|
+
width: 'content'
|
|
445
|
+
});
|
|
446
|
+
const dismiss = () => onClose({
|
|
447
|
+
restoreFocus: false
|
|
448
|
+
});
|
|
449
|
+
const closeAndRestoreFocus = () => onClose({
|
|
450
|
+
restoreFocus: true
|
|
451
|
+
});
|
|
452
|
+
useDismissOverlay(true, panelRef, [opener.ref], dismiss);
|
|
453
|
+
useEscapeKey(true, closeAndRestoreFocus);
|
|
454
|
+
const defaultItem = createDefaultFilterItem(columns);
|
|
455
|
+
const placeholderItem = createFilterItemForField(columns, opener.field) ?? defaultItem;
|
|
456
|
+
const items = filterModel.length > 0 ? filterModel : placeholderItem ? [placeholderItem] : [];
|
|
457
|
+
const targetIndex = opener.field === undefined ? -1 : items.findIndex(item => item.field === opener.field);
|
|
458
|
+
const targetItem = targetIndex >= 0 ? items[targetIndex] : undefined;
|
|
459
|
+
const targetNeedsValue = targetItem !== undefined && filterOperatorNeedsValue(resolveItemOperator(columns.find(candidate => candidate.field === targetItem.field), targetItem));
|
|
460
|
+
|
|
461
|
+
// Rows are keyed by index, so an appended target row can mount a render after the open request.
|
|
462
|
+
// Retry on each commit until the target control exists, then stop for that request.
|
|
463
|
+
useEffect(() => {
|
|
464
|
+
if (Platform.OS !== 'web' || opener.request === undefined || focusedRequestRef.current === opener.request || targetItem === undefined) {
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
if (focusFirstControl((targetNeedsValue ? valueFieldRef : operatorFieldRef).current)) {
|
|
468
|
+
focusedRequestRef.current = opener.request;
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
const replaceItem = (index, next) => {
|
|
472
|
+
onFilterModelChange(items.map((item, itemIndex) => itemIndex === index ? next : item));
|
|
473
|
+
};
|
|
474
|
+
const removeItem = index => {
|
|
475
|
+
const next = items.filter((_, itemIndex) => itemIndex !== index);
|
|
476
|
+
onFilterModelChange(next);
|
|
477
|
+
if (next.length === 0) {
|
|
478
|
+
closeAndRestoreFocus();
|
|
479
|
+
}
|
|
480
|
+
};
|
|
481
|
+
const panel = /*#__PURE__*/_jsxs(View, {
|
|
482
|
+
ref: anchored ? mergeRefs(panelRef, floatingRef) : panelRef,
|
|
483
|
+
className: dataGridFilterPanelVariants({
|
|
484
|
+
anchored
|
|
485
|
+
}),
|
|
486
|
+
style: anchored ? [anchoredStyle, position ? {
|
|
487
|
+
maxWidth: position.availableWidth
|
|
488
|
+
} : undefined] : undefined,
|
|
489
|
+
onLayout: anchored ? onFloatingLayout : undefined,
|
|
490
|
+
accessibilityLabel: "Filters",
|
|
491
|
+
testID: "data-grid-filter-panel",
|
|
492
|
+
children: [items.map((item, index) => /*#__PURE__*/_jsx(FilterPanelRow, {
|
|
493
|
+
index: index,
|
|
494
|
+
operatorFieldRef: index === targetIndex ? operatorFieldRef : undefined,
|
|
495
|
+
valueFieldRef: index === targetIndex ? valueFieldRef : undefined,
|
|
496
|
+
item: item,
|
|
497
|
+
columns: columns,
|
|
498
|
+
logicOperator: logicOperator,
|
|
499
|
+
onLogicOperatorChange: onLogicOperatorChange,
|
|
500
|
+
onChange: next => replaceItem(index, next),
|
|
501
|
+
onRemove: () => removeItem(index)
|
|
502
|
+
}, index)), /*#__PURE__*/_jsxs(View, {
|
|
503
|
+
className: dataGridFilterPanelFooterVariants(),
|
|
504
|
+
children: [/*#__PURE__*/_jsxs(Button, {
|
|
505
|
+
variant: "ghost",
|
|
506
|
+
color: "action",
|
|
507
|
+
size: "small",
|
|
508
|
+
isDisabled: defaultItem === undefined,
|
|
509
|
+
onPress: () => {
|
|
510
|
+
if (defaultItem) {
|
|
511
|
+
onFilterModelChange([...items, defaultItem]);
|
|
512
|
+
}
|
|
513
|
+
},
|
|
514
|
+
children: [/*#__PURE__*/_jsx(Button.Icon, {
|
|
515
|
+
as: Add
|
|
516
|
+
}), /*#__PURE__*/_jsx(Button.Label, {
|
|
517
|
+
children: "Add filter"
|
|
518
|
+
})]
|
|
519
|
+
}), /*#__PURE__*/_jsxs(Button, {
|
|
520
|
+
variant: "ghost",
|
|
521
|
+
color: "action",
|
|
522
|
+
size: "small",
|
|
523
|
+
onPress: () => {
|
|
524
|
+
onFilterModelChange([]);
|
|
525
|
+
closeAndRestoreFocus();
|
|
526
|
+
},
|
|
527
|
+
children: [/*#__PURE__*/_jsx(Button.Icon, {
|
|
528
|
+
as: Delete
|
|
529
|
+
}), /*#__PURE__*/_jsx(Button.Label, {
|
|
530
|
+
children: "Remove all"
|
|
531
|
+
})]
|
|
532
|
+
})]
|
|
533
|
+
})]
|
|
534
|
+
});
|
|
535
|
+
return anchored ? /*#__PURE__*/_jsx(OverlayContainer, {
|
|
536
|
+
onDismiss: dismiss,
|
|
537
|
+
children: panel
|
|
538
|
+
}) : panel;
|
|
539
|
+
}
|
|
540
|
+
//# sourceMappingURL=DataGridFilterPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","useState","Platform","View","OverlayContainer","useAnchoredOverlay","useDismissOverlay","useEscapeKey","mergeRefs","Button","DateField","DatePicker","IconButton","Input","Select","Text","Add","Close","Delete","filterOperatorNeedsValue","filterValueToInputText","getDefaultFilterOperator","getFilterOperatorLabel","getGridFilterOperators","headerFilterValueFromText","isActiveFilterItem","dataGridFilterPanelColumnVariants","dataGridFilterPanelFieldVariants","dataGridFilterPanelFooterVariants","dataGridFilterPanelLogicVariants","dataGridFilterPanelOperatorVariants","dataGridFilterPanelRowVariants","dataGridFilterPanelValueVariants","dataGridFilterPanelVariants","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","LOGIC_OPERATORS","value","label","BOOLEAN_FILTER_VALUES","booleanSelectValue","booleanFilterItem","field","operator","next","logicOperatorLabel","filterPlaceholder","col","type","isDateColumn","padDatePart","String","padStart","dateValueToPickerValue","wire","Date","Number","isFinite","getTime","getFullYear","getMonth","getDate","pickerValueToDate","slice","match","exec","undefined","year","month","day","date","FilterDateValue","accessibilityLabel","onChange","onValueChange","className","children","Group","size","fullWidth","Suffix","Trigger","TriggerIndicator","Popover","Calendar","createDefaultFilterItem","columns","length","createFilterItemForField","find","candidate","filterable","FOCUSABLE_SELECTOR","focusFirstControl","container","element","control","querySelector","focus","focusOpener","ref","current","OS","useDataGridFilterPanel","filterModel","onFilterModelChange","opener","setOpener","requestRef","openForField","item","some","filter","request","toggle","close","restoreFocus","resolveItemOperator","operators","includes","itemWithValueText","text","trim","FilterPanelRow","index","operatorFieldRef","valueFieldRef","logicOperator","onLogicOperatorChange","onRemove","valueText","rowLabel","toString","accessibilityRole","as","variant","color","iconClassName","onPress","items","nextOperator","Value","Content","map","Item","ItemLabel","headerName","nextCol","Field","onChangeText","placeholder","DataGridFilterPanel","onClose","anchored","panelRef","focusedRequestRef","floatingRef","onFloatingLayout","style","anchoredStyle","position","placement","collisionBehavior","width","dismiss","closeAndRestoreFocus","defaultItem","placeholderItem","targetIndex","findIndex","targetItem","targetNeedsValue","replaceItem","itemIndex","removeItem","_","panel","maxWidth","availableWidth","onLayout","testID","isDisabled","Icon","Label","onDismiss"],"sourceRoot":"../../src","sources":["DataGridFilterPanel.tsx"],"mappings":"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","ignoreList":[]}
|