Skip to content

Commit 55b7fb1

Browse files
committed
refactor!: update naming of useFilterSelect, useFilterGroup and useFilterRule
1 parent 744b13e commit 55b7fb1

7 files changed

+92
-28
lines changed

.changeset/moody-snakes-knock.md

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
"@fn-sphere/filter": minor
3+
---
4+
5+
- In `useFilterSelect`:
6+
- The `updateField` function has been deprecated and replaced with `setField` for clarity and consistency.
7+
- The `updateFilter` function has been deprecated and replaced with `setFilter`.
8+
- In `useFilterRule`:
9+
- The `updateRule` function has been renamed to `setRule`
10+
- Added a new `duplicateRule` function to duplicate a rule.
11+
- Added a new `invertRule` function.
12+
- In `useFilterGroup` and `useFilterRule`:
13+
- The parameter `SingleFilter` has been changed to `SingleFilterInput` for simplicity.
14+
- The parameter `FilterGroup` has been changed to `FilterGroupInput` for simplicity.

packages/filter/src/hooks/use-filter-group.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import {
22
createFilterGroup,
33
createSingleFilter,
44
type FilterGroup,
5-
type SingleFilter,
5+
type FilterGroupInput,
6+
type SingleFilterInput,
67
} from "@fn-sphere/core";
78
import { getDepthOfRule, toFilterMap } from "../filter-map.js";
89
import { useFilterSchemaContext } from "./use-filter-schema-context.js";
@@ -51,10 +52,8 @@ export const useFilterGroup = (ruleGroup: FilterGroup) => {
5152
});
5253
};
5354

54-
const appendChildRule = (
55-
newRule: SingleFilter = createSingleFilter(),
56-
index = Infinity,
57-
) => {
55+
const appendChildRule = (input?: SingleFilterInput, index = Infinity) => {
56+
const newRule = createSingleFilter(input);
5857
onFilterMapChange({
5958
...filterMap,
6059
[ruleNode.id]: {
@@ -74,12 +73,13 @@ export const useFilterGroup = (ruleGroup: FilterGroup) => {
7473
};
7574

7675
const appendChildGroup = (
77-
newFilterGroup: FilterGroup = createFilterGroup({
76+
input: FilterGroupInput = {
7877
op: "and",
7978
conditions: [createSingleFilter()],
80-
}),
79+
},
8180
index = Infinity,
8281
) => {
82+
const newFilterGroup = createFilterGroup(input);
8383
onFilterMapChange({
8484
...filterMap,
8585
[ruleNode.id]: {

packages/filter/src/hooks/use-filter-rule.ts

+39-8
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ import {
33
createSingleFilter,
44
isEqualPath,
55
isValidRule,
6-
type FilterGroup,
6+
type FilterGroupInput,
77
type SingleFilter,
8+
type SingleFilterInput,
89
} from "@fn-sphere/core";
910
import { fromFilterMap, getDepthOfRule, toFilterMap } from "../filter-map.js";
1011
import { useFilterSchemaContext } from "./use-filter-schema-context.js";
@@ -40,19 +41,27 @@ export const useFilterRule = (rule: SingleFilter) => {
4041
(filter) => filter.name === rule.name,
4142
);
4243

43-
// TODO ignore FilterId in user input
44-
const updateRule = (newRule: SingleFilter) => {
44+
const setRule = (input: SingleFilterInput) => {
4545
onFilterMapChange({
4646
...filterMap,
4747
[rule.id]: {
4848
type: "Filter",
49-
data: newRule,
49+
data: {
50+
...createSingleFilter(input),
51+
id: rule.id,
52+
},
5053
parentId,
5154
},
5255
});
5356
};
5457

55-
const appendRule = (newRule: SingleFilter = createSingleFilter()) => {
58+
/**
59+
* @deprecated Use {@link setRule} instead
60+
*/
61+
const updateRule = setRule;
62+
63+
const appendRule = (input?: SingleFilterInput) => {
64+
const newRule = createSingleFilter(input);
5665
onFilterMapChange({
5766
...filterMap,
5867
[parentId]: {
@@ -72,12 +81,20 @@ export const useFilterRule = (rule: SingleFilter) => {
7281
return newRule;
7382
};
7483

84+
const duplicateRule = () => {
85+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
86+
const { id: _, ...ruleWithoutId } = rule;
87+
const newRule = createSingleFilter(ruleWithoutId);
88+
return appendRule(newRule);
89+
};
90+
7591
const appendGroup = (
76-
newFilterGroup: FilterGroup = createFilterGroup({
92+
input: FilterGroupInput = {
7793
op: "and",
7894
conditions: [createSingleFilter()],
79-
}),
95+
},
8096
) => {
97+
const newFilterGroup = createFilterGroup(input);
8198
onFilterMapChange({
8299
...filterMap,
83100
[parentId]: {
@@ -139,6 +156,15 @@ export const useFilterRule = (rule: SingleFilter) => {
139156
onFilterMapChange(newFilterMap);
140157
};
141158

159+
const invertRule = (invert?: SingleFilter["invert"]) => {
160+
const oldInvert = rule.invert;
161+
const newInvert = invert === undefined ? !oldInvert : invert;
162+
if (oldInvert === newInvert) {
163+
return;
164+
}
165+
setRule({ ...rule, invert: newInvert });
166+
};
167+
142168
const isLastRule = index === parentNode.conditionIds.length - 1;
143169

144170
return {
@@ -170,12 +196,17 @@ export const useFilterRule = (rule: SingleFilter) => {
170196
selectedField,
171197
selectedFilter,
172198

199+
setRule,
200+
/**
201+
* @deprecated Use {@link setRule} instead
202+
*/
173203
updateRule,
174204
appendRule,
175205
appendGroup,
176206
removeRule,
177207
// moveRule,
178-
// duplicateRule,
208+
duplicateRule,
209+
invertRule,
179210
// turnIntoGroup,
180211
};
181212
};

packages/filter/src/hooks/use-filter-select.ts

+24-5
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export const useFilterSelect = (rule: SingleFilter) => {
4040
mapFilterName,
4141
getLocaleText,
4242
} = useFilterSchemaContext();
43-
const { updateRule } = useFilterRule(rule);
43+
const { setRule } = useFilterRule(rule);
4444

4545
const ruleNode = filterMap[rule.id];
4646
if (!ruleNode) {
@@ -93,7 +93,7 @@ export const useFilterSelect = (rule: SingleFilter) => {
9393
);
9494
};
9595

96-
const updateField = (
96+
const setField = (
9797
newField: FilterField,
9898
{
9999
tryRetainFilter = true,
@@ -120,7 +120,7 @@ export const useFilterSelect = (rule: SingleFilter) => {
120120
tryRetainArgs &&
121121
(needRetainFilter || canRetainArgs(newField.filterFnList[0]));
122122

123-
updateRule({
123+
setRule({
124124
...rule,
125125
path: newField.path,
126126
name: newFilterSchema,
@@ -132,26 +132,45 @@ export const useFilterSelect = (rule: SingleFilter) => {
132132
});
133133
};
134134

135-
const updateFilter = (
135+
/**
136+
* @deprecated Use {@link setField} instead
137+
*/
138+
const updateField = setField;
139+
140+
const setFilter = (
136141
filterSchema: StandardFnSchema,
137142
{ tryRetainArgs = true }: UpdateFilterOptions = {},
138143
) => {
139144
const needRetainArgs = tryRetainArgs && canRetainArgs(filterSchema);
140-
updateRule({
145+
setRule({
141146
...rule,
142147
name: filterSchema.name,
143148
args: needRetainArgs ? rule.args : [],
144149
});
145150
};
146151

152+
/**
153+
* @deprecated Use {@link setFilter} instead
154+
*/
155+
const updateFilter = setFilter;
156+
147157
return {
148158
filterableFields,
149159
selectedField,
150160
selectedFilter,
151161
fieldOptions,
152162
filterOptions,
153163

164+
setField,
165+
setFilter,
166+
167+
/**
168+
* @deprecated Use {@link setField} instead
169+
*/
154170
updateField,
171+
/**
172+
* @deprecated Use {@link setFilter} instead
173+
*/
155174
updateFilter,
156175
};
157176
};

packages/filter/src/views/field-select.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ export const FieldSelect = ({
1414
...updateFieldOptions
1515
}: FieldSelectProps) => {
1616
const { Select: SelectView } = useView("components");
17-
const { selectedField, fieldOptions, updateField } = useFilterSelect(rule);
17+
const { selectedField, fieldOptions, setField } = useFilterSelect(rule);
1818

1919
return (
2020
<SelectView
2121
value={selectedField}
2222
options={fieldOptions}
23-
onChange={(field) => updateField(field, updateFieldOptions)}
23+
onChange={(field) => setField(field, updateFieldOptions)}
2424
/>
2525
);
2626
};

packages/filter/src/views/filter-data-input.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export type DataInputProps = {
1010
export const FilterDataInput = forwardRef<HTMLInputElement, DataInputProps>(
1111
({ rule }, ref) => {
1212
const { Input: InputView } = useView("components");
13-
const { selectedField, selectedFilter, updateRule } = useFilterRule(rule);
13+
const { selectedField, selectedFilter, setRule } = useFilterRule(rule);
1414
const requiredArguments = selectedFilter
1515
? getParametersExceptFirst(selectedFilter)
1616
: undefined;
@@ -19,8 +19,8 @@ export const FilterDataInput = forwardRef<HTMLInputElement, DataInputProps>(
1919
selectedField?.fieldSchema,
2020
);
2121

22-
const updateInput = (value: unknown[]) => {
23-
updateRule({
22+
const setRuleArgs = (value: unknown[]) => {
23+
setRule({
2424
...rule,
2525
args: value,
2626
});
@@ -35,7 +35,7 @@ export const FilterDataInput = forwardRef<HTMLInputElement, DataInputProps>(
3535
ref={ref}
3636
rule={rule}
3737
requiredDataSchema={requiredArguments}
38-
updateInput={updateInput}
38+
updateInput={setRuleArgs}
3939
/>
4040
);
4141
},

packages/filter/src/views/filter-select.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ export const FilterSelect = ({
1414
...updateFilterOptions
1515
}: FilterSelectProps) => {
1616
const { Select: SelectView } = useView("components");
17-
const { selectedField, selectedFilter, filterOptions, updateFilter } =
17+
const { selectedField, selectedFilter, filterOptions, setFilter } =
1818
useFilterSelect(rule);
1919

2020
return (
2121
<SelectView
2222
value={selectedFilter}
2323
disabled={!selectedField}
2424
options={filterOptions}
25-
onChange={(val) => updateFilter(val, updateFilterOptions)}
25+
onChange={(val) => setFilter(val, updateFilterOptions)}
2626
/>
2727
);
2828
};

0 commit comments

Comments
 (0)