UNPKG

@oberoncms/core

Version:

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

55 lines (54 loc) 1.71 kB
"use client"; import { jsx, jsxs } from "react/jsx-runtime"; import { createContext, useMemo } from "react"; import { useToast, Toaster } from "@tohuhono/ui/toast"; const ClientContext = createContext(null); const ActionsContext = createContext(null); const OberonClientProvider = ({ children, serverActions, context }) => { const { toast } = useToast(); const actions = useMemo(() => { const unwrap = ([key, action]) => [ key, async (...props) => { var _a; const response = await action(...props); if (response == null ? void 0 : response.message) { toast({ variant: response.status === "error" ? "destructive" : "default", title: response.message }); } if ((response == null ? void 0 : response.status) === "success") { if ((_a = response.result) == null ? void 0 : _a.message) { toast({ title: response.result.message }); } return response.result; } if ((response == null ? void 0 : response.status) === "error") { throw new Error( (response == null ? void 0 : response.message) || `${key}: An unknown error has occured` ); } return response; } ]; return Object.fromEntries( Object.entries(serverActions).map(unwrap) ); }, [serverActions, toast]); return /* @__PURE__ */ jsx(ActionsContext.Provider, { value: actions, children: /* @__PURE__ */ jsxs(ClientContext.Provider, { value: context, children: [ children, /* @__PURE__ */ jsx(Toaster, {}) ] }) }); }; export { ActionsContext, ClientContext, OberonClientProvider };