All files / components/ContentfulRichText/nodes AssetHyperlink.svelte

100% Statements 31/31
100% Branches 0/0
100% Functions 0/0
100% Lines 31/31

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 321x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
<script lang="ts">
  import Node from "./Node.svelte";
  import type { Node as NodeType, AssetHyperlink } from "@contentful/rich-text-types";
  import { getContext } from "svelte";
  import Link from "$lib/components/Link";
  import { linksKey, type LinksContext } from "../context";
  export let node: NodeType;
  import { isAssetHyperlink } from "../predicates";
 
  let assetHyperlink: AssetHyperlink;
  if (!isAssetHyperlink(node)) {
    throw new Error("node is not an asset hyperlink");
  }
  assetHyperlink = node;
 
  const linksContext = getContext<LinksContext | undefined>(linksKey);
  if (!linksContext) throw new Error("no context was provided for asset hyperlink");
 
  const { id: assetID } = assetHyperlink.data.target.sys;
  const link = linksContext.linksAssetsMaps.hyperlink.get(assetID);
  if (!link) throw new Error(`the asset ${assetID} was not found in the context`);
 
  const { url } = link;
  if (!url) {
    throw new Error(`the asset ${assetID} was found in the context but did not have a source URL`);
  }
</script>
 
<Link href={url}
  >{#each assetHyperlink.content as subNode}<Node node={subNode} />{/each}</Link
>