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 ); }