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 baseSelector = useCallback( (state: ReturnType) => (serverId ? state.sessions[serverId] ?? null : null), [serverId] ); if (selector) { const derivedSelector = useCallback( (state: ReturnType) => selector(baseSelector(state)), [baseSelector, selector] ); return useStoreWithEqualityFn(useSessionStore, derivedSelector, equalityFn); } return useSessionStore(baseSelector); }