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