import CloseIcon from '@mui/icons-material/Close'; import FindReplaceIcon from '@mui/icons-material/FindReplace'; import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp'; import SearchIcon from '@mui/icons-material/Search'; import Button from '@mui/material/Button'; import Checkbox from '@mui/material/Checkbox'; import FormControlLabel from '@mui/material/FormControlLabel'; import FormHelperText from '@mui/material/FormHelperText'; import IconButton from '@mui/material/IconButton'; import Stack from '@mui/material/Stack'; import TextField from '@mui/material/TextField'; import Toolbar from '@mui/material/Toolbar'; import { observer } from 'mobx-react-lite'; import React, { useCallback } from 'react'; import type SearchPanelStore from './SearchPanelStore'; function SearchToolbar({ store }: { store: SearchPanelStore }): JSX.Element { const { id: panelId, query: { search, valid, caseSensitive, literal, regexp, replace }, invalidRegexp, } = store; const searchHelperId = `${panelId}-search-helper`; const searchFieldRef = useCallback( (element: HTMLInputElement | null) => store.setSearchField(element ?? undefined), [store], ); return ( store.updateQuery({ search: event.target.value }) } onKeyDown={(event) => { if (event.key === 'Enter') { event.preventDefault(); if (event.shiftKey) { store.findPrevious(); } else { store.findNext(); } } }} variant="standard" size="small" sx={{ my: 0.25, mr: 1 }} inputRef={searchFieldRef} /> {invalidRegexp && ( ({ my: 0, mr: 1, fontSize: 'inherit', color: theme.palette.error.main, })} > Invalid regexp )} store.findPrevious()} > store.findNext()} > store.updateQuery({ caseSensitive: event.target.checked }) } size="small" /> } label="Match case" /> store.updateQuery({ literal: event.target.checked }) } size="small" /> } label="Literal" /> store.updateQuery({ regexp: event.target.checked }) } size="small" /> } label="Regexp" /> store.updateQuery({ replace: event.target.value }) } onKeyDown={(event) => { if (event.key === 'Enter') { event.preventDefault(); store.replaceNext(); } }} variant="standard" size="small" sx={{ mr: 1 }} /> store.close()} sx={{ mt: '2px', ml: 1 }}> ); } export default observer(SearchToolbar);