import { apiInstance } from "@/shared/config/apiConfig"; import { IFetch } from "@/shared/types/fetch-type"; import { IList } from "@/shared/types/list-type"; import { IStatistics } from "@/shared/types/statistics-type"; import { IUserRatings } from "@/shared/types/user-rating-type"; import { AxiosError } from "axios"; import { create } from "zustand"; const filterCategories: Record = { report_count: "report_count", likes_given_count: "likes_given_count", likes_received_count: "likes_received_count", average_rating: "average_rating", }; interface IVolunteersStore extends IFetch { data: IUserRatings[]; getVolunteers: (filter: { option: string; toggle: boolean; }) => void; } export const useVolunteersStore = create((set) => ({ isLoading: false, error: "", data: [], getVolunteers: async (filter: { option: string; toggle: boolean; }) => { try { set({ isLoading: true }); const response = await apiInstance.get( `/report/user_ratings/` ); let data = response.data; if ( filter.option === filterCategories[filter.option] && filter.toggle === false ) { data = data.sort((a, b) => { const optionKey = filter.option as keyof IUserRatings; return (Number(a[optionKey]) - Number(b[optionKey])) as number; }); } else if ( filter.option === "rating" && filter.toggle === true ) { data = data.sort((a, b) => { const optionKey = filter.option as keyof IUserRatings; return (Number(a[optionKey]) - Number(b[optionKey])) as number; }); } set({ data: data }); } catch (error: unknown) { if (error instanceof AxiosError) { set({ error: error.message }); } else { set({ error: "an error ocured" }); } } finally { set({ isLoading: false }); } }, }));