| 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 |