refactor: 收口公开详情编辑意图

This commit is contained in:
2026-06-04 01:00:09 +08:00
parent e1134cc9ec
commit 7349c6df4f
6 changed files with 516 additions and 117 deletions

View File

@@ -532,6 +532,7 @@ import {
resolvePlatformPublicWorkActionMode,
resolvePlatformPublicWorkDetailOpenDecision,
resolvePlatformPublicWorkDetailOpenStrategy,
resolvePlatformPublicWorkEditIntent,
resolvePlatformPublicWorkLikeIntent,
resolvePlatformPublicWorkRemixIntent,
resolvePlatformPublicWorkStartIntent,
@@ -13513,117 +13514,65 @@ export function PlatformEntryFlowShellImpl({
runProtectedAction(async () => {
setPublicWorkDetailError(null);
// 中文注释:自有公开作品必须恢复原草稿,不能复用 remix 复制链路。
if (isBigFishGalleryEntry(entry)) {
const work = mapPublicWorkDetailToBigFishWork(entry);
if (!work?.sourceSessionId?.trim()) {
setPublicWorkDetailError(
'这份大鱼吃小鱼作品缺少原草稿会话,暂时无法编辑。',
const intent = resolvePlatformPublicWorkEditIntent(entry, {
selectedPuzzleDetail,
selectedRpgDetailEntry: selectedDetailEntry,
visualNovelWorks,
barkBattleGalleryEntries,
barkBattleWorks,
mapMatch3DWork: mapPublicWorkDetailToMatch3DWork,
});
switch (intent.type) {
case 'blocked':
setPublicWorkDetailError(intent.errorMessage);
return;
case 'edit-big-fish':
void openBigFishDraft(intent.work);
return;
case 'edit-puzzle':
void openPuzzleDraft(intent.work);
return;
case 'edit-match3d':
void openMatch3DDraft(intent.work, {
forceDraft: intent.forceDraft,
});
return;
case 'edit-square-hole':
void openSquareHoleDraft(intent.work, {
forceDraft: intent.forceDraft,
});
return;
case 'edit-visual-novel':
void openVisualNovelDraft(intent.work, {
forceDraft: intent.forceDraft,
});
return;
case 'resolve-edutainment-draft': {
const matchedDraft = await resolveBabyObjectMatchRuntimeDraft(
intent.entry,
);
if (!matchedDraft) {
setPublicWorkDetailError('这份宝贝识物缺少可编辑草稿。');
return;
}
openBabyObjectMatchDraft(matchedDraft);
return;
}
void openBigFishDraft(work);
return;
}
if (isPuzzleGalleryEntry(entry)) {
const work =
selectedPuzzleDetail?.profileId === entry.profileId
? selectedPuzzleDetail
: mapPublicWorkDetailToPuzzleWork(entry);
if (!work?.sourceSessionId?.trim()) {
setPublicWorkDetailError(
'这份拼图作品缺少原草稿会话,暂时无法编辑。',
);
case 'edit-bark-battle':
openBarkBattleDraft(intent.work, {
forceDraft: intent.forceDraft,
});
return;
}
void openPuzzleDraft(work);
return;
}
if (isMatch3DGalleryEntry(entry)) {
const work = mapPublicWorkDetailToMatch3DWork(entry);
if (!work?.sourceSessionId?.trim()) {
setPublicWorkDetailError(
'这份抓大鹅作品缺少原草稿会话,暂时无法编辑。',
);
case 'edit-rpg-gallery':
void detailNavigation.openSavedCustomWorldEditor(intent.entry);
return;
default: {
const exhaustive: never = intent;
return exhaustive;
}
void openMatch3DDraft(work, { forceDraft: true });
return;
}
if (isSquareHoleGalleryEntry(entry)) {
const work = mapPublicWorkDetailToSquareHoleWork(entry);
if (!work?.sourceSessionId?.trim()) {
setPublicWorkDetailError(
'这份方洞挑战作品缺少原草稿会话,暂时无法编辑。',
);
return;
}
void openSquareHoleDraft(work, { forceDraft: true });
return;
}
if (isJumpHopGalleryEntry(entry)) {
setPublicWorkDetailError('这份跳一跳作品暂时请从作品架编辑。');
return;
}
if (isWoodenFishGalleryEntry(entry)) {
setPublicWorkDetailError('这份敲木鱼作品暂时请从作品架编辑。');
return;
}
if (isVisualNovelGalleryEntry(entry)) {
const matchedWork = visualNovelWorks.find(
(work) => work.profileId === entry.profileId,
);
if (!matchedWork) {
setPublicWorkDetailError('这份视觉小说缺少可编辑草稿。');
return;
}
void openVisualNovelDraft(matchedWork, { forceDraft: true });
return;
}
if (isEdutainmentGalleryEntry(entry)) {
const matchedDraft = await resolveBabyObjectMatchRuntimeDraft(entry);
if (!matchedDraft) {
setPublicWorkDetailError('这份宝贝识物缺少可编辑草稿。');
return;
}
openBabyObjectMatchDraft(matchedDraft);
return;
}
if (isBarkBattleGalleryEntry(entry)) {
const matchedWork =
barkBattleWorks.find((work) => work.workId === entry.workId) ??
barkBattleGalleryEntries.find(
(work) => work.workId === entry.workId,
) ??
mapBarkBattlePublicDetailToWorkSummary(entry);
if (!matchedWork?.draftId?.trim()) {
setPublicWorkDetailError('这份汪汪声浪缺少可编辑草稿。');
return;
}
openBarkBattleDraft(matchedWork, { forceDraft: true });
return;
}
const editEntry =
selectedDetailEntry?.profileId === entry.profileId
? selectedDetailEntry
: null;
if (!editEntry) {
setPublicWorkDetailError('作品详情尚未读取完成。');
return;
}
void detailNavigation.openSavedCustomWorldEditor(editEntry);
});
},
[