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