SearchModal.tsx 1.5 KB

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