// useSwarmName — the swarm's configured display name, or `null` until it // arrives, when none is configured, or when the request fails. One request per // page load, shared by every caller; see `swarm-name.ts`. import { useEffect, useState } from "preact/hooks"; import { createSwarmNameLoader } from "./swarm-name.js"; const loadSwarmName = createSwarmNameLoader((url) => fetch(url)); export function useSwarmName(): string | null { const [name, setName] = useState(null); useEffect(() => { let cancelled = false; void loadSwarmName().then((n) => { if (!cancelled && n !== null) setName(n); }); return () => { cancelled = true; }; }, []); return name; }