UNPKG

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