@oberoncms/core
Version:
OberonCMS is a cloud deployable CMS written in typescript based on the Puck visual editor
75 lines (74 loc) • 1.83 kB
JavaScript
import { jsx } from "react/jsx-runtime";
import { redirect } from "next/navigation";
import { OberonClientProvider } from "./components/provider.js";
import { parseClientAction, resolveSlug } from "./lib/utils.js";
async function getContext({
getPageData,
getAllImages,
getAllPages,
getAllUsers,
getConfig
}, action, slug, searchParams) {
switch (action) {
case "login":
return {
action,
slug,
data: {
callbackUrl: typeof searchParams.callbackUrl === "string" ? searchParams.callbackUrl : "",
email: typeof searchParams.email === "string" ? searchParams.email : "",
token: typeof searchParams.token === "string" ? searchParams.token : ""
}
};
case "edit":
case "preview":
return {
action,
slug,
data: await getPageData(slug)
};
case "users":
return {
action,
slug,
data: await getAllUsers()
};
case "images":
return {
action,
slug,
data: await getAllImages()
};
case "site":
return {
action,
slug,
data: await getConfig()
};
case "pages":
return {
action,
slug,
data: await getAllPages()
};
}
}
async function OberonProvider({
children,
adapter,
actions,
path,
searchParams
}) {
const action = parseClientAction(path[0]);
const slug = resolveSlug(path.slice(1));
const loggedIn = await adapter.can("site");
if (!loggedIn && action !== "login") {
redirect(`/cms/login?callbackUrl=/cms/${path.join("/")}`);
}
const context = await getContext(adapter, action, slug, searchParams);
return /* @__PURE__ */ jsx(OberonClientProvider, { serverActions: actions, context, children });
}
export {
OberonProvider
};