diff --git a/frontend/composables/api/resellers/useGetResellersProducts.ts b/frontend/composables/api/resellers/useGetResellersProducts.ts new file mode 100644 index 0000000..269e70e --- /dev/null +++ b/frontend/composables/api/resellers/useGetResellersProducts.ts @@ -0,0 +1,55 @@ +// imports + +import { useQuery } from "@tanstack/vue-query"; +import { API_ENDPOINTS, QUERY_KEYS } from "~/constants"; + +// types + +export type GetResellersProductsResponse = ApiPaginated; + +export type GetResellersProductsFilters = { + search?: string | undefined; + sort?: string | undefined; + category?: string | undefined; + price_gte: number; + price_lte: number; + has_discount?: boolean | undefined; + in_stock?: boolean | undefined; + page: number; +}; + +// composable + +const useGetResellersProducts = (params?: ComputedRef) => { + // state + + const { $axios: axios } = useNuxtApp(); + + // methods + + const handleGetResellersProducts = async (params?: GetResellersProductsFilters) => { + const { data } = await axios.get(`${API_ENDPOINTS.resellers_products.get_all}`, { + params: { + sort: params?.sort, + in_stock: params?.in_stock, + search: params?.search, + has_discount: params?.has_discount, + category: params?.category, + price_gte: params?.price_gte, + price_lte: params?.price_lte, + offset: Number(params?.page) * 15 - 15, + limit: 15, + }, + }); + + return data; + }; + + return useQuery({ + staleTime: 60 * 1000, + queryKey: [QUERY_KEYS.resellers_products, params], + queryFn: () => handleGetResellersProducts(params?.value), + }); +}; + +export default useGetResellersProducts;