import * as React from 'react'; import _keys from 'lodash/keys'; import { TrayWidget } from './TrayWidget'; import { Application } from '../Application'; import { TrayItemWidget } from './TrayItemWidget'; import { DefaultNodeModel } from '@projectstorm/react-diagrams'; import { CanvasWidget } from '@projectstorm/react-canvas-core'; import { DemoCanvasWidget } from '../../helpers/DemoCanvasWidget'; import styled from '@emotion/styled'; export interface BodyWidgetProps { app: Application; } namespace S { export const Body = styled.div` flex-grow: 1; display: flex; flex-direction: column; min-height: 100%; `; export const Header = styled.div` display: flex; background: rgb(30, 30, 30); flex-grow: 0; flex-shrink: 0; color: white; font-family: Helvetica, Arial, sans-serif; padding: 10px; align-items: center; `; export const Content = styled.div` display: flex; flex-grow: 1; `; export const Layer = styled.div` position: relative; flex-grow: 1; `; } export class BodyWidget extends React.Component { render() { return (
Storm React Diagrams - DnD demo
{ var data = JSON.parse(event.dataTransfer.getData('storm-diagram-node')); var nodesCount = _keys(this.props.app.getDiagramEngine().getModel().getNodes()).length; var node: DefaultNodeModel = null; if (data.type === 'in') { node = new DefaultNodeModel('Node ' + (nodesCount + 1), 'rgb(192,255,0)'); node.addInPort('In'); } else { node = new DefaultNodeModel('Node ' + (nodesCount + 1), 'rgb(0,192,255)'); node.addOutPort('Out'); } var point = this.props.app.getDiagramEngine().getRelativeMousePoint(event); node.setPosition(point); this.props.app.getDiagramEngine().getModel().addNode(node); this.forceUpdate(); }} onDragOver={(event) => { event.preventDefault(); }} >
); } }