@oberoncms/core
Version:
OberonCMS is a cloud deployable CMS written in typescript based on the Puck visual editor
106 lines (105 loc) • 2.62 kB
JavaScript
"use client";
import { jsx, jsxs } from "react/jsx-runtime";
import "@measured/puck/dist/index.css";
import { Puck, usePuck } from "@measured/puck";
import { Button } from "@tohuhono/ui/button";
import { useState } from "react";
import { useLocalData } from "../hooks/use-local-data.js";
import { INITIAL_DATA } from "../lib/dtd.js";
import { useOberonActions } from "../hooks/use-oberon.js";
import { Menu } from "./menu.js";
const Header = ({
path,
onPublish
}) => {
const { appState, dispatch } = usePuck();
const [ispublishing, setIspublishing] = useState(false);
const { leftSideBarVisible } = appState.ui;
return /* @__PURE__ */ jsx("div", { style: { gridArea: "header" }, children: /* @__PURE__ */ jsxs(Menu, { title: appState.data.root.title, path, children: [
/* @__PURE__ */ jsx(
Button,
{
onClick: () => dispatch({
type: "setUi",
ui: {
leftSideBarVisible: !leftSideBarVisible
}
}),
variant: "outline",
size: "sm",
children: leftSideBarVisible ? "<" : ">"
}
),
/* @__PURE__ */ jsx(
Button,
{
onClick: () => {
var _a;
return (_a = window.open(`/cms/preview${path}`, "_blank")) == null ? void 0 : _a.focus();
},
variant: "outline",
size: "sm",
children: "Preview"
}
),
/* @__PURE__ */ jsx(
Button,
{
onClick: () => {
var _a;
return (_a = window.open(path, "_blank")) == null ? void 0 : _a.focus();
},
variant: "outline",
size: "sm",
children: "View"
}
),
/* @__PURE__ */ jsx(
Button,
{
disabled: ispublishing,
onClick: async () => {
setIspublishing(true);
await onPublish(appState.data);
setIspublishing(false);
},
size: "sm",
children: "Publish"
}
)
] }) });
};
function Editor({
path,
data,
config
}) {
const { publishPageData } = useOberonActions();
const [localData, setLocalData] = useLocalData(path, config);
const onPublish = async (data2) => {
await publishPageData({
key: path,
data: data2
});
};
return /* @__PURE__ */ jsx(
Puck,
{
config,
data: data || localData || INITIAL_DATA,
onChange: (data2) => {
setLocalData(data2);
},
onPublish: () => {
},
plugins: [],
headerPath: path,
overrides: {
header: () => /* @__PURE__ */ jsx(Header, { path, onPublish })
}
}
);
}
export {
Editor
};