import React, { useCallback } from 'react'; import { pathUtils } from '@growi/core/dist/utils'; import { useTranslation } from 'next-i18next'; import { Modal, ModalHeader, ModalBody } from 'reactstrap'; import { useCreateTemplatePage } from '~/client/services/create-page'; import { toastError } from '~/client/util/toastr'; import type { TargetType, LabelType } from '~/interfaces/template'; type TemplateCardProps = { target: TargetType; label: LabelType; isPageCreating: boolean; onClickHandler: () => void; }; const TemplateCard: React.FC = ({ target, label, isPageCreating, onClickHandler, }) => { const { t } = useTranslation(); return (
{t(`template.${target}.label`)}

{label}

{t(`template.${target}.desc`)}

); }; type CreateTemplateModalProps = { path: string; isOpen: boolean; onClose: () => void; }; export const CreateTemplateModal: React.FC = ({ path, isOpen, onClose, }) => { const { t } = useTranslation(['translation', 'commons']); const { createTemplate, isCreating, isCreatable } = useCreateTemplatePage(); const onClickTemplateButtonHandler = useCallback(async(label: LabelType) => { try { await createTemplate?.(label); onClose(); } catch (err) { toastError(t('toaster.create_failed', { target: path })); } }, [createTemplate, path, t]); const parentPath = pathUtils.addTrailingSlash(path); const renderTemplateCard = (target: TargetType, label: LabelType) => (
onClickTemplateButtonHandler(label)} />
); if (!isCreatable) { return <>; } return ( {t('template.modal_label.Create/Edit Template Page')}
{renderTemplateCard('children', '_template')} {renderTemplateCard('descendants', '__template')}
); };