import React, { useCallback, useState } from 'react'; import { ITemplate } from '@growi/core'; import { useTranslation } from 'next-i18next'; import { Modal, ModalHeader, ModalBody, ModalFooter, } from 'reactstrap'; import { usePreviewOptions } from '~/stores/renderer'; import { useTemplates } from '~/stores/template'; import Preview from './PageEditor/Preview'; type TemplateRadioButtonProps = { template: ITemplate, onChange: (selectedTemplate: ITemplate) => void, isSelected?: boolean, } const TemplateRadioButton = ({ template, onChange, isSelected }: TemplateRadioButtonProps): JSX.Element => { const radioButtonId = `rb-${template.id}`; return (
onChange(template)} />
); }; type Props = { isOpen: boolean, onClose: () => void, onSubmit?: (markdown: string) => void, } export const TemplateModal = (props: Props): JSX.Element => { const { t } = useTranslation(); const { isOpen, onClose, onSubmit } = props; const { data: rendererOptions } = usePreviewOptions(); const { data: templates } = useTemplates(); const [selectedTemplate, setSelectedTemplate] = useState(); const submitHandler = useCallback((template?: ITemplate) => { if (onSubmit == null || template == null) { onClose(); return; } onSubmit(template.markdown); onClose(); }, [onClose, onSubmit]); if (templates == null) { return <>; } return ( Template
{ templates.map(template => ( setSelectedTemplate(t)} isSelected={template.id === selectedTemplate?.id} /> )) }
{ rendererOptions != null && ( <>

Preview

) }
); };