next-drupal
Version:
Helpers for Next.js + Drupal.
60 lines (59 loc) • 1.66 kB
JavaScript
import {
DRAFT_DATA_COOKIE_NAME,
DRAFT_MODE_COOKIE_NAME
} from "./chunk-2RPT7DWB.js";
// src/draft.ts
import { cookies, draftMode } from "next/headers";
import { redirect } from "next/navigation";
async function enableDraftMode(request, drupal) {
const response = await drupal.validateDraftUrl(request.nextUrl.searchParams);
if (!response.ok) {
return response;
}
const searchParams = request.nextUrl.searchParams;
const path = searchParams.get("path");
const cookieStore = await cookies();
const draft = await draftMode();
draft.enable();
const draftModeCookie = cookieStore.get(DRAFT_MODE_COOKIE_NAME);
if (draftModeCookie) {
cookieStore.set({
...draftModeCookie,
sameSite: "none",
secure: true
});
}
const { secret, scope, plugin, ...draftData } = Object.fromEntries(
searchParams.entries()
);
cookieStore.set({
...draftModeCookie,
name: DRAFT_DATA_COOKIE_NAME,
sameSite: "none",
secure: true,
value: JSON.stringify(draftData)
});
redirect(path);
}
async function disableDraftMode() {
const cookieStore = await cookies();
cookieStore.delete(DRAFT_DATA_COOKIE_NAME);
const draft = await draftMode();
draft.disable();
return new Response("Draft mode is disabled");
}
async function getDraftData() {
let data = {};
const cookieStore = await cookies();
const draft = await draftMode();
if (draft.isEnabled && cookieStore.has(DRAFT_DATA_COOKIE_NAME)) {
data = JSON.parse(cookieStore.get(DRAFT_DATA_COOKIE_NAME)?.value || "{}");
}
return data;
}
export {
disableDraftMode,
enableDraftMode,
getDraftData
};
//# sourceMappingURL=draft.js.map