UNPKG

@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
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 };