| import React from "react"; | |
| import { Menu, Text } from "@mantine/core"; | |
| import styled from "styled-components"; | |
| import { firaMono } from "src/constants/fonts"; | |
| import { Graph } from "src/containers/Views/GraphView"; | |
| import { TreeView } from "src/containers/Views/TreeView"; | |
| import { ViewMode } from "src/enums/viewMode.enum"; | |
| import useConfig from "src/store/useConfig"; | |
| const StyledLiveEditor = styled.div` | |
| position: relative; | |
| height: 100%; | |
| background: ${({ theme }) => theme.GRID_BG_COLOR}; | |
| overflow: auto; | |
| cursor: url("/assets/cursor.svg"), auto; | |
| & > ul { | |
| margin-top: 0 !important; | |
| padding: 12px !important; | |
| font-family: ${firaMono.style.fontFamily}; | |
| font-size: 14px; | |
| font-weight: 500; | |
| } | |
| `; | |
| const View = () => { | |
| const viewMode = useConfig(state => state.viewMode); | |
| if (viewMode === ViewMode.Graph) return <Graph />; | |
| if (viewMode === ViewMode.Tree) return <TreeView />; | |
| return null; | |
| }; | |
| const LiveEditor: React.FC = () => { | |
| const [contextOpened, setContextOpened] = React.useState(false); | |
| const [contextPosition, setContextPosition] = React.useState({ | |
| x: 0, | |
| y: 0, | |
| }); | |
| return ( | |
| <StyledLiveEditor | |
| onContextMenuCapture={e => { | |
| e.preventDefault(); | |
| setContextOpened(true); | |
| setContextPosition({ x: e.pageX, y: e.pageY }); | |
| }} | |
| onClick={() => setContextOpened(false)} | |
| > | |
| <div | |
| style={{ | |
| position: "fixed", | |
| top: contextPosition.y, | |
| left: contextPosition.x, | |
| zIndex: 100, | |
| }} | |
| > | |
| <Menu opened={false} shadow="sm"> | |
| <Menu.Dropdown> | |
| <Menu.Item> | |
| <Text size="xs">Download as Image</Text> | |
| </Menu.Item> | |
| <Menu.Item> | |
| <Text size="xs">Zoom to Fit</Text> | |
| </Menu.Item> | |
| <Menu.Item> | |
| <Text size="xs">Rotate</Text> | |
| </Menu.Item> | |
| </Menu.Dropdown> | |
| </Menu> | |
| </div> | |
| <View /> | |
| </StyledLiveEditor> | |
| ); | |
| }; | |
| export default LiveEditor; | |