model.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { SWRResponse } from 'swr';
  2. import { useStaticSWR } from '~/stores/use-static-swr';
  3. import loggerFactory from '~/utils/logger';
  4. const logger = loggerFactory('growi:stores:modal');
  5. /*
  6. * QuestionnaireModals
  7. */
  8. type QuestionnaireModalStatuses = {
  9. openedQuestionnaireId: string | null,
  10. closeToast?: () => void | Promise<void>,
  11. }
  12. type QuestionnaireModalStatusUtils = {
  13. open(string: string, closeToast: () => void | Promise<void>): Promise<QuestionnaireModalStatuses | undefined>
  14. close(shouldCloseToast?: boolean): Promise<QuestionnaireModalStatuses | undefined>
  15. }
  16. export const useQuestionnaireModal = (status?: QuestionnaireModalStatuses): SWRResponse<QuestionnaireModalStatuses, Error> & QuestionnaireModalStatusUtils => {
  17. const initialData: QuestionnaireModalStatuses = { openedQuestionnaireId: null };
  18. const swrResponse = useStaticSWR<QuestionnaireModalStatuses, Error>('questionnaireModalStatus', status, { fallbackData: initialData });
  19. return {
  20. ...swrResponse,
  21. open: (questionnaireOrderId: string, closeToast: () => void | Promise<void>) => swrResponse.mutate({
  22. openedQuestionnaireId: questionnaireOrderId,
  23. closeToast,
  24. }),
  25. close: (shouldCloseToast?: boolean) => {
  26. if (shouldCloseToast) {
  27. swrResponse.data?.closeToast?.();
  28. if (swrResponse.data?.closeToast === undefined) logger.debug('Tried to run `swrResponse.data?.closeToast` but it was `undefined`');
  29. }
  30. return swrResponse.mutate({ openedQuestionnaireId: null });
  31. },
  32. };
  33. };