import React, { useCallback, type JSX } from 'react'; import type { PresentationProps } from '@growi/presentation/dist/client'; import { useSlidesByFrontmatter } from '@growi/presentation/dist/services'; import { LoadingSpinner } from '@growi/ui/dist/components'; import { useFullScreen } from '@growi/ui/dist/utils'; import dynamic from 'next/dynamic'; import type { Options as ReactMarkdownOptions } from 'react-markdown'; import { Modal, ModalBody, } from 'reactstrap'; import { useIsEnabledMarp } from '~/stores-universal/context'; import { useNextThemes } from '~/stores-universal/use-next-themes'; import { usePagePresentationModal } from '~/stores/modal'; import { useSWRxCurrentPage } from '~/stores/page'; import { usePresentationViewOptions } from '~/stores/renderer'; import { RendererErrorMessage } from './Common/RendererErrorMessage'; import styles from './PagePresentationModal.module.scss'; const moduleClass = styles['grw-presentation-modal'] ?? ''; 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, isLoading } = usePresentationViewOptions(); const { data: isEnabledMarp } = useIsEnabledMarp(); const markdown = currentPage?.revision?.body; const isSlide = useSlidesByFrontmatter(markdown, isEnabledMarp); 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 <>; } return (
{ !isLoading && rendererOptions == null && } { rendererOptions != null && isEnabledMarp != null && ( {markdown} ) }
); }; export default PagePresentationModal;