···
import { Client, CredentialManager } from "@atcute/client";
import { lexiconDoc } from "@atcute/lexicon-doc";
+
import { ResolvedSchema } from "@atcute/lexicon-resolver";
import { ActorIdentifier, is, Nsid, ResourceUri } from "@atcute/lexicons";
import { A, useLocation, useNavigate, useParams } from "@solidjs/router";
import { createResource, createSignal, ErrorBoundary, Show, Suspense } from "solid-js";
···
import { pds } from "../components/navbar.jsx";
import Tooltip from "../components/tooltip.jsx";
import { setNotif } from "../layout.jsx";
+
resolveLexiconAuthority,
+
} from "../utils/api.js";
import { AtUri, uriTemplates } from "../utils/templates.js";
import { lexicons } from "../utils/types/lexicons.js";
import { verifyRecord } from "../utils/verify.js";
···
const [lexiconUri, setLexiconUri] = createSignal<string>();
const [validRecord, setValidRecord] = createSignal<boolean | undefined>(undefined);
const [validSchema, setValidSchema] = createSignal<boolean | undefined>(undefined);
+
const [schema, setSchema] = createSignal<ResolvedSchema>();
+
const [lexiconNotFound, setLexiconNotFound] = createSignal<boolean>();
···
if (is(lexicons[params.collection], record.value)) setValidSchema(true);
else setValidSchema(false);
} else if (params.collection === "com.atproto.lexicon.schema") {
+
setLexiconNotFound(false);
lexiconDoc.parse(record.value, { mode: "passthrough" });
···
const resolveLexicon = async (nsid: Nsid) => {
+
const authority = await resolveLexiconAuthority(nsid);
+
setLexiconUri(`at://${authority}/com.atproto.lexicon.schema/${nsid}`);
+
if (params.collection !== "com.atproto.lexicon.schema") {
+
const schema = await resolveLexiconSchema(authority, nsid);
+
setLexiconNotFound(false);
+
setLexiconNotFound(true);
const deleteRecord = async () => {
···
<div class="dark:shadow-dark-700 dark:bg-dark-300 mb-3 flex w-full justify-between rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 px-2 py-1.5 text-sm shadow-xs dark:border-neutral-700">
<RecordTab tab="record" label="Record" />
+
<RecordTab tab="schema" label="Schema" />
<RecordTab tab="backlinks" label="Backlinks" />
<RecordTab tab="info" label="Info" error />
···
<JSONValue data={record()?.value as any} repo={record()!.uri.split("/")[2]} />
+
<Show when={location.hash === "#schema" || location.hash.startsWith("#schema:")}>
+
<Show when={lexiconNotFound() === true}>
+
<span class="w-full px-2 text-sm">Lexicon schema could not be resolved.</span>
+
<Show when={lexiconNotFound() === undefined}>
+
<span class="w-full px-2 text-sm">Resolving lexicon schema...</span>
+
<Show when={schema() || params.collection === "com.atproto.lexicon.schema"}>
+
<ErrorBoundary fallback={(err) => <div>Error: {err.message}</div>}>
+
<LexiconSchemaView schema={schema()?.rawSchema ?? (record()?.value as any)} />
<Show when={location.hash === "#backlinks"}>
<ErrorBoundary fallback={(err) => <div class="break-words">Error: {err.message}</div>}>