fix:splash 界面重定向界面问题
This commit is contained in:
@@ -154,7 +154,15 @@ const checkAuthStatusActor = fromPromise<LoginStatus, void>(async () => {
|
||||
// 设计:所有登录/同步流跑完都回 `idle`(带正确 `loginStatus`)。
|
||||
// **不**再设 `success` state —— 之前曾用 "success" 当"刚成功"信号,
|
||||
// 但 status check 流也会误入 success,触发 splash-button 误跳 /chat。
|
||||
// 现在改用 `loginStatus !== "notLoggedIn"` 作为"已登录"信号(见 auth-context.tsx)。
|
||||
//
|
||||
// `pendingRedirect: boolean`("用户**显式**触发了登录"信号)——
|
||||
// **在登录成功的 onDone 里自动置 true**:
|
||||
// splash / auth screen 看到 `pendingRedirect && loginStatus !== "notLoggedIn"` 跳 /chat
|
||||
// 跳完派 `AuthClearPendingRedirect` 置 false
|
||||
// checkingAuthStatus **不**设 flag —— 被动查 token 不算"用户意图"。
|
||||
//
|
||||
// 注:onDone 用了**内联**assign(不是 helper function)—— XState v5 的 TypeScript
|
||||
// 推断对 helper return type 不友好;内联能保留 `state.matches("loadingXxx")` 的类型。
|
||||
// ============================================================
|
||||
export const authMachine = setup({
|
||||
types: {
|
||||
@@ -217,6 +225,10 @@ export const authMachine = setup({
|
||||
errorMessage: "Apple login not implemented",
|
||||
}),
|
||||
},
|
||||
// splash / auth screen 跳完 /chat 后**清**flag
|
||||
AuthClearPendingRedirect: {
|
||||
actions: assign({ pendingRedirect: false }),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -228,6 +240,7 @@ export const authMachine = setup({
|
||||
target: "idle", // ← status check 完回 idle(**不**再假冒 success)
|
||||
actions: assign({
|
||||
loginStatus: ({ event }) => event.output,
|
||||
// **不**置 pendingRedirect —— 状态查询是**被动**读 token,不算"用户意图"
|
||||
errorMessage: null,
|
||||
}),
|
||||
},
|
||||
@@ -246,9 +259,11 @@ export const authMachine = setup({
|
||||
invoke: {
|
||||
src: "guestLogin",
|
||||
onDone: {
|
||||
target: "idle", // ← 改自 "success"
|
||||
target: "idle",
|
||||
// 内联 assign —— XState v5 type inference 保留 loadingGuestLogin state 类型
|
||||
actions: assign({
|
||||
loginStatus: ({ event }) => event.output,
|
||||
pendingRedirect: true, // ← 显式登录成功 → splash / auth 看到跳 /chat
|
||||
errorMessage: null,
|
||||
}),
|
||||
},
|
||||
@@ -271,9 +286,10 @@ export const authMachine = setup({
|
||||
return { email: event.email, password: event.password };
|
||||
},
|
||||
onDone: {
|
||||
target: "idle", // ← 改自 "success"
|
||||
target: "idle",
|
||||
actions: assign({
|
||||
loginStatus: ({ event }) => event.output,
|
||||
pendingRedirect: true, // ← 邮箱登录成功 → 跳
|
||||
errorMessage: null,
|
||||
}),
|
||||
},
|
||||
@@ -301,9 +317,10 @@ export const authMachine = setup({
|
||||
};
|
||||
},
|
||||
onDone: {
|
||||
target: "idle", // ← 改自 "success"
|
||||
target: "idle",
|
||||
actions: assign({
|
||||
loginStatus: ({ event }) => event.output,
|
||||
pendingRedirect: true, // ← 注册成功 → 跳
|
||||
errorMessage: null,
|
||||
}),
|
||||
},
|
||||
@@ -348,9 +365,10 @@ export const authMachine = setup({
|
||||
return { idToken: event.idToken };
|
||||
},
|
||||
onDone: {
|
||||
target: "idle", // ← 改自 "success"
|
||||
target: "idle",
|
||||
actions: assign({
|
||||
loginStatus: ({ event }) => event.output,
|
||||
pendingRedirect: true, // ← OAuth sync 成功 → 跳
|
||||
errorMessage: null,
|
||||
}),
|
||||
},
|
||||
@@ -373,9 +391,10 @@ export const authMachine = setup({
|
||||
return { accessToken: event.accessToken };
|
||||
},
|
||||
onDone: {
|
||||
target: "idle", // ← 改自 "success"
|
||||
target: "idle",
|
||||
actions: assign({
|
||||
loginStatus: ({ event }) => event.output,
|
||||
pendingRedirect: true, // ← OAuth sync 成功 → 跳
|
||||
errorMessage: null,
|
||||
}),
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user