SearchModal.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import React, {
  2. useState, useCallback, useEffect,
  3. } from 'react';
  4. import { Modal, ModalBody } from 'reactstrap';
  5. import { useSearchModal } from '../stores/search';
  6. import { SearchForm } from './SearchForm';
  7. import { SearchHelp } from './SearchHelp';
  8. import { SearchMethodMenuItem } from './SearchMethodMenuItem';
  9. const SearchModal = (): JSX.Element => {
  10. const { data: searchModalData, close: closeSearchModal } = useSearchModal();
  11. const [searchKeyword, setSearchKeyword] = useState('');
  12. const changeSearchTextHandler = useCallback((searchText: string) => {
  13. setSearchKeyword(searchText);
  14. }, []);
  15. const clickClearButtonHandler = useCallback(() => {
  16. setSearchKeyword('');
  17. }, []);
  18. useEffect(() => {
  19. if (!searchModalData?.isOpened) {
  20. setSearchKeyword('');
  21. }
  22. }, [searchModalData?.isOpened]);
  23. return (
  24. <Modal size="lg" isOpen={searchModalData?.isOpened ?? false} toggle={closeSearchModal}>
  25. <ModalBody>
  26. <SearchForm
  27. searchKeyword={searchKeyword}
  28. onChangeSearchText={changeSearchTextHandler}
  29. onClickClearButton={clickClearButtonHandler}
  30. />
  31. <div className="border-top mt-3 mb-3" />
  32. <SearchMethodMenuItem searchKeyword={searchKeyword} />
  33. <div className="border-top mt-2 mb-2" />
  34. <SearchHelp />
  35. </ModalBody>
  36. </Modal>
  37. );
  38. };
  39. export default SearchModal;