Perplexica/ui/components/Markdown/renderer/linkReference.tsx

22 lines
981 B
TypeScript
Raw Normal View History

2024-07-10 16:17:23 +08:00
import { useStateValue } from "@guanghechen/react-viewmodel";
import type { Definition, LinkReference } from "@yozora/ast";
import { useNodeRendererContext, type INodeRenderer, astClasses } from "../context";
import { LinkRendererInner } from "./inner/LinkRendererInner";
/**
* Render `link-reference`.
*
* @see https://www.npmjs.com/package/@yozora/ast#linkReference
* @see https://www.npmjs.com/package/@yozora/tokenizer-link-reference
*/
2024-07-10 16:34:28 +08:00
export const LinkReferenceRenderer: INodeRenderer<LinkReference> = properties => {
2024-07-10 16:17:23 +08:00
const { viewmodel } = useNodeRendererContext();
2024-07-10 16:32:24 +08:00
const definitionMap: Readonly<Record<string, Definition>> = useStateValue(viewmodel.definitionMap$);
2024-07-10 16:34:28 +08:00
const definition = definitionMap[properties.identifier];
2024-07-10 16:17:23 +08:00
const url: string = definition?.url ?? "";
const title: string | undefined = definition?.title;
2024-07-10 16:34:28 +08:00
return (
<LinkRendererInner url={url} title={title} childNodes={properties.children} className={astClasses.linkReference} />
);
2024-07-10 16:17:23 +08:00
};