import { useEffect, useMemo, useState } from 'react' import useProductSearch from '../hooks/useProductSearch' import ProductCard from './ProductCard' import Pagination from '@/core/components/elements/Pagination/Pagination' import { toQuery } from 'lodash-contrib' import _ from 'lodash' import ProductSearchSkeleton from './Skeleton/ProductSearchSkeleton' import ProductFilter from './ProductFilter' import useActive from '@/core/hooks/useActive' import MobileView from '@/core/components/views/MobileView' import DesktopView from '@/core/components/views/DesktopView' import NextImage from 'next/image' import ProductFilterDesktop from './ProductFilterDesktop' import { useRouter } from 'next/router' import searchSpellApi from '@/core/api/searchSpellApi' import Link from '@/core/components/elements/Link/Link' import whatsappUrl from '@/core/utils/whatsappUrl' const ProductSearch = ({ query, prefixUrl, defaultBrand = null }) => { const router = useRouter() const { page = 1 } = query const [q, setQ] = useState(query?.q || '*') if (defaultBrand) query.brand = defaultBrand.toLowerCase() const { productSearch } = useProductSearch({ query: { ...query, q } }) const [products, setProducts] = useState(null) const [spellings, setSpellings] = useState(null) const popup = useActive() const pageCount = Math.ceil( productSearch.data?.response.numFound / productSearch.data?.responseHeader.params.rows ) const productStart = productSearch.data?.responseHeader.params.start const productRows = productSearch.data?.responseHeader.params.rows const productFound = productSearch.data?.response.numFound useEffect(() => { if (productFound == 0 && query.q && !spellings) { searchSpellApi({ query: query.q }).then((response) => { const oddIndexSuggestions = response.data.spellcheck.suggestions.filter( (_, index) => index % 2 === 1 ) const oddIndexCollations = response.data.spellcheck.collations.filter( (_, index) => index % 2 === 1 ) const dataSpellings = oddIndexSuggestions.reduce((acc, curr) => { oddIndexCollations.forEach((collation) => { acc.push(collation.collationQuery) }) curr.suggestion.forEach((s) => { if (!acc.includes(s.word)) acc.push(s.word) }) return acc }, []) if (dataSpellings.length > 0) { setQ(dataSpellings[0]) } setSpellings(dataSpellings) }) } }, [productFound, query, spellings]) const brands = productSearch.data?.facetCounts?.facetFields?.manufactureName?.filter( (value, index) => { if (index % 2 === 0) { return true } } ) const categories = productSearch.data?.facetCounts?.facetFields?.categoryName?.filter( (value, index) => { if (index % 2 === 0) { return true } } ) const orderOptions = [ { value: 'price-asc', label: 'Harga Terendah' }, { value: 'price-desc', label: 'Harga Tertinggi' }, { value: 'popular', label: 'Populer' }, { value: 'stock', label: 'Ready Stock' } ] const handleOrderBy = (e) => { let params = { ...router.query, orderBy: e.target.value } params = _.pickBy(params, _.identity) params = toQuery(params) router.push(`${prefixUrl}?${params}`) } useEffect(() => { setProducts(productSearch.data?.response?.products) }, [productSearch]) const SpellingComponent = useMemo(() => { return ( <> Mungkin yang anda cari{' '} {spellings?.map((spelling, i) => ( {spelling} {i + 1 < spellings.length ? ', ' : ''} ))} ) }, [spellings]) return ( <> {productSearch.isLoading && }

Produk

{!spellings ? ( <> Menampilkan  {pageCount > 1 ? ( <> {productStart + 1}- {productStart + productRows > productFound ? productFound : productStart + productRows}  dari  ) : ( '' )} {productFound}  produk{' '} {query.q && ( <> untuk pencarian {query.q} )} ) : ( SpellingComponent )}
{productFound > 0 && ( )}
{products && products.map((product) => )}

Hasil Pencarian

{!spellings ? ( <> Menampilkan  {pageCount > 1 ? ( <> {productStart + 1}- {productStart + productRows > productFound ? productFound : productStart + productRows}  dari  ) : ( '' )} {productFound}  produk{' '} {query.q && ( <> untuk pencarian {query.q} )} ) : ( SpellingComponent )}
{productSearch.isLoading && }
{products && products.map((product) => )}
Barang yang anda cari tidak ada?{' '} Hubungi Kami
) } export default ProductSearch