import React, { useCallback } from 'react'; import type { PresentationProps } from '@growi/presentation'; import { LoadingSpinner } from '@growi/ui/dist/components'; import { useFullScreen } from '@growi/ui/dist/utils'; import dynamic from 'next/dynamic'; import type { ReactMarkdownOptions } from 'react-markdown/lib/react-markdown'; import { Modal, ModalBody, } from 'reactstrap'; import { useIsEnabledMarp } from '~/stores/context'; import { usePagePresentationModal } from '~/stores/modal'; import { useSWRxCurrentPage } from '~/stores/page'; import { usePresentationViewOptions } from '~/stores/renderer'; import { useNextThemes } from '~/stores/use-next-themes'; import styles from './PagePresentationModal.module.scss'; const Presentation = dynamic(() => import('./Presentation/Presentation').then(mod => mod.Presentation), { ssr: false, loading: () => ( ), }); const PagePresentationModal = (): JSX.Element => { const { data: presentationModalData, close: closePresentationModal } = usePagePresentationModal(); const { isDarkMode } = useNextThemes(); const fullscreen = useFullScreen(); const { data: currentPage } = useSWRxCurrentPage(); const { data: rendererOptions } = usePresentationViewOptions(); const { data: isEnabledMarp } = useIsEnabledMarp(); const toggleFullscreenHandler = useCallback(() => { if (fullscreen.active) { fullscreen.exit(); } else { fullscreen.enter(); } }, [fullscreen]); const closeHandler = useCallback(() => { if (fullscreen.active) { fullscreen.exit(); } closePresentationModal(); }, [fullscreen, closePresentationModal]); const isOpen = presentationModalData?.isOpened ?? false; if (!isOpen) { return <>; } const markdown = currentPage?.revision?.body; return (
{ rendererOptions != null && isEnabledMarp != null && ( {markdown} ) }
); }; export default PagePresentationModal;