symbol-palette-search.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { useCallback, useEffect, useState } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import PropTypes from 'prop-types'
  4. import { FormControl } from 'react-bootstrap'
  5. import useDebounce from '../../../shared/hooks/use-debounce'
  6. export default function SymbolPaletteSearch({ setInput, inputRef }) {
  7. const [localInput, setLocalInput] = useState('')
  8. // debounce the search input until a typing delay
  9. const debouncedLocalInput = useDebounce(localInput, 250)
  10. useEffect(() => {
  11. setInput(debouncedLocalInput)
  12. }, [debouncedLocalInput, setInput])
  13. const { t } = useTranslation()
  14. const inputRefCallback = useCallback(
  15. element => {
  16. inputRef.current = element
  17. },
  18. [inputRef]
  19. )
  20. return (
  21. <FormControl
  22. className="symbol-palette-search"
  23. type="search"
  24. inputRef={inputRefCallback}
  25. id="symbol-palette-input"
  26. aria-label="Search"
  27. value={localInput}
  28. placeholder={t('search') + '…'}
  29. onChange={event => {
  30. setLocalInput(event.target.value)
  31. }}
  32. />
  33. )
  34. }
  35. SymbolPaletteSearch.propTypes = {
  36. setInput: PropTypes.func.isRequired,
  37. inputRef: PropTypes.object.isRequired,
  38. }