CodebasesPage

tcmts.registry.pages.CodebasesPage · #m3fac7ch · term · runs on the server

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

used by