import { createSlice, PayloadAction } from '@reduxjs/toolkit'; import type { DateRange } from '@/services/dashboard.service'; /** Dealer All Requests: main filter to switch between All, Claim Management, Form 16. */ export type RequestTypeFilter = 'all' | 'claim_management' | 'form_16'; export interface RequestsFiltersState { searchTerm: string; statusFilter: string; priorityFilter: string; templateTypeFilter: string; /** Dealer only: request type for All Requests (all | claim_management | form_16). */ requestTypeFilter: RequestTypeFilter; /** When template is Form 16: financial year (e.g. 2024-25) */ form16FinancialYear: string; /** When template is Form 16: quarter (Q1, Q2, Q3, Q4) */ form16Quarter: string; slaComplianceFilter: string; departmentFilter: string; initiatorFilter: string; approverFilter: string; approverFilterType: 'current' | 'any'; dateRange: DateRange; customStartDate?: Date; customEndDate?: Date; showCustomDatePicker: boolean; currentPage: number; } const initialState: RequestsFiltersState = { searchTerm: '', statusFilter: 'all', priorityFilter: 'all', templateTypeFilter: 'all', requestTypeFilter: 'all', form16FinancialYear: 'all', form16Quarter: 'all', slaComplianceFilter: 'all', departmentFilter: 'all', initiatorFilter: 'all', approverFilter: 'all', approverFilterType: 'current', dateRange: 'all', customStartDate: undefined, customEndDate: undefined, showCustomDatePicker: false, currentPage: 1, }; const requestsSlice = createSlice({ name: 'requests', initialState, reducers: { setSearchTerm: (state, action: PayloadAction) => { state.searchTerm = action.payload; }, setStatusFilter: (state, action: PayloadAction) => { state.statusFilter = action.payload; }, setPriorityFilter: (state, action: PayloadAction) => { state.priorityFilter = action.payload; }, setTemplateTypeFilter: (state, action: PayloadAction) => { state.templateTypeFilter = action.payload; if (action.payload !== 'FORM_16') { state.form16FinancialYear = 'all'; state.form16Quarter = 'all'; } }, setRequestTypeFilter: (state, action: PayloadAction) => { state.requestTypeFilter = action.payload; if (action.payload !== 'form_16') { state.form16FinancialYear = 'all'; state.form16Quarter = 'all'; } }, setForm16FinancialYear: (state, action: PayloadAction) => { state.form16FinancialYear = action.payload; }, setForm16Quarter: (state, action: PayloadAction) => { state.form16Quarter = action.payload; }, setSlaComplianceFilter: (state, action: PayloadAction) => { state.slaComplianceFilter = action.payload; }, setDepartmentFilter: (state, action: PayloadAction) => { state.departmentFilter = action.payload; }, setInitiatorFilter: (state, action: PayloadAction) => { state.initiatorFilter = action.payload; }, setApproverFilter: (state, action: PayloadAction) => { state.approverFilter = action.payload; }, setApproverFilterType: (state, action: PayloadAction<'current' | 'any'>) => { state.approverFilterType = action.payload; }, setDateRange: (state, action: PayloadAction) => { state.dateRange = action.payload; }, setCustomStartDate: (state, action: PayloadAction) => { state.customStartDate = action.payload; }, setCustomEndDate: (state, action: PayloadAction) => { state.customEndDate = action.payload; }, setShowCustomDatePicker: (state, action: PayloadAction) => { state.showCustomDatePicker = action.payload; }, setCurrentPage: (state, action: PayloadAction) => { state.currentPage = action.payload; }, clearFilters: (state) => { state.searchTerm = ''; state.statusFilter = 'all'; state.priorityFilter = 'all'; state.templateTypeFilter = 'all'; state.requestTypeFilter = 'all'; state.form16FinancialYear = 'all'; state.form16Quarter = 'all'; state.slaComplianceFilter = 'all'; state.departmentFilter = 'all'; state.initiatorFilter = 'all'; state.approverFilter = 'all'; state.approverFilterType = 'current'; state.dateRange = 'all'; state.customStartDate = undefined; state.customEndDate = undefined; state.showCustomDatePicker = false; state.currentPage = 1; }, }, }); export const { setSearchTerm, setStatusFilter, setPriorityFilter, setTemplateTypeFilter, setRequestTypeFilter, setForm16FinancialYear, setForm16Quarter, setSlaComplianceFilter, setDepartmentFilter, setInitiatorFilter, setApproverFilter, setApproverFilterType, setDateRange, setCustomStartDate, setCustomEndDate, setShowCustomDatePicker, setCurrentPage, clearFilters, } = requestsSlice.actions; export default requestsSlice;