/** * 纯 user reducer */ import { type UserEvent, type UserState } from "./user-types"; export function userReducer(state: UserState, event: UserEvent): UserState { switch (event.type) { case "_SetLoading": return { ...state, isLoading: event.isLoading }; case "_SetUser": return { ...state, currentUser: event.user }; case "_SetAvatarUrl": return { ...state, avatarUrl: event.url }; case "_SetPronouns": return { ...state, pronouns: event.pronouns }; case "_SetCoinBalance": return { ...state, coinBalance: event.coinBalance }; case "UserUpdate": return { ...state, currentUser: event.user }; case "UserUpdateUsername": { if (!state.currentUser) return state; return { ...state, currentUser: { ...state.currentUser, username: event.username }, }; } case "UserUpdatePronouns": return { ...state, pronouns: event.pronouns }; case "UserLogout": return { ...state, currentUser: null, avatarUrl: null, }; case "UserInit": case "UserFetch": case "UserDeleteChatHistory": case "UserDeleteAccount": // 由 side-effects 处理 return state; default: return state; } }