ryoji-s 2 лет назад
Родитель
Сommit
8f23b1cf5e

+ 24 - 13
apps/app/src/components/TemplateModal/TemplateModal.tsx

@@ -6,7 +6,7 @@ import assert from 'assert';
 
 
 import { Lang } from '@growi/core';
 import { Lang } from '@growi/core';
 import {
 import {
-  getTemplateLocales, getLocalizedTemplate, type TemplateSummary, type TemplateStatus,
+  extractSupportedLocales, getLocalizedTemplate, type TemplateSummary,
 } from '@growi/pluginkit/dist/v4';
 } from '@growi/pluginkit/dist/v4';
 import { useTranslation } from 'next-i18next';
 import { useTranslation } from 'next-i18next';
 import {
 import {
@@ -41,19 +41,27 @@ function constructTemplateId(templateSummary: TemplateSummary): string {
 
 
 type TemplateItemProps = {
 type TemplateItemProps = {
   templateId: string,
   templateId: string,
-  onClick: () => void,
-  isSelected: boolean,
-  localizedTemplate?: TemplateStatus,
-  templateLocales?: Set<string>,
+  templateSummary: TemplateSummary,
+  selectedLocale?: string,
+  onClick?: () => void,
+  isSelected?: boolean,
+  usersDefaultLang?: Lang,
 }
 }
 
 
 const TemplateItem: React.FC<TemplateItemProps> = ({
 const TemplateItem: React.FC<TemplateItemProps> = ({
   templateId,
   templateId,
+  templateSummary,
   onClick,
   onClick,
   isSelected,
   isSelected,
-  localizedTemplate,
-  templateLocales,
+  usersDefaultLang,
 }) => {
 }) => {
+  const localizedTemplate = getLocalizedTemplate(
+    templateSummary,
+    usersDefaultLang != null && usersDefaultLang in templateSummary
+      ? usersDefaultLang
+      : undefined,
+  );
+  const templateLocales = extractSupportedLocales(templateSummary);
 
 
   assert(localizedTemplate?.isValid);
   assert(localizedTemplate?.isValid);
 
 
@@ -91,17 +99,15 @@ const TemplateMenu: React.FC<TemplateMenuProps> = ({
       {templateSummaries.map((templateSummary) => {
       {templateSummaries.map((templateSummary) => {
         const templateId = constructTemplateId(templateSummary);
         const templateId = constructTemplateId(templateSummary);
         const isSelected = selectedTemplateSummary != null && constructTemplateId(selectedTemplateSummary) === templateId;
         const isSelected = selectedTemplateSummary != null && constructTemplateId(selectedTemplateSummary) === templateId;
-        const localizedTemplate = getLocalizedTemplate(templateSummary, undefined, usersDefaultLang);
-        const templateLocales = getTemplateLocales(templateSummary);
 
 
         return (
         return (
           <TemplateItem
           <TemplateItem
             key={templateId}
             key={templateId}
             templateId={templateId}
             templateId={templateId}
+            templateSummary={templateSummary}
             onClick={() => onClickHandler(templateSummary)}
             onClick={() => onClickHandler(templateSummary)}
             isSelected={isSelected}
             isSelected={isSelected}
-            localizedTemplate={localizedTemplate}
-            templateLocales={templateLocales}
+            usersDefaultLang={usersDefaultLang}
           />
           />
         );
         );
       })}
       })}
@@ -131,8 +137,13 @@ const TemplateModalSubstance = (props: TemplateModalSubstanceProps): JSX.Element
   const { format } = useFormatter();
   const { format } = useFormatter();
 
 
   const usersDefaultLang = personalSettingsInfo?.lang;
   const usersDefaultLang = personalSettingsInfo?.lang;
-  const selectedLocalizedTemplate = getLocalizedTemplate(selectedTemplateSummary, undefined, usersDefaultLang);
-  const selectedTemplateLocales = getTemplateLocales(selectedTemplateSummary);
+  const selectedLocalizedTemplate = getLocalizedTemplate(
+    selectedTemplateSummary,
+    usersDefaultLang != null && selectedTemplateSummary != null && usersDefaultLang in selectedTemplateSummary
+      ? usersDefaultLang
+      : undefined,
+  );
+  const selectedTemplateLocales = extractSupportedLocales(selectedTemplateSummary);
 
 
   const submitHandler = useCallback((markdown?: string) => {
   const submitHandler = useCallback((markdown?: string) => {
     if (markdown == null) {
     if (markdown == null) {

+ 4 - 8
packages/pluginkit/src/v4/utils/template.ts

@@ -1,20 +1,16 @@
-import { Lang } from '@growi/core';
-
 import type { TemplateSummary, TemplateStatus } from '../interfaces';
 import type { TemplateSummary, TemplateStatus } from '../interfaces';
 
 
-export const getLocalizedTemplate = (templateSummary: TemplateSummary | undefined, locale?: string, usersDefaultLang?: Lang): TemplateStatus | undefined => {
+export const getLocalizedTemplate = (templateSummary: TemplateSummary | undefined, locale?: string): TemplateStatus | undefined => {
   if (templateSummary == null) {
   if (templateSummary == null) {
     return undefined;
     return undefined;
   }
   }
 
 
-  const selectedLocale = usersDefaultLang ?? locale;
-
-  return selectedLocale != null && selectedLocale in templateSummary
-    ? templateSummary[selectedLocale]
+  return locale != null && locale in templateSummary
+    ? templateSummary[locale]
     : templateSummary.default;
     : templateSummary.default;
 };
 };
 
 
-export const getTemplateLocales = (templateSummary: TemplateSummary | undefined): Set<string> | undefined => {
+export const extractSupportedLocales = (templateSummary: TemplateSummary | undefined): Set<string> | undefined => {
   if (templateSummary == null) {
   if (templateSummary == null) {
     return undefined;
     return undefined;
   }
   }