import { create } from "zustand"; import { immer } from "zustand/middleware/immer"; import type { ChannelId, UserId } from "~/lib/api/types"; interface UserVoiceState { deaf: boolean; muted: boolean; } interface ChannelVoiceState { users: Record; } interface ChannelsVoiceState { channels: Record; addUser: ( channelId: ChannelId, userId: UserId, userVoiceState: UserVoiceState, ) => void; removeUser: (channelId: ChannelId, userId: UserId) => void; removeChannel: (channelId: ChannelId) => void; } export const useChannelsVoiceStateStore = create()( immer((set, get) => ({ channels: {}, addUser: (channelId, userId, userVoiceState) => set((state) => { if (!state.channels[channelId]) { state.channels[channelId] = { users: {}, }; } state.channels[channelId].users[userId] = userVoiceState; }), removeUser: (channelId, userId) => set((state) => { if (state.channels[channelId]) { delete state.channels[channelId].users[userId]; } }), removeChannel: (channelId) => set((state) => { delete state.channels[channelId]; }), })), );