Files
Cody OlsenandGitHub 41019c2314 Update Sanity example for App Router (#63045)
This PR updates the `cms-sanity` example to use:
- App Router
- TypeScript
- Sanity Studio v3 instead of v2
- Embeds the Studio inside the next app on the `/studio` route.
- ISR / Data Cache (revalidations through `revalidatePath` while in Live
Visual Editing, time-based to match the Sanity API CDN in production).
- Support Vercel Visual Editing out of the box.
- The new `next-sanity/image` component.
- Vercel Speed Insights.
- The Sanity Presentation Tool for live content previews.
- Sanity Portable Text setup to fully support `@tailwindcss/typography`.
- [AI Assist](https://www.sanity.io/docs/ai-assist)
  - Auto fill in `alt` text on images.
  - Preset prompts for content creation
2024-03-10 19:49:18 -07:00

38 lines
999 B
TypeScript

import createImageUrlBuilder from "@sanity/image-url";
import { dataset, projectId } from "@/sanity/lib/api";
const imageBuilder = createImageUrlBuilder({
projectId: projectId || "",
dataset: dataset || "",
});
export const urlForImage = (source: any) => {
// Ensure that source image contains a valid reference
if (!source?.asset?._ref) {
return undefined;
}
return imageBuilder?.image(source).auto("format").fit("max");
};
export function resolveOpenGraphImage(image: any, width = 1200, height = 627) {
if (!image) return;
const url = urlForImage(image)?.width(1200).height(627).fit("crop").url();
if (!url) return;
return { url, alt: image?.alt as string, width, height };
}
export function resolveHref(
documentType?: string,
slug?: string,
): string | undefined {
switch (documentType) {
case "post":
return slug ? `/posts/${slug}` : undefined;
default:
console.warn("Invalid document type:", documentType);
return undefined;
}
}