feat: realtime status, mentions, push notifications
This commit is contained in:
@@ -21,6 +21,7 @@ export interface UpdateProfilePayload {
|
||||
bio?: string;
|
||||
accent_color?: string;
|
||||
status_text?: string;
|
||||
status?: UserStatus;
|
||||
}
|
||||
|
||||
interface AuthState {
|
||||
|
||||
@@ -14,6 +14,7 @@ interface MemberState {
|
||||
membersByServer: Record<string, Member[]>;
|
||||
isLoading: boolean;
|
||||
fetchMembers: (serverId: string) => Promise<void>;
|
||||
updateMemberStatus: (userId: string, status: Member["status"]) => void;
|
||||
}
|
||||
|
||||
export const useMemberStore = create<MemberState>((set) => ({
|
||||
@@ -34,4 +35,15 @@ export const useMemberStore = create<MemberState>((set) => ({
|
||||
set({ isLoading: false });
|
||||
}
|
||||
},
|
||||
|
||||
updateMemberStatus: (userId, status) =>
|
||||
set((state) => {
|
||||
const next: Record<string, Member[]> = {};
|
||||
for (const [serverId, list] of Object.entries(state.membersByServer)) {
|
||||
next[serverId] = list.map((m) =>
|
||||
m.id === userId ? { ...m, status } : m,
|
||||
);
|
||||
}
|
||||
return { membersByServer: next };
|
||||
}),
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user