@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.
Files changed (96) hide show
  1. package/README.md +3 -1
  2. package/coverage.svg +1 -1
  3. package/lib/commonjs/DataGrid.js +490 -81
  4. package/lib/commonjs/DataGrid.js.map +1 -1
  5. package/lib/commonjs/DataGridFilterPanel.js +547 -0
  6. package/lib/commonjs/DataGridFilterPanel.js.map +1 -0
  7. package/lib/commonjs/adapter/columnTypes.js +256 -0
  8. package/lib/commonjs/adapter/columnTypes.js.map +1 -0
  9. package/lib/commonjs/adapter/columns.js +140 -4
  10. package/lib/commonjs/adapter/columns.js.map +1 -1
  11. package/lib/commonjs/adapter/filterOperators.js +422 -0
  12. package/lib/commonjs/adapter/filterOperators.js.map +1 -0
  13. package/lib/commonjs/adapter/pinning.js +105 -0
  14. package/lib/commonjs/adapter/pinning.js.map +1 -0
  15. package/lib/commonjs/adapter/selectColumn.js +11 -0
  16. package/lib/commonjs/adapter/selectColumn.js.map +1 -1
  17. package/lib/commonjs/adapter/treeData.js +195 -0
  18. package/lib/commonjs/adapter/treeData.js.map +1 -0
  19. package/lib/commonjs/index.js +26 -0
  20. package/lib/commonjs/index.js.map +1 -1
  21. package/lib/commonjs/numberCells.js +280 -0
  22. package/lib/commonjs/numberCells.js.map +1 -0
  23. package/lib/commonjs/styles.js +107 -1
  24. package/lib/commonjs/styles.js.map +1 -1
  25. package/lib/commonjs/types.js +39 -1
  26. package/lib/commonjs/types.js.map +1 -1
  27. package/lib/commonjs/useDataGridTable.js +234 -18
  28. package/lib/commonjs/useDataGridTable.js.map +1 -1
  29. package/lib/module/DataGrid.js +497 -88
  30. package/lib/module/DataGrid.js.map +1 -1
  31. package/lib/module/DataGridFilterPanel.js +540 -0
  32. package/lib/module/DataGridFilterPanel.js.map +1 -0
  33. package/lib/module/adapter/columnTypes.js +240 -0
  34. package/lib/module/adapter/columnTypes.js.map +1 -0
  35. package/lib/module/adapter/columns.js +137 -4
  36. package/lib/module/adapter/columns.js.map +1 -1
  37. package/lib/module/adapter/filterOperators.js +406 -0
  38. package/lib/module/adapter/filterOperators.js.map +1 -0
  39. package/lib/module/adapter/pinning.js +94 -0
  40. package/lib/module/adapter/pinning.js.map +1 -0
  41. package/lib/module/adapter/selectColumn.js +11 -1
  42. package/lib/module/adapter/selectColumn.js.map +1 -1
  43. package/lib/module/adapter/treeData.js +187 -0
  44. package/lib/module/adapter/treeData.js.map +1 -0
  45. package/lib/module/index.js +2 -0
  46. package/lib/module/index.js.map +1 -1
  47. package/lib/module/numberCells.js +275 -0
  48. package/lib/module/numberCells.js.map +1 -0
  49. package/lib/module/styles.js +106 -0
  50. package/lib/module/styles.js.map +1 -1
  51. package/lib/module/types.js +38 -0
  52. package/lib/module/types.js.map +1 -1
  53. package/lib/module/useDataGridTable.js +238 -22
  54. package/lib/module/useDataGridTable.js.map +1 -1
  55. package/lib/typescript/DataGrid.d.ts.map +1 -1
  56. package/lib/typescript/DataGridFilterPanel.d.ts +52 -0
  57. package/lib/typescript/DataGridFilterPanel.d.ts.map +1 -0
  58. package/lib/typescript/adapter/columnTypes.d.ts +32 -0
  59. package/lib/typescript/adapter/columnTypes.d.ts.map +1 -0
  60. package/lib/typescript/adapter/columns.d.ts +14 -5
  61. package/lib/typescript/adapter/columns.d.ts.map +1 -1
  62. package/lib/typescript/adapter/filterOperators.d.ts +43 -0
  63. package/lib/typescript/adapter/filterOperators.d.ts.map +1 -0
  64. package/lib/typescript/adapter/pinning.d.ts +26 -0
  65. package/lib/typescript/adapter/pinning.d.ts.map +1 -0
  66. package/lib/typescript/adapter/selectColumn.d.ts +8 -0
  67. package/lib/typescript/adapter/selectColumn.d.ts.map +1 -1
  68. package/lib/typescript/adapter/treeData.d.ts +36 -0
  69. package/lib/typescript/adapter/treeData.d.ts.map +1 -0
  70. package/lib/typescript/index.d.ts +4 -1
  71. package/lib/typescript/index.d.ts.map +1 -1
  72. package/lib/typescript/numberCells.d.ts +46 -0
  73. package/lib/typescript/numberCells.d.ts.map +1 -0
  74. package/lib/typescript/styles.d.ts +32 -0
  75. package/lib/typescript/styles.d.ts.map +1 -1
  76. package/lib/typescript/types.d.ts +154 -7
  77. package/lib/typescript/types.d.ts.map +1 -1
  78. package/lib/typescript/useDataGridTable.d.ts +40 -4
  79. package/lib/typescript/useDataGridTable.d.ts.map +1 -1
  80. package/package.json +5 -5
  81. package/src/DataGrid.tsx +745 -95
  82. package/src/DataGridFilterPanel.tsx +648 -0
  83. package/src/adapter/columnTypes.ts +327 -0
  84. package/src/adapter/columns.test.ts +75 -1
  85. package/src/adapter/columns.ts +192 -3
  86. package/src/adapter/filterOperators.test.ts +292 -0
  87. package/src/adapter/filterOperators.ts +524 -0
  88. package/src/adapter/pinning.ts +134 -0
  89. package/src/adapter/selectColumn.ts +12 -1
  90. package/src/adapter/treeData.ts +228 -0
  91. package/src/index.ts +19 -0
  92. package/src/numberCells.tsx +379 -0
  93. package/src/styles.ts +131 -0
  94. package/src/types.ts +190 -7
  95. package/src/useDataGridTable.test.ts +69 -0
  96. 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":[]}