diff options
| author | Philipp Eichmann <philipp.eichmann@gmail.com> | 2018-12-21 18:45:24 -0500 |
|---|---|---|
| committer | Philipp Eichmann <philipp.eichmann@gmail.com> | 2018-12-21 18:45:24 -0500 |
| commit | 06098b7bdd6a83f6b9cc07d2377f2a19cc0ecaa6 (patch) | |
| tree | d665964243f9949424555175711e27166e96f70e /src/views/freeformcanvas | |
| parent | 9caa9ca4a0b413e2da03eff4856cb324939d77d4 (diff) | |
added code
Diffstat (limited to 'src/views/freeformcanvas')
| -rw-r--r-- | src/views/freeformcanvas/FreeFormCanvas.scss | 15 | ||||
| -rw-r--r-- | src/views/freeformcanvas/FreeFormCanvas.tsx | 54 | ||||
| -rw-r--r-- | src/views/freeformcanvas/NodeContainer.tsx | 30 |
3 files changed, 99 insertions, 0 deletions
diff --git a/src/views/freeformcanvas/FreeFormCanvas.scss b/src/views/freeformcanvas/FreeFormCanvas.scss new file mode 100644 index 000000000..884ef90e6 --- /dev/null +++ b/src/views/freeformcanvas/FreeFormCanvas.scss @@ -0,0 +1,15 @@ +.freeformcanvas-container { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; + + .freeformcanvas { + position: absolute; + top: 0; + left: 0; + } +} + diff --git a/src/views/freeformcanvas/FreeFormCanvas.tsx b/src/views/freeformcanvas/FreeFormCanvas.tsx new file mode 100644 index 000000000..f02f677a3 --- /dev/null +++ b/src/views/freeformcanvas/FreeFormCanvas.tsx @@ -0,0 +1,54 @@ +import { observer } from "mobx-react"; +import { NodeCollectionStore } from "../../stores/NodeCollectionStore"; +import "./FreeFormCanvas.scss"; +import { NodeContainer } from "./NodeContainer"; +import React = require("react"); + +interface IProps { + store: NodeCollectionStore +} + +@observer +export class FreeFormCanvas extends React.Component<IProps> { + + private _isPointerDown: boolean; + + onPointerDown = (e: React.PointerEvent): void => { + e.stopPropagation(); + e.preventDefault(); + this._isPointerDown = true; + document.removeEventListener("pointermove", this.onPointerMove); + document.addEventListener("pointermove", this.onPointerMove); + document.removeEventListener("pointerup", this.onPointerUp); + document.addEventListener("pointerup", this.onPointerUp); + } + + onPointerUp = (e: PointerEvent): void => { + e.stopPropagation(); + e.preventDefault(); + this._isPointerDown = false; + document.removeEventListener("pointermove", this.onPointerMove); + document.removeEventListener("pointerup", this.onPointerUp); + } + + onPointerMove = (e: PointerEvent): void => { + e.stopPropagation(); + e.preventDefault(); + if (!this._isPointerDown) { + return; + } + this.props.store.X += e.movementX; + this.props.store.Y += e.movementY; + } + + render() { + let store = this.props.store; + return ( + <div className="freeformcanvas-container" onPointerDown={this.onPointerDown}> + <div className="freeformcanvas" style={{ transform: store.Transform }}> + <NodeContainer store={store} /> + </div> + </div> + ); + } +}
\ No newline at end of file diff --git a/src/views/freeformcanvas/NodeContainer.tsx b/src/views/freeformcanvas/NodeContainer.tsx new file mode 100644 index 000000000..a2edb38a4 --- /dev/null +++ b/src/views/freeformcanvas/NodeContainer.tsx @@ -0,0 +1,30 @@ +import { observer } from "mobx-react"; +import { NodeCollectionStore } from "../../stores/NodeCollectionStore"; +import { StaticTextNodeStore } from "../../stores/StaticTextNodeStore"; +import { VideoNodeStore } from "../../stores/VideoNodeStore"; +import { TextNodeView } from "../nodes/TextNodeView"; +import { VideoNodeView } from "../nodes/VideoNodeView"; +import "./FreeFormCanvas.scss"; +import React = require("react"); + +interface IProps { + store: NodeCollectionStore +} + +@observer +export class NodeContainer extends React.Component<IProps> { + + render() { + return ( + <div className="node-container"> + {this.props.store.Nodes.map(nodeStore => { + if (nodeStore instanceof StaticTextNodeStore) { + return (<TextNodeView key={nodeStore.Id} store={nodeStore as StaticTextNodeStore} />) + } else if (nodeStore instanceof VideoNodeStore) { + return (<VideoNodeView key={nodeStore.Id} store={nodeStore as VideoNodeStore} />) + } + })} + </div> + ); + } +}
\ No newline at end of file |
