use-template-modal.ts 939 B

123456789101112131415161718192021222324252627282930
  1. import { useSWRStatic } from '@growi/core/dist/swr';
  2. import type { SWRResponse } from 'swr';
  3. type TemplateSelectedCallback = (templateText: string) => void;
  4. type TemplateModalOptions = {
  5. onSubmit?: TemplateSelectedCallback,
  6. }
  7. export type TemplateModalStatus = TemplateModalOptions & {
  8. isOpened: boolean,
  9. }
  10. type TemplateModalUtils = {
  11. open(opts: TemplateModalOptions): void,
  12. close(): void,
  13. }
  14. export const useTemplateModal = (): SWRResponse<TemplateModalStatus, Error> & TemplateModalUtils => {
  15. const initialStatus: TemplateModalStatus = { isOpened: false };
  16. const swrResponse = useSWRStatic<TemplateModalStatus, Error>('templateModal', undefined, { fallbackData: initialStatus });
  17. return Object.assign(swrResponse, {
  18. open: (opts: TemplateModalOptions) => {
  19. swrResponse.mutate({ isOpened: true, onSubmit: opts.onSubmit });
  20. },
  21. close: () => {
  22. swrResponse.mutate({ isOpened: false });
  23. },
  24. });
  25. };