search.ts 947 B

123456789101112131415161718192021222324252627282930
  1. import type { SWRResponse } from 'swr';
  2. import { useStaticSWR } from '~/stores/use-static-swr';
  3. type SearchModalStatus = {
  4. isOpened: boolean,
  5. searchKeyword: string,
  6. }
  7. type SearchModalUtils = {
  8. open(keywordOnInit?: string): void
  9. close(): void
  10. }
  11. export const useSearchModal = (status?: SearchModalStatus): SWRResponse<SearchModalStatus, Error> & SearchModalUtils => {
  12. const initialStatus = { searchKeyword: '', isOpened: false };
  13. const swrResponse = useStaticSWR<SearchModalStatus, Error>('SearchModal', status, { fallbackData: initialStatus });
  14. return {
  15. ...swrResponse,
  16. open: (keywordOnInit?: string) => {
  17. if (typeof keywordOnInit !== 'undefined') {
  18. swrResponse.mutate({ isOpened: true, searchKeyword: keywordOnInit });
  19. }
  20. else {
  21. swrResponse.mutate({ isOpened: true, searchKeyword: '' });
  22. }
  23. },
  24. close: () => swrResponse.mutate({ isOpened: false, searchKeyword: '' }),
  25. };
  26. };