20260626173529

This commit is contained in:
oneao committed 2026-06-26 17:35:29 +08:00
1 parent b424369b4b
commit 5983d29128
91 files changed
+9236 -2095

No files matched your search

-13
View File
@@ -1,13 +0,0 @@
import { create } from "zustand";
export type ThemeScheme = "light" | "dark" | "system";
interface AppState {
themeScheme: ThemeScheme;
setThemeScheme: (theme: ThemeScheme) => void;
}
export const useAppStore = create<AppState>((set) => ({
themeScheme: "system",
setThemeScheme: (theme) => set({ themeScheme: theme }),
}));
+54
View File
@@ -0,0 +1,54 @@
import { create } from "zustand";
import { ChatMessage, OnlineUser } from "@/types/chat";
interface ChatState {
messages: ChatMessage[];
onlineUsers: OnlineUser[];
unreadCount: number;
isConnected: boolean;
addMessage: (message: ChatMessage) => void;
recallMessage: (messageId: number) => void;
deleteMessage: (messageId: number) => void;
setOnlineUsers: (users: OnlineUser[]) => void;
removeOnlineUser: (userId: number) => void;
setConnected: (connected: boolean) => void;
clearUnread: () => void;
clear: () => void;
}
export const useChatStore = create<ChatState>((set) => ({
messages: [],
onlineUsers: [],
unreadCount: 0,
isConnected: false,
addMessage: (message) =>
set((state) => {
if (state.messages.some((item) => item.id === message.id)) return state;
return {
messages: [...state.messages, message],
unreadCount: state.unreadCount + 1,
};
}),
recallMessage: (messageId) =>
set((state) => ({
messages: state.messages.map((item) =>
item.id === messageId ? { ...item, recalled: 1 } : item,
),
})),
deleteMessage: (messageId) =>
set((state) => ({
messages: state.messages.filter((item) => item.id !== messageId),
})),
setOnlineUsers: (onlineUsers) => set({ onlineUsers }),
removeOnlineUser: (userId) =>
set((state) => ({
onlineUsers: state.onlineUsers.filter((user) => user.user_id !== userId),
})),
setConnected: (isConnected) => set({ isConnected }),
clearUnread: () => set({ unreadCount: 0 }),
clear: () => set({ messages: [], onlineUsers: [], unreadCount: 0, isConnected: false }),
}));
+4
View File
@@ -14,6 +14,8 @@ interface FamilyState {
clear: () => void;
inFamily: () => boolean;
getFamilyId: () => number;
}
const defaultFamily: Family = {
@@ -40,6 +42,8 @@ export const useFamilyStore = create<FamilyState>()(
return currentFamily.family_id !== 0;
},
getFamilyId: () => get().currentFamily.family_id,
}),
{
name: "family-storage",
+1 -1
View File
@@ -1,5 +1,5 @@
export * from "./app";
export * from "./user";
export * from "./finance";
export * from "./family";
export * from "./favorite";
export * from "./chat";
+4
View File
@@ -7,6 +7,8 @@ interface UserState {
isLogged: () => boolean;
getUserId: () => number;
setUserInfo: (userInfo: UserInfo) => void;
clear: () => void;
@@ -33,6 +35,8 @@ export const useUserStore = create<UserState>()(
isLogged: () => !!get().userInfo?.token,
getUserId: () => get().userInfo.id,
setUserInfo: (userInfo) =>
set({
userInfo,