import React from 'react'; import { Box, ClickAwayListener, Divider, List, ListItem, Paper, TextField, Typography } from '@mui/material'; import { SearchResponse } from '../../../../../../@types/messageHandler'; import useStore from '../../../hooks/useStore'; import { messageChannelContext } from '../../../provider/MessageChannel'; import './SearchBox.css'; import ContextMenu from '../../reusable/ContextMenu'; import { useSnackbar } from 'notistack'; const SearchBox: React.FC = () => { const messageHandler = React.useContext(messageChannelContext); const [store, dispatch] = useStore(); const [search, setSearch] = React.useState(''); const [focus, setFocus] = React.useState(false); const [searchResult, setSearchResult] = React.useState(); const anchor = React.useRef(null); const { enqueueSnackbar } = useSnackbar(); const selectItem = (id: string) => { dispatch({ type: 'downloadOptions', payload: { ...store.downloadOptions, id } }); }; React.useEffect(() => { (async () => { if (search.trim().length === 0) return setSearchResult({ isOk: true, value: [] }); const s = await messageHandler?.search({search}); if (s && s.isOk) s.value = s.value.slice(0, 10); setSearchResult(s); })(); }, [search]); const anchorBounding = anchor.current?.getBoundingClientRect(); return setFocus(false)}> setFocus(true)} onChange={e => setSearch(e.target.value)} variant='outlined' label='Search' fullWidth /> {searchResult !== undefined && searchResult.isOk && searchResult.value.length > 0 && focus && {searchResult && searchResult.isOk ? searchResult.value.map((a, ind, arr) => { const imageRef = React.createRef(); return { selectItem(a.id); setFocus(false); }}> thumbnail {a.name} {a.desc && {a.desc} } {a.lang && Languages: {a.lang.join(', ')} } ID: {a.id} { messageHandler?.writeToClipboard(a.image); enqueueSnackbar('Copied URL to clipboard', { variant: 'info' }); }} ]} popupItem={imageRef} /> {(ind < arr.length - 1) && } ; }) : <>} } ; }; export default SearchBox;