SearchPage

tcmts.share.SearchPage · #bg7iglcn · term · runs on the server

is an async component

import { Frame, searchResults, shareNow } from "#codebase/tcmts/share";

export async function SearchPage({ q }: { q: string }) {
  const s = shareNow();
  let results: ReturnType<typeof searchResults> = [];
  let problem = "";
  if (s.signedIn && q)
    try {
      results = searchResults(s, q);
    } catch (e) {
      problem = (e as Error).message;
    }
  return (
    <Frame tab="" title={q ? `Search: ${q}` : "Search"}>
      <div className="narrow">
        <h2 className="title">Search</h2>
        <p className="muted">
          {q
            ? `${results.length} result${results.length === 1 ? "" : "s"} for “${q}”`
            : "Names (the letters in order), words in docs, or a type (:(xs: T[]) => T)."}
        </p>
        {problem && <div className="notice bad">{problem}</div>}
        {results.length > 0 ? (
          <div className="box">
            {results.map((r) => (
              <div className="drow full" key={r.path}>
                <span />
                <a className="mono" href={r.href}>
                  {r.path}
                </a>
                <span className="sig">{r.signature}</span>
                {r.detail && <span className="doc">{r.detail}</span>}
              </div>
            ))}
          </div>
        ) : q ? (
          <div className="empty">Nothing found.</div>
        ) : null}
      </div>
    </Frame>
  );
}

uses

used by