import { GridItem, Icon, SimpleGrid } from '@chakra-ui/react'; import React, { useState } from 'react'; import { TbBook2, TbBuilding, TbFileDescription, TbHash, TbReportSearch, TbUserCircle } from 'react-icons/tb'; import search, { Book } from '../scripts/searcher'; import { IoLanguage } from 'react-icons/io5'; import SearchInput from './SearchInput'; import { useDebounceEffect } from 'ahooks'; import { useTranslation } from 'react-i18next'; import SearchLanguage from './SearchLanguage'; function constructQuery(parts: Record): string { return Object.keys(parts) .map((key) => parts[key] .split(' ') .filter((s) => s !== '') .map((s) => `${key}:"${s}"`) ) .flat() .join(''); } export interface SearchProps { setBooks: (books: Book[]) => void; } const Search: React.FC = ({ setBooks }) => { const { t } = useTranslation(); const [title, setTitle] = useState(''); const [author, setAuthor] = useState(''); const [publisher, setPublisher] = useState(''); const [extension, setExtension] = useState(''); const [language, setLanguage] = useState(''); const [isbn, setISBN] = useState(''); const [complexQuery, setComplexQuery] = useState(''); const [showLanguageDropdown, setShowLanguageDropdown] = useState(true) const handleLanguageChange = (language: string) => { if (language == 'input') { setShowLanguageDropdown(false) } else { setLanguage(language) } } const handleLanguageReset = () => { setShowLanguageDropdown(true) setLanguage('') } useDebounceEffect( () => { const query = complexQuery ? complexQuery : constructQuery({ title, author, publisher, extension, language, isbn }); search(query, 100).then((books) => { setBooks(books); }); }, [title, author, publisher, extension, language, isbn, complexQuery], { wait: 300 } ); return ( } placeholder={t('book.title')} value={title} onChange={setTitle} /> } placeholder={t('book.author')} value={author} onChange={setAuthor} /> } placeholder={t('book.publisher')} value={publisher} onChange={setPublisher} /> } placeholder={t('book.extension')} value={extension} onChange={setExtension} /> {!showLanguageDropdown && (} placeholder={t('book.language')} value={language} onChange={handleLanguageChange} onClear={handleLanguageReset} />)} {showLanguageDropdown && (} placeholder={t('book.language')} value={language} onChange={handleLanguageChange} />)} } placeholder={t('book.isbn')} value={isbn} onChange={setISBN} /> } placeholder={t('search.complex')} value={complexQuery} onChange={setComplexQuery} /> ); }; export default Search;