get products by filter connected
This commit is contained in:
@@ -4,16 +4,41 @@ import { endPoints } from "@/request/links";
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
import ProductCard from "./productCard";
|
||||
import { useCategory } from "@/store/useCategory";
|
||||
import { useFilter } from "@/lib/filter-zustand";
|
||||
import { useMemo } from "react";
|
||||
|
||||
export default function MainProduct() {
|
||||
const category = useCategory((state) => state.category);
|
||||
const filter = useFilter((state) => state.filter);
|
||||
const getFiltersByType = useFilter((state)=>state.getFiltersByType)
|
||||
|
||||
const requestLink = category.have_sub_category
|
||||
? endPoints.subCategory.byId(category.id)
|
||||
: endPoints.product.byCategory(category.id || 0);
|
||||
// Query params yaratish
|
||||
const queryParams = useMemo(() => {
|
||||
const catalog = getFiltersByType("catalog");
|
||||
const size = getFiltersByType("size");
|
||||
|
||||
// Har bir filter uchun query string yaratish
|
||||
const catalogParams = catalog.map((item) => `catalog=${item.id}`).join("&");
|
||||
const sizeParams = size.map((item) => `size=${item.id}`).join("&");
|
||||
|
||||
// Barcha paramslarni birlashtirish
|
||||
const allParams = [catalogParams, sizeParams].filter(Boolean).join("&");
|
||||
|
||||
return allParams ? `&${allParams}` : "";
|
||||
}, [filter, getFiltersByType]);
|
||||
|
||||
// Request link yaratish
|
||||
const requestLink = useMemo(() => {
|
||||
const baseLink = category.have_sub_category
|
||||
? endPoints.subCategory.byId(category.id)
|
||||
: endPoints.product.byCategory(category.id || 0);
|
||||
|
||||
// Query params qo'shish
|
||||
return `${baseLink}${queryParams}`;
|
||||
}, [category.id, category.have_sub_category, queryParams]);
|
||||
|
||||
const { data, isLoading, error } = useQuery({
|
||||
queryKey: ["products", category.id],
|
||||
queryKey: ["products", category.id , queryParams],
|
||||
queryFn: () => httpClient(requestLink),
|
||||
select: (data) => data?.data?.data?.results,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user