Files
neuf-www/web/src/components/blocks/FeaturedBlock.tsx
T

74 lines
1.7 KiB
TypeScript

import { graphql, unmaskFragment } from "@/gql";
import { type FeaturedBlockFragment } from "@/gql/graphql";
import Link from "next/link";
import { Image } from "@/components/general/Image";
import { ImageFragmentDefinition } from "@/lib/common";
import styles from "./featuredBlock.module.scss";
const FeaturedBlockFragmentDefinition = graphql(`
fragment FeaturedBlock on FeaturedBlock {
title
featuredBlockText: text
linkText
imagePosition
backgroundColor
featuredPage {
contentType
pageType
url
... on EventPage {
featuredImage {
...Image
}
}
... on NewsPage {
featuredImage {
...Image
}
}
}
featuredImageOverride {
...Image
}
}
`);
export const FeaturedBlock = ({
block,
}: {
block: FeaturedBlockFragment;
}) => {
const image = unmaskFragment(
ImageFragmentDefinition,
block.featuredImageOverride
);
// TODO: fetch image from target page
return (
<div
className={styles.featuredBlock}
data-background-color={block.backgroundColor ?? ""}
>
<div className={styles.text}>
<h2>{block.title}</h2>
<div dangerouslySetInnerHTML={{ __html: block.featuredBlockText }} />
<Link href={block.featuredPage.url ?? "#"}>
{block.linkText} &rarr;
</Link>
</div>
{image && (
<div className={styles.image}>
<Image
src={image.url}
alt={image.alt ?? ""}
width={image.width}
height={image.height}
sizes="(max-width: 800px) 100vw, 50vw"
/>
</div>
)}
{!image && <div className={styles.placeholderImage} />}
</div>
);
};