import { create } from "zustand"; import { immer } from "zustand/middleware/immer"; import type { ChannelId, ServerChannel, ServerId } from "~/lib/api/types"; type ServerChannelsStore = { channels: Record>; addServer: (serverId: ServerId) => void; addChannel: (channel: ServerChannel) => void; addChannels: (channels: ServerChannel[]) => void; removeChannel: (serverId: ServerId, channelId: ChannelId) => void; removeServer: (serverId: ServerId) => void; }; export const useServerChannelsStore = create()( immer((set, get) => ({ channels: {}, addServer: (serverId) => set((state) => { state.channels[serverId] = {}; }), addChannel: (channel) => set((state) => { if (state.channels[channel.serverId] === undefined) { state.channels[channel.serverId] = {}; } state.channels[channel.serverId][channel.id] = channel; }), addChannels: (channels) => set((state) => { for (const channel of channels) { if (state.channels[channel.serverId] === undefined) { state.channels[channel.serverId] = {}; } state.channels[channel.serverId][channel.id] = channel; } }), removeChannel: (serverId, channelId) => set((state) => { delete state.channels[serverId][channelId]; }), removeServer: (serverId) => set((state) => { delete state.channels[serverId]; }), })), );