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
>
) }
);
};