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 { useCurrentPageData } from '~/states/page'; import { useRendererConfig } from '~/states/server-configurations'; import { usePresentationModalActions, usePresentationModalStatus } from '~/states/ui/modal/page-presentation'; import { useNextThemes } from '~/stores-universal/use-next-themes'; 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 presentationModalData = usePresentationModalStatus(); const { close: closePresentationModal } = usePresentationModalActions(); const { isDarkMode } = useNextThemes(); const fullscreen = useFullScreen(); const currentPage = useCurrentPageData(); const { data: rendererOptions, isLoading } = usePresentationViewOptions(); const { isEnabledMarp } = useRendererConfig(); 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;