31 lines
944 B
TypeScript
31 lines
944 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];
|
|
}),
|
|
})),
|
|
);
|