kgroad-frontend2/src/widgets/home/RatingSection/ratingSectionStore.ts
2024-03-10 04:38:46 +06:00

61 lines
1.3 KiB
TypeScript

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,
sort: string
) => Promise<void>;
}
export const useRatingStore = create<IRatingStore>((set) => ({
data: {
count: 0,
previous: null,
next: null,
results: [],
},
isLoading: false,
error: "",
getReports: async (
query: string = "",
page: number = 1,
sort: string = ""
) => {
try {
set({ isLoading: true });
const data = (
await apiInstance.get<IFetchReports>(
`/report/list_sort?sort_by=${sort}&page=${page}`
)
).data;
const searched = data.results.filter((rating) => {
return rating.location.some((location) => {
return location.address
.toLowerCase()
.includes(query.toLowerCase());
});
});
data.results = [...searched];
set({ data: data });
} catch (error: any) {
set({ error: error.message });
} finally {
set({ isLoading: false });
}
},
}));