UNPKG

@nuxtjs/sanity

Version:
45 lines (44 loc) 1.44 kB
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; } } }); };