CodebasesPage
is an async component
Every codebase its author lists (tcm announce), newest first: how many, and on how many servers.
import { codebaseHost, everyone, registryShare, shownCodebases } from "#codebase/tcmts/registry"; import { CodebaseRow, RegistryFrame } from "#codebase/tcmts/registry/pages"; export async function CodebasesPage() { registryShare(); const all = await shownCodebases(); const who = await everyone(); const servers = new Set(all.map(codebaseHost)).size; return ( <RegistryFrame tab="codebases" title="Codebases"> <div className="narrow"> <div className="pagehead"> <h2 className="title">Codebases</h2> <span className="muted"> {all.length} on {servers} server{servers === 1 ? "" : "s"} </span> </div> {all.length ? ( <div className="box"> {all.map((c) => ( <CodebaseRow key={c.uri} c={c} who={who.get(c.did) ?? { did: c.did }} /> ))} </div> ) : ( <div className="empty"> No codebases yet. <code>tcm announce</code> lists one. </div> )} </div> </RegistryFrame> ); }
uses
- tcmts.registry.codebaseHost
- tcmts.registry.everyone
- tcmts.registry.pages.CodebaseRow
- tcmts.registry.pages.RegistryFrame
- tcmts.registry.registryShare
- tcmts.registry.shownCodebases