import { useCallback, useMemo } from "react"; import { useStoreWithEqualityFn } from "zustand/traditional"; import { useSessionStore, type SessionState } from "@/stores/session-store"; export function useSessionDirectory(): Map { const sessions = useSessionStore((state) => state.sessions); return useMemo(() => { return new Map(Object.entries(sessions)); }, [sessions]); } type SessionSelector = (session: SessionState | null) => T; type EqualityFn = ((left: T, right: T) => boolean) | undefined; export function useSessionForServer(serverId: string | null): SessionState | null; export function useSessionForServer( serverId: string | null, selector: SessionSelector, equalityFn?: EqualityFn, ): T; export function useSessionForServer( serverId: string | null, selector?: SessionSelector, equalityFn?: EqualityFn, ): SessionState | null | T { const storeSelector = useCallback( (state: ReturnType): SessionState | null | T => { const session = serverId ? (state.sessions[serverId] ?? null) : null; return selector ? selector(session) : session; }, [selector, serverId], ); return useStoreWithEqualityFn( useSessionStore, storeSelector, equalityFn as EqualityFn, ); }