From f69e2d07a205409d23561163d6b9ddfd3099f40d Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 2 Jun 2026 11:43:44 +0800 Subject: [PATCH] fix: show regenerating state for style batch results --- components/scene-fusion-view.tsx | 121 +++++++++++++++++++------------ 1 file changed, 76 insertions(+), 45 deletions(-) diff --git a/components/scene-fusion-view.tsx b/components/scene-fusion-view.tsx index 580faade5..66bacbb80 100644 --- a/components/scene-fusion-view.tsx +++ b/components/scene-fusion-view.tsx @@ -119,6 +119,20 @@ interface ProcessItem { }; } +function markProcessItemRegenerating( + item: ProcessItem, + status: Extract +): ProcessItem { + return { + ...item, + status, + result: undefined, + originalUrl: undefined, + queueStatus: undefined, + error: undefined, + }; +} + interface SceneFusionViewProps { initialProductImage?: string | null; initialProductName?: string; @@ -1081,11 +1095,12 @@ export function SceneFusionView({ setBatchItems((prev) => prev.map((item) => ids.includes(item.id) - ? { - ...item, - status, - error: status === "processing" ? undefined : item.error, - } + ? status === "pending" || status === "processing" + ? markProcessItemRegenerating(item, status) + : { + ...item, + status, + } : item ) ); @@ -1099,11 +1114,12 @@ export function SceneFusionView({ setter((prev) => prev.map((item) => ids.includes(item.id) - ? { - ...item, - status, - error: status === "processing" ? undefined : item.error, - } + ? status === "pending" || status === "processing" + ? markProcessItemRegenerating(item, status) + : { + ...item, + status, + } : item ) ); @@ -1217,12 +1233,17 @@ export function SceneFusionView({ setter((prev) => prev.map((item) => item.id === data.id - ? { - ...item, - status: data.status, - queueStatus: data.queueStatus || undefined, - error: data.status === "failed" ? item.error : undefined, - } + ? data.status === "pending" || data.status === "processing" + ? { + ...markProcessItemRegenerating(item, data.status), + queueStatus: data.queueStatus || undefined, + } + : { + ...item, + status: data.status, + queueStatus: data.queueStatus || undefined, + error: data.status === "failed" ? item.error : undefined, + } : item ) ); @@ -1454,12 +1475,21 @@ export function SceneFusionView({ setMultiProductItems((prev) => prev.map((item) => item.id === params.itemId - ? { - ...item, - status: msg.data?.status || item.status, - queueStatus: msg.data?.queueStatus || undefined, - error: undefined, - } + ? msg.data?.status === "pending" || + msg.data?.status === "processing" + ? { + ...markProcessItemRegenerating( + item, + msg.data.status + ), + queueStatus: msg.data.queueStatus || undefined, + } + : { + ...item, + status: msg.data?.status || item.status, + queueStatus: msg.data?.queueStatus || undefined, + error: undefined, + } : item ) ); @@ -1556,7 +1586,7 @@ export function SceneFusionView({ setMultiProductItems((prev) => prev.map((item) => itemsToProcess.some((target) => target.id === item.id) - ? { ...item, status: "pending", queueStatus: undefined, error: undefined } + ? markProcessItemRegenerating(item, "pending") : item ) ); @@ -1577,7 +1607,7 @@ export function SceneFusionView({ setMultiProductItems((prev) => prev.map((item) => item.id === current.id - ? { ...item, status: "processing", error: undefined } + ? markProcessItemRegenerating(item, "processing") : item ) ); @@ -1743,7 +1773,7 @@ export function SceneFusionView({ setBatchItems((prev) => prev.map((item) => itemsToProcess.some((target) => target.id === item.id) - ? { ...item, status: "pending", error: undefined } + ? markProcessItemRegenerating(item, "pending") : item ) ); @@ -1763,7 +1793,7 @@ export function SceneFusionView({ setBatchItems((prev) => prev.map((item) => item.id === current.id - ? { ...item, status: "processing", error: undefined } + ? markProcessItemRegenerating(item, "processing") : item ) ); @@ -1825,7 +1855,7 @@ export function SceneFusionView({ setBatchItems((prev) => prev.map((batchItem) => batchItem.id === item.id - ? { ...batchItem, status: "processing", error: undefined } + ? markProcessItemRegenerating(batchItem, "processing") : batchItem ) ); @@ -1955,7 +1985,7 @@ export function SceneFusionView({ setMultiProductItems((prev) => prev.map((productItem) => productItem.id === item.id - ? { ...productItem, status: "pending", error: undefined } + ? markProcessItemRegenerating(productItem, "pending") : productItem ) ); @@ -2915,6 +2945,12 @@ export function SceneFusionView({ ) : (
{resultItems.map((item, index) => ( + (() => { + const completedResultUrl = + item.status === "completed" + ? item.result || item.originalUrl || "" + : ""; + return (
{ - const previewUrl = item.originalUrl || item.result; - if (item.status === "completed" && previewUrl) { + if (completedResultUrl) { openResultPreview( - previewUrl, + completedResultUrl, `任务 ${index + 1} 预览` ); } @@ -2963,28 +2996,24 @@ export function SceneFusionView({ onKeyDown={(event) => { if (event.key !== "Enter" && event.key !== " ") return; - const previewUrl = item.originalUrl || item.result; - if (item.status === "completed" && previewUrl) { + if (completedResultUrl) { event.preventDefault(); openResultPreview( - previewUrl, + completedResultUrl, `任务 ${index + 1} 预览` ); } }} role="button" tabIndex={ - item.status === "completed" && - (item.result || item.originalUrl) - ? 0 - : -1 + completedResultUrl ? 0 : -1 } > - {item.result ? ( + {completedResultUrl ? ( 处理结果 ) : ( (() => { @@ -3080,7 +3109,7 @@ export function SceneFusionView({ })() )} - {item.status === "completed" && ( + {completedResultUrl && ( <>
+ ); + })() ))} )}