import React, { useCallback, useEffect, useState, } from 'react'; import type { ITemplate } from '@growi/core/dist/interfaces/template'; import { useTranslation } from 'next-i18next'; import { Modal, ModalHeader, ModalBody, ModalFooter, } from 'reactstrap'; import { useTemplateModal } from '~/stores/modal'; import { usePreviewOptions } from '~/stores/renderer'; import { useTemplates } from '~/stores/template'; import loggerFactory from '~/utils/logger'; import Preview from '../PageEditor/Preview'; import { useFormatter } from './use-formatter'; const logger = loggerFactory('growi:components:TemplateModal'); 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)} />
); }; export const TemplateModal = (): JSX.Element => { const { t } = useTranslation(['translation', 'commons']); const { data: templateModalStatus, close } = useTemplateModal(); const { data: rendererOptions } = usePreviewOptions(); const { data: templates } = useTemplates(); const [selectedTemplate, setSelectedTemplate] = useState(); const { format } = useFormatter(); const submitHandler = useCallback((template?: ITemplate) => { if (templateModalStatus == null || selectedTemplate == null) { return; } if (templateModalStatus.onSubmit == null || template == null) { close(); return; } templateModalStatus.onSubmit(format(selectedTemplate)); close(); }, [close, format, selectedTemplate, templateModalStatus]); useEffect(() => { if (!templateModalStatus?.isOpened) { setSelectedTemplate(undefined); } }, [templateModalStatus?.isOpened]); if (templates == null || templateModalStatus == null) { return <>; } return ( {t('template.modal_label.Select template')}
{ templates.map(template => ( setSelectedTemplate(selected)} isSelected={template.id === selectedTemplate?.id} /> )) }

{t('Preview')}

{ rendererOptions != null && selectedTemplate != null && ( ) }
); };