import React from "react"; import { Modal, Stack, Text, ScrollArea, ModalProps, Button } from "@mantine/core"; import { CodeHighlight } from "@mantine/code-highlight"; import Editor from "@monaco-editor/react"; import { VscLock } from "react-icons/vsc"; import { isIframe } from "src/lib/utils/widget"; import useConfig from "src/store/useConfig"; import useFile from "src/store/useFile"; import useGraph from "src/store/useGraph"; import useModal from "src/store/useModal"; import useUser from "src/store/useUser"; const dataToString = (data: any) => { const text = Array.isArray(data) ? Object.fromEntries(data) : data; const replacer = (_: string, v: string) => { if (typeof v === "string") return v.replaceAll('"', ""); return v; }; return JSON.stringify(text, replacer, 2); }; export const NodeModal: React.FC = ({ opened, onClose }) => { const isPremium = useUser(state => state.premium); const editContents = useFile(state => state.editContents); const setVisible = useModal(state => state.setVisible); const darkmodeEnabled = useConfig(state => (state.darkmodeEnabled ? "vs-dark" : "light")); const nodeData = useGraph(state => dataToString(state.selectedNode?.text)); const path = useGraph(state => state.selectedNode?.path || ""); const isParent = useGraph(state => state.selectedNode?.data?.isParent); const [editMode, setEditMode] = React.useState(false); const [value, setValue] = React.useState(nodeData || ""); const onUpdate = () => { if (!value) return setEditMode(false); if (!isPremium) return; editContents(path!, value, () => { setEditMode(false); onModalClose(); }); }; const onModalClose = () => { setEditMode(false); setValue(""); onClose(); }; const onEditClick = () => { if (isPremium) return setEditMode(true); setVisible("premium")(true); }; const isEditVisible = React.useMemo( () => path !== "{Root}" && !isParent && !isIframe(), [isParent, path] ); return ( Content {editMode ? ( setValue(e!)} height={200} language="json" options={{ readOnly: !editMode, minimap: { enabled: false, }, }} /> ) : ( )} {isEditVisible && ( {editMode ? ( ) : ( )} )} Node Path ); };