49 lines
1.1 KiB
TypeScript
49 lines
1.1 KiB
TypeScript
import cn from 'classnames'
|
|
import { urlForImage } from 'lib/sanity.image'
|
|
import Image from 'next/image'
|
|
import Link from 'next/link'
|
|
|
|
interface CoverImageProps {
|
|
title: string
|
|
slug?: string
|
|
image: any
|
|
priority?: boolean
|
|
}
|
|
|
|
export default function CoverImage(props: CoverImageProps) {
|
|
const { title, slug, image: source, priority } = props
|
|
|
|
const image = source?.asset?._ref ? (
|
|
<div
|
|
className={cn('shadow-small', {
|
|
'hover:shadow-medium transition-shadow duration-200': slug,
|
|
})}
|
|
>
|
|
<Image
|
|
className="h-auto w-full"
|
|
width={2000}
|
|
height={1000}
|
|
alt={`${title}`}
|
|
src={urlForImage(source).height(1000).width(2000).url()}
|
|
sizes="100vw"
|
|
priority={priority}
|
|
// placeholder="blur"
|
|
/>
|
|
</div>
|
|
) : (
|
|
<div style={{ paddingTop: '50%', backgroundColor: '#ddd' }} />
|
|
)
|
|
|
|
return (
|
|
<div className="sm:mx-0">
|
|
{slug ? (
|
|
<Link href={`/posts/${slug}`} aria-label={title}>
|
|
{image}
|
|
</Link>
|
|
) : (
|
|
image
|
|
)}
|
|
</div>
|
|
)
|
|
}
|