import React, { useCallback, useState } from 'react';
import { ITemplate } from '@growi/core';
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 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)}
/>
);
};
export const TemplateModal = (): JSX.Element => {
const { t } = useTranslation();
const { data: templateModalStatus, close } = useTemplateModal();
const { data: rendererOptions } = usePreviewOptions();
const { data: templates } = useTemplates();
const [selectedTemplate, setSelectedTemplate] = useState();
const submitHandler = useCallback((template?: ITemplate) => {
if (templateModalStatus == null) { return }
if (templateModalStatus.onSubmit == null || template == null) {
close();
return;
}
templateModalStatus.onSubmit(template.markdown);
close();
}, [close, templateModalStatus]);
if (templates == null || templateModalStatus == null) {
return <>>;
}
return (
Template
{ templates.map(template => (
setSelectedTemplate(t)}
isSelected={template.id === selectedTemplate?.id}
/>
)) }
{ rendererOptions != null && (
<>
Preview
>
) }
);
};