返回 AiToEarn
index.ts
1 /**
2 * LoginDialog Store - 全局登录弹框状态管理
3 */
4
5 import { create } from 'zustand'
6
7 interface LoginDialogState {
8 /** 弹框是否可见 */
9 visible: boolean
10 /** 登录成功后跳转 URL */
11 redirectUrl?: string
12 /** 邀请码 */
13 inviteCode?: string
14 /** 来自受保护页面守卫(关闭弹框时导航到 '/') */
15 fromGuard: boolean
16 /** 打开登录弹框 */
17 openLoginDialog: (options?: { redirectUrl?: string, inviteCode?: string, fromGuard?: boolean }) => void
18 /** 关闭登录弹框 */
19 closeLoginDialog: () => void
20 }
21
22 export const useLoginDialogStore = create<LoginDialogState>(set => ({
23 visible: false,
24 redirectUrl: undefined,
25 inviteCode: undefined,
26 fromGuard: false,
27 openLoginDialog: options =>
28 set({
29 visible: true,
30 redirectUrl: options?.redirectUrl,
31 inviteCode: options?.inviteCode,
32 fromGuard: options?.fromGuard ?? false,
33 }),
34 closeLoginDialog: () =>
35 set({
36 visible: false,
37 redirectUrl: undefined,
38 inviteCode: undefined,
39 fromGuard: false,
40 }),
41 }))
42
42 lines TYPESCRIPT