refactor: 收口公开详情点赞意图

This commit is contained in:
2026-06-04 00:27:34 +08:00
parent 8c54d40b9c
commit 872d741fdc
6 changed files with 131 additions and 28 deletions

View File

@@ -532,6 +532,7 @@ import {
resolvePlatformPublicWorkActionMode,
resolvePlatformPublicWorkDetailOpenDecision,
resolvePlatformPublicWorkDetailOpenStrategy,
resolvePlatformPublicWorkLikeIntent,
resolveVisiblePuzzleDetailCoverCount,
} from './platformPublicWorkDetailFlow';
import {
@@ -10778,11 +10779,13 @@ export function PlatformEntryFlowShellImpl({
setIsPublicWorkDetailBusy(true);
setPublicWorkDetailError(null);
if (isBigFishGalleryEntry(entry)) {
void likeBigFishGalleryWork(entry.profileId)
const intent = resolvePlatformPublicWorkLikeIntent(entry);
if (intent.type === 'like-big-fish') {
void likeBigFishGalleryWork(intent.profileId)
.then((response) => {
const updatedWork = response.items.find(
(item) => item.sourceSessionId === entry.profileId,
(item) => item.sourceSessionId === intent.profileId,
);
if (!updatedWork) {
return;
@@ -10817,8 +10820,8 @@ export function PlatformEntryFlowShellImpl({
return;
}
if (isPuzzleGalleryEntry(entry)) {
void likePuzzleGalleryWork(entry.profileId)
if (intent.type === 'like-puzzle') {
void likePuzzleGalleryWork(intent.profileId)
.then((response) => {
const updatedWork = response.item;
setPuzzleGalleryEntries((current) =>
@@ -10851,31 +10854,13 @@ export function PlatformEntryFlowShellImpl({
return;
}
if (isEdutainmentGalleryEntry(entry)) {
setPublicWorkDetailError('宝贝识物点赞将在后续版本开放。');
if (intent.type === 'unsupported') {
setPublicWorkDetailError(intent.errorMessage);
setIsPublicWorkDetailBusy(false);
return;
}
if (isBarkBattleGalleryEntry(entry)) {
setPublicWorkDetailError('汪汪声浪点赞将在后续版本开放。');
setIsPublicWorkDetailBusy(false);
return;
}
if (isSquareHoleGalleryEntry(entry)) {
setPublicWorkDetailError('方洞挑战点赞将在后续版本开放。');
setIsPublicWorkDetailBusy(false);
return;
}
if (isVisualNovelGalleryEntry(entry)) {
setPublicWorkDetailError('视觉小说点赞将在后续版本开放。');
setIsPublicWorkDetailBusy(false);
return;
}
void likeRpgEntryWorldGallery(entry.ownerUserId, entry.profileId)
void likeRpgEntryWorldGallery(intent.ownerUserId, intent.profileId)
.then((updatedEntry) => {
setSelectedDetailEntry((current) =>
current?.profileId === updatedEntry.profileId

View File

@@ -34,6 +34,7 @@ import {
resolvePlatformPublicWorkActionMode,
resolvePlatformPublicWorkDetailOpenDecision,
resolvePlatformPublicWorkDetailOpenStrategy,
resolvePlatformPublicWorkLikeIntent,
resolveVisiblePuzzleDetailCoverCount,
} from './platformPublicWorkDetailFlow';
@@ -651,6 +652,49 @@ test('platform public work detail flow resolves edit mode only for owned works',
expect(resolvePlatformPublicWorkActionMode(entry, null)).toBe('remix');
});
test('platform public work detail flow resolves like intent', () => {
expect(resolvePlatformPublicWorkLikeIntent(buildTypedEntry('big-fish'))).toEqual(
{
type: 'like-big-fish',
profileId: 'big-fish-profile',
},
);
expect(resolvePlatformPublicWorkLikeIntent(buildTypedEntry('puzzle'))).toEqual({
type: 'like-puzzle',
profileId: 'puzzle-profile',
});
expect(resolvePlatformPublicWorkLikeIntent(buildRpgEntry())).toEqual({
type: 'like-rpg-gallery',
ownerUserId: 'user-1',
profileId: 'rpg-profile',
});
expect(resolvePlatformPublicWorkLikeIntent(buildTypedEntry('match3d'))).toEqual(
{
type: 'like-rpg-gallery',
ownerUserId: 'user-1',
profileId: 'match3d-profile',
},
);
expect(resolvePlatformPublicWorkLikeIntent(buildTypedEntry('edutainment'))).toEqual({
type: 'unsupported',
errorMessage: '宝贝识物点赞将在后续版本开放。',
});
expect(resolvePlatformPublicWorkLikeIntent(buildTypedEntry('bark-battle'))).toEqual(
{
type: 'unsupported',
errorMessage: '汪汪声浪点赞将在后续版本开放。',
},
);
expect(resolvePlatformPublicWorkLikeIntent(buildTypedEntry('square-hole'))).toEqual({
type: 'unsupported',
errorMessage: '方洞挑战点赞将在后续版本开放。',
});
expect(resolvePlatformPublicWorkLikeIntent(buildTypedEntry('visual-novel'))).toEqual({
type: 'unsupported',
errorMessage: '视觉小说点赞将在后续版本开放。',
});
});
test('platform public work detail flow resolves direct open decision', () => {
const entry = buildTypedEntry('match3d', {
publicWorkCode: ' M3D-001 ',

View File

@@ -81,6 +81,25 @@ export type PlatformPublicWorkDetailOpenStrategy =
export type PlatformPublicWorkActionMode = 'edit' | 'remix';
export type PlatformPublicWorkLikeIntent =
| {
type: 'like-big-fish';
profileId: string;
}
| {
type: 'like-puzzle';
profileId: string;
}
| {
type: 'like-rpg-gallery';
ownerUserId: string;
profileId: string;
}
| {
type: 'unsupported';
errorMessage: string;
};
export type PlatformPublicWorkDetailOpenDecision =
| {
type: 'blocked';
@@ -455,6 +474,58 @@ export function resolvePlatformPublicWorkActionMode(
: 'remix';
}
export function resolvePlatformPublicWorkLikeIntent(
entry: PlatformPublicGalleryCard,
): PlatformPublicWorkLikeIntent {
if (isBigFishGalleryEntry(entry)) {
return {
type: 'like-big-fish',
profileId: entry.profileId,
};
}
if (isPuzzleGalleryEntry(entry)) {
return {
type: 'like-puzzle',
profileId: entry.profileId,
};
}
if (isEdutainmentGalleryEntry(entry)) {
return {
type: 'unsupported',
errorMessage: '宝贝识物点赞将在后续版本开放。',
};
}
if (isBarkBattleGalleryEntry(entry)) {
return {
type: 'unsupported',
errorMessage: '汪汪声浪点赞将在后续版本开放。',
};
}
if (isSquareHoleGalleryEntry(entry)) {
return {
type: 'unsupported',
errorMessage: '方洞挑战点赞将在后续版本开放。',
};
}
if (isVisualNovelGalleryEntry(entry)) {
return {
type: 'unsupported',
errorMessage: '视觉小说点赞将在后续版本开放。',
};
}
return {
type: 'like-rpg-gallery',
ownerUserId: entry.ownerUserId,
profileId: entry.profileId,
};
}
export function resolvePlatformPublicWorkDetailOpenDecision(
entry: PlatformPublicGalleryCard,
deps: PlatformPublicWorkDetailOpenDecisionDeps = {},