fix(FE): fixing filter store state on reset

This commit is contained in:
randy-ar
2026-01-22 16:01:39 +07:00
parent 282f651d96
commit 1c35c7db32
@@ -8,7 +8,7 @@ import SelectInput, {
OptionType, OptionType,
useSelect, useSelect,
} from '@/components/input/SelectInput'; } from '@/components/input/SelectInput';
import { useState, useEffect, useRef } from 'react'; import { useState, useEffect, useRef, useCallback } from 'react';
import useSWR from 'swr'; import useSWR from 'swr';
import { DashboardApi } from '@/services/api/dashboard'; import { DashboardApi } from '@/services/api/dashboard';
import { useFormik } from 'formik'; import { useFormik } from 'formik';
@@ -91,7 +91,6 @@ const DashboardProduction = () => {
isLoadingOptions: isLoadingFlockOptions, isLoadingOptions: isLoadingFlockOptions,
loadMore: loadMoreFlock, loadMore: loadMoreFlock,
} = useSelect(ProjectFlockApi.basePath, 'id', 'flock_name', '', { } = useSelect(ProjectFlockApi.basePath, 'id', 'flock_name', '', {
limit: 'limit',
location_id: selectedLocationIds ? selectedLocationIds.toString() : '', location_id: selectedLocationIds ? selectedLocationIds.toString() : '',
}); });
const { const {
@@ -99,16 +98,13 @@ const DashboardProduction = () => {
options: locationOptions, options: locationOptions,
isLoadingOptions: isLoadingLocationOptions, isLoadingOptions: isLoadingLocationOptions,
loadMore: loadMoreLocation, loadMore: loadMoreLocation,
} = useSelect(LocationApi.basePath, 'id', 'name', '', { } = useSelect(LocationApi.basePath, 'id', 'name');
limit: 'limit',
});
const { const {
setInputValue: setInputValueKandang, setInputValue: setInputValueKandang,
options: kandangOptions, options: kandangOptions,
isLoadingOptions: isLoadingKandangOptions, isLoadingOptions: isLoadingKandangOptions,
loadMore: loadMoreKandang, loadMore: loadMoreKandang,
} = useSelect(KandangApi.basePath, 'id', 'name', '', { } = useSelect(KandangApi.basePath, 'id', 'name', '', {
limit: 'limit',
location_id: selectedLocationIds ? selectedLocationIds.toString() : '', location_id: selectedLocationIds ? selectedLocationIds.toString() : '',
}); });
const comparisonTypeOptions = [ const comparisonTypeOptions = [
@@ -120,17 +116,18 @@ const DashboardProduction = () => {
// ===== FORMIK ===== // ===== FORMIK =====
const formik = useFormik({ const formik = useFormik({
initialValues: { initialValues: {
startDate: filterValues.startDate || '', startDate: filterValues.startDate ?? '',
endDate: filterValues.endDate || '', endDate: filterValues.endDate ?? '',
flock: filterValues.flock || ([] as OptionType[]), flock: filterValues.flock ?? ([] as OptionType[]),
location: filterValues.location || ([] as OptionType[]), location: filterValues.location ?? ([] as OptionType[]),
kandang: filterValues.kandang || ([] as OptionType[]), kandang: filterValues.kandang ?? ([] as OptionType[]),
analysisMode: filterValues.analysisMode || analysisMode, analysisMode: filterValues.analysisMode ?? analysisMode,
comparisonType: filterValues.comparisonType || '', comparisonType: filterValues.comparisonType ?? '',
locationIds: filterValues.locationIds || [], locationIds: filterValues.locationIds ?? [],
flockIds: filterValues.flockIds || [], flockIds: filterValues.flockIds ?? [],
kandangIds: filterValues.kandangIds || [], kandangIds: filterValues.kandangIds ?? [],
} as DashboardFilterType, } as DashboardFilterType,
enableReinitialize: true,
validationSchema: getDashboardFilterSchema(analysisMode), validationSchema: getDashboardFilterSchema(analysisMode),
onSubmit: (values) => { onSubmit: (values) => {
// Save filter values to store // Save filter values to store
@@ -148,13 +145,13 @@ const DashboardProduction = () => {
}, },
}); });
const handleResetFilter = () => { const handleResetFilter = useCallback(() => {
formik.resetForm(); formik.resetForm();
resetFilterValues(); // Clear stored filter values resetFilterValues(); // Clear stored filter values
setAnalysisMode('OVERVIEW'); setAnalysisMode('OVERVIEW');
setEndpointUrl('/dashboards'); setEndpointUrl('/dashboards');
setSelectedLocationIds([]); setSelectedLocationIds([]);
}; }, [resetFilterValues, filterValues, selectedLocationIds]);
const handleApplyFilter = (values: DashboardFilter) => { const handleApplyFilter = (values: DashboardFilter) => {
// Build query params object, only include non-empty values // Build query params object, only include non-empty values