From 0e95d9ec29b822b059645d0bb64123c5ff5f58cc Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 10 Apr 2026 19:55:36 +0800 Subject: [PATCH] fix: speed up psd template dialog load --- app/api/psd-templates/route.ts | 60 ++----------------- .../agents/AgentPsdTemplateEditorDialog.tsx | 7 ++- components/ui/dialog.tsx | 13 ++-- 3 files changed, 20 insertions(+), 60 deletions(-) diff --git a/app/api/psd-templates/route.ts b/app/api/psd-templates/route.ts index 662adab8e..c07e60116 100644 --- a/app/api/psd-templates/route.ts +++ b/app/api/psd-templates/route.ts @@ -1,11 +1,9 @@ import { NextRequest, NextResponse } from "next/server"; -import { upsertSystemSetting } from "@/lib/db/queries"; import { auth } from "@/app/(auth)/auth"; import { db } from "@/lib/db"; import { systemSettings } from "@/lib/db/schema"; import { eq } from "drizzle-orm"; import { - AGENT_PSD_TEMPLATES_KEY, getEditableAgentPsdTemplateLayers, isAgentPsdTextLayerSlot, isAgentPsdTemplateReady, @@ -29,8 +27,6 @@ import { normalizeAgentPsdTemplateCategoryTagConfig, } from "@/lib/agents/psd-template-category-tag-config"; import { readAgentPsdFonts } from "@/lib/agents/psd-font-settings"; -import { repairAgentPsdTemplateAssetsIfNeeded } from "@/lib/agents/psd-template-repair"; -import { resolveAgentPsdTemplateTextStyles } from "@/lib/agents/psd-template-style-resolver"; import { readAgentPsdTemplates } from "@/lib/agents/psd-template-settings"; export const runtime = "nodejs"; @@ -83,49 +79,12 @@ export async function GET(request: NextRequest) { .then((rows) => rows[0]) .catch(() => null), ]); - const repairedTemplateMap = new Map< - string, - Awaited>[number] - >(); - - for (const template of allTemplates) { - if ( - template.status !== "active" || - !isAgentPsdTemplateReady(template) || - (requestedBrand ? template.brandName !== requestedBrand : false) || - (requestedMode ? template.mode !== requestedMode : false) || - getEditableAgentPsdTemplateLayers(template).length === 0 - ) { - continue; - } - - const repairedTemplate = await repairAgentPsdTemplateAssetsIfNeeded(template); - if (repairedTemplate !== template) { - repairedTemplateMap.set(template.id, repairedTemplate); - } - } - - const sourceTemplates = - repairedTemplateMap.size > 0 - ? allTemplates.map((template) => repairedTemplateMap.get(template.id) || template) - : allTemplates; - - if (repairedTemplateMap.size > 0) { - await upsertSystemSetting({ - key: AGENT_PSD_TEMPLATES_KEY, - value: sourceTemplates, - updatedBy: session.user.id, - }).catch((error) => { - console.warn("[PSD Templates] failed to persist repaired assets:", error); - }); - } - const fonts = (await readAgentPsdFonts().catch( () => [] as Awaited> )) as Awaited>; const fontMap = new Map(fonts.map((font) => [font.id, font])); - const templates = await Promise.all( - sourceTemplates + const templates = + allTemplates .filter((template) => template.status === "active") .filter(isAgentPsdTemplateReady) .filter((template) => @@ -133,14 +92,9 @@ export async function GET(request: NextRequest) { ) .filter((template) => (requestedMode ? template.mode === requestedMode : true)) .filter((template) => getEditableAgentPsdTemplateLayers(template).length > 0) - .map(async (template) => { - const resolvedTemplate = await resolveAgentPsdTemplateTextStyles(template).catch( - () => template - ); - - return { - ...resolvedTemplate, - layers: resolvedTemplate.layers.map((layer) => { + .map((template) => ({ + ...template, + layers: template.layers.map((layer) => { if (!isAgentPsdTextLayerSlot(layer) || !layer.fontId) { return layer; } @@ -156,9 +110,7 @@ export async function GET(request: NextRequest) { fontContentType: font.contentType, }; }), - }; - }) - ); + })); const normalizedTextColorConfig = textColorSetting ? normalizeAgentPsdTextColorConfig(textColorSetting.value) diff --git a/components/agents/AgentPsdTemplateEditorDialog.tsx b/components/agents/AgentPsdTemplateEditorDialog.tsx index 0b89cd51c..3acc68f5e 100644 --- a/components/agents/AgentPsdTemplateEditorDialog.tsx +++ b/components/agents/AgentPsdTemplateEditorDialog.tsx @@ -760,7 +760,12 @@ export function AgentPsdTemplateEditorDialog({ }, [open, normalizedBrandName]); const { data, isLoading } = useSWR( templateListRequestUrl, - fetcher + fetcher, + { + dedupingInterval: 30_000, + keepPreviousData: true, + revalidateOnFocus: false, + } ); const allTemplates = useMemo( () => (data?.success ? data.templates : []), diff --git a/components/ui/dialog.tsx b/components/ui/dialog.tsx index 328bb3eb6..488b94b76 100644 --- a/components/ui/dialog.tsx +++ b/components/ui/dialog.tsx @@ -34,8 +34,9 @@ const DialogContent = forwardRef< ComponentRef, ComponentPropsWithoutRef & { overlayClassName?: string; + hideCloseButton?: boolean; } ->(({ className, children, overlayClassName, ...props }, ref) => ( +>(({ className, children, overlayClassName, hideCloseButton = false, ...props }, ref) => ( {children} - - - Close - + {hideCloseButton ? null : ( + + + Close + + )} ));