@nuxtjs/sanity
Version:
Sanity integration for Nuxt
45 lines (44 loc) • 1.44 kB
JavaScript
import { validateApiPerspective } from "@sanity/client";
import { perspectiveCookieName } from "@sanity/preview-url-secret/constants";
import { computed } from "vue";
import { useCookie } from "#imports";
import { useSanityVisualEditingState } from "./useSanityVisualEditingState.js";
const sanitizePerspective = (_perspective, fallback) => {
const perspective = typeof _perspective === "string" && _perspective.includes(",") ? _perspective.split(",") : _perspective;
try {
validateApiPerspective(perspective);
return perspective === "raw" ? fallback : perspective;
} catch (err) {
console.warn(`Invalid perspective:`, _perspective, perspective, err);
return fallback;
}
};
export const useSanityPerspective = (perspective) => {
const visualEditingState = useSanityVisualEditingState();
const devMode = import.meta.dev;
const cookie = useCookie(perspectiveCookieName, {
default: () => null,
sameSite: devMode ? "lax" : "none",
secure: !devMode,
path: "/"
});
return computed({
get() {
if (perspective) {
return perspective;
}
if (visualEditingState?.enabled) {
return sanitizePerspective(cookie.value, "previewDrafts");
}
return "published";
},
set(perspective2) {
try {
validateApiPerspective(perspective2);
cookie.value = perspective2;
} catch {
cookie.value = null;
}
}
});
};