feat(FE): Add support for grouped fields in ButtonFilter active count

calculation
This commit is contained in:
rstubryan
2026-02-25 10:07:26 +07:00
parent cce84a3a6f
commit 47a2439777
+24 -6
View File
@@ -9,6 +9,7 @@ export type ButtonFilterProps = ButtonProps & {
values: FormikValues;
onClick: () => void;
excludeFields?: string[];
fieldGroups?: string[][];
};
// 'bg-gradient-to-t from-blue-50 to-blue-100 border-blue-500 text-blue-600 hover:from-blue-100 hover:to-blue-200
@@ -17,19 +18,36 @@ const ButtonFilter = ({
values,
onClick,
excludeFields = [],
fieldGroups = [],
...props
}: ButtonFilterProps) => {
const filteredValues = useMemo(() => {
const result: FormikValues = {};
const activeCount = useMemo(() => {
const filteredValues: FormikValues = {};
Object.keys(values).forEach((key) => {
if (!excludeFields.includes(key)) {
result[key] = values[key];
filteredValues[key] = values[key];
}
});
return result;
}, [values, excludeFields]);
const activeCount = getFilledFormikValuesCount(filteredValues);
let count = getFilledFormikValuesCount(filteredValues);
fieldGroups.forEach((group) => {
const groupFields = group.filter(
(field) => !excludeFields.includes(field)
);
const filledGroupFields = groupFields.filter(
(field) => filteredValues[field]
);
if (
filledGroupFields.length === groupFields.length &&
groupFields.length > 1
) {
count -= groupFields.length - 1;
}
});
return count;
}, [values, excludeFields, fieldGroups]);
return (
<Button
{...props}