mirror of
https://github.com/hanzoai/next.js.git
synced 2026-09-24 17:00:51 +00:00
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
38 lines
999 B
TypeScript
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;
|
|
}
|
|
}
|