UNPKG

@plone/volto

Version:
73 lines (64 loc) 2.2 kB
import { useState, useEffect } from 'react'; import { useHistory } from 'react-router-dom'; import { Form, Input } from 'semantic-ui-react'; import { defineMessages, useIntl } from 'react-intl'; import { useDispatch, useSelector } from 'react-redux'; import { getNavroot } from '@plone/volto/actions/navroot/navroot'; import { hasApiExpander } from '@plone/volto/helpers/Utils/Utils'; import { getBaseUrl } from '@plone/volto/helpers/Url/Url'; import Icon from '@plone/volto/components/theme/Icon/Icon'; import zoomSVG from '@plone/volto/icons/zoom.svg'; const messages = defineMessages({ search: { id: 'Search', defaultMessage: 'Search', }, searchSite: { id: 'Search Site', defaultMessage: 'Search Site', }, }); const SearchWidget = (props) => { const intl = useIntl(); const dispatch = useDispatch(); const [text, setText] = useState(''); const history = useHistory(); const onChangeText = (event, { value }) => { setText(value); }; const pathname = props.pathname; const onSubmit = (event) => { const path = pathname?.length > 0 ? `&path=${encodeURIComponent(pathname)}` : ''; history.push(`./search?SearchableText=${encodeURIComponent(text)}${path}`); // reset input value setText(''); event.preventDefault(); }; const navroot = useSelector((state) => state.navroot?.data); useEffect(() => { if (!hasApiExpander('navroot', getBaseUrl(pathname))) { dispatch(getNavroot(getBaseUrl(pathname))); } }, [dispatch, pathname]); return ( <Form action={`${navroot?.navroot?.['@id']}/search`} onSubmit={onSubmit}> <Form.Field className="searchbox"> <Input aria-label={intl.formatMessage(messages.search)} onChange={onChangeText} name="SearchableText" value={text} transparent autoComplete="off" placeholder={intl.formatMessage(messages.searchSite)} title={intl.formatMessage(messages.search)} /> <button aria-label={intl.formatMessage(messages.search)}> <Icon name={zoomSVG} size="18px" /> </button> </Form.Field> </Form> ); }; export default SearchWidget;