28 lines
1,003 B
TypeScript
28 lines
1,003 B
TypeScript
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
|
|
*/
|
|
export const LinkReferenceRenderer: INodeRenderer<LinkReference> = props => {
|
|
const { viewmodel } = useNodeRendererContext();
|
|
const definitionMap: Readonly<Record<string, Definition>> = useStateValue(
|
|
viewmodel.definitionMap$,
|
|
);
|
|
const definition = definitionMap[props.identifier];
|
|
const url: string = definition?.url ?? "";
|
|
const title: string | undefined = definition?.title;
|
|
return (
|
|
<LinkRendererInner
|
|
url={url}
|
|
title={title}
|
|
childNodes={props.children}
|
|
className={astClasses.linkReference}
|
|
/>
|
|
);
|
|
};
|