发布表单换项目时一并重置封面与截图
- useGameDistributionPublishForm 的重置 effect 现在清空 cover / screenshots / 上传缓存,并回收已登记的预览 blob 地址 - 抽出 revokeTrackedObjectUrls 供重置与卸载共用
This commit is contained in:
+19
-8
@@ -86,6 +86,18 @@ const COVER_GENERATION_MODEL = IMAGE_MODEL_GPT_IMAGE_2;
|
||||
const COVER_GENERATION_ASPECT_RATIO = '16:9';
|
||||
const COVER_GENERATION_IMAGE_SIZE = '2K';
|
||||
|
||||
/** 释放一组已登记的预览 blob 地址;重置与卸载共用,避免两处各写一遍。 */
|
||||
function revokeTrackedObjectUrls(objectUrls: Set<string>) {
|
||||
objectUrls.forEach((url) => {
|
||||
try {
|
||||
URL.revokeObjectURL(url);
|
||||
} catch {
|
||||
// 预览地址释放失败不影响重置 / 卸载。
|
||||
}
|
||||
});
|
||||
objectUrls.clear();
|
||||
}
|
||||
|
||||
function buildPublishProjectContext(manifest: GameCreationAppManifest) {
|
||||
const taskSummary = (manifest.tasks ?? [])
|
||||
.slice(0, 16)
|
||||
@@ -224,7 +236,13 @@ export function useGameDistributionPublishForm({
|
||||
setGeneratingCover(false);
|
||||
setCoverGenerationPrice(null);
|
||||
setCoverGenerationDetail('');
|
||||
// 表单在换项目时重来,封面与截图也必须跟着清:素材是「项目 A 的公开展示物料」,
|
||||
// 留着会被当成项目 B 的封面 / 截图提交。缓存与预览地址一并回收。
|
||||
setCover(null);
|
||||
setScreenshots([]);
|
||||
setPreviewScreenshot(null);
|
||||
uploadedAssetCacheRef.current.clear();
|
||||
revokeTrackedObjectUrls(objectUrlsRef.current);
|
||||
summaryTouchedRef.current = false;
|
||||
categoryTouchedRef.current = false;
|
||||
|
||||
@@ -282,14 +300,7 @@ export function useGameDistributionPublishForm({
|
||||
useEffect(() => {
|
||||
const objectUrls = objectUrlsRef.current;
|
||||
return () => {
|
||||
objectUrls.forEach((url) => {
|
||||
try {
|
||||
URL.revokeObjectURL(url);
|
||||
} catch {
|
||||
// 预览地址释放失败不影响关闭面板。
|
||||
}
|
||||
});
|
||||
objectUrls.clear();
|
||||
revokeTrackedObjectUrls(objectUrls);
|
||||
};
|
||||
}, []);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user