diff --git a/src/common/NavBar/SearchBar/SearchBar.js b/src/common/NavBar/SearchBar/SearchBar.js new file mode 100644 index 000000000..c4943bc8e --- /dev/null +++ b/src/common/NavBar/SearchBar/SearchBar.js @@ -0,0 +1,64 @@ +const React = require('react'); +const PropTypes = require('prop-types'); +const classnames = require('classnames'); +const UrlUtils = require('url'); +const Icon = require('stremio-icons/dom'); +const { Input, useFocusable } = require('stremio-navigation'); +const useLocationHash = require('../../useLocationHash'); +const styles = require('./styles'); + +const SearchBar = React.memo(({ className }) => { + const searchInputRef = React.useRef(); + const locationHash = useLocationHash(); + const focusable = useFocusable(); + const [active, query] = React.useMemo(() => { + const locationHashPath = locationHash.startsWith('#') ? locationHash.slice(1) : ''; + const { pathname: locationPathname, search: locationSearch } = UrlUtils.parse(locationHashPath); + const active = locationPathname === '/search'; + const queryParams = new URLSearchParams(locationSearch); + const query = (active && queryParams.has('q')) ? queryParams.get('q') : ''; + return [active, query]; + }, [locationHash]); + const onQueryInputFocus = React.useCallback(() => { + if (!active) { + window.location.replace('#/search'); + } + }, [active]); + const onQueryInputSubmit = React.useCallback(() => { + window.location.replace(`#/search?q=${searchInputRef.current.value}`); + }, [searchInputRef]); + React.useEffect(() => { + if (active && focusable) { + searchInputRef.current.focus(); + } + }, [active, focusable]); + return ( +