mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-08-22 00:42:47 +08:00
🐛 fix(datagrid): 保留多列筛选条件
This commit is contained in:
@@ -80,4 +80,52 @@ describe('useDataGridFilters', () => {
|
||||
|
||||
renderer?.unmount();
|
||||
});
|
||||
|
||||
it('preserves earlier value selections when a second column filter is applied', () => {
|
||||
let latest: UseDataGridFiltersResult | undefined;
|
||||
let renderer: ReactTestRenderer | undefined;
|
||||
|
||||
const Harness = () => {
|
||||
const [appliedConditions, setAppliedConditions] = React.useState<Parameters<typeof useDataGridFilters>[0]['appliedFilterConditions']>([]);
|
||||
latest = useDataGridFilters(createFilterHookProps({
|
||||
appliedFilterConditions: appliedConditions,
|
||||
onApplyFilter: setAppliedConditions,
|
||||
}));
|
||||
return null;
|
||||
};
|
||||
|
||||
act(() => {
|
||||
renderer = create(<Harness />);
|
||||
});
|
||||
|
||||
act(() => {
|
||||
latest?.applyColumnFilter({
|
||||
column: 'code',
|
||||
op: 'IN',
|
||||
valueSelection: { values: ['A'] },
|
||||
});
|
||||
});
|
||||
act(() => {
|
||||
latest?.applyColumnFilter({
|
||||
column: 'title',
|
||||
op: 'IN',
|
||||
valueSelection: { values: ['B'] },
|
||||
});
|
||||
});
|
||||
|
||||
expect(latest?.filterConditions).toEqual([
|
||||
expect.objectContaining({
|
||||
column: 'code',
|
||||
op: 'IN',
|
||||
valueSelection: { values: ['A'] },
|
||||
}),
|
||||
expect.objectContaining({
|
||||
column: 'title',
|
||||
op: 'IN',
|
||||
valueSelection: { values: ['B'] },
|
||||
}),
|
||||
]);
|
||||
|
||||
renderer?.unmount();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -126,6 +126,11 @@ export const useDataGridFilters = ({
|
||||
op,
|
||||
value: String(cond?.value ?? ''),
|
||||
value2: String(cond?.value2 ?? ''),
|
||||
valueSelection: cond?.valueSelection ? {
|
||||
values: Array.from(new Set((cond.valueSelection.values || []).map((value) => String(value)))),
|
||||
...(cond.valueSelection.includeNull ? { includeNull: true } : {}),
|
||||
...(cond.valueSelection.includeEmpty ? { includeEmpty: true } : {}),
|
||||
} : undefined,
|
||||
};
|
||||
});
|
||||
}, [normalizeFilterLogic]);
|
||||
|
||||
Reference in New Issue
Block a user