import { type ExternalLinkContent, FilledExternalLinkContent, LinkContent } from "@prismicio/types-internal/lib/content" import type { AnyLinkDef, LinkRenderer, LinkRendererOptions, WebLinkDef } from "../../../models" const ExternalLinkRenderer: LinkRenderer< WebLinkDef, LinkContent & { value: ExternalLinkContent }, undefined, LinkRendererOptions > = { renderV1( link: LinkContent & { value: ExternalLinkContent }, _fetch: undefined, options?: LinkRendererOptions, ): unknown { return { type: "Link.web", value: { ...(!options?.omitKey && { key: link.key }), ...(FilledExternalLinkContent.is(link.value) && { url: link.value.url, ...(typeof link.value.target === "string" && { target: link.value.target }), }), ...(link.value.text && { text: link.value.text }), ...(link.value.variant && { variant: link.value.variant }), }, } }, renderV2( def: WebLinkDef | AnyLinkDef, link: LinkContent & { value: ExternalLinkContent }, _fetch: undefined, options?: LinkRendererOptions, ): unknown { const defVariants = def.variants || [] const linkVariant = link.value.variant && defVariants.includes(link.value.variant) ? link.value.variant : defVariants[0] return { link_type: "Web", ...(!options?.omitKey && { key: link.key }), ...(FilledExternalLinkContent.is(link.value) && { url: link.value.url, ...(typeof link.value.target === "string" && { target: link.value.target }), }), ...(def.allowText && link.value.text && { text: link.value.text }), ...(linkVariant && { variant: linkVariant }), } }, renderMocks( def: WebLinkDef | AnyLinkDef, link: LinkContent & { value: ExternalLinkContent }, options?: LinkRendererOptions, ): unknown { return this.renderV2(def, link, undefined, options) }, } export default ExternalLinkRenderer