import searchSuggestApi from '@/core/api/searchSuggestApi' import { MagnifyingGlassIcon } from '@heroicons/react/24/outline' import { useCallback, useEffect, useRef, useState } from 'react' import Link from '../Link/Link' import { useRouter } from 'next/router' import { getIdFromSlug, getNameFromSlug } from '@/core/utils/slug' const Search = () => { const router = useRouter() const queryRef = useRef() const { slug = '' } = router.query const [query, setQuery] = useState(router.query.q || '') const [suggestions, setSuggestions] = useState([]) const [segment, setSegment] = useState(null) const [optionSegment, setOptionSegment] = useState(null) const [optoinSelected, setOptionSelected] = useState(getNameFromSlug(slug) || 'default') const [pathSegments, setPathSegments] = useState(router?.asPath.split('/') || []) const loadSuggestion = useCallback(() => { if (query && document.activeElement == queryRef.current) { searchSuggestApi({ query }).then((response) => { setSuggestions(response.data?.suggestions || []) }) } else { setSuggestions([]) } }, [query]) useEffect(() => { if (query && document.activeElement == queryRef.current) { loadSuggestion() } else { setSuggestions([]) } setFilterSearch() }, [loadSuggestion, query]) const handleSubmit = (e) => { e.preventDefault() if (optionSegment && optoinSelected !== 'default' && optoinSelected) { router.push(`/shop/${segment}/${slug}?q=${query}`) } else { if (query) { router.push(`/shop/search?q=${query}`) } else { queryRef.current.focus() } } } const handleSelectChange = async (e) => { await setOptionSelected(e.target.value) } const setFilterSearch = async () => { if (router.pathname.includes('brands') && pathSegments[3]) { await setSegment(pathSegments[2]) await setOptionSegment(getNameFromSlug(slug)) } } const onInputBlur = () => { setTimeout(() => { setSuggestions([]) }, 100) } return ( <>
> ) } export default Search