UNPKG

@oberoncms/core

Version:

OberonCMS is a cloud deployable CMS written in typescript based on the Puck visual editor

77 lines (76 loc) 3 kB
"use client"; import { jsx, jsxs } from "react/jsx-runtime"; import { createContext, useMemo } from "react"; import { Toaster, toast } from "@tohuhono/ui/toast"; const ClientContext = createContext(null); const ActionsContext = createContext(null); function hasMessage(value) { return typeof value === "object" && value !== null && "message" in value && typeof value.message === "string"; } function unwrapServerAction(key, action) { return async (...props) => { const response = await action(...props); if (response?.message) { toast({ variant: response.status === "error" ? "destructive" : "default", title: response.message }); } if (response?.status === "success") { if (hasMessage(response.result)) { toast({ title: response.result.message }); } return response.result; } if (response?.status === "error") { throw new Error( response.message || `${String(key)}: An unknown error has occured` ); } throw new Error(`${String(key)}: Invalid action response`); }; } const OberonClientProvider = ({ children, serverActions, context }) => { const actions = useMemo(() => { const unwrappedActions = { addPage: unwrapServerAction("addPage", serverActions.addPage), addImage: unwrapServerAction("addImage", serverActions.addImage), addUser: unwrapServerAction("addUser", serverActions.addUser), deletePage: unwrapServerAction("deletePage", serverActions.deletePage), deleteImage: unwrapServerAction("deleteImage", serverActions.deleteImage), deleteUser: unwrapServerAction("deleteUser", serverActions.deleteUser), can: unwrapServerAction("can", serverActions.can), changeRole: unwrapServerAction("changeRole", serverActions.changeRole), getAllImages: unwrapServerAction( "getAllImages", serverActions.getAllImages ), getAllPages: unwrapServerAction("getAllPages", serverActions.getAllPages), getAllPaths: unwrapServerAction("getAllPaths", serverActions.getAllPaths), getAllUsers: unwrapServerAction("getAllUsers", serverActions.getAllUsers), getConfig: unwrapServerAction("getConfig", serverActions.getConfig), getPageData: unwrapServerAction("getPageData", serverActions.getPageData), migrateData: unwrapServerAction("migrateData", serverActions.migrateData), publishPageData: unwrapServerAction( "publishPageData", serverActions.publishPageData ), signIn: unwrapServerAction("signIn", serverActions.signIn), signOut: unwrapServerAction("signOut", serverActions.signOut) }; return unwrappedActions; }, [serverActions]); return /* @__PURE__ */ jsx(ActionsContext.Provider, { value: actions, children: /* @__PURE__ */ jsxs(ClientContext.Provider, { value: context, children: [ children, /* @__PURE__ */ jsx(Toaster, {}) ] }) }); }; export { ActionsContext, ClientContext, OberonClientProvider };