import React, { useState, useRef, useEffect } from 'react'; import { InputText } from 'primereact/inputtext'; import { InputIcon } from 'primereact/inputicon'; import { IconField } from 'primereact/iconfield'; import { Dropdown } from 'primereact/dropdown'; import { OverlayPanel } from 'primereact/overlaypanel'; import ContentDropdownItem from '@/components/content/dropdowns/ContentDropdownItem'; import MessageDropdownItem from '@/components/content/dropdowns/MessageDropdownItem'; import { useContentSearch } from '@/hooks/useContentSearch'; import { useCommunitySearch } from '@/hooks/useCommunitySearch'; import { useRouter } from 'next/router'; import useWindowWidth from '@/hooks/useWindowWidth'; import styles from './searchbar.module.css'; const SearchBar = () => { const { searchContent, searchResults: contentResults } = useContentSearch(); const { searchCommunity, searchResults: communityResults } = useCommunitySearch(); const router = useRouter(); const windowWidth = useWindowWidth(); const [selectedSearchOption, setSelectedSearchOption] = useState({ name: 'Content', code: 'content', icon: 'pi pi-video' }); const searchOptions = [ { name: 'Content', code: 'content', icon: 'pi pi-video' }, { name: 'Community', code: 'community', icon: 'pi pi-users' }, ]; const [searchTerm, setSearchTerm] = useState(''); const [searchResults, setSearchResults] = useState([]); const op = useRef(null); const selectedOptionTemplate = (option, props) => { if (!props?.placeholder) { return (
{option.code}
); } return }; const handleSearch = (e) => { const term = e.target.value; setSearchTerm(term); if (selectedSearchOption.code === 'content') { searchContent(term); setSearchResults(contentResults); } else if (selectedSearchOption.code === 'community') { searchCommunity(term); setSearchResults(communityResults); } if (term.length > 2) { op.current.show(e); } else { op.current.hide(); } }; useEffect(() => { if (selectedSearchOption.code === 'content') { setSearchResults(contentResults); } else if (selectedSearchOption.code === 'community') { setSearchResults(communityResults); } }, [selectedSearchOption, contentResults, communityResults]); const handleContentSelect = (content) => { if (content?.type === 'course') { router.push(`/course/${content.id}`); } else { router.push(`/details/${content.id}`); } setSearchTerm(''); searchContent(''); op.current.hide(); } return (
845 ? 'w-[300px]' : 'w-[160px]'}`} value={searchTerm} onChange={handleSearch} placeholder={`Search ${selectedSearchOption.name.toLowerCase()}`} pt={{ root: { className: 'border-none rounded-tr-none rounded-br-none focus:border-none focus:ring-0 pr-0' } }} /> setSelectedSearchOption(e.value)} options={searchOptions} optionLabel="name" placeholder="Search" dropdownIcon={
} valueTemplate={selectedOptionTemplate} itemTemplate={selectedOptionTemplate} required />
{searchResults.map((item, index) => ( item.type === 'discord' || item.type === 'nostr' || item.type === 'stackernews' ? ( ) : ( ) ))} {searchResults.length === 0 && searchTerm.length > 2 && (
No results found
)}
); }; export default SearchBar;