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:
Tiago Ribeiro
2023-12-03 00:13:50 +00:00
parent 36be5267a2
commit 5c8867555d
8 changed files with 308 additions and 21 deletions

View 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;