@redsift/table 12.5.4-muiv8-alpha.4 → 12.5.4
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/_internal/StatefulDataGrid2.js +38 -15
- package/_internal/StatefulDataGrid2.js.map +1 -1
- package/index.d.ts +10 -0
- package/index.js +81 -11
- package/index.js.map +1 -1
- package/package.json +4 -4
package/index.d.ts
CHANGED
|
@@ -966,6 +966,16 @@ declare const areFilterModelsEquivalent: (filterModel: GridFilterModel, filterMo
|
|
|
966
966
|
* that connected-react-router triggers when the grid synchronises
|
|
967
967
|
* URL state during render.
|
|
968
968
|
*
|
|
969
|
+
* Also coalesces multiple `historyReplace` calls within the same microtask
|
|
970
|
+
* by computing per-call deltas against the captured `search` snapshot and
|
|
971
|
+
* merging them into the live URL. This prevents handler stomping when the
|
|
972
|
+
* grid fires several model-change handlers in the same render (e.g. a
|
|
973
|
+
* pivot change re-emits a synthetic column-visibility change alongside a
|
|
974
|
+
* filter change): without coalescing, each handler would compute a full
|
|
975
|
+
* new search from the same captured snapshot, and the second
|
|
976
|
+
* `history.replace` would clobber the first — dropping any keys (such as
|
|
977
|
+
* the filter just typed) that the second handler didn't know about.
|
|
978
|
+
*
|
|
969
979
|
* @example
|
|
970
980
|
* ```tsx
|
|
971
981
|
* import { createReactRouterV5Adapter } from '@redsift/table';
|
package/index.js
CHANGED
|
@@ -424,6 +424,16 @@ function getOperatorsForType(type, compact) {
|
|
|
424
424
|
* that connected-react-router triggers when the grid synchronises
|
|
425
425
|
* URL state during render.
|
|
426
426
|
*
|
|
427
|
+
* Also coalesces multiple `historyReplace` calls within the same microtask
|
|
428
|
+
* by computing per-call deltas against the captured `search` snapshot and
|
|
429
|
+
* merging them into the live URL. This prevents handler stomping when the
|
|
430
|
+
* grid fires several model-change handlers in the same render (e.g. a
|
|
431
|
+
* pivot change re-emits a synthetic column-visibility change alongside a
|
|
432
|
+
* filter change): without coalescing, each handler would compute a full
|
|
433
|
+
* new search from the same captured snapshot, and the second
|
|
434
|
+
* `history.replace` would clobber the first — dropping any keys (such as
|
|
435
|
+
* the filter just typed) that the second handler didn't know about.
|
|
436
|
+
*
|
|
427
437
|
* @example
|
|
428
438
|
* ```tsx
|
|
429
439
|
* import { createReactRouterV5Adapter } from '@redsift/table';
|
|
@@ -441,18 +451,78 @@ function getOperatorsForType(type, compact) {
|
|
|
441
451
|
* React Router v5 `history` object.
|
|
442
452
|
*/
|
|
443
453
|
const createReactRouterV5Adapter = history => {
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
454
|
+
// Module-instance state shared across all `historyReplace` calls scheduled
|
|
455
|
+
// within the same microtask. Each `useRouter()` invocation captures its own
|
|
456
|
+
// `search` snapshot for delta computation; `pending` accumulates the deltas
|
|
457
|
+
// and is flushed once per microtask onto the live URL.
|
|
458
|
+
let pending = null;
|
|
459
|
+
let flushScheduled = false;
|
|
460
|
+
const scheduleFlush = () => {
|
|
461
|
+
if (flushScheduled) return;
|
|
462
|
+
flushScheduled = true;
|
|
463
|
+
queueMicrotask(() => {
|
|
464
|
+
flushScheduled = false;
|
|
465
|
+
const flush = pending;
|
|
466
|
+
pending = null;
|
|
467
|
+
if (flush === null) return;
|
|
468
|
+
const serialized = flush.toString();
|
|
469
|
+
const nextSearch = serialized ? `?${serialized}` : '';
|
|
470
|
+
if (nextSearch === history.location.search) return;
|
|
471
|
+
history.replace({
|
|
472
|
+
pathname: history.location.pathname,
|
|
473
|
+
search: nextSearch
|
|
453
474
|
});
|
|
454
|
-
}
|
|
455
|
-
}
|
|
475
|
+
});
|
|
476
|
+
};
|
|
477
|
+
return () => {
|
|
478
|
+
// Capture the search snapshot AT THE TIME useRouter() is called. The
|
|
479
|
+
// grid hands this string to its change handlers, which build a complete
|
|
480
|
+
// new search string from it. Diffing the handler's `newSearch` against
|
|
481
|
+
// this captured snapshot tells us which keys the handler intentionally
|
|
482
|
+
// changed (vs. which are stale passthrough from sibling handlers' models).
|
|
483
|
+
const captured = history.location.search.replace(/^\?/, '');
|
|
484
|
+
const capturedParams = new URLSearchParams(captured);
|
|
485
|
+
const capturedKeys = new Set(capturedParams.keys());
|
|
486
|
+
return {
|
|
487
|
+
pathname: history.location.pathname,
|
|
488
|
+
search: captured,
|
|
489
|
+
historyReplace: newSearch => {
|
|
490
|
+
const newParams = new URLSearchParams(newSearch);
|
|
491
|
+
const newKeys = new Set(newParams.keys());
|
|
492
|
+
|
|
493
|
+
// Lazy-init `pending` from the LIVE URL — not the captured snapshot —
|
|
494
|
+
// so deltas from earlier microtask-scheduled calls (which may have
|
|
495
|
+
// already been flushed, or were scheduled by a previous render and
|
|
496
|
+
// are now reflected in the live URL) are preserved.
|
|
497
|
+
if (pending === null) {
|
|
498
|
+
pending = new URLSearchParams(history.location.search.replace(/^\?/, ''));
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
// Apply only keys this handler actually changed. A handler builds a
|
|
502
|
+
// complete new search from a captured snapshot, but only some keys
|
|
503
|
+
// reflect its intent — the rest are passthrough of the snapshot.
|
|
504
|
+
// When two handlers fire in the same render and one was triggered
|
|
505
|
+
// by a model the other doesn't care about, passthrough keys would
|
|
506
|
+
// otherwise stomp pending state from earlier handlers.
|
|
507
|
+
for (const key of newKeys) {
|
|
508
|
+
const newValues = newParams.getAll(key);
|
|
509
|
+
const capturedValues = capturedParams.getAll(key);
|
|
510
|
+
const unchanged = newValues.length === capturedValues.length && newValues.every((v, i) => v === capturedValues[i]);
|
|
511
|
+
if (unchanged) continue;
|
|
512
|
+
pending.delete(key);
|
|
513
|
+
for (const value of newValues) {
|
|
514
|
+
pending.append(key, value);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
// Keys that were in the captured snapshot but absent from newSearch
|
|
518
|
+
// were intentionally removed by this handler.
|
|
519
|
+
for (const key of capturedKeys) {
|
|
520
|
+
if (!newKeys.has(key)) pending.delete(key);
|
|
521
|
+
}
|
|
522
|
+
scheduleFlush();
|
|
523
|
+
}
|
|
524
|
+
};
|
|
525
|
+
};
|
|
456
526
|
};
|
|
457
527
|
|
|
458
528
|
const EMPTY_FILTER_MODEL = {
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/utils/columns/detailPanelToggleColDef.ts","../src/utils/operators/string-array/isAnyOfI.tsx","../src/utils/fields/InputDateInterval.tsx","../src/utils/operators/date/isBetween.tsx","../src/utils/operators/date/getGridDateOperators.ts","../src/utils/operators/utils/caseInsensitive.ts","../src/utils/columnTypes/index.ts","../src/utils/createColumn.ts","../src/adapters/reactRouterV5.ts","../src/hooks/useLinkedFilterModel.ts"],"sourcesContent":["import { GRID_DETAIL_PANEL_TOGGLE_COL_DEF } from '@mui/x-data-grid-premium';\n\n// Don't use a spread operator there or it will break the build due to MUI internal components\nconst DETAIL_PANEL_TOGGLE_COL_DEF = GRID_DETAIL_PANEL_TOGGLE_COL_DEF;\nDETAIL_PANEL_TOGGLE_COL_DEF.type = 'actions';\n\nexport { DETAIL_PANEL_TOGGLE_COL_DEF };\n","import { GridFilterInputMultipleSingleSelect, GridFilterInputMultipleValue, GridFilterOperator } from '@mui/x-data-grid-premium';\n\nconst isAnyOfIOperator: GridFilterOperator<any, string | string[], any> = {\n label: 'is any of (case-insensitive)',\n value: 'isAnyOfI',\n getApplyFilterFn: (filterItem) => {\n if (!filterItem.field || !filterItem.value || !filterItem.operator) {\n return null;\n }\n const lowerCaseFilterValues = filterItem.value.map((v: string) => String(v).toLowerCase());\n\n return (value) => {\n if (filterItem.value.length === 0) {\n return true;\n }\n if (value == null) {\n return false;\n }\n const paramValues = Array.isArray(value) ? value : [value];\n\n for (const paramValue of paramValues) {\n if (lowerCaseFilterValues.includes(String(paramValue).toLowerCase())) {\n return true;\n }\n }\n return false;\n };\n },\n InputComponent: GridFilterInputMultipleValue,\n};\n\nexport const IS_ANY_OF_I = isAnyOfIOperator;\n\nexport const IS_ANY_OF_I_WITH_SELECT = { ...IS_ANY_OF_I, InputComponent: GridFilterInputMultipleSingleSelect };\n","import * as React from 'react';\nimport Box from '@mui/material/Box';\nimport TextField, { TextFieldProps } from '@mui/material/TextField';\nimport { Icon } from '@redsift/design-system';\nimport { mdiSync } from '@redsift/icons';\nimport { GridFilterInputValueProps } from '@mui/x-data-grid-premium';\n\nconst SUBMIT_FILTER_STROKE_TIME = 500;\n\nexport const InputDateInterval = (props: GridFilterInputValueProps) => {\n const { item, applyValue, focusElementRef = null } = props;\n\n const filterTimeout = React.useRef<ReturnType<typeof setTimeout>>();\n const [filterValueState, setFilterValueState] = React.useState<[string, string]>(item.value ?? ['', '']);\n const [applying, setIsApplying] = React.useState(false);\n\n React.useEffect(() => {\n return () => {\n clearTimeout(filterTimeout.current);\n };\n }, []);\n\n React.useEffect(() => {\n const itemValue = item.value ?? ['', ''];\n setFilterValueState(itemValue);\n }, [item.value]);\n\n const updateFilterValue = (from: string, to: string) => {\n clearTimeout(filterTimeout.current);\n setFilterValueState([from, to]);\n\n setIsApplying(true);\n filterTimeout.current = setTimeout(() => {\n setIsApplying(false);\n applyValue({ ...item, value: [from, to] });\n }, SUBMIT_FILTER_STROKE_TIME);\n };\n\n const handleFromChange: TextFieldProps['onChange'] = (event) => {\n const newFrom = event.target.value;\n updateFilterValue(newFrom, filterValueState[1]);\n };\n\n const handleToChange: TextFieldProps['onChange'] = (event) => {\n const newTo = event.target.value;\n updateFilterValue(filterValueState[0], newTo);\n };\n\n return (\n <Box\n sx={{\n display: 'inline-flex',\n flexDirection: 'row',\n alignItems: 'end',\n height: 48,\n pl: '20px',\n }}\n >\n <TextField\n name=\"date-from-input\"\n placeholder=\"From\"\n label=\"From\"\n variant=\"standard\"\n value={filterValueState[0] ?? ''}\n onChange={handleFromChange}\n type=\"date\"\n inputRef={focusElementRef}\n sx={{ mr: 2 }}\n InputLabelProps={{ shrink: true }}\n />\n <TextField\n name=\"date-to-input\"\n placeholder=\"To\"\n label=\"To\"\n variant=\"standard\"\n value={filterValueState[1] ?? ''}\n onChange={handleToChange}\n type=\"date\"\n InputProps={applying ? { endAdornment: <Icon icon={mdiSync} /> } : {}}\n InputLabelProps={{ shrink: true }}\n />\n </Box>\n );\n};\n","import { GridFilterOperator } from '@mui/x-data-grid-premium';\nimport { InputDateInterval } from '../../fields/InputDateInterval';\n\nconst isBetweenOperator: GridFilterOperator<any, string | string[], any> = {\n label: 'is between',\n value: 'isBetween',\n getApplyFilterFn: (filterItem) => {\n if (!filterItem.field || !filterItem.value || !filterItem.operator) {\n return null;\n }\n\n if (!Array.isArray(filterItem.value) || filterItem.value.length !== 2) {\n return null;\n }\n\n if (!filterItem.value[0] || !filterItem.value[1]) {\n return null;\n }\n\n // Parse as local time (not UTC) since the date input produces YYYY-MM-DD\n // strings representing dates in the user's local timezone.\n const [fromYear, fromMonth, fromDay] = filterItem.value[0].split('-').map(Number);\n const [toYear, toMonth, toDay] = filterItem.value[1].split('-').map(Number);\n\n const fromTime = new Date(fromYear, fromMonth - 1, fromDay).getTime();\n // Set upper bound to end-of-day so dateTime values later that day are included.\n const toTime = new Date(toYear, toMonth - 1, toDay, 23, 59, 59, 999).getTime();\n\n if (isNaN(fromTime) || isNaN(toTime)) {\n return null;\n }\n\n return (value) => {\n if (value == null) {\n return false;\n }\n const cellTime = value instanceof Date ? value.getTime() : new Date(value as string).getTime();\n if (isNaN(cellTime)) {\n return false;\n }\n return cellTime >= fromTime && cellTime <= toTime;\n };\n },\n InputComponent: InputDateInterval,\n};\n\nexport const DATE_IS_BETWEEN = isBetweenOperator;\n","import { getGridDateOperators as forwardOperators, GridFilterOperator } from '@mui/x-data-grid-premium';\nimport { DATE_IS_BETWEEN } from './isBetween';\n\nexport const getGridDateOperatorsExtended: (showTime?: boolean) => GridFilterOperator[] = (showTime = false) => [\n ...forwardOperators(showTime),\n DATE_IS_BETWEEN,\n];\n","import { GridFilterItem, GridFilterOperator } from '@mui/x-data-grid-premium';\n\ntype ApplyFilterFn = ((value: any, row?: any, column?: any, apiRef?: any) => boolean) | null;\ntype GetApplyFilterFn = (filterItem: GridFilterItem, column?: any) => ApplyFilterFn;\n\nconst lowercaseValue = (value: unknown): unknown => {\n if (typeof value === 'string') {\n return value.toLowerCase();\n }\n if (Array.isArray(value)) {\n return value.map(lowercaseValue);\n }\n return value;\n};\n\n/**\n * Wraps a filter operator's `getApplyFilterFn` to lowercase both the cell value\n * and the filter value before comparison, making the operator case-insensitive.\n *\n * Only affects string-based values — numbers, dates, and booleans pass through unchanged.\n */\nexport const wrapCaseInsensitive = (operator: GridFilterOperator): GridFilterOperator => {\n const originalGetApplyFilterFn = operator.getApplyFilterFn as GetApplyFilterFn;\n\n return {\n ...operator,\n getApplyFilterFn: (filterItem: GridFilterItem, column?: any) => {\n const caseInsensitiveFilterItem = {\n ...filterItem,\n value: lowercaseValue(filterItem.value),\n };\n\n const originalFn = originalGetApplyFilterFn(caseInsensitiveFilterItem, column);\n if (!originalFn) {\n return null;\n }\n\n return (value: any, row?: any, column?: any, apiRef?: any) => {\n const lowercasedValue = lowercaseValue(value);\n return originalFn(lowercasedValue, row, column, apiRef);\n };\n },\n };\n};\n\n/**\n * Applies case-insensitive wrapping to an array of filter operators.\n */\nexport const makeCaseInsensitive = (operators: GridFilterOperator[]): GridFilterOperator[] => {\n return operators.map(wrapCaseInsensitive);\n};\n","import { GridColType, GridColTypeDef } from '@mui/x-data-grid-premium';\nimport { operatorList } from '../operators';\n\nexport const getRsStringColumnType = () => {\n return {\n type: 'string' as const,\n filterOperators: operatorList.rsString,\n } as GridColTypeDef;\n};\n\nexport const getRsNumberColumnType = () => {\n return {\n type: 'number' as const,\n filterOperators: operatorList.rsNumber,\n } as GridColTypeDef;\n};\n\nexport const getRsSingleSelectColumnType = () => {\n return {\n type: 'singleSelect' as const,\n filterOperators: operatorList.rsSingleSelect,\n } as GridColTypeDef;\n};\n\nexport const getRsSingleSelectWithShortOperatorListColumnType = () => {\n return {\n type: 'singleSelect' as const,\n filterOperators: operatorList.rsSingleSelectWithShortOperatorList,\n } as GridColTypeDef;\n};\n\nexport const getRsMultipleSelectColumnType = () => {\n return {\n type: 'singleSelect' as const,\n filterOperators: operatorList.rsMultipleSelect,\n } as GridColTypeDef;\n};\n\nexport const getRsMultipleSelectWithShortOperatorListColumnType = () => {\n return {\n type: 'singleSelect' as const,\n filterOperators: operatorList.rsMultipleSelectWithShortOperatorList,\n } as GridColTypeDef;\n};\n\nexport const customColumnTypes: Record<GridColType | string, GridColTypeDef> = {\n rsString: getRsStringColumnType(),\n rsNumber: getRsNumberColumnType(),\n rsSingleSelect: getRsSingleSelectColumnType(),\n rsSingleSelectWithShortOperatorList: getRsSingleSelectWithShortOperatorListColumnType(),\n rsMultipleSelect: getRsMultipleSelectColumnType(),\n rsMultipleSelectWithShortOperatorList: getRsMultipleSelectWithShortOperatorListColumnType(),\n};\n","import {\n getGridStringOperators as nativeGetGridStringOperators,\n getGridNumericOperators as nativeGetGridNumericOperators,\n getGridDateOperators as nativeGetGridDateOperators,\n GridColDef,\n GridColType,\n GridFilterOperator,\n} from '@mui/x-data-grid-premium';\n\nimport { DOES_NOT_CONTAIN } from './operators/string/doesNotContain';\nimport { DOES_NOT_END_WITH } from './operators/string/doesNotEndWith';\nimport { DOES_NOT_EQUAL } from './operators/string/doesNotEqual';\nimport { DOES_NOT_HAVE, DOES_NOT_HAVE_WITH_SELECT } from './operators/string/doesNotHave';\nimport { DOES_NOT_START_WITH } from './operators/string/doesNotStartWith';\nimport { HAS, HAS_WITH_SELECT } from './operators/string/has';\nimport { HAS_ONLY, HAS_ONLY_WITH_SELECT } from './operators/string/hasOnly';\nimport { IS_WITH_SELECT } from './operators/string/is';\nimport { IS_NOT_WITH_SELECT } from './operators/string/isNot';\n\nimport { CONTAINS_ANY_OF } from './operators/string-array/containsAnyOf';\nimport { DOES_NOT_CONTAIN_ANY_OF } from './operators/string-array/doesNotContainAnyOf';\nimport { DOES_NOT_END_WITH_ANY_OF } from './operators/string-array/doesNotEndWithAnyOf';\nimport { DOES_NOT_HAVE_ANY_OF, DOES_NOT_HAVE_ANY_OF_WITH_SELECT } from './operators/string-array/doesNotHaveAnyOf';\nimport { DOES_NOT_START_WITH_ANY_OF } from './operators/string-array/doesNotStartWithAnyOf';\nimport { ENDS_WITH_ANY_OF } from './operators/string-array/endsWithAnyOf';\nimport { HAS_ALL_OF, HAS_ALL_OF_WITH_SELECT } from './operators/string-array/hasAllOf';\nimport { HAS_ANY_OF, HAS_ANY_OF_WITH_SELECT } from './operators/string-array/hasAnyOf';\nimport { IS_ANY_OF, IS_ANY_OF_WITH_SELECT } from './operators/string-array/isAnyOf';\nimport { IS_NOT_ANY_OF, IS_NOT_ANY_OF_WITH_SELECT } from './operators/string-array/isNotAnyOf';\nimport { STARTS_WITH_ANY_OF } from './operators/string-array/startsWithAnyOf';\n\nimport { IS_BETWEEN } from './operators/numeric/isBetween';\nimport { DATE_IS_BETWEEN } from './operators/date/isBetween';\nimport { ARRAY_IS_EMPTY, ARRAY_IS_NOT_EMPTY } from './operators/common/isEmpty';\nimport { makeCaseInsensitive } from './operators/utils/caseInsensitive';\n\n// ---------------------------------------------------------------------------\n// Operator name unions (for typed `exclude`)\n// ---------------------------------------------------------------------------\n\nexport type StringOperatorName =\n | 'contains'\n | 'doesNotContain'\n | 'equals'\n | 'doesNotEqual'\n | 'startsWith'\n | 'doesNotStartWith'\n | 'endsWith'\n | 'doesNotEndWith'\n | 'isEmpty'\n | 'isNotEmpty'\n | 'isAnyOf'\n | 'isNotAnyOf'\n | 'containsAnyOf'\n | 'doesNotContainAnyOf'\n | 'startsWithAnyOf'\n | 'doesNotStartWithAnyOf'\n | 'endsWithAnyOf'\n | 'doesNotEndWithAnyOf';\n\nexport type NumberOperatorName = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'isEmpty' | 'isNotEmpty' | 'isBetween';\n\nexport type DateOperatorName =\n | 'is'\n | 'not'\n | 'after'\n | 'onOrAfter'\n | 'before'\n | 'onOrBefore'\n | 'isEmpty'\n | 'isNotEmpty'\n | 'isBetween';\n\nexport type SingleSelectOperatorName = 'is' | 'isNot' | 'isAnyOf' | 'isNotAnyOf' | 'isEmpty' | 'isNotEmpty';\n\nexport type MultiSelectOperatorName =\n | 'has'\n | 'doesNotHave'\n | 'hasAnyOf'\n | 'hasAllOf'\n | 'doesNotHaveAnyOf'\n | 'hasOnly'\n | 'isEmpty'\n | 'isNotEmpty';\n\nexport type TagsOperatorName =\n | 'has'\n | 'doesNotHave'\n | 'hasAnyOf'\n | 'hasAllOf'\n | 'doesNotHaveAnyOf'\n | 'hasOnly'\n | 'containsAnyOf'\n | 'doesNotContainAnyOf'\n | 'isEmpty'\n | 'isNotEmpty';\n\n// ---------------------------------------------------------------------------\n// Column type\n// ---------------------------------------------------------------------------\n\nexport type ColumnType = 'string' | 'number' | 'date' | 'dateTime' | 'singleSelect' | 'multiSelect' | 'tags';\n\n// ---------------------------------------------------------------------------\n// Options: discriminated union (built-in vs override)\n// ---------------------------------------------------------------------------\n\ntype BuiltInOptions<TOperatorName extends string> = {\n compact?: boolean;\n exclude?: TOperatorName[];\n extend?: GridFilterOperator[];\n caseSensitive?: boolean;\n};\n\ntype OverrideOptions = {\n operators: GridFilterOperator[];\n};\n\ntype StringColumnOptions = BuiltInOptions<StringOperatorName> | OverrideOptions;\ntype NumberColumnOptions = Omit<BuiltInOptions<NumberOperatorName>, 'caseSensitive'> | OverrideOptions;\ntype DateColumnOptions = Omit<BuiltInOptions<DateOperatorName>, 'caseSensitive'> | OverrideOptions;\ntype SingleSelectColumnOptions = BuiltInOptions<SingleSelectOperatorName> | OverrideOptions;\ntype MultiSelectColumnOptions = BuiltInOptions<MultiSelectOperatorName> | OverrideOptions;\ntype TagsColumnOptions = BuiltInOptions<TagsOperatorName> | OverrideOptions;\n\nexport type ColumnOptions<T extends ColumnType> = T extends 'string'\n ? StringColumnOptions\n : T extends 'number'\n ? NumberColumnOptions\n : T extends 'date' | 'dateTime'\n ? DateColumnOptions\n : T extends 'singleSelect'\n ? SingleSelectColumnOptions\n : T extends 'multiSelect'\n ? MultiSelectColumnOptions\n : T extends 'tags'\n ? TagsColumnOptions\n : never;\n\n// ---------------------------------------------------------------------------\n// Full & compact operator lists\n// ---------------------------------------------------------------------------\n\nconst getStringOperatorsFull = (): GridFilterOperator[] => [\n ...nativeGetGridStringOperators().filter((op) => !['isAnyOf'].includes(op.value)),\n DOES_NOT_CONTAIN,\n DOES_NOT_EQUAL,\n DOES_NOT_START_WITH,\n DOES_NOT_END_WITH,\n IS_ANY_OF,\n IS_NOT_ANY_OF,\n CONTAINS_ANY_OF,\n DOES_NOT_CONTAIN_ANY_OF,\n STARTS_WITH_ANY_OF,\n DOES_NOT_START_WITH_ANY_OF,\n ENDS_WITH_ANY_OF,\n DOES_NOT_END_WITH_ANY_OF,\n];\n\nconst getStringOperatorsCompact = (): GridFilterOperator[] => [\n ...nativeGetGridStringOperators().filter((op) => !['isAnyOf', 'startsWith', 'endsWith'].includes(op.value)),\n DOES_NOT_CONTAIN,\n DOES_NOT_EQUAL,\n IS_ANY_OF,\n];\n\nconst getNumberOperatorsFull = (): GridFilterOperator[] => [...nativeGetGridNumericOperators(), IS_BETWEEN];\n\nconst getNumberOperatorsCompact = (): GridFilterOperator[] => nativeGetGridNumericOperators();\n\nconst getDateOperatorsFull = (showTime: boolean): GridFilterOperator[] => [\n ...nativeGetGridDateOperators(showTime),\n DATE_IS_BETWEEN,\n];\n\nconst getDateOperatorsCompact = (showTime: boolean): GridFilterOperator[] => nativeGetGridDateOperators(showTime);\n\nconst getSingleSelectOperatorsFull = (): GridFilterOperator[] => [\n IS_WITH_SELECT,\n IS_NOT_WITH_SELECT,\n IS_ANY_OF_WITH_SELECT,\n IS_NOT_ANY_OF_WITH_SELECT,\n ARRAY_IS_EMPTY,\n ARRAY_IS_NOT_EMPTY,\n];\n\nconst getSingleSelectOperatorsCompact = (): GridFilterOperator[] => [\n IS_WITH_SELECT,\n IS_NOT_WITH_SELECT,\n IS_ANY_OF_WITH_SELECT,\n];\n\nconst getMultiSelectOperatorsFull = (): GridFilterOperator[] => [\n HAS_WITH_SELECT,\n DOES_NOT_HAVE_WITH_SELECT,\n HAS_ANY_OF_WITH_SELECT,\n HAS_ALL_OF_WITH_SELECT,\n DOES_NOT_HAVE_ANY_OF_WITH_SELECT,\n HAS_ONLY_WITH_SELECT,\n ARRAY_IS_EMPTY,\n ARRAY_IS_NOT_EMPTY,\n];\n\nconst getMultiSelectOperatorsCompact = (): GridFilterOperator[] => [\n HAS_WITH_SELECT,\n DOES_NOT_HAVE_WITH_SELECT,\n HAS_ANY_OF_WITH_SELECT,\n];\n\nconst getTagsOperatorsFull = (): GridFilterOperator[] => [\n HAS,\n DOES_NOT_HAVE,\n HAS_ANY_OF,\n HAS_ALL_OF,\n DOES_NOT_HAVE_ANY_OF,\n HAS_ONLY,\n CONTAINS_ANY_OF,\n DOES_NOT_CONTAIN_ANY_OF,\n ARRAY_IS_EMPTY,\n ARRAY_IS_NOT_EMPTY,\n];\n\nconst getTagsOperatorsCompact = (): GridFilterOperator[] => [HAS, DOES_NOT_HAVE, HAS_ANY_OF];\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst isOverrideOptions = (options: any): options is OverrideOptions => {\n return options && 'operators' in options;\n};\n\nconst arraySortComparator = (a: unknown, b: unknown): number => {\n const arrA = Array.isArray(a) ? a : [];\n const arrB = Array.isArray(b) ? b : [];\n if (arrA.length !== arrB.length) {\n return arrA.length - arrB.length;\n }\n const strA = arrA.map(String).sort().join(',');\n const strB = arrB.map(String).sort().join(',');\n return strA.localeCompare(strB);\n};\n\nconst arrayValueFormatter = (value: unknown): string => {\n if (Array.isArray(value)) {\n return value.map(String).join(', ');\n }\n return value != null ? String(value) : '';\n};\n\n// ---------------------------------------------------------------------------\n// Operator type strings that support case-insensitive wrapping\n// ---------------------------------------------------------------------------\n\nconst CASE_INSENSITIVE_TYPES: ColumnType[] = ['string', 'singleSelect', 'tags'];\n\n// ---------------------------------------------------------------------------\n// createColumn()\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a column configuration with the appropriate MUI type and filter operators\n * for the given column type. Spread the result into your column definition.\n *\n * @example\n * ```tsx\n * const columns = [\n * { ...createColumn('string'), field: 'name', headerName: 'Name' },\n * { ...createColumn('number'), field: 'price', headerName: 'Price' },\n * { ...createColumn('singleSelect', { compact: true }), field: 'status', valueOptions: ['active', 'inactive'] },\n * { ...createColumn('multiSelect'), field: 'tags', valueOptions: ['a', 'b', 'c'] },\n * { ...createColumn('tags'), field: 'labels', headerName: 'Labels' },\n * ];\n * ```\n */\nexport function createColumn<T extends ColumnType>(type: T, options?: ColumnOptions<T>): Partial<GridColDef> {\n // Override mode: consumer provides full operator list\n if (options && isOverrideOptions(options)) {\n const result: Partial<GridColDef> = {\n type: getMuiType(type),\n filterOperators: options.operators,\n };\n if (type === 'multiSelect' || type === 'tags') {\n result.sortComparator = arraySortComparator;\n result.valueFormatter = arrayValueFormatter;\n }\n return result;\n }\n\n // Built-in mode\n const builtInOpts = (options ?? {}) as BuiltInOptions<string>;\n const compact = builtInOpts.compact ?? false;\n const caseSensitive = builtInOpts.caseSensitive ?? false;\n\n let operators = getOperatorsForType(type, compact);\n\n // Apply exclude\n if (builtInOpts.exclude && builtInOpts.exclude.length > 0) {\n const excludeSet = new Set(builtInOpts.exclude);\n operators = operators.filter((op) => !excludeSet.has(op.value));\n }\n\n // Apply case-insensitive wrapping\n if (!caseSensitive && CASE_INSENSITIVE_TYPES.includes(type)) {\n operators = makeCaseInsensitive(operators);\n }\n\n // Apply extend\n if (builtInOpts.extend && builtInOpts.extend.length > 0) {\n operators = [...operators, ...builtInOpts.extend];\n }\n\n const result: Partial<GridColDef> = {\n type: getMuiType(type),\n filterOperators: operators,\n };\n\n if (type === 'multiSelect' || type === 'tags') {\n result.sortComparator = arraySortComparator;\n result.valueFormatter = arrayValueFormatter;\n }\n\n return result;\n}\n\nfunction getMuiType(type: ColumnType): GridColType {\n switch (type) {\n case 'multiSelect':\n case 'singleSelect':\n return 'singleSelect';\n case 'tags':\n return 'string';\n default:\n return type as GridColType;\n }\n}\n\nfunction getOperatorsForType(type: ColumnType, compact: boolean): GridFilterOperator[] {\n switch (type) {\n case 'string':\n return compact ? getStringOperatorsCompact() : getStringOperatorsFull();\n case 'number':\n return compact ? getNumberOperatorsCompact() : getNumberOperatorsFull();\n case 'date':\n return compact ? getDateOperatorsCompact(false) : getDateOperatorsFull(false);\n case 'dateTime':\n return compact ? getDateOperatorsCompact(true) : getDateOperatorsFull(true);\n case 'singleSelect':\n return compact ? getSingleSelectOperatorsCompact() : getSingleSelectOperatorsFull();\n case 'multiSelect':\n return compact ? getMultiSelectOperatorsCompact() : getMultiSelectOperatorsFull();\n case 'tags':\n return compact ? getTagsOperatorsCompact() : getTagsOperatorsFull();\n }\n}\n","/**\n * A React Router v5 / connected-react-router adapter for `StatefulDataGrid.useRouter`.\n *\n * Defers `history.replace` via `queueMicrotask` to avoid the\n * \"Cannot update during an existing state transition\" warning\n * that connected-react-router triggers when the grid synchronises\n * URL state during render.\n *\n * @example\n * ```tsx\n * import { createReactRouterV5Adapter } from '@redsift/table';\n *\n * const useRouter = createReactRouterV5Adapter(history);\n *\n * <StatefulDataGrid useRouter={useRouter} … />\n * ```\n */\n\n/** Minimal subset of React Router v5 `history` used by the adapter. */\nexport interface ReactRouterV5History {\n location: {\n pathname: string;\n search: string;\n };\n replace: (path: { pathname: string; search: string }) => void;\n}\n\n/**\n * Create a `useRouter` hook compatible with `StatefulDataGrid` from a\n * React Router v5 `history` object.\n */\nexport const createReactRouterV5Adapter = (\n history: ReactRouterV5History\n): (() => { pathname: string; search: string; historyReplace: (newSearch: string) => void }) => {\n return () => ({\n pathname: history.location.pathname,\n search: history.location.search.replace(/^\\?/, ''),\n historyReplace: (newSearch: string) => {\n queueMicrotask(() => {\n history.replace({\n pathname: history.location.pathname,\n search: newSearch ? `?${newSearch}` : '',\n });\n });\n },\n });\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { GridFilterModel } from '@mui/x-data-grid-premium';\n\nconst EMPTY_FILTER_MODEL: GridFilterModel = { items: [] };\n\nexport interface UseLinkedFilterModelOptions {\n /** Starting filter model. Defaults to `{ items: [] }`. */\n initialFilterModel?: GridFilterModel;\n /**\n * Debounce window (ms) applied to changes coming from the DataGrid filter panel.\n * Card-driven changes via `setMultiSelect` / `setBoolean` are never debounced.\n * Defaults to `300`. Pass `0` to disable.\n */\n debounceMs?: number;\n /** Optional callback fired on every settled filter model change. */\n onChange?: (model: GridFilterModel) => void;\n}\n\nexport interface UseLinkedFilterModelReturn {\n /** Current filter model. Pass to DataGrid `filterModel` and read for DataCard derivations. */\n filterModel: GridFilterModel;\n /** Bind to DataGrid `onFilterModelChange`. Debounced for panel changes. */\n onFilterModelChange: (model: GridFilterModel) => void;\n /** Read selected values for an `isAnyOf` / `hasAnyOf` field. Empty array when not set. */\n getSelected: (field: string) => string[];\n /** Read the raw filter value for a field (e.g. boolean toggles). */\n getValue: (field: string) => unknown;\n /** Set a multi-select filter from a DataCard. Empty array clears the field. */\n setMultiSelect: (field: string, values: string[], operator?: string) => void;\n /** Set a boolean filter. Pass `null` to clear. */\n setBoolean: (field: string, value: boolean | null) => void;\n /** Remove a single field from the filter model. */\n clearField: (field: string) => void;\n /** Reset the filter model to the initial value. */\n reset: () => void;\n /**\n * Whether a field's filter was set externally (DataGrid filter panel) rather than\n * via this hook's setters. Useful for disabling the corresponding DataCard so the\n * panel and card don't fight over the same field.\n */\n isFieldExternallyControlled: (field: string) => boolean;\n}\n\nconst sameItems = (a: GridFilterModel, b: GridFilterModel): boolean =>\n JSON.stringify(a.items) === JSON.stringify(b.items);\n\nconst filterOutField = (model: GridFilterModel, field: string): GridFilterModel['items'] =>\n model.items.filter((item) => item.field !== field);\n\nconst nextItemId = (() => {\n let id = 1;\n return () => id++;\n})();\n\n/**\n * Bridge a DataGrid `filterModel` and the DataCards that drive (and reflect) it.\n *\n * Without this hook, every drilldowned datagrid page hand-rolls the same plumbing:\n * derive selections from `filterModel`, write them back via raw `setFilterModel`\n * mutations, debounce panel changes, and track which fields the panel \"owns\" so\n * cards don't fight the panel for control. SOFA-6 shipped this logic ad hoc and\n * got it wrong (no debounce, prop-drilled state, no panel/card reconciliation).\n *\n * @example\n * const filter = useLinkedFilterModel();\n *\n * <DataCard.Listbox\n * values={filter.getSelected('Category')}\n * onChange={(values) => filter.setMultiSelect('Category', values)}\n * isDisabled={filter.isFieldExternallyControlled('Category')}\n * >\n * {…}\n * </DataCard.Listbox>\n *\n * <DataGrid filterModel={filter.filterModel} onFilterModelChange={filter.onFilterModelChange} />\n */\nexport function useLinkedFilterModel(options: UseLinkedFilterModelOptions = {}): UseLinkedFilterModelReturn {\n const { initialFilterModel = EMPTY_FILTER_MODEL, debounceMs = 300, onChange } = options;\n\n const [filterModel, setFilterModel] = useState<GridFilterModel>(initialFilterModel);\n\n // Fields whose current filter was set by setMultiSelect / setBoolean (not the panel).\n const cardOwnedFields = useRef<Set<string>>(new Set());\n // Marks the next onFilterModelChange as originating from a card setter so we skip debouncing.\n const skipNextDebounce = useRef(false);\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n useEffect(() => {\n return () => {\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n };\n }, []);\n\n const commit = useCallback((next: GridFilterModel) => {\n setFilterModel((prev) => {\n if (sameItems(prev, next)) return prev;\n onChangeRef.current?.(next);\n return next;\n });\n }, []);\n\n const onFilterModelChange = useCallback(\n (model: GridFilterModel) => {\n if (skipNextDebounce.current) {\n skipNextDebounce.current = false;\n // If the incoming model matches the current state, this is a DataGrid echo\n // of a card setter — commit (no-op) and preserve card ownership.\n if (sameItems(filterModel, model)) {\n commit(model);\n return;\n }\n // Otherwise a real panel change arrived — fall through to ownership logic.\n }\n\n // Panel change — drop card ownership for fields the panel now controls / has cleared,\n // then debounce the commit.\n const panelFields = new Set(model.items.map((item) => item.field));\n for (const field of Array.from(cardOwnedFields.current)) {\n if (!panelFields.has(field)) cardOwnedFields.current.delete(field);\n }\n // If the panel touched a field the card previously owned, transfer ownership to the panel.\n for (const field of panelFields) {\n cardOwnedFields.current.delete(field);\n }\n\n if (debounceMs <= 0) {\n commit(model);\n return;\n }\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n debounceTimer.current = setTimeout(() => {\n debounceTimer.current = null;\n commit(model);\n }, debounceMs);\n },\n [commit, debounceMs, filterModel]\n );\n\n const getSelected = useCallback(\n (field: string): string[] => {\n const item = filterModel.items.find((i) => i.field === field);\n if (!item || item.value === undefined || item.value === null) return [];\n if (item.operator === 'isAnyOf' || item.operator === 'hasAnyOf') {\n return Array.isArray(item.value) ? (item.value as string[]) : [String(item.value)];\n }\n return [];\n },\n [filterModel]\n );\n\n const getValue = useCallback(\n (field: string): unknown => filterModel.items.find((i) => i.field === field)?.value,\n [filterModel]\n );\n\n const setMultiSelect = useCallback((field: string, values: string[], operator: string = 'isAnyOf') => {\n skipNextDebounce.current = true;\n setFilterModel((prev) => {\n const items = filterOutField(prev, field);\n if (values.length > 0) {\n items.push({ field, id: nextItemId(), operator, value: values });\n cardOwnedFields.current.add(field);\n } else {\n cardOwnedFields.current.delete(field);\n }\n const next: GridFilterModel = { ...prev, items };\n if (sameItems(prev, next)) return prev;\n onChangeRef.current?.(next);\n return next;\n });\n }, []);\n\n const setBoolean = useCallback((field: string, value: boolean | null) => {\n skipNextDebounce.current = true;\n setFilterModel((prev) => {\n const items = filterOutField(prev, field);\n if (value !== null) {\n items.push({ field, id: nextItemId(), operator: 'is', value: String(value) });\n cardOwnedFields.current.add(field);\n } else {\n cardOwnedFields.current.delete(field);\n }\n const next: GridFilterModel = { ...prev, items };\n if (sameItems(prev, next)) return prev;\n onChangeRef.current?.(next);\n return next;\n });\n }, []);\n\n const clearField = useCallback((field: string) => {\n skipNextDebounce.current = true;\n setFilterModel((prev) => {\n const items = filterOutField(prev, field);\n cardOwnedFields.current.delete(field);\n const next: GridFilterModel = { ...prev, items };\n if (sameItems(prev, next)) return prev;\n onChangeRef.current?.(next);\n return next;\n });\n }, []);\n\n const reset = useCallback(() => {\n skipNextDebounce.current = true;\n cardOwnedFields.current.clear();\n commit(initialFilterModel);\n }, [commit, initialFilterModel]);\n\n const isFieldExternallyControlled = useCallback(\n (field: string): boolean => {\n const hasFilter = filterModel.items.some((item) => item.field === field);\n return hasFilter && !cardOwnedFields.current.has(field);\n },\n [filterModel]\n );\n\n return useMemo(\n () => ({\n filterModel,\n onFilterModelChange,\n getSelected,\n getValue,\n setMultiSelect,\n setBoolean,\n clearField,\n reset,\n isFieldExternallyControlled,\n }),\n [\n filterModel,\n onFilterModelChange,\n getSelected,\n getValue,\n setMultiSelect,\n setBoolean,\n clearField,\n reset,\n isFieldExternallyControlled,\n ]\n );\n}\n"],"names":["DETAIL_PANEL_TOGGLE_COL_DEF","GRID_DETAIL_PANEL_TOGGLE_COL_DEF","type","isAnyOfIOperator","label","value","getApplyFilterFn","filterItem","field","operator","lowerCaseFilterValues","map","v","String","toLowerCase","length","paramValues","Array","isArray","paramValue","includes","InputComponent","GridFilterInputMultipleValue","IS_ANY_OF_I","IS_ANY_OF_I_WITH_SELECT","_objectSpread","GridFilterInputMultipleSingleSelect","SUBMIT_FILTER_STROKE_TIME","InputDateInterval","props","_item$value","_filterValueState$","_filterValueState$2","item","applyValue","focusElementRef","filterTimeout","React","useRef","filterValueState","setFilterValueState","useState","applying","setIsApplying","useEffect","clearTimeout","current","_item$value2","itemValue","updateFilterValue","from","to","setTimeout","handleFromChange","event","newFrom","target","handleToChange","newTo","createElement","Box","sx","display","flexDirection","alignItems","height","pl","TextField","name","placeholder","variant","onChange","inputRef","mr","InputLabelProps","shrink","InputProps","endAdornment","Icon","icon","mdiSync","isBetweenOperator","fromYear","fromMonth","fromDay","split","Number","toYear","toMonth","toDay","fromTime","Date","getTime","toTime","isNaN","cellTime","DATE_IS_BETWEEN","getGridDateOperatorsExtended","showTime","arguments","undefined","forwardOperators","lowercaseValue","wrapCaseInsensitive","originalGetApplyFilterFn","column","caseInsensitiveFilterItem","originalFn","row","apiRef","lowercasedValue","makeCaseInsensitive","operators","getRsStringColumnType","filterOperators","operatorList","rsString","getRsNumberColumnType","rsNumber","getRsSingleSelectColumnType","rsSingleSelect","getRsSingleSelectWithShortOperatorListColumnType","rsSingleSelectWithShortOperatorList","getRsMultipleSelectColumnType","rsMultipleSelect","getRsMultipleSelectWithShortOperatorListColumnType","rsMultipleSelectWithShortOperatorList","customColumnTypes","getStringOperatorsFull","nativeGetGridStringOperators","filter","op","DOES_NOT_CONTAIN","DOES_NOT_EQUAL","DOES_NOT_START_WITH","DOES_NOT_END_WITH","IS_ANY_OF","IS_NOT_ANY_OF","CONTAINS_ANY_OF","DOES_NOT_CONTAIN_ANY_OF","STARTS_WITH_ANY_OF","DOES_NOT_START_WITH_ANY_OF","ENDS_WITH_ANY_OF","DOES_NOT_END_WITH_ANY_OF","getStringOperatorsCompact","getNumberOperatorsFull","nativeGetGridNumericOperators","IS_BETWEEN","getNumberOperatorsCompact","getDateOperatorsFull","nativeGetGridDateOperators","getDateOperatorsCompact","getSingleSelectOperatorsFull","IS_WITH_SELECT","IS_NOT_WITH_SELECT","IS_ANY_OF_WITH_SELECT","IS_NOT_ANY_OF_WITH_SELECT","ARRAY_IS_EMPTY","ARRAY_IS_NOT_EMPTY","getSingleSelectOperatorsCompact","getMultiSelectOperatorsFull","HAS_WITH_SELECT","DOES_NOT_HAVE_WITH_SELECT","HAS_ANY_OF_WITH_SELECT","HAS_ALL_OF_WITH_SELECT","DOES_NOT_HAVE_ANY_OF_WITH_SELECT","HAS_ONLY_WITH_SELECT","getMultiSelectOperatorsCompact","getTagsOperatorsFull","HAS","DOES_NOT_HAVE","HAS_ANY_OF","HAS_ALL_OF","DOES_NOT_HAVE_ANY_OF","HAS_ONLY","getTagsOperatorsCompact","isOverrideOptions","options","arraySortComparator","a","b","arrA","arrB","strA","sort","join","strB","localeCompare","arrayValueFormatter","CASE_INSENSITIVE_TYPES","createColumn","_builtInOpts$compact","_builtInOpts$caseSens","result","getMuiType","sortComparator","valueFormatter","builtInOpts","compact","caseSensitive","getOperatorsForType","exclude","excludeSet","Set","has","extend","createReactRouterV5Adapter","history","pathname","location","search","replace","historyReplace","newSearch","queueMicrotask","EMPTY_FILTER_MODEL","items","sameItems","JSON","stringify","filterOutField","model","nextItemId","id","useLinkedFilterModel","initialFilterModel","debounceMs","filterModel","setFilterModel","cardOwnedFields","skipNextDebounce","debounceTimer","onChangeRef","commit","useCallback","next","prev","_onChangeRef$current","call","onFilterModelChange","panelFields","delete","getSelected","find","i","getValue","_filterModel$items$fi","setMultiSelect","values","_onChangeRef$current2","push","add","setBoolean","_onChangeRef$current3","clearField","_onChangeRef$current4","reset","clear","isFieldExternallyControlled","hasFilter","some","useMemo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/columns/detailPanelToggleColDef.ts","../src/utils/operators/string-array/isAnyOfI.tsx","../src/utils/fields/InputDateInterval.tsx","../src/utils/operators/date/isBetween.tsx","../src/utils/operators/date/getGridDateOperators.ts","../src/utils/operators/utils/caseInsensitive.ts","../src/utils/columnTypes/index.ts","../src/utils/createColumn.ts","../src/adapters/reactRouterV5.ts","../src/hooks/useLinkedFilterModel.ts"],"sourcesContent":["import { GRID_DETAIL_PANEL_TOGGLE_COL_DEF } from '@mui/x-data-grid-premium';\n\n// Don't use a spread operator there or it will break the build due to MUI internal components\nconst DETAIL_PANEL_TOGGLE_COL_DEF = GRID_DETAIL_PANEL_TOGGLE_COL_DEF;\nDETAIL_PANEL_TOGGLE_COL_DEF.type = 'actions';\n\nexport { DETAIL_PANEL_TOGGLE_COL_DEF };\n","import { GridFilterInputMultipleSingleSelect, GridFilterInputMultipleValue, GridFilterOperator } from '@mui/x-data-grid-premium';\n\nconst isAnyOfIOperator: GridFilterOperator<any, string | string[], any> = {\n label: 'is any of (case-insensitive)',\n value: 'isAnyOfI',\n getApplyFilterFn: (filterItem) => {\n if (!filterItem.field || !filterItem.value || !filterItem.operator) {\n return null;\n }\n const lowerCaseFilterValues = filterItem.value.map((v: string) => String(v).toLowerCase());\n\n return (value) => {\n if (filterItem.value.length === 0) {\n return true;\n }\n if (value == null) {\n return false;\n }\n const paramValues = Array.isArray(value) ? value : [value];\n\n for (const paramValue of paramValues) {\n if (lowerCaseFilterValues.includes(String(paramValue).toLowerCase())) {\n return true;\n }\n }\n return false;\n };\n },\n InputComponent: GridFilterInputMultipleValue,\n};\n\nexport const IS_ANY_OF_I = isAnyOfIOperator;\n\nexport const IS_ANY_OF_I_WITH_SELECT = { ...IS_ANY_OF_I, InputComponent: GridFilterInputMultipleSingleSelect };\n","import * as React from 'react';\nimport Box from '@mui/material/Box';\nimport TextField, { TextFieldProps } from '@mui/material/TextField';\nimport { Icon } from '@redsift/design-system';\nimport { mdiSync } from '@redsift/icons';\nimport { GridFilterInputValueProps } from '@mui/x-data-grid-premium';\n\nconst SUBMIT_FILTER_STROKE_TIME = 500;\n\nexport const InputDateInterval = (props: GridFilterInputValueProps) => {\n const { item, applyValue, focusElementRef = null } = props;\n\n const filterTimeout = React.useRef<ReturnType<typeof setTimeout>>();\n const [filterValueState, setFilterValueState] = React.useState<[string, string]>(item.value ?? ['', '']);\n const [applying, setIsApplying] = React.useState(false);\n\n React.useEffect(() => {\n return () => {\n clearTimeout(filterTimeout.current);\n };\n }, []);\n\n React.useEffect(() => {\n const itemValue = item.value ?? ['', ''];\n setFilterValueState(itemValue);\n }, [item.value]);\n\n const updateFilterValue = (from: string, to: string) => {\n clearTimeout(filterTimeout.current);\n setFilterValueState([from, to]);\n\n setIsApplying(true);\n filterTimeout.current = setTimeout(() => {\n setIsApplying(false);\n applyValue({ ...item, value: [from, to] });\n }, SUBMIT_FILTER_STROKE_TIME);\n };\n\n const handleFromChange: TextFieldProps['onChange'] = (event) => {\n const newFrom = event.target.value;\n updateFilterValue(newFrom, filterValueState[1]);\n };\n\n const handleToChange: TextFieldProps['onChange'] = (event) => {\n const newTo = event.target.value;\n updateFilterValue(filterValueState[0], newTo);\n };\n\n return (\n <Box\n sx={{\n display: 'inline-flex',\n flexDirection: 'row',\n alignItems: 'end',\n height: 48,\n pl: '20px',\n }}\n >\n <TextField\n name=\"date-from-input\"\n placeholder=\"From\"\n label=\"From\"\n variant=\"standard\"\n value={filterValueState[0] ?? ''}\n onChange={handleFromChange}\n type=\"date\"\n inputRef={focusElementRef}\n sx={{ mr: 2 }}\n InputLabelProps={{ shrink: true }}\n />\n <TextField\n name=\"date-to-input\"\n placeholder=\"To\"\n label=\"To\"\n variant=\"standard\"\n value={filterValueState[1] ?? ''}\n onChange={handleToChange}\n type=\"date\"\n InputProps={applying ? { endAdornment: <Icon icon={mdiSync} /> } : {}}\n InputLabelProps={{ shrink: true }}\n />\n </Box>\n );\n};\n","import { GridFilterOperator } from '@mui/x-data-grid-premium';\nimport { InputDateInterval } from '../../fields/InputDateInterval';\n\nconst isBetweenOperator: GridFilterOperator<any, string | string[], any> = {\n label: 'is between',\n value: 'isBetween',\n getApplyFilterFn: (filterItem) => {\n if (!filterItem.field || !filterItem.value || !filterItem.operator) {\n return null;\n }\n\n if (!Array.isArray(filterItem.value) || filterItem.value.length !== 2) {\n return null;\n }\n\n if (!filterItem.value[0] || !filterItem.value[1]) {\n return null;\n }\n\n // Parse as local time (not UTC) since the date input produces YYYY-MM-DD\n // strings representing dates in the user's local timezone.\n const [fromYear, fromMonth, fromDay] = filterItem.value[0].split('-').map(Number);\n const [toYear, toMonth, toDay] = filterItem.value[1].split('-').map(Number);\n\n const fromTime = new Date(fromYear, fromMonth - 1, fromDay).getTime();\n // Set upper bound to end-of-day so dateTime values later that day are included.\n const toTime = new Date(toYear, toMonth - 1, toDay, 23, 59, 59, 999).getTime();\n\n if (isNaN(fromTime) || isNaN(toTime)) {\n return null;\n }\n\n return (value) => {\n if (value == null) {\n return false;\n }\n const cellTime = value instanceof Date ? value.getTime() : new Date(value as string).getTime();\n if (isNaN(cellTime)) {\n return false;\n }\n return cellTime >= fromTime && cellTime <= toTime;\n };\n },\n InputComponent: InputDateInterval,\n};\n\nexport const DATE_IS_BETWEEN = isBetweenOperator;\n","import { getGridDateOperators as forwardOperators, GridFilterOperator } from '@mui/x-data-grid-premium';\nimport { DATE_IS_BETWEEN } from './isBetween';\n\nexport const getGridDateOperatorsExtended: (showTime?: boolean) => GridFilterOperator[] = (showTime = false) => [\n ...forwardOperators(showTime),\n DATE_IS_BETWEEN,\n];\n","import { GridFilterItem, GridFilterOperator } from '@mui/x-data-grid-premium';\n\ntype ApplyFilterFn = ((value: any, row?: any, column?: any, apiRef?: any) => boolean) | null;\ntype GetApplyFilterFn = (filterItem: GridFilterItem, column?: any) => ApplyFilterFn;\n\nconst lowercaseValue = (value: unknown): unknown => {\n if (typeof value === 'string') {\n return value.toLowerCase();\n }\n if (Array.isArray(value)) {\n return value.map(lowercaseValue);\n }\n return value;\n};\n\n/**\n * Wraps a filter operator's `getApplyFilterFn` to lowercase both the cell value\n * and the filter value before comparison, making the operator case-insensitive.\n *\n * Only affects string-based values — numbers, dates, and booleans pass through unchanged.\n */\nexport const wrapCaseInsensitive = (operator: GridFilterOperator): GridFilterOperator => {\n const originalGetApplyFilterFn = operator.getApplyFilterFn as GetApplyFilterFn;\n\n return {\n ...operator,\n getApplyFilterFn: (filterItem: GridFilterItem, column?: any) => {\n const caseInsensitiveFilterItem = {\n ...filterItem,\n value: lowercaseValue(filterItem.value),\n };\n\n const originalFn = originalGetApplyFilterFn(caseInsensitiveFilterItem, column);\n if (!originalFn) {\n return null;\n }\n\n return (value: any, row?: any, column?: any, apiRef?: any) => {\n const lowercasedValue = lowercaseValue(value);\n return originalFn(lowercasedValue, row, column, apiRef);\n };\n },\n };\n};\n\n/**\n * Applies case-insensitive wrapping to an array of filter operators.\n */\nexport const makeCaseInsensitive = (operators: GridFilterOperator[]): GridFilterOperator[] => {\n return operators.map(wrapCaseInsensitive);\n};\n","import { GridColType, GridColTypeDef } from '@mui/x-data-grid-premium';\nimport { operatorList } from '../operators';\n\nexport const getRsStringColumnType = () => {\n return {\n type: 'string' as const,\n filterOperators: operatorList.rsString,\n } as GridColTypeDef;\n};\n\nexport const getRsNumberColumnType = () => {\n return {\n type: 'number' as const,\n filterOperators: operatorList.rsNumber,\n } as GridColTypeDef;\n};\n\nexport const getRsSingleSelectColumnType = () => {\n return {\n type: 'singleSelect' as const,\n filterOperators: operatorList.rsSingleSelect,\n } as GridColTypeDef;\n};\n\nexport const getRsSingleSelectWithShortOperatorListColumnType = () => {\n return {\n type: 'singleSelect' as const,\n filterOperators: operatorList.rsSingleSelectWithShortOperatorList,\n } as GridColTypeDef;\n};\n\nexport const getRsMultipleSelectColumnType = () => {\n return {\n type: 'singleSelect' as const,\n filterOperators: operatorList.rsMultipleSelect,\n } as GridColTypeDef;\n};\n\nexport const getRsMultipleSelectWithShortOperatorListColumnType = () => {\n return {\n type: 'singleSelect' as const,\n filterOperators: operatorList.rsMultipleSelectWithShortOperatorList,\n } as GridColTypeDef;\n};\n\nexport const customColumnTypes: Record<GridColType | string, GridColTypeDef> = {\n rsString: getRsStringColumnType(),\n rsNumber: getRsNumberColumnType(),\n rsSingleSelect: getRsSingleSelectColumnType(),\n rsSingleSelectWithShortOperatorList: getRsSingleSelectWithShortOperatorListColumnType(),\n rsMultipleSelect: getRsMultipleSelectColumnType(),\n rsMultipleSelectWithShortOperatorList: getRsMultipleSelectWithShortOperatorListColumnType(),\n};\n","import {\n getGridStringOperators as nativeGetGridStringOperators,\n getGridNumericOperators as nativeGetGridNumericOperators,\n getGridDateOperators as nativeGetGridDateOperators,\n GridColDef,\n GridColType,\n GridFilterOperator,\n} from '@mui/x-data-grid-premium';\n\nimport { DOES_NOT_CONTAIN } from './operators/string/doesNotContain';\nimport { DOES_NOT_END_WITH } from './operators/string/doesNotEndWith';\nimport { DOES_NOT_EQUAL } from './operators/string/doesNotEqual';\nimport { DOES_NOT_HAVE, DOES_NOT_HAVE_WITH_SELECT } from './operators/string/doesNotHave';\nimport { DOES_NOT_START_WITH } from './operators/string/doesNotStartWith';\nimport { HAS, HAS_WITH_SELECT } from './operators/string/has';\nimport { HAS_ONLY, HAS_ONLY_WITH_SELECT } from './operators/string/hasOnly';\nimport { IS_WITH_SELECT } from './operators/string/is';\nimport { IS_NOT_WITH_SELECT } from './operators/string/isNot';\n\nimport { CONTAINS_ANY_OF } from './operators/string-array/containsAnyOf';\nimport { DOES_NOT_CONTAIN_ANY_OF } from './operators/string-array/doesNotContainAnyOf';\nimport { DOES_NOT_END_WITH_ANY_OF } from './operators/string-array/doesNotEndWithAnyOf';\nimport { DOES_NOT_HAVE_ANY_OF, DOES_NOT_HAVE_ANY_OF_WITH_SELECT } from './operators/string-array/doesNotHaveAnyOf';\nimport { DOES_NOT_START_WITH_ANY_OF } from './operators/string-array/doesNotStartWithAnyOf';\nimport { ENDS_WITH_ANY_OF } from './operators/string-array/endsWithAnyOf';\nimport { HAS_ALL_OF, HAS_ALL_OF_WITH_SELECT } from './operators/string-array/hasAllOf';\nimport { HAS_ANY_OF, HAS_ANY_OF_WITH_SELECT } from './operators/string-array/hasAnyOf';\nimport { IS_ANY_OF, IS_ANY_OF_WITH_SELECT } from './operators/string-array/isAnyOf';\nimport { IS_NOT_ANY_OF, IS_NOT_ANY_OF_WITH_SELECT } from './operators/string-array/isNotAnyOf';\nimport { STARTS_WITH_ANY_OF } from './operators/string-array/startsWithAnyOf';\n\nimport { IS_BETWEEN } from './operators/numeric/isBetween';\nimport { DATE_IS_BETWEEN } from './operators/date/isBetween';\nimport { ARRAY_IS_EMPTY, ARRAY_IS_NOT_EMPTY } from './operators/common/isEmpty';\nimport { makeCaseInsensitive } from './operators/utils/caseInsensitive';\n\n// ---------------------------------------------------------------------------\n// Operator name unions (for typed `exclude`)\n// ---------------------------------------------------------------------------\n\nexport type StringOperatorName =\n | 'contains'\n | 'doesNotContain'\n | 'equals'\n | 'doesNotEqual'\n | 'startsWith'\n | 'doesNotStartWith'\n | 'endsWith'\n | 'doesNotEndWith'\n | 'isEmpty'\n | 'isNotEmpty'\n | 'isAnyOf'\n | 'isNotAnyOf'\n | 'containsAnyOf'\n | 'doesNotContainAnyOf'\n | 'startsWithAnyOf'\n | 'doesNotStartWithAnyOf'\n | 'endsWithAnyOf'\n | 'doesNotEndWithAnyOf';\n\nexport type NumberOperatorName = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'isEmpty' | 'isNotEmpty' | 'isBetween';\n\nexport type DateOperatorName =\n | 'is'\n | 'not'\n | 'after'\n | 'onOrAfter'\n | 'before'\n | 'onOrBefore'\n | 'isEmpty'\n | 'isNotEmpty'\n | 'isBetween';\n\nexport type SingleSelectOperatorName = 'is' | 'isNot' | 'isAnyOf' | 'isNotAnyOf' | 'isEmpty' | 'isNotEmpty';\n\nexport type MultiSelectOperatorName =\n | 'has'\n | 'doesNotHave'\n | 'hasAnyOf'\n | 'hasAllOf'\n | 'doesNotHaveAnyOf'\n | 'hasOnly'\n | 'isEmpty'\n | 'isNotEmpty';\n\nexport type TagsOperatorName =\n | 'has'\n | 'doesNotHave'\n | 'hasAnyOf'\n | 'hasAllOf'\n | 'doesNotHaveAnyOf'\n | 'hasOnly'\n | 'containsAnyOf'\n | 'doesNotContainAnyOf'\n | 'isEmpty'\n | 'isNotEmpty';\n\n// ---------------------------------------------------------------------------\n// Column type\n// ---------------------------------------------------------------------------\n\nexport type ColumnType = 'string' | 'number' | 'date' | 'dateTime' | 'singleSelect' | 'multiSelect' | 'tags';\n\n// ---------------------------------------------------------------------------\n// Options: discriminated union (built-in vs override)\n// ---------------------------------------------------------------------------\n\ntype BuiltInOptions<TOperatorName extends string> = {\n compact?: boolean;\n exclude?: TOperatorName[];\n extend?: GridFilterOperator[];\n caseSensitive?: boolean;\n};\n\ntype OverrideOptions = {\n operators: GridFilterOperator[];\n};\n\ntype StringColumnOptions = BuiltInOptions<StringOperatorName> | OverrideOptions;\ntype NumberColumnOptions = Omit<BuiltInOptions<NumberOperatorName>, 'caseSensitive'> | OverrideOptions;\ntype DateColumnOptions = Omit<BuiltInOptions<DateOperatorName>, 'caseSensitive'> | OverrideOptions;\ntype SingleSelectColumnOptions = BuiltInOptions<SingleSelectOperatorName> | OverrideOptions;\ntype MultiSelectColumnOptions = BuiltInOptions<MultiSelectOperatorName> | OverrideOptions;\ntype TagsColumnOptions = BuiltInOptions<TagsOperatorName> | OverrideOptions;\n\nexport type ColumnOptions<T extends ColumnType> = T extends 'string'\n ? StringColumnOptions\n : T extends 'number'\n ? NumberColumnOptions\n : T extends 'date' | 'dateTime'\n ? DateColumnOptions\n : T extends 'singleSelect'\n ? SingleSelectColumnOptions\n : T extends 'multiSelect'\n ? MultiSelectColumnOptions\n : T extends 'tags'\n ? TagsColumnOptions\n : never;\n\n// ---------------------------------------------------------------------------\n// Full & compact operator lists\n// ---------------------------------------------------------------------------\n\nconst getStringOperatorsFull = (): GridFilterOperator[] => [\n ...nativeGetGridStringOperators().filter((op) => !['isAnyOf'].includes(op.value)),\n DOES_NOT_CONTAIN,\n DOES_NOT_EQUAL,\n DOES_NOT_START_WITH,\n DOES_NOT_END_WITH,\n IS_ANY_OF,\n IS_NOT_ANY_OF,\n CONTAINS_ANY_OF,\n DOES_NOT_CONTAIN_ANY_OF,\n STARTS_WITH_ANY_OF,\n DOES_NOT_START_WITH_ANY_OF,\n ENDS_WITH_ANY_OF,\n DOES_NOT_END_WITH_ANY_OF,\n];\n\nconst getStringOperatorsCompact = (): GridFilterOperator[] => [\n ...nativeGetGridStringOperators().filter((op) => !['isAnyOf', 'startsWith', 'endsWith'].includes(op.value)),\n DOES_NOT_CONTAIN,\n DOES_NOT_EQUAL,\n IS_ANY_OF,\n];\n\nconst getNumberOperatorsFull = (): GridFilterOperator[] => [...nativeGetGridNumericOperators(), IS_BETWEEN];\n\nconst getNumberOperatorsCompact = (): GridFilterOperator[] => nativeGetGridNumericOperators();\n\nconst getDateOperatorsFull = (showTime: boolean): GridFilterOperator[] => [\n ...nativeGetGridDateOperators(showTime),\n DATE_IS_BETWEEN,\n];\n\nconst getDateOperatorsCompact = (showTime: boolean): GridFilterOperator[] => nativeGetGridDateOperators(showTime);\n\nconst getSingleSelectOperatorsFull = (): GridFilterOperator[] => [\n IS_WITH_SELECT,\n IS_NOT_WITH_SELECT,\n IS_ANY_OF_WITH_SELECT,\n IS_NOT_ANY_OF_WITH_SELECT,\n ARRAY_IS_EMPTY,\n ARRAY_IS_NOT_EMPTY,\n];\n\nconst getSingleSelectOperatorsCompact = (): GridFilterOperator[] => [\n IS_WITH_SELECT,\n IS_NOT_WITH_SELECT,\n IS_ANY_OF_WITH_SELECT,\n];\n\nconst getMultiSelectOperatorsFull = (): GridFilterOperator[] => [\n HAS_WITH_SELECT,\n DOES_NOT_HAVE_WITH_SELECT,\n HAS_ANY_OF_WITH_SELECT,\n HAS_ALL_OF_WITH_SELECT,\n DOES_NOT_HAVE_ANY_OF_WITH_SELECT,\n HAS_ONLY_WITH_SELECT,\n ARRAY_IS_EMPTY,\n ARRAY_IS_NOT_EMPTY,\n];\n\nconst getMultiSelectOperatorsCompact = (): GridFilterOperator[] => [\n HAS_WITH_SELECT,\n DOES_NOT_HAVE_WITH_SELECT,\n HAS_ANY_OF_WITH_SELECT,\n];\n\nconst getTagsOperatorsFull = (): GridFilterOperator[] => [\n HAS,\n DOES_NOT_HAVE,\n HAS_ANY_OF,\n HAS_ALL_OF,\n DOES_NOT_HAVE_ANY_OF,\n HAS_ONLY,\n CONTAINS_ANY_OF,\n DOES_NOT_CONTAIN_ANY_OF,\n ARRAY_IS_EMPTY,\n ARRAY_IS_NOT_EMPTY,\n];\n\nconst getTagsOperatorsCompact = (): GridFilterOperator[] => [HAS, DOES_NOT_HAVE, HAS_ANY_OF];\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst isOverrideOptions = (options: any): options is OverrideOptions => {\n return options && 'operators' in options;\n};\n\nconst arraySortComparator = (a: unknown, b: unknown): number => {\n const arrA = Array.isArray(a) ? a : [];\n const arrB = Array.isArray(b) ? b : [];\n if (arrA.length !== arrB.length) {\n return arrA.length - arrB.length;\n }\n const strA = arrA.map(String).sort().join(',');\n const strB = arrB.map(String).sort().join(',');\n return strA.localeCompare(strB);\n};\n\nconst arrayValueFormatter = (value: unknown): string => {\n if (Array.isArray(value)) {\n return value.map(String).join(', ');\n }\n return value != null ? String(value) : '';\n};\n\n// ---------------------------------------------------------------------------\n// Operator type strings that support case-insensitive wrapping\n// ---------------------------------------------------------------------------\n\nconst CASE_INSENSITIVE_TYPES: ColumnType[] = ['string', 'singleSelect', 'tags'];\n\n// ---------------------------------------------------------------------------\n// createColumn()\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a column configuration with the appropriate MUI type and filter operators\n * for the given column type. Spread the result into your column definition.\n *\n * @example\n * ```tsx\n * const columns = [\n * { ...createColumn('string'), field: 'name', headerName: 'Name' },\n * { ...createColumn('number'), field: 'price', headerName: 'Price' },\n * { ...createColumn('singleSelect', { compact: true }), field: 'status', valueOptions: ['active', 'inactive'] },\n * { ...createColumn('multiSelect'), field: 'tags', valueOptions: ['a', 'b', 'c'] },\n * { ...createColumn('tags'), field: 'labels', headerName: 'Labels' },\n * ];\n * ```\n */\nexport function createColumn<T extends ColumnType>(type: T, options?: ColumnOptions<T>): Partial<GridColDef> {\n // Override mode: consumer provides full operator list\n if (options && isOverrideOptions(options)) {\n const result: Partial<GridColDef> = {\n type: getMuiType(type),\n filterOperators: options.operators,\n };\n if (type === 'multiSelect' || type === 'tags') {\n result.sortComparator = arraySortComparator;\n result.valueFormatter = arrayValueFormatter;\n }\n return result;\n }\n\n // Built-in mode\n const builtInOpts = (options ?? {}) as BuiltInOptions<string>;\n const compact = builtInOpts.compact ?? false;\n const caseSensitive = builtInOpts.caseSensitive ?? false;\n\n let operators = getOperatorsForType(type, compact);\n\n // Apply exclude\n if (builtInOpts.exclude && builtInOpts.exclude.length > 0) {\n const excludeSet = new Set(builtInOpts.exclude);\n operators = operators.filter((op) => !excludeSet.has(op.value));\n }\n\n // Apply case-insensitive wrapping\n if (!caseSensitive && CASE_INSENSITIVE_TYPES.includes(type)) {\n operators = makeCaseInsensitive(operators);\n }\n\n // Apply extend\n if (builtInOpts.extend && builtInOpts.extend.length > 0) {\n operators = [...operators, ...builtInOpts.extend];\n }\n\n const result: Partial<GridColDef> = {\n type: getMuiType(type),\n filterOperators: operators,\n };\n\n if (type === 'multiSelect' || type === 'tags') {\n result.sortComparator = arraySortComparator;\n result.valueFormatter = arrayValueFormatter;\n }\n\n return result;\n}\n\nfunction getMuiType(type: ColumnType): GridColType {\n switch (type) {\n case 'multiSelect':\n case 'singleSelect':\n return 'singleSelect';\n case 'tags':\n return 'string';\n default:\n return type as GridColType;\n }\n}\n\nfunction getOperatorsForType(type: ColumnType, compact: boolean): GridFilterOperator[] {\n switch (type) {\n case 'string':\n return compact ? getStringOperatorsCompact() : getStringOperatorsFull();\n case 'number':\n return compact ? getNumberOperatorsCompact() : getNumberOperatorsFull();\n case 'date':\n return compact ? getDateOperatorsCompact(false) : getDateOperatorsFull(false);\n case 'dateTime':\n return compact ? getDateOperatorsCompact(true) : getDateOperatorsFull(true);\n case 'singleSelect':\n return compact ? getSingleSelectOperatorsCompact() : getSingleSelectOperatorsFull();\n case 'multiSelect':\n return compact ? getMultiSelectOperatorsCompact() : getMultiSelectOperatorsFull();\n case 'tags':\n return compact ? getTagsOperatorsCompact() : getTagsOperatorsFull();\n }\n}\n","/**\n * A React Router v5 / connected-react-router adapter for `StatefulDataGrid.useRouter`.\n *\n * Defers `history.replace` via `queueMicrotask` to avoid the\n * \"Cannot update during an existing state transition\" warning\n * that connected-react-router triggers when the grid synchronises\n * URL state during render.\n *\n * Also coalesces multiple `historyReplace` calls within the same microtask\n * by computing per-call deltas against the captured `search` snapshot and\n * merging them into the live URL. This prevents handler stomping when the\n * grid fires several model-change handlers in the same render (e.g. a\n * pivot change re-emits a synthetic column-visibility change alongside a\n * filter change): without coalescing, each handler would compute a full\n * new search from the same captured snapshot, and the second\n * `history.replace` would clobber the first — dropping any keys (such as\n * the filter just typed) that the second handler didn't know about.\n *\n * @example\n * ```tsx\n * import { createReactRouterV5Adapter } from '@redsift/table';\n *\n * const useRouter = createReactRouterV5Adapter(history);\n *\n * <StatefulDataGrid useRouter={useRouter} … />\n * ```\n */\n\n/** Minimal subset of React Router v5 `history` used by the adapter. */\nexport interface ReactRouterV5History {\n location: {\n pathname: string;\n search: string;\n };\n replace: (path: { pathname: string; search: string }) => void;\n}\n\n/**\n * Create a `useRouter` hook compatible with `StatefulDataGrid` from a\n * React Router v5 `history` object.\n */\nexport const createReactRouterV5Adapter = (\n history: ReactRouterV5History\n): (() => { pathname: string; search: string; historyReplace: (newSearch: string) => void }) => {\n // Module-instance state shared across all `historyReplace` calls scheduled\n // within the same microtask. Each `useRouter()` invocation captures its own\n // `search` snapshot for delta computation; `pending` accumulates the deltas\n // and is flushed once per microtask onto the live URL.\n let pending: URLSearchParams | null = null;\n let flushScheduled = false;\n\n const scheduleFlush = () => {\n if (flushScheduled) return;\n flushScheduled = true;\n queueMicrotask(() => {\n flushScheduled = false;\n const flush = pending;\n pending = null;\n if (flush === null) return;\n const serialized = flush.toString();\n const nextSearch = serialized ? `?${serialized}` : '';\n if (nextSearch === history.location.search) return;\n history.replace({\n pathname: history.location.pathname,\n search: nextSearch,\n });\n });\n };\n\n return () => {\n // Capture the search snapshot AT THE TIME useRouter() is called. The\n // grid hands this string to its change handlers, which build a complete\n // new search string from it. Diffing the handler's `newSearch` against\n // this captured snapshot tells us which keys the handler intentionally\n // changed (vs. which are stale passthrough from sibling handlers' models).\n const captured = history.location.search.replace(/^\\?/, '');\n const capturedParams = new URLSearchParams(captured);\n const capturedKeys = new Set(capturedParams.keys());\n\n return {\n pathname: history.location.pathname,\n search: captured,\n historyReplace: (newSearch: string) => {\n const newParams = new URLSearchParams(newSearch);\n const newKeys = new Set(newParams.keys());\n\n // Lazy-init `pending` from the LIVE URL — not the captured snapshot —\n // so deltas from earlier microtask-scheduled calls (which may have\n // already been flushed, or were scheduled by a previous render and\n // are now reflected in the live URL) are preserved.\n if (pending === null) {\n pending = new URLSearchParams(history.location.search.replace(/^\\?/, ''));\n }\n\n // Apply only keys this handler actually changed. A handler builds a\n // complete new search from a captured snapshot, but only some keys\n // reflect its intent — the rest are passthrough of the snapshot.\n // When two handlers fire in the same render and one was triggered\n // by a model the other doesn't care about, passthrough keys would\n // otherwise stomp pending state from earlier handlers.\n for (const key of newKeys) {\n const newValues = newParams.getAll(key);\n const capturedValues = capturedParams.getAll(key);\n const unchanged =\n newValues.length === capturedValues.length && newValues.every((v, i) => v === capturedValues[i]);\n if (unchanged) continue;\n pending.delete(key);\n for (const value of newValues) {\n pending.append(key, value);\n }\n }\n // Keys that were in the captured snapshot but absent from newSearch\n // were intentionally removed by this handler.\n for (const key of capturedKeys) {\n if (!newKeys.has(key)) pending.delete(key);\n }\n\n scheduleFlush();\n },\n };\n };\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { GridFilterModel } from '@mui/x-data-grid-premium';\n\nconst EMPTY_FILTER_MODEL: GridFilterModel = { items: [] };\n\nexport interface UseLinkedFilterModelOptions {\n /** Starting filter model. Defaults to `{ items: [] }`. */\n initialFilterModel?: GridFilterModel;\n /**\n * Debounce window (ms) applied to changes coming from the DataGrid filter panel.\n * Card-driven changes via `setMultiSelect` / `setBoolean` are never debounced.\n * Defaults to `300`. Pass `0` to disable.\n */\n debounceMs?: number;\n /** Optional callback fired on every settled filter model change. */\n onChange?: (model: GridFilterModel) => void;\n}\n\nexport interface UseLinkedFilterModelReturn {\n /** Current filter model. Pass to DataGrid `filterModel` and read for DataCard derivations. */\n filterModel: GridFilterModel;\n /** Bind to DataGrid `onFilterModelChange`. Debounced for panel changes. */\n onFilterModelChange: (model: GridFilterModel) => void;\n /** Read selected values for an `isAnyOf` / `hasAnyOf` field. Empty array when not set. */\n getSelected: (field: string) => string[];\n /** Read the raw filter value for a field (e.g. boolean toggles). */\n getValue: (field: string) => unknown;\n /** Set a multi-select filter from a DataCard. Empty array clears the field. */\n setMultiSelect: (field: string, values: string[], operator?: string) => void;\n /** Set a boolean filter. Pass `null` to clear. */\n setBoolean: (field: string, value: boolean | null) => void;\n /** Remove a single field from the filter model. */\n clearField: (field: string) => void;\n /** Reset the filter model to the initial value. */\n reset: () => void;\n /**\n * Whether a field's filter was set externally (DataGrid filter panel) rather than\n * via this hook's setters. Useful for disabling the corresponding DataCard so the\n * panel and card don't fight over the same field.\n */\n isFieldExternallyControlled: (field: string) => boolean;\n}\n\nconst sameItems = (a: GridFilterModel, b: GridFilterModel): boolean =>\n JSON.stringify(a.items) === JSON.stringify(b.items);\n\nconst filterOutField = (model: GridFilterModel, field: string): GridFilterModel['items'] =>\n model.items.filter((item) => item.field !== field);\n\nconst nextItemId = (() => {\n let id = 1;\n return () => id++;\n})();\n\n/**\n * Bridge a DataGrid `filterModel` and the DataCards that drive (and reflect) it.\n *\n * Without this hook, every drilldowned datagrid page hand-rolls the same plumbing:\n * derive selections from `filterModel`, write them back via raw `setFilterModel`\n * mutations, debounce panel changes, and track which fields the panel \"owns\" so\n * cards don't fight the panel for control. SOFA-6 shipped this logic ad hoc and\n * got it wrong (no debounce, prop-drilled state, no panel/card reconciliation).\n *\n * @example\n * const filter = useLinkedFilterModel();\n *\n * <DataCard.Listbox\n * values={filter.getSelected('Category')}\n * onChange={(values) => filter.setMultiSelect('Category', values)}\n * isDisabled={filter.isFieldExternallyControlled('Category')}\n * >\n * {…}\n * </DataCard.Listbox>\n *\n * <DataGrid filterModel={filter.filterModel} onFilterModelChange={filter.onFilterModelChange} />\n */\nexport function useLinkedFilterModel(options: UseLinkedFilterModelOptions = {}): UseLinkedFilterModelReturn {\n const { initialFilterModel = EMPTY_FILTER_MODEL, debounceMs = 300, onChange } = options;\n\n const [filterModel, setFilterModel] = useState<GridFilterModel>(initialFilterModel);\n\n // Fields whose current filter was set by setMultiSelect / setBoolean (not the panel).\n const cardOwnedFields = useRef<Set<string>>(new Set());\n // Marks the next onFilterModelChange as originating from a card setter so we skip debouncing.\n const skipNextDebounce = useRef(false);\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n useEffect(() => {\n return () => {\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n };\n }, []);\n\n const commit = useCallback((next: GridFilterModel) => {\n setFilterModel((prev) => {\n if (sameItems(prev, next)) return prev;\n onChangeRef.current?.(next);\n return next;\n });\n }, []);\n\n const onFilterModelChange = useCallback(\n (model: GridFilterModel) => {\n if (skipNextDebounce.current) {\n skipNextDebounce.current = false;\n // If the incoming model matches the current state, this is a DataGrid echo\n // of a card setter — commit (no-op) and preserve card ownership.\n if (sameItems(filterModel, model)) {\n commit(model);\n return;\n }\n // Otherwise a real panel change arrived — fall through to ownership logic.\n }\n\n // Panel change — drop card ownership for fields the panel now controls / has cleared,\n // then debounce the commit.\n const panelFields = new Set(model.items.map((item) => item.field));\n for (const field of Array.from(cardOwnedFields.current)) {\n if (!panelFields.has(field)) cardOwnedFields.current.delete(field);\n }\n // If the panel touched a field the card previously owned, transfer ownership to the panel.\n for (const field of panelFields) {\n cardOwnedFields.current.delete(field);\n }\n\n if (debounceMs <= 0) {\n commit(model);\n return;\n }\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n debounceTimer.current = setTimeout(() => {\n debounceTimer.current = null;\n commit(model);\n }, debounceMs);\n },\n [commit, debounceMs, filterModel]\n );\n\n const getSelected = useCallback(\n (field: string): string[] => {\n const item = filterModel.items.find((i) => i.field === field);\n if (!item || item.value === undefined || item.value === null) return [];\n if (item.operator === 'isAnyOf' || item.operator === 'hasAnyOf') {\n return Array.isArray(item.value) ? (item.value as string[]) : [String(item.value)];\n }\n return [];\n },\n [filterModel]\n );\n\n const getValue = useCallback(\n (field: string): unknown => filterModel.items.find((i) => i.field === field)?.value,\n [filterModel]\n );\n\n const setMultiSelect = useCallback((field: string, values: string[], operator: string = 'isAnyOf') => {\n skipNextDebounce.current = true;\n setFilterModel((prev) => {\n const items = filterOutField(prev, field);\n if (values.length > 0) {\n items.push({ field, id: nextItemId(), operator, value: values });\n cardOwnedFields.current.add(field);\n } else {\n cardOwnedFields.current.delete(field);\n }\n const next: GridFilterModel = { ...prev, items };\n if (sameItems(prev, next)) return prev;\n onChangeRef.current?.(next);\n return next;\n });\n }, []);\n\n const setBoolean = useCallback((field: string, value: boolean | null) => {\n skipNextDebounce.current = true;\n setFilterModel((prev) => {\n const items = filterOutField(prev, field);\n if (value !== null) {\n items.push({ field, id: nextItemId(), operator: 'is', value: String(value) });\n cardOwnedFields.current.add(field);\n } else {\n cardOwnedFields.current.delete(field);\n }\n const next: GridFilterModel = { ...prev, items };\n if (sameItems(prev, next)) return prev;\n onChangeRef.current?.(next);\n return next;\n });\n }, []);\n\n const clearField = useCallback((field: string) => {\n skipNextDebounce.current = true;\n setFilterModel((prev) => {\n const items = filterOutField(prev, field);\n cardOwnedFields.current.delete(field);\n const next: GridFilterModel = { ...prev, items };\n if (sameItems(prev, next)) return prev;\n onChangeRef.current?.(next);\n return next;\n });\n }, []);\n\n const reset = useCallback(() => {\n skipNextDebounce.current = true;\n cardOwnedFields.current.clear();\n commit(initialFilterModel);\n }, [commit, initialFilterModel]);\n\n const isFieldExternallyControlled = useCallback(\n (field: string): boolean => {\n const hasFilter = filterModel.items.some((item) => item.field === field);\n return hasFilter && !cardOwnedFields.current.has(field);\n },\n [filterModel]\n );\n\n return useMemo(\n () => ({\n filterModel,\n onFilterModelChange,\n getSelected,\n getValue,\n setMultiSelect,\n setBoolean,\n clearField,\n reset,\n isFieldExternallyControlled,\n }),\n [\n filterModel,\n onFilterModelChange,\n getSelected,\n getValue,\n setMultiSelect,\n setBoolean,\n clearField,\n reset,\n isFieldExternallyControlled,\n ]\n );\n}\n"],"names":["DETAIL_PANEL_TOGGLE_COL_DEF","GRID_DETAIL_PANEL_TOGGLE_COL_DEF","type","isAnyOfIOperator","label","value","getApplyFilterFn","filterItem","field","operator","lowerCaseFilterValues","map","v","String","toLowerCase","length","paramValues","Array","isArray","paramValue","includes","InputComponent","GridFilterInputMultipleValue","IS_ANY_OF_I","IS_ANY_OF_I_WITH_SELECT","_objectSpread","GridFilterInputMultipleSingleSelect","SUBMIT_FILTER_STROKE_TIME","InputDateInterval","props","_item$value","_filterValueState$","_filterValueState$2","item","applyValue","focusElementRef","filterTimeout","React","useRef","filterValueState","setFilterValueState","useState","applying","setIsApplying","useEffect","clearTimeout","current","_item$value2","itemValue","updateFilterValue","from","to","setTimeout","handleFromChange","event","newFrom","target","handleToChange","newTo","createElement","Box","sx","display","flexDirection","alignItems","height","pl","TextField","name","placeholder","variant","onChange","inputRef","mr","InputLabelProps","shrink","InputProps","endAdornment","Icon","icon","mdiSync","isBetweenOperator","fromYear","fromMonth","fromDay","split","Number","toYear","toMonth","toDay","fromTime","Date","getTime","toTime","isNaN","cellTime","DATE_IS_BETWEEN","getGridDateOperatorsExtended","showTime","arguments","undefined","forwardOperators","lowercaseValue","wrapCaseInsensitive","originalGetApplyFilterFn","column","caseInsensitiveFilterItem","originalFn","row","apiRef","lowercasedValue","makeCaseInsensitive","operators","getRsStringColumnType","filterOperators","operatorList","rsString","getRsNumberColumnType","rsNumber","getRsSingleSelectColumnType","rsSingleSelect","getRsSingleSelectWithShortOperatorListColumnType","rsSingleSelectWithShortOperatorList","getRsMultipleSelectColumnType","rsMultipleSelect","getRsMultipleSelectWithShortOperatorListColumnType","rsMultipleSelectWithShortOperatorList","customColumnTypes","getStringOperatorsFull","nativeGetGridStringOperators","filter","op","DOES_NOT_CONTAIN","DOES_NOT_EQUAL","DOES_NOT_START_WITH","DOES_NOT_END_WITH","IS_ANY_OF","IS_NOT_ANY_OF","CONTAINS_ANY_OF","DOES_NOT_CONTAIN_ANY_OF","STARTS_WITH_ANY_OF","DOES_NOT_START_WITH_ANY_OF","ENDS_WITH_ANY_OF","DOES_NOT_END_WITH_ANY_OF","getStringOperatorsCompact","getNumberOperatorsFull","nativeGetGridNumericOperators","IS_BETWEEN","getNumberOperatorsCompact","getDateOperatorsFull","nativeGetGridDateOperators","getDateOperatorsCompact","getSingleSelectOperatorsFull","IS_WITH_SELECT","IS_NOT_WITH_SELECT","IS_ANY_OF_WITH_SELECT","IS_NOT_ANY_OF_WITH_SELECT","ARRAY_IS_EMPTY","ARRAY_IS_NOT_EMPTY","getSingleSelectOperatorsCompact","getMultiSelectOperatorsFull","HAS_WITH_SELECT","DOES_NOT_HAVE_WITH_SELECT","HAS_ANY_OF_WITH_SELECT","HAS_ALL_OF_WITH_SELECT","DOES_NOT_HAVE_ANY_OF_WITH_SELECT","HAS_ONLY_WITH_SELECT","getMultiSelectOperatorsCompact","getTagsOperatorsFull","HAS","DOES_NOT_HAVE","HAS_ANY_OF","HAS_ALL_OF","DOES_NOT_HAVE_ANY_OF","HAS_ONLY","getTagsOperatorsCompact","isOverrideOptions","options","arraySortComparator","a","b","arrA","arrB","strA","sort","join","strB","localeCompare","arrayValueFormatter","CASE_INSENSITIVE_TYPES","createColumn","_builtInOpts$compact","_builtInOpts$caseSens","result","getMuiType","sortComparator","valueFormatter","builtInOpts","compact","caseSensitive","getOperatorsForType","exclude","excludeSet","Set","has","extend","createReactRouterV5Adapter","history","pending","flushScheduled","scheduleFlush","queueMicrotask","flush","serialized","toString","nextSearch","location","search","replace","pathname","captured","capturedParams","URLSearchParams","capturedKeys","keys","historyReplace","newSearch","newParams","newKeys","key","newValues","getAll","capturedValues","unchanged","every","i","delete","append","EMPTY_FILTER_MODEL","items","sameItems","JSON","stringify","filterOutField","model","nextItemId","id","useLinkedFilterModel","initialFilterModel","debounceMs","filterModel","setFilterModel","cardOwnedFields","skipNextDebounce","debounceTimer","onChangeRef","commit","useCallback","next","prev","_onChangeRef$current","call","onFilterModelChange","panelFields","getSelected","find","getValue","_filterModel$items$fi","setMultiSelect","values","_onChangeRef$current2","push","add","setBoolean","_onChangeRef$current3","clearField","_onChangeRef$current4","reset","clear","isFieldExternallyControlled","hasFilter","some","useMemo"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"test": "yarn test:unit && yarn test:storybook"
|
|
31
31
|
},
|
|
32
32
|
"types": "index.d.ts",
|
|
33
|
-
"version": "12.5.4
|
|
33
|
+
"version": "12.5.4",
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@emotion/react": "^11.11.0",
|
|
36
36
|
"@emotion/styled": "^11.11.0",
|
|
@@ -86,11 +86,11 @@
|
|
|
86
86
|
},
|
|
87
87
|
"peerDependencies": {
|
|
88
88
|
"@mui/x-data-grid-pro": ">=8",
|
|
89
|
-
"@redsift/design-system": "^12.5.
|
|
90
|
-
"@redsift/icons": "^12.5.
|
|
89
|
+
"@redsift/design-system": "^12.5.4-0",
|
|
90
|
+
"@redsift/icons": "^12.5.4-0",
|
|
91
91
|
"react": ">=17",
|
|
92
92
|
"react-dom": ">=17",
|
|
93
93
|
"styled-components": "6.1.19"
|
|
94
94
|
},
|
|
95
|
-
"gitHead": "
|
|
95
|
+
"gitHead": "6cf070d9dc1a4db5e15dcb9b0ba2e36ab0570347"
|
|
96
96
|
}
|