20260626173529
This commit is contained in:
1 parent
b424369b4b
commit
5983d29128
91 files changed
+9236
-2095
No files matched your search
@@ -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 }),
|
||||
}));
|
||||
@@ -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 }),
|
||||
}));
|
||||
@@ -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,5 +1,5 @@
|
||||
export * from "./app";
|
||||
export * from "./user";
|
||||
export * from "./finance";
|
||||
export * from "./family";
|
||||
export * from "./favorite";
|
||||
export * from "./chat";
|
||||
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user