refactor: 收口公开作品详情策略

This commit is contained in:
2026-06-03 22:22:13 +08:00
parent caac418e0e
commit 00820e6571
6 changed files with 506 additions and 53 deletions

View File

@@ -515,6 +515,10 @@ import {
mergePlatformPublicGalleryEntries,
type RecommendRuntimeKind,
} from './platformPublicGalleryFlow';
import {
resolvePlatformPublicWorkActionMode,
resolvePlatformPublicWorkDetailOpenStrategy,
} from './platformPublicWorkDetailFlow';
import {
buildPuzzleResultProfileId,
buildPuzzleResultWorkId,
@@ -4025,13 +4029,13 @@ export function PlatformEntryFlowShellImpl({
const resultViewError =
autosaveCoordinator.customWorldAutoSaveError ??
sessionController.customWorldError;
const isSelectedPublicWorkOwned = Boolean(
authUi?.user?.id &&
selectedPublicWorkDetail?.ownerUserId === authUi.user.id,
);
const selectedPublicWorkActionMode = isSelectedPublicWorkOwned
? 'edit'
const selectedPublicWorkActionMode = selectedPublicWorkDetail
? resolvePlatformPublicWorkActionMode(
selectedPublicWorkDetail,
authUi?.user?.id,
)
: 'remix';
const isSelectedPublicWorkOwned = selectedPublicWorkActionMode === 'edit';
useEffect(() => {
if (
@@ -11574,54 +11578,33 @@ export function PlatformEntryFlowShellImpl({
const openPublicGalleryDetail = useCallback(
(entry: PlatformPublicGalleryCard) => {
if (isBigFishGalleryEntry(entry)) {
openPublicWorkDetail(entry);
return;
const strategy = resolvePlatformPublicWorkDetailOpenStrategy(entry);
switch (strategy.type) {
case 'use-entry':
openPublicWorkDetail(entry);
return;
case 'load-puzzle-detail':
void openPuzzlePublicWorkDetail(strategy.profileId, {
tab: platformBootstrap.platformTab,
});
return;
case 'load-jump-hop-detail':
void openJumpHopPublicWorkDetail(strategy.profileId);
return;
case 'load-wooden-fish-detail':
void openWoodenFishPublicWorkDetail(strategy.profileId);
return;
case 'load-visual-novel-detail':
void openVisualNovelPublicWorkDetail(strategy.profileId);
return;
case 'load-rpg-detail':
void openRpgPublicWorkDetail(strategy.entry);
return;
default: {
const exhaustive: never = strategy;
return exhaustive;
}
}
if (isPuzzleGalleryEntry(entry)) {
void openPuzzlePublicWorkDetail(entry.profileId, {
tab: platformBootstrap.platformTab,
});
return;
}
if (isMatch3DGalleryEntry(entry)) {
openPublicWorkDetail(entry);
return;
}
if (isSquareHoleGalleryEntry(entry)) {
openPublicWorkDetail(entry);
return;
}
if (isJumpHopGalleryEntry(entry)) {
void openJumpHopPublicWorkDetail(entry.profileId);
return;
}
if (isWoodenFishGalleryEntry(entry)) {
void openWoodenFishPublicWorkDetail(entry.profileId);
return;
}
if (isVisualNovelGalleryEntry(entry)) {
void openVisualNovelPublicWorkDetail(entry.profileId);
return;
}
if (isBarkBattleGalleryEntry(entry)) {
openPublicWorkDetail(entry);
return;
}
if (isEdutainmentGalleryEntry(entry)) {
openPublicWorkDetail(entry);
return;
}
void openRpgPublicWorkDetail(entry);
},
[
openPuzzlePublicWorkDetail,