收口创作流程统一总计划并修复等待页窄屏裁切
This commit is contained in:
@@ -3138,6 +3138,38 @@ function LazyPanelFallback({ label }: { label: string }) {
|
||||
);
|
||||
}
|
||||
|
||||
function CreationResultRecoveryPanel({
|
||||
title,
|
||||
message,
|
||||
actionLabel,
|
||||
onAction,
|
||||
}: {
|
||||
title: string;
|
||||
message: string;
|
||||
actionLabel: string;
|
||||
onAction: () => void;
|
||||
}) {
|
||||
return (
|
||||
<div className="flex h-full min-h-0 items-center justify-center px-3 py-6">
|
||||
<div className="platform-subpanel w-full max-w-sm rounded-[1.5rem] p-5 text-center">
|
||||
<div className="text-base font-black text-[var(--platform-text-strong)]">
|
||||
{title}
|
||||
</div>
|
||||
<div className="mt-2 text-sm leading-6 text-[var(--platform-text-base)]">
|
||||
{message}
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
onClick={onAction}
|
||||
className="platform-button platform-button--primary mt-4 min-h-11 justify-center px-4 py-3 text-sm"
|
||||
>
|
||||
{actionLabel}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function mergePuzzleServiceRuntimeState(
|
||||
currentRun: PuzzleRunSnapshot,
|
||||
serviceRun: PuzzleRunSnapshot,
|
||||
@@ -12930,15 +12962,26 @@ export function PlatformEntryFlowShellImpl({
|
||||
}
|
||||
|
||||
if (path.startsWith('/creation/jump-hop')) {
|
||||
if (!sessionId) {
|
||||
return;
|
||||
}
|
||||
let session: JumpHopSessionSnapshotResponse | null = null;
|
||||
let work: JumpHopWorkProfileResponse | null = null;
|
||||
try {
|
||||
const { session } = await jumpHopClient.getSession(sessionId);
|
||||
let work: JumpHopWorkProfileResponse | null = null;
|
||||
if (profileId) {
|
||||
work = (await jumpHopClient.getWorkDetail(profileId)).item;
|
||||
}
|
||||
} catch {
|
||||
work = null;
|
||||
}
|
||||
try {
|
||||
if (sessionId) {
|
||||
session = (await jumpHopClient.getSession(sessionId)).session;
|
||||
}
|
||||
} catch {
|
||||
session = null;
|
||||
}
|
||||
if (!session && !work) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
setJumpHopSession(session);
|
||||
setJumpHopWork(work);
|
||||
writeCreationUrlState(
|
||||
@@ -12948,7 +12991,7 @@ export function PlatformEntryFlowShellImpl({
|
||||
setSelectionStage(
|
||||
path.includes('/generating')
|
||||
? 'jump-hop-generating'
|
||||
: session.draft
|
||||
: session?.draft || work
|
||||
? 'jump-hop-result'
|
||||
: 'jump-hop-workspace',
|
||||
);
|
||||
@@ -15689,7 +15732,7 @@ export function PlatformEntryFlowShellImpl({
|
||||
initial={{ opacity: 0, y: 12 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
exit={{ opacity: 0, y: -12 }}
|
||||
className="flex h-full min-h-0 flex-col"
|
||||
className="flex h-full min-h-0 flex-col overflow-y-auto overflow-x-hidden"
|
||||
>
|
||||
<Suspense
|
||||
fallback={
|
||||
@@ -15711,6 +15754,8 @@ export function PlatformEntryFlowShellImpl({
|
||||
void executeMatch3DAction(payload);
|
||||
}}
|
||||
initialFormPayload={match3dFormDraftPayload}
|
||||
title={null}
|
||||
unifiedChrome
|
||||
onCreateFromForm={(payload) => {
|
||||
runProtectedAction(() => {
|
||||
void createMatch3DDraftFromForm(payload);
|
||||
@@ -16411,36 +16456,55 @@ export function PlatformEntryFlowShellImpl({
|
||||
</motion.div>
|
||||
)}
|
||||
|
||||
{selectionStage === 'jump-hop-result' && jumpHopSession?.draft && (
|
||||
<motion.div
|
||||
key="jump-hop-result"
|
||||
initial={{ opacity: 0, y: 12 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
exit={{ opacity: 0, y: -12 }}
|
||||
className="flex h-full min-h-0 flex-col"
|
||||
>
|
||||
<Suspense
|
||||
fallback={<LazyPanelFallback label="正在加载跳一跳结果..." />}
|
||||
>
|
||||
<JumpHopResultView
|
||||
profile={jumpHopWork ?? jumpHopSession.draft}
|
||||
error={jumpHopError}
|
||||
onBack={leaveJumpHopFlow}
|
||||
onEdit={() => {
|
||||
setSelectionStage('jump-hop-workspace');
|
||||
}}
|
||||
onStartTestRun={startJumpHopTestRunFromProfile}
|
||||
onPublish={publishJumpHopDraft}
|
||||
onRegenerateCharacter={() => {
|
||||
void regenerateJumpHopAsset('regenerate-character');
|
||||
}}
|
||||
onRegenerateTiles={() => {
|
||||
void regenerateJumpHopAsset('regenerate-tiles');
|
||||
}}
|
||||
/>
|
||||
</Suspense>
|
||||
</motion.div>
|
||||
)}
|
||||
{selectionStage === 'jump-hop-result' &&
|
||||
(() => {
|
||||
const activeJumpHopResultProfile =
|
||||
jumpHopWork ?? jumpHopSession?.draft ?? null;
|
||||
|
||||
return (
|
||||
<motion.div
|
||||
key="jump-hop-result"
|
||||
initial={{ opacity: 0, y: 12 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
exit={{ opacity: 0, y: -12 }}
|
||||
className="flex h-full min-h-0 flex-col"
|
||||
>
|
||||
{activeJumpHopResultProfile ? (
|
||||
<Suspense
|
||||
fallback={
|
||||
<LazyPanelFallback label="正在加载跳一跳结果..." />
|
||||
}
|
||||
>
|
||||
<JumpHopResultView
|
||||
profile={activeJumpHopResultProfile}
|
||||
error={jumpHopError}
|
||||
onBack={leaveJumpHopFlow}
|
||||
onEdit={() => {
|
||||
setSelectionStage('jump-hop-workspace');
|
||||
}}
|
||||
onStartTestRun={startJumpHopTestRunFromProfile}
|
||||
onPublish={publishJumpHopDraft}
|
||||
onRegenerateCharacter={() => {
|
||||
void regenerateJumpHopAsset('regenerate-character');
|
||||
}}
|
||||
onRegenerateTiles={() => {
|
||||
void regenerateJumpHopAsset('regenerate-tiles');
|
||||
}}
|
||||
/>
|
||||
</Suspense>
|
||||
) : (
|
||||
<CreationResultRecoveryPanel
|
||||
title="跳一跳草稿未恢复"
|
||||
message="当前链接缺少可恢复的跳一跳草稿信息。"
|
||||
actionLabel="返回创作"
|
||||
onAction={() => {
|
||||
setSelectionStage('jump-hop-workspace');
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</motion.div>
|
||||
);
|
||||
})()}
|
||||
|
||||
{selectionStage === 'jump-hop-runtime' && (
|
||||
<motion.div
|
||||
@@ -16476,7 +16540,7 @@ export function PlatformEntryFlowShellImpl({
|
||||
initial={{ opacity: 0, y: 12 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
exit={{ opacity: 0, y: -12 }}
|
||||
className="flex h-full min-h-0 flex-col"
|
||||
className="flex h-full min-h-0 flex-col overflow-y-auto overflow-x-hidden"
|
||||
>
|
||||
<Suspense
|
||||
fallback={<LazyPanelFallback label="正在加载敲木鱼创作..." />}
|
||||
@@ -16631,7 +16695,7 @@ export function PlatformEntryFlowShellImpl({
|
||||
initial={{ opacity: 0, y: 12 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
exit={{ opacity: 0, y: -12 }}
|
||||
className="flex h-full min-h-0 flex-col"
|
||||
className="flex h-full min-h-0 flex-col overflow-y-auto overflow-x-hidden"
|
||||
>
|
||||
<Suspense
|
||||
fallback={<LazyPanelFallback label="正在加载拼图创作..." />}
|
||||
@@ -16654,6 +16718,8 @@ export function PlatformEntryFlowShellImpl({
|
||||
executePuzzleWorkspaceAction(payload);
|
||||
}}
|
||||
initialFormPayload={puzzleFormDraftPayload}
|
||||
title={null}
|
||||
unifiedChrome
|
||||
onCreateFromForm={(payload) => {
|
||||
void createPuzzleDraftFromForm(payload);
|
||||
}}
|
||||
|
||||
Reference in New Issue
Block a user