64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
|
|
export interface ClosedRequestsFiltersState {
|
|
searchTerm: string;
|
|
statusFilter: string;
|
|
priorityFilter: string;
|
|
sortBy: 'created' | 'due' | 'priority';
|
|
sortOrder: 'asc' | 'desc';
|
|
currentPage: number;
|
|
}
|
|
|
|
const initialState: ClosedRequestsFiltersState = {
|
|
searchTerm: '',
|
|
statusFilter: 'all',
|
|
priorityFilter: 'all',
|
|
sortBy: 'created',
|
|
sortOrder: 'desc',
|
|
currentPage: 1,
|
|
};
|
|
|
|
const closedRequestsSlice = createSlice({
|
|
name: 'closedRequests',
|
|
initialState,
|
|
reducers: {
|
|
setSearchTerm: (state, action: PayloadAction<string>) => {
|
|
state.searchTerm = action.payload;
|
|
},
|
|
setStatusFilter: (state, action: PayloadAction<string>) => {
|
|
state.statusFilter = action.payload;
|
|
},
|
|
setPriorityFilter: (state, action: PayloadAction<string>) => {
|
|
state.priorityFilter = action.payload;
|
|
},
|
|
setSortBy: (state, action: PayloadAction<'created' | 'due' | 'priority'>) => {
|
|
state.sortBy = action.payload;
|
|
},
|
|
setSortOrder: (state, action: PayloadAction<'asc' | 'desc'>) => {
|
|
state.sortOrder = action.payload;
|
|
},
|
|
setCurrentPage: (state, action: PayloadAction<number>) => {
|
|
state.currentPage = action.payload;
|
|
},
|
|
clearFilters: (state) => {
|
|
state.searchTerm = '';
|
|
state.statusFilter = 'all';
|
|
state.priorityFilter = 'all';
|
|
state.currentPage = 1;
|
|
},
|
|
},
|
|
});
|
|
|
|
export const {
|
|
setSearchTerm,
|
|
setStatusFilter,
|
|
setPriorityFilter,
|
|
setSortBy,
|
|
setSortOrder,
|
|
setCurrentPage,
|
|
clearFilters,
|
|
} = closedRequestsSlice.actions;
|
|
|
|
export default closedRequestsSlice;
|
|
|