@wallarm-org/design-system 0.41.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/FilterInput/FilterInput.d.ts +7 -8
- package/dist/components/FilterInput/FilterInputContext/types.d.ts +12 -9
- package/dist/components/FilterInput/FilterInputContext/useFilterInputContextValue.d.ts +4 -2
- package/dist/components/FilterInput/FilterInputContext/useFilterInputContextValue.js +4 -0
- package/dist/components/FilterInput/FilterInputErrors/parseFilterInputErrors.js +1 -2
- package/dist/components/FilterInput/FilterInputField/ChipsWithGaps.d.ts +1 -1
- package/dist/components/FilterInput/FilterInputField/ChipsWithGaps.js +1 -1
- package/dist/components/FilterInput/FilterInputField/FilterInputChip/FilterInputChip.d.ts +1 -1
- package/dist/components/FilterInput/FilterInputField/FilterInputChip/FilterInputChip.js +2 -2
- package/dist/components/FilterInput/FilterInputField/FilterInputField.js +11 -40
- package/dist/components/FilterInput/FilterInputField/hooks/useSegmentEditKeyboard.d.ts +37 -0
- package/dist/components/FilterInput/FilterInputField/hooks/useSegmentEditKeyboard.js +78 -0
- package/dist/components/FilterInput/FilterInputMenu/FilterInputDateValueMenu/constants.d.ts +2 -2
- package/dist/components/FilterInput/FilterInputMenu/FilterInputFieldMenu/FilterInputFieldMenu.d.ts +1 -1
- package/dist/components/FilterInput/FilterInputMenu/FilterInputMenu.d.ts +1 -1
- package/dist/components/FilterInput/FilterInputMenu/FilterInputValueMenu/FilterInputValueMenu.d.ts +5 -6
- package/dist/components/FilterInput/FilterInputMenu/FilterInputValueMenu/useValueMenuDisplayValues.d.ts +4 -14
- package/dist/components/FilterInput/FilterInputMenu/FilterInputValueMenu/useValueMenuState.d.ts +3 -5
- package/dist/components/FilterInput/FilterInputMenu/hooks/useKeyboardNav.d.ts +1 -1
- package/dist/components/FilterInput/FilterInputMenu/hooks/useKeyboardNav.js +5 -2
- package/dist/components/FilterInput/hooks/useAutoCleanupDetachedElement.d.ts +13 -0
- package/dist/components/FilterInput/hooks/useAutoCleanupDetachedElement.js +22 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/{deriveAutocompleteValues.d.ts → lib/deriveAutocompleteValues.d.ts} +3 -3
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/{deriveAutocompleteValues.js → lib/deriveAutocompleteValues.js} +1 -1
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/lib/getInitialSegmentText.d.ts +9 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/lib/getInitialSegmentText.js +8 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/lib/index.d.ts +3 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/lib/index.js +4 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/{valueCommitHelpers.d.ts → lib/valueResolution.d.ts} +1 -7
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/{valueCommitHelpers.js → lib/valueResolution.js} +3 -25
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useAutocompleteState.d.ts +36 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useAutocompleteState.js +53 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useBlurCommit.d.ts +5 -16
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useBlurCommit.js +12 -5
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useChipActions.d.ts +2 -2
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useChipActions.js +5 -5
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useChipCascade.d.ts +44 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useChipCascade.js +99 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useChipEditing.d.ts +7 -8
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useChipEditing.js +21 -16
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useFilterInputAutocomplete.d.ts +9 -10
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useFilterInputAutocomplete.js +50 -83
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useFocusManagement.d.ts +9 -11
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useFocusManagement.js +47 -20
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useInputHandlers.d.ts +6 -4
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useInputHandlers.js +32 -15
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuFlow/index.d.ts +1 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuFlow/index.js +2 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/{useMenuFlow.d.ts → useMenuFlow/types.d.ts} +15 -18
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuFlow/types.js +0 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuFlow/useFieldFlow.d.ts +11 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuFlow/useFieldFlow.js +95 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuFlow/useMenuFlow.d.ts +20 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuFlow/useMenuFlow.js +47 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuFlow/useOperatorFlow.d.ts +11 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuFlow/useOperatorFlow.js +87 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuFlow/useValueFlow.d.ts +14 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuFlow/useValueFlow.js +107 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuPositioning.d.ts +25 -8
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuPositioning.js +38 -22
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useResetState.d.ts +10 -19
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useResetState.js +3 -3
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useSegmentEditFlow.d.ts +36 -0
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useSegmentEditFlow.js +69 -0
- package/dist/components/FilterInput/hooks/useFilterInputExpression/buildChips.js +1 -2
- package/dist/components/FilterInput/hooks/useFilterInputPositioning.d.ts +9 -4
- package/dist/components/FilterInput/hooks/useFilterInputPositioning.js +7 -6
- package/dist/components/FilterInput/hooks/useFilterInputSelection/lib/dom.d.ts +4 -4
- package/dist/components/FilterInput/hooks/useFilterInputSelection/useFilterInputSelection.d.ts +2 -2
- package/dist/components/FilterInput/hooks/useFilterInputSelection/useSelectionClipboard.d.ts +2 -5
- package/dist/components/FilterInput/hooks/useFloatingRecomputeOn.d.ts +14 -0
- package/dist/components/FilterInput/hooks/useFloatingRecomputeOn.js +18 -0
- package/dist/components/FilterInput/hooks/useResizeTracker.d.ts +10 -0
- package/dist/components/FilterInput/hooks/useResizeTracker.js +21 -0
- package/dist/components/FilterInput/lib/applyAcceptChar.d.ts +3 -4
- package/dist/components/FilterInput/lib/applyKnownFieldHelpers.d.ts +13 -25
- package/dist/components/FilterInput/lib/constants.d.ts +16 -34
- package/dist/components/FilterInput/lib/constants.js +3 -1
- package/dist/components/FilterInput/lib/dom.d.ts +15 -11
- package/dist/components/FilterInput/lib/dom.js +14 -9
- package/dist/components/FilterInput/lib/fields.d.ts +10 -19
- package/dist/components/FilterInput/lib/index.d.ts +4 -2
- package/dist/components/FilterInput/lib/index.js +5 -3
- package/dist/components/FilterInput/lib/menuFilterText.d.ts +8 -18
- package/dist/components/FilterInput/lib/operators.d.ts +11 -21
- package/dist/components/FilterInput/lib/segmentMenu.d.ts +4 -0
- package/dist/components/FilterInput/lib/segmentMenu.js +7 -0
- package/dist/components/FilterInput/lib/serializeExpression.d.ts +5 -12
- package/dist/components/FilterInput/lib/validation.d.ts +9 -0
- package/dist/components/FilterInput/lib/validation.js +24 -0
- package/dist/metadata/components.json +8 -8
- package/package.json +1 -1
- package/dist/components/FilterInput/hooks/useFilterInputAutocomplete/useMenuFlow.js +0 -260
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
3
|
-
"generatedAt": "2026-05-20T10:
|
|
2
|
+
"version": "0.41.0",
|
|
3
|
+
"generatedAt": "2026-05-20T10:19:45.546Z",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
6
6
|
"name": "Accordion",
|
|
@@ -19187,7 +19187,7 @@
|
|
|
19187
19187
|
"name": "fields",
|
|
19188
19188
|
"type": "FieldMetadata[] | undefined",
|
|
19189
19189
|
"required": false,
|
|
19190
|
-
"description": "Filter-field configurations driving the autocomplete.
|
|
19190
|
+
"description": "Filter-field configurations driving the autocomplete. A few names are\n**reserved** and auto-wired with design-system helpers — DS-supplied\ncallbacks **override** consumer values for the reserved slots, because\nthe field semantics (mask range, accepted chars, backend form) are fixed\nby DS:\n\n - `status_code` — HTTP status code field (mask suggestions, format\n validation, digit-or-X input filter, partial-input normalization).\n\nTo opt out, use a different `name` and attach the factories\n(`createStatusCodeSuggestions`, …) manually."
|
|
19191
19191
|
},
|
|
19192
19192
|
{
|
|
19193
19193
|
"name": "value",
|
|
@@ -19855,7 +19855,7 @@
|
|
|
19855
19855
|
"name": "menuRef",
|
|
19856
19856
|
"type": "RefObject<HTMLDivElement | null> | undefined",
|
|
19857
19857
|
"required": false,
|
|
19858
|
-
"description": "Ref to the menu content
|
|
19858
|
+
"description": "Ref to the menu content (shared across menus for focus management)."
|
|
19859
19859
|
}
|
|
19860
19860
|
]
|
|
19861
19861
|
},
|
|
@@ -19948,25 +19948,25 @@
|
|
|
19948
19948
|
"name": "inputRef",
|
|
19949
19949
|
"type": "RefObject<HTMLInputElement | null> | undefined",
|
|
19950
19950
|
"required": false,
|
|
19951
|
-
"description": "
|
|
19951
|
+
"description": "Query bar input — ArrowUp on first item returns focus here."
|
|
19952
19952
|
},
|
|
19953
19953
|
{
|
|
19954
19954
|
"name": "filterText",
|
|
19955
19955
|
"type": "string | undefined",
|
|
19956
19956
|
"required": false,
|
|
19957
|
-
"description": "
|
|
19957
|
+
"description": "Filter values by label."
|
|
19958
19958
|
},
|
|
19959
19959
|
{
|
|
19960
19960
|
"name": "menuRef",
|
|
19961
19961
|
"type": "RefObject<HTMLDivElement | null> | undefined",
|
|
19962
19962
|
"required": false,
|
|
19963
|
-
"description": "
|
|
19963
|
+
"description": "Menu content ref (shared across menus for focus management)."
|
|
19964
19964
|
},
|
|
19965
19965
|
{
|
|
19966
19966
|
"name": "blurCommitRef",
|
|
19967
19967
|
"type": "RefObject<(() => boolean) | null> | undefined",
|
|
19968
19968
|
"required": false,
|
|
19969
|
-
"description": "
|
|
19969
|
+
"description": "Set here so blur handler can commit multi-select values."
|
|
19970
19970
|
}
|
|
19971
19971
|
]
|
|
19972
19972
|
}
|
package/package.json
CHANGED
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
import { useCallback, useRef } from "react";
|
|
2
|
-
import { SEGMENT_VARIANT } from "../../FilterInputField/FilterInputChip/index.js";
|
|
3
|
-
import { OPERATOR_SYMBOLS, chipIdToConditionIndex, getFieldOperators, getOperatorFromLabel, isBetweenOperator, isMultiSelectOperator, isNoValueOperator, isOperatorAllowedForField, isValueShapeCompatible } from "../../lib/index.js";
|
|
4
|
-
import { resolveDateRangeValue, resolveDateValue, resolveMultiValues, resolveSingleValue, validateValueForField } from "./valueCommitHelpers.js";
|
|
5
|
-
const useMenuFlow = ({ editing, selectedField, selectedOperator, fields, inputRef, insertIndex, upsertCondition, conditions, resetState, commitBuildingOnBlur, dateRange, setSelectedField, setSelectedOperator, setInputText, setMenuState, setBuildingMultiValue })=>{
|
|
6
|
-
const conditionsRef = useRef(conditions);
|
|
7
|
-
conditionsRef.current = conditions;
|
|
8
|
-
const handleMenuClose = useCallback(()=>{
|
|
9
|
-
if (document.activeElement === inputRef.current) return;
|
|
10
|
-
if (document.activeElement?.closest?.('[data-slot^="segment-"]')) return;
|
|
11
|
-
if (commitBuildingOnBlur()) return;
|
|
12
|
-
const hasIncompleteBuilding = null !== selectedField && !editing.editingChipId;
|
|
13
|
-
if (hasIncompleteBuilding) return void setMenuState('closed');
|
|
14
|
-
resetState();
|
|
15
|
-
}, [
|
|
16
|
-
commitBuildingOnBlur,
|
|
17
|
-
resetState,
|
|
18
|
-
inputRef,
|
|
19
|
-
selectedField,
|
|
20
|
-
editing.editingChipId,
|
|
21
|
-
setMenuState
|
|
22
|
-
]);
|
|
23
|
-
const handleFieldSelect = useCallback((field)=>{
|
|
24
|
-
if (editing.editingChipId && editing.editingSegment === SEGMENT_VARIANT.attribute) {
|
|
25
|
-
const idx = chipIdToConditionIndex(editing.editingChipId);
|
|
26
|
-
const condition = null !== idx ? conditionsRef.current[idx] : null;
|
|
27
|
-
if (condition) {
|
|
28
|
-
const hasValueError = validateValueForField(field, condition.value);
|
|
29
|
-
upsertCondition(field, condition.operator, condition.value, editing.editingChipId, void 0, hasValueError ? SEGMENT_VARIANT.value : void 0, condition.dateOrigin);
|
|
30
|
-
}
|
|
31
|
-
resetState();
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
const isBuildingEdit = !editing.editingChipId && editing.editingSegment === SEGMENT_VARIANT.attribute;
|
|
35
|
-
if (isBuildingEdit) {
|
|
36
|
-
setSelectedField(field);
|
|
37
|
-
const keepOperator = selectedOperator ? isOperatorAllowedForField(field, selectedOperator) : false;
|
|
38
|
-
if (!keepOperator) setSelectedOperator(null);
|
|
39
|
-
editing.clearEditing();
|
|
40
|
-
setMenuState(keepOperator ? 'value' : 'operator');
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
setSelectedField(field);
|
|
44
|
-
setInputText('');
|
|
45
|
-
setMenuState('operator');
|
|
46
|
-
}, [
|
|
47
|
-
editing,
|
|
48
|
-
selectedOperator,
|
|
49
|
-
upsertCondition,
|
|
50
|
-
resetState,
|
|
51
|
-
setSelectedField,
|
|
52
|
-
setSelectedOperator,
|
|
53
|
-
setInputText,
|
|
54
|
-
setMenuState
|
|
55
|
-
]);
|
|
56
|
-
const handleOperatorSelect = useCallback((operator)=>{
|
|
57
|
-
if (!selectedField) return;
|
|
58
|
-
const isBuildingEdit = !editing.editingChipId && editing.editingSegment === SEGMENT_VARIANT.operator;
|
|
59
|
-
if (isBuildingEdit) {
|
|
60
|
-
const shapeCompatible = isValueShapeCompatible(selectedOperator, operator);
|
|
61
|
-
if (!shapeCompatible) setBuildingMultiValue(void 0);
|
|
62
|
-
setSelectedOperator(operator);
|
|
63
|
-
editing.clearEditing();
|
|
64
|
-
if (isNoValueOperator(operator)) {
|
|
65
|
-
upsertCondition(selectedField, operator, null, null, insertIndex);
|
|
66
|
-
resetState(true);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
setMenuState('value');
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
if (isNoValueOperator(operator)) {
|
|
73
|
-
const isEditing = !!editing.editingChipId;
|
|
74
|
-
upsertCondition(selectedField, operator, null, editing.editingChipId, isEditing ? void 0 : insertIndex);
|
|
75
|
-
resetState(!isEditing);
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
if (editing.editingChipId && editing.editingSegment === SEGMENT_VARIANT.operator) {
|
|
79
|
-
const idx = chipIdToConditionIndex(editing.editingChipId);
|
|
80
|
-
const condition = null !== idx ? conditionsRef.current[idx] : null;
|
|
81
|
-
if (condition) {
|
|
82
|
-
const hasValue = null !== condition.value && '' !== condition.value;
|
|
83
|
-
if (hasValue) {
|
|
84
|
-
upsertCondition(selectedField, operator, condition.value, editing.editingChipId, void 0, void 0, condition.dateOrigin);
|
|
85
|
-
resetState();
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
upsertCondition(selectedField, operator, null, editing.editingChipId);
|
|
89
|
-
editing.setEditingSegment(SEGMENT_VARIANT.value);
|
|
90
|
-
editing.setSegmentFilterText('');
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
setSelectedOperator(operator);
|
|
94
|
-
setInputText('');
|
|
95
|
-
setMenuState('value');
|
|
96
|
-
}, [
|
|
97
|
-
editing,
|
|
98
|
-
selectedField,
|
|
99
|
-
selectedOperator,
|
|
100
|
-
insertIndex,
|
|
101
|
-
upsertCondition,
|
|
102
|
-
resetState,
|
|
103
|
-
setSelectedOperator,
|
|
104
|
-
setMenuState,
|
|
105
|
-
setBuildingMultiValue,
|
|
106
|
-
setInputText
|
|
107
|
-
]);
|
|
108
|
-
const handleValueSelect = useCallback((val)=>{
|
|
109
|
-
if (!selectedField || !selectedOperator) return;
|
|
110
|
-
if (isBetweenOperator(selectedOperator) && 'date' === selectedField.type) {
|
|
111
|
-
const result = dateRange.selectValue(String(val));
|
|
112
|
-
if (!result) return;
|
|
113
|
-
upsertCondition(selectedField, selectedOperator, result, editing.editingChipId);
|
|
114
|
-
resetState(!editing.editingChipId);
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
const isEditing = !!editing.editingChipId;
|
|
118
|
-
upsertCondition(selectedField, selectedOperator, val, editing.editingChipId, isEditing ? void 0 : insertIndex);
|
|
119
|
-
resetState(!isEditing);
|
|
120
|
-
}, [
|
|
121
|
-
selectedField,
|
|
122
|
-
selectedOperator,
|
|
123
|
-
editing,
|
|
124
|
-
dateRange,
|
|
125
|
-
insertIndex,
|
|
126
|
-
upsertCondition,
|
|
127
|
-
resetState
|
|
128
|
-
]);
|
|
129
|
-
const handleMultiCommit = useCallback((values)=>{
|
|
130
|
-
if (!selectedField || !selectedOperator || 0 === values.length) return;
|
|
131
|
-
const isEditing = !!editing.editingChipId;
|
|
132
|
-
upsertCondition(selectedField, selectedOperator, values, editing.editingChipId, isEditing ? void 0 : insertIndex);
|
|
133
|
-
resetState(!isEditing);
|
|
134
|
-
}, [
|
|
135
|
-
selectedField,
|
|
136
|
-
selectedOperator,
|
|
137
|
-
editing,
|
|
138
|
-
insertIndex,
|
|
139
|
-
upsertCondition,
|
|
140
|
-
resetState
|
|
141
|
-
]);
|
|
142
|
-
const handleBuildingValueChange = useCallback((preview)=>{
|
|
143
|
-
setBuildingMultiValue(preview);
|
|
144
|
-
}, [
|
|
145
|
-
setBuildingMultiValue
|
|
146
|
-
]);
|
|
147
|
-
const handleMultiSelectToggle = useCallback(()=>{
|
|
148
|
-
if (editing.editingSegment === SEGMENT_VARIANT.value) editing.resetSegmentTyping();
|
|
149
|
-
else setInputText('');
|
|
150
|
-
}, [
|
|
151
|
-
editing,
|
|
152
|
-
setInputText
|
|
153
|
-
]);
|
|
154
|
-
const handleRangeSelect = useCallback((from, to)=>{
|
|
155
|
-
if (!selectedField || !selectedOperator) return;
|
|
156
|
-
const isEditing = !!editing.editingChipId;
|
|
157
|
-
upsertCondition(selectedField, selectedOperator, [
|
|
158
|
-
from,
|
|
159
|
-
to
|
|
160
|
-
], editing.editingChipId, isEditing ? void 0 : insertIndex);
|
|
161
|
-
resetState(!isEditing);
|
|
162
|
-
}, [
|
|
163
|
-
selectedField,
|
|
164
|
-
selectedOperator,
|
|
165
|
-
editing,
|
|
166
|
-
insertIndex,
|
|
167
|
-
upsertCondition,
|
|
168
|
-
resetState
|
|
169
|
-
]);
|
|
170
|
-
const handleCustomValueCommit = useCallback((customText)=>{
|
|
171
|
-
if (!selectedField || !selectedOperator || !customText.trim()) return;
|
|
172
|
-
const trimmed = customText.trim();
|
|
173
|
-
const isEditing = !!editing.editingChipId;
|
|
174
|
-
if (isMultiSelectOperator(selectedOperator)) {
|
|
175
|
-
const { resolved, error } = resolveMultiValues(selectedField, trimmed);
|
|
176
|
-
upsertCondition(selectedField, selectedOperator, resolved, editing.editingChipId, isEditing ? void 0 : insertIndex, error ? SEGMENT_VARIANT.value : void 0);
|
|
177
|
-
} else if ('date' === selectedField.type) if (isBetweenOperator(selectedOperator)) {
|
|
178
|
-
const rangeValue = resolveDateRangeValue(trimmed);
|
|
179
|
-
upsertCondition(selectedField, selectedOperator, rangeValue ?? trimmed, editing.editingChipId, isEditing ? void 0 : insertIndex, rangeValue ? void 0 : SEGMENT_VARIANT.value, 'absolute');
|
|
180
|
-
} else {
|
|
181
|
-
const { error, dateOrigin } = resolveDateValue(trimmed, editing.editingChipId, conditionsRef.current);
|
|
182
|
-
upsertCondition(selectedField, selectedOperator, trimmed, editing.editingChipId, isEditing ? void 0 : insertIndex, error ? SEGMENT_VARIANT.value : void 0, dateOrigin);
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
const { resolved, error } = resolveSingleValue(selectedField, trimmed);
|
|
186
|
-
upsertCondition(selectedField, selectedOperator, resolved, editing.editingChipId, isEditing ? void 0 : insertIndex, error ? SEGMENT_VARIANT.value : void 0);
|
|
187
|
-
}
|
|
188
|
-
resetState(!isEditing);
|
|
189
|
-
}, [
|
|
190
|
-
selectedField,
|
|
191
|
-
selectedOperator,
|
|
192
|
-
editing,
|
|
193
|
-
insertIndex,
|
|
194
|
-
upsertCondition,
|
|
195
|
-
resetState
|
|
196
|
-
]);
|
|
197
|
-
const handleCustomAttributeCommit = useCallback((customText)=>{
|
|
198
|
-
if (!customText.trim()) return;
|
|
199
|
-
const trimmed = customText.trim();
|
|
200
|
-
const matchedField = fields.find((f)=>f.label.toLowerCase() === trimmed.toLowerCase() || f.name.toLowerCase() === trimmed.toLowerCase());
|
|
201
|
-
if (!editing.editingChipId) {
|
|
202
|
-
if (matchedField) handleFieldSelect(matchedField);
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
const idx = chipIdToConditionIndex(editing.editingChipId);
|
|
206
|
-
const condition = null !== idx ? conditionsRef.current[idx] : null;
|
|
207
|
-
if (!condition) return;
|
|
208
|
-
if (matchedField) {
|
|
209
|
-
const hasValueError = validateValueForField(matchedField, condition.value);
|
|
210
|
-
upsertCondition(matchedField, condition.operator, condition.value, editing.editingChipId, void 0, hasValueError ? SEGMENT_VARIANT.value : void 0, condition.dateOrigin);
|
|
211
|
-
} else {
|
|
212
|
-
const syntheticField = {
|
|
213
|
-
name: trimmed,
|
|
214
|
-
label: trimmed,
|
|
215
|
-
type: 'string'
|
|
216
|
-
};
|
|
217
|
-
upsertCondition(syntheticField, condition.operator, condition.value, editing.editingChipId, void 0, SEGMENT_VARIANT.attribute, condition.dateOrigin);
|
|
218
|
-
}
|
|
219
|
-
resetState();
|
|
220
|
-
}, [
|
|
221
|
-
editing,
|
|
222
|
-
fields,
|
|
223
|
-
upsertCondition,
|
|
224
|
-
resetState,
|
|
225
|
-
handleFieldSelect
|
|
226
|
-
]);
|
|
227
|
-
const handleCustomOperatorCommit = useCallback((customText)=>{
|
|
228
|
-
if (!selectedField || !customText.trim()) return;
|
|
229
|
-
const trimmed = customText.trim();
|
|
230
|
-
const allowed = getFieldOperators(selectedField);
|
|
231
|
-
let matched = getOperatorFromLabel(trimmed, selectedField.type);
|
|
232
|
-
if (!matched) {
|
|
233
|
-
const symbolMatch = allowed.find((op)=>OPERATOR_SYMBOLS[op].toLowerCase() === trimmed.toLowerCase());
|
|
234
|
-
if (symbolMatch) matched = symbolMatch;
|
|
235
|
-
}
|
|
236
|
-
if (!matched) {
|
|
237
|
-
const rawMatch = allowed.find((op)=>op.toLowerCase() === trimmed.toLowerCase());
|
|
238
|
-
if (rawMatch) matched = rawMatch;
|
|
239
|
-
}
|
|
240
|
-
if (!matched || !isOperatorAllowedForField(selectedField, matched)) return;
|
|
241
|
-
handleOperatorSelect(matched);
|
|
242
|
-
}, [
|
|
243
|
-
selectedField,
|
|
244
|
-
handleOperatorSelect
|
|
245
|
-
]);
|
|
246
|
-
return {
|
|
247
|
-
handleMenuClose,
|
|
248
|
-
handleFieldSelect,
|
|
249
|
-
handleOperatorSelect,
|
|
250
|
-
handleValueSelect,
|
|
251
|
-
handleMultiCommit,
|
|
252
|
-
handleBuildingValueChange,
|
|
253
|
-
handleMultiSelectToggle,
|
|
254
|
-
handleRangeSelect,
|
|
255
|
-
handleCustomValueCommit,
|
|
256
|
-
handleCustomOperatorCommit,
|
|
257
|
-
handleCustomAttributeCommit
|
|
258
|
-
};
|
|
259
|
-
};
|
|
260
|
-
export { useMenuFlow };
|