25 lines
872 B
TypeScript
25 lines
872 B
TypeScript
import { create } from 'zustand'
|
|
import { immer } from 'zustand/middleware/immer'
|
|
import type { Server, ServerId, Uuid } from '~/lib/api/types'
|
|
|
|
type ServerListStore = {
|
|
servers: Record<ServerId, Server>
|
|
addServers: (newServers: Server[]) => void
|
|
addServer: (server: Server) => void
|
|
removeServer: (serverId: Uuid) => void
|
|
}
|
|
|
|
export const useServerListStore = create<ServerListStore>()(
|
|
immer(
|
|
(set) => ({
|
|
servers: {},
|
|
addServers: (servers: Server[]) => set((state) => {
|
|
for (const server of servers) {
|
|
state.servers[server.id] = server
|
|
}
|
|
}),
|
|
addServer: (server: Server) => set((state) => { state.servers[server.id] = server }),
|
|
removeServer: (serverId: Uuid) => set((state) => { delete state.servers[serverId] }),
|
|
})
|
|
)
|
|
) |