Added the option to view both the teachers and students of a corporate as well as the corporate of a student
This commit is contained in:
34
src/stores/listFilterStore.ts
Normal file
34
src/stores/listFilterStore.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import {Group, User} from "@/interfaces/user";
|
||||
import {create} from "zustand";
|
||||
|
||||
export type Filter<T> = {id: string; filter: (x: T) => boolean};
|
||||
|
||||
export interface ListFilterState {
|
||||
userFilters: Filter<User>[];
|
||||
groupFilters: Filter<Group>[];
|
||||
appendUserFilter: (filter: Filter<User>) => void;
|
||||
removeUserFilter: (id: string) => void;
|
||||
clearUserFilters: () => void;
|
||||
appendGroupFilter: (filter: Filter<Group>) => void;
|
||||
removeGroupFilter: (id: string) => void;
|
||||
clearGroupFilters: () => void;
|
||||
reset: () => void;
|
||||
}
|
||||
|
||||
export const initialState = {
|
||||
userFilters: [],
|
||||
groupFilters: [],
|
||||
};
|
||||
|
||||
const useFilterStore = create<ListFilterState>((set) => ({
|
||||
...initialState,
|
||||
appendUserFilter: (filter: Filter<User>) => set((state) => ({userFilters: [...state.userFilters.filter((f) => f.id !== filter.id), filter]})),
|
||||
appendGroupFilter: (filter: Filter<Group>) => set((state) => ({groupFilters: [...state.groupFilters.filter((f) => f.id !== filter.id), filter]})),
|
||||
removeUserFilter: (id: string) => set((state) => ({userFilters: state.userFilters.filter((x) => x.id !== id)})),
|
||||
removeGroupFilter: (id: string) => set((state) => ({groupFilters: state.groupFilters.filter((x) => x.id !== id)})),
|
||||
clearUserFilters: () => set({userFilters: []}),
|
||||
clearGroupFilters: () => set({groupFilters: []}),
|
||||
reset: () => set(() => initialState),
|
||||
}));
|
||||
|
||||
export default useFilterStore;
|
||||
Reference in New Issue
Block a user