'use client' import { ProductCard, Pagination, Sort, ProductsAside, SubCategories, Filter, ProductSkeleton, } from 'components' import { useChangeRoute, useMediaQuery } from 'hooks' import { useUrlQuery } from '@/hooks' import { useGetCategoriesQuery, useGetProductsQuery } from '@/store/services' const ProductsHome = () => { //? Assets const query = useUrlQuery() const category = query?.category?.toString() ?? '' const page_size = query?.page_size?.toString() ?? '' const page = query?.page?.toString() ?? '' const sort = query?.sort?.toString() ?? '' const search = query?.search?.toString() ?? '' const inStock = query?.inStock?.toString() ?? '' const discount = query?.discount?.toString() ?? '' const price = query?.price?.toString() ?? '' const isDesktop = useMediaQuery('(min-width:1280px)') //? Handlers const changeRoute = useChangeRoute() const handleChangeRoute = newQueries => { changeRoute({ ...query, page: 1, ...newQueries, }) } //? Querirs //* Get Products Data const { data, isFetching: isFetchingProduct } = useGetProductsQuery({ category, page_size, page, sort, search, inStock, discount, price, }) //* Get childCategories Data const { isLoading: isLoadingCategories, childCategories } = useGetCategoriesQuery(undefined, { selectFromResult: ({ isLoading, data }) => { const currentCategory = data?.data?.categories.find(cat => cat.slug === query?.category) const childCategories = data?.data?.categories.filter( cat => cat.parent === currentCategory?._id ) return { childCategories, isLoading } }, }) //? Render(s) return ( <>
{/* Filters & Sort */}
{!isDesktop && ( )}
所有商品 {data?.data?.productsLength} 件商品
{/* Products */} {isFetchingProduct ? ( ) : data && data?.data?.products.length > 0 ? (
{data?.data?.products.map(item => )}
) : (
没有找到商品
)}
{data && data?.data?.productsLength > 10 && (
)}
) } export default ProductsHome