import React, {
useCallback, useEffect, useState,
} from 'react';
import assert from 'assert';
import { Lang } from '@growi/core';
import type { ITemplate } from '@growi/core/dist/interfaces/template';
import type { TemplateSummary } from '@growi/pluginkit/dist/interfaces/v4';
import { useTranslation } from 'next-i18next';
import {
Modal,
ModalHeader,
ModalBody,
ModalFooter,
} from 'reactstrap';
import { useSWRxTemplates } from '~/features/templates/stores';
import { useTemplateModal } from '~/stores/modal';
import { usePersonalSettings } from '~/stores/personal-settings';
import { usePreviewOptions } from '~/stores/renderer';
import loggerFactory from '~/utils/logger';
import Preview from '../PageEditor/Preview';
import { useFormatter } from './use-formatter';
const logger = loggerFactory('growi:components:TemplateModal');
type TemplateRadioButtonProps = {
templateSummary: TemplateSummary,
onChange: (selectedTemplate: TemplateSummary) => void,
usersDefaultLang?: Lang,
isSelected?: boolean,
}
const TemplateRadioButton = ({
templateSummary, onChange, usersDefaultLang, isSelected,
}: TemplateRadioButtonProps): JSX.Element => {
const templateId = templateSummary.default.id;
const radioButtonId = `rb-${templateId}`;
const template = usersDefaultLang != null && usersDefaultLang in templateSummary
? templateSummary[usersDefaultLang]
: templateSummary.default;
assert(template.isValid);
return (
onChange(templateSummary)}
/>
);
};
export const TemplateModal = (): JSX.Element => {
const { t } = useTranslation(['translation', 'commons']);
const { data: templateModalStatus, close } = useTemplateModal();
const { data: personalSettingsInfo } = usePersonalSettings();
const { data: rendererOptions } = usePreviewOptions();
const { data: templateSummaries } = useSWRxTemplates();
const [selectedTemplateId, setSelectedTemplateId] = useState();
// const [selectedTemplateLocale, setSelectedTemplateLocale] = useState();
const { format } = useFormatter();
const submitHandler = useCallback((template?: ITemplate) => {
if (templateModalStatus == null || selectedTemplateId == null) {
return;
}
if (templateModalStatus.onSubmit == null || template == null) {
close();
return;
}
// templateModalStatus.onSubmit(format(selectedTemplate));
close();
}, [close, selectedTemplateId, templateModalStatus]);
useEffect(() => {
if (!templateModalStatus?.isOpened) {
setSelectedTemplateId(undefined);
}
}, [templateModalStatus?.isOpened]);
if (templateSummaries == null || templateModalStatus == null) {
return <>>;
}
return (
{t('template.modal_label.Select template')}
{ Object.entries(templateSummaries).map(([templateId, templateSummary]) => (
setSelectedTemplateId(templateId)}
isSelected={templateId === selectedTemplateId}
/>
)) }
{t('Preview')}
{ rendererOptions != null && selectedTemplateId != null && (
) }
);
};