"use client"; import { ArrowLeft, FileImage } from "lucide-react"; import { useParams, useRouter, useSearchParams } from "next/navigation"; import { useCallback, useEffect, useMemo, useState } from "react"; import { AgentPsdTemplateEditorDialog } from "@/components/agents/AgentPsdTemplateEditorDialog"; import { Button } from "@/components/ui/button"; import { readCanvasPsdTemplateLaunchPayload, type CanvasPsdTemplateLaunchPayload, } from "@/lib/canvas/psd-template-launch"; export default function CanvasPsdTemplatePage() { const router = useRouter(); const routeParams = useParams(); const searchParams = useSearchParams(); const canvasId = String(routeParams?.id || ""); const launchToken = searchParams.get("launch") || ""; const [launchPayload, setLaunchPayload] = useState(null); const [activePendingImageId, setActivePendingImageId] = useState(null); const [renderedResultUrls, setRenderedResultUrls] = useState>({}); useEffect(() => { if (!launchToken) { setLaunchPayload(null); return; } const nextPayload = readCanvasPsdTemplateLaunchPayload(launchToken); setLaunchPayload(nextPayload); setActivePendingImageId(nextPayload?.activeImageId || nextPayload?.pendingImages[0]?.id || null); }, [launchToken]); const handleBack = useCallback(() => { const returnTo = launchPayload?.returnTo?.trim(); if (returnTo) { router.push(returnTo); return; } router.push(`/canvas/${canvasId}/batch`); }, [canvasId, launchPayload?.returnTo, router]); const activePendingImage = useMemo( () => launchPayload?.pendingImages.find((image) => image.id === activePendingImageId) || launchPayload?.pendingImages[0] || null, [activePendingImageId, launchPayload?.pendingImages] ); if (!launchPayload || !activePendingImage) { return (
没有可用的套 PSD 任务
当前页面没有接收到批量处理结果图。请先从批量处理结果区选择图片,再进入套 PSD 模版页面。
); } return ( { if (!open) { handleBack(); } }} onRenderedResultCreated={(imageUrl) => { setRenderedResultUrls((current) => ({ ...current, [activePendingImage.id]: imageUrl, })); }} open pendingImages={launchPayload.pendingImages} pendingRenderedResultUrls={renderedResultUrls} sourceImageUrl={activePendingImage.imageUrl} standalone templateMode={launchPayload.templateMode || "main"} /> ); }