import { apiInstance } from "@/shared/config/apiConfig"; import { IFetch } from "@/shared/types/fetch-type"; import { IList } from "@/shared/types/list-type"; import { IReport } from "@/shared/types/report-type"; import { create } from "zustand"; interface IFetchReports extends IList { results: IReport[]; } interface IRatingStore extends IFetch { data: IFetchReports; getReports: ( categories: string, page: number, filter: { option: string; toggle: boolean } ) => Promise; } export const useRatingStore = create((set) => ({ data: { count: 0, previous: null, next: null, results: [], }, isLoading: false, error: "", getReports: async ( query: string = "", page: number = 1, filter: { option: string; toggle: boolean } ) => { try { set({ isLoading: true }); const data = ( await apiInstance.get( `/report/?page=${page}&page_size=${8}` ) ).data; const searched = data.results.filter((rating) => { return rating.location.some((location) => { return location.address .toLowerCase() .includes(query.toLowerCase()); }); }); data.results = [...searched]; if (filter.option === "date" && filter.toggle === false) { data.results = data.results.sort((a, b) => { const dateA = new Date(a.created_at) as unknown as number; const dateB = new Date(b.created_at) as unknown as number; return dateA - dateB; }); } else if (filter.option === "date" && filter.toggle === true) { data.results = data.results.sort((a, b) => { const dateA = new Date(a.created_at) as unknown as number; const dateB = new Date(b.created_at) as unknown as number; return dateB - dateA; }); } if (filter.option === "reviews" && filter.toggle === false) { data.results = data.results.sort( (a, b) => a.count_reviews - b.count_reviews ); } else if ( filter.option === "reviews" && filter.toggle === true ) { data.results = data.results.sort( (a, b) => b.count_reviews - a.count_reviews ); } if (filter.option === "rating" && filter.toggle === false) { data.results = data.results.sort( (a, b) => a.total_likes - b.total_likes ); } else if ( filter.option === "rating" && filter.toggle === true ) { data.results = data.results.sort( (a, b) => b.total_likes - a.total_likes ); } set({ data: data }); } catch (error: any) { set({ error: error.message }); } finally { set({ isLoading: false }); } }, }));