diff --git a/src/Components/AddToCanvasInput/AddToCanvasInput.tsx b/src/Components/AddToCanvasInput/AddToCanvasInput.tsx index 6573230..cbf8d7a 100644 --- a/src/Components/AddToCanvasInput/AddToCanvasInput.tsx +++ b/src/Components/AddToCanvasInput/AddToCanvasInput.tsx @@ -1,14 +1,16 @@ import * as React from 'react'; import * as uuid from 'uuid/v4'; import './AddToCanvasInput.css'; -import { CanvasTextNode } from '../../Helpers'; +import { CanvasTextNode, CanvasImageNode } from '../../Helpers'; interface AddToCanvasInputProps { addTextNode(nodeId: string, textNode: CanvasTextNode): void; + addImageNode(nodeId: string, imgNode: CanvasImageNode): void; } interface AddToCanvasInputState { textInputValue: string; + imageURLs: string[]; } export class AddToCanvasInput extends React.Component { @@ -16,11 +18,32 @@ export class AddToCanvasInput extends React.Component { + return response.json(); + }) + .then((responseJSON: string[]) => { + this.setState({ + imageURLs: responseJSON + }); + }) + // tslint:disable-next-line:no-console + .catch(error => console.error('Error loading image info:', error)); + } updateInputText(ev: React.ChangeEvent) { @@ -44,6 +67,16 @@ export class AddToCanvasInput extends React.Component) { + const imageURL = ev.currentTarget.src; + const nodeId = uuid(); + + this.props.addImageNode(nodeId, { + url: imageURL, + position: { x: 0, y: 0 } + }); + } + render() { return (
@@ -64,8 +97,19 @@ export class AddToCanvasInput extends React.Component

Images

    - {/* List of images here -
  • */} + { + this.state.imageURLs.map((imgURL) => { + return ( +
  • + +
  • + ); + }) + }
diff --git a/src/Components/CanvasArea/CanvasArea.tsx b/src/Components/CanvasArea/CanvasArea.tsx index c5459e1..a201069 100644 --- a/src/Components/CanvasArea/CanvasArea.tsx +++ b/src/Components/CanvasArea/CanvasArea.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import * as uuid from 'uuid/v4'; import './CanvasArea.css'; -import { CanvasTextNode } from '../../Helpers'; +import { CanvasTextNode, CanvasImageNode } from '../../Helpers'; import { DragContainer } from '../DragContainer'; import { DraggableNode } from '../DraggableNode'; @@ -10,6 +10,9 @@ interface CanvasAreaProps { text: { [nodeId: string]: CanvasTextNode; } + image: { + [nodeId: string]: CanvasImageNode; + }; }; } interface CanvasAreaState { @@ -24,7 +27,7 @@ export class CanvasArea extends React.Component { const tmpTextNode = this.props.nodes.text[nodeId]; return ( @@ -35,6 +38,26 @@ export class CanvasArea extends React.Component { + const tmpImageNode = this.props.nodes.image[nodeId]; + return ( + + + + ); + }); + } + + renderDraggableNodes() { + return ( + + {this.renderTextNodes()} + {this.renderImageNodes()} + + ); + } + render() { return (
@@ -46,19 +69,6 @@ export class CanvasArea extends React.Component
- // - //
- // - // logo - // - // - //

Welcome to React

- //
- //
- //
- //

- // To get started, edit src/App.tsx and save to reload. - //

); } } \ No newline at end of file diff --git a/src/Components/CreateEditorApp/CreateEditorApp.tsx b/src/Components/CreateEditorApp/CreateEditorApp.tsx index 23c0520..521b400 100644 --- a/src/Components/CreateEditorApp/CreateEditorApp.tsx +++ b/src/Components/CreateEditorApp/CreateEditorApp.tsx @@ -2,12 +2,15 @@ import * as React from 'react'; import './CreateEditorApp.css'; import { Sidebar } from '../Sidebar'; import { CanvasArea } from '../CanvasArea'; -import { deppCloneNaive, CanvasTextNode } from '../../Helpers'; +import { deppCloneNaive, CanvasTextNode, CanvasImageNode } from '../../Helpers'; interface CreateEditorAppState { text: { [nodeId: string]: CanvasTextNode; }; + image: { + [nodeId: string]: CanvasImageNode; + }; } export class CreateEditorApp extends React.Component<{}, CreateEditorAppState> { @@ -15,10 +18,12 @@ export class CreateEditorApp extends React.Component<{}, CreateEditorAppState> { super(props); this.state = { - text: {} + text: {}, + image: {} }; this.addOrUpdateTextNode = this.addOrUpdateTextNode.bind(this); + this.addOrUpdateImageNode = this.addOrUpdateImageNode.bind(this); } addOrUpdateTextNode(nodeId: string, textNode: CanvasTextNode): void { @@ -30,11 +35,20 @@ export class CreateEditorApp extends React.Component<{}, CreateEditorAppState> { }); } + addOrUpdateImageNode(nodeId: string, imageNode: CanvasImageNode): void { + this.setState((prevState) => { + const newState = deppCloneNaive(prevState as CreateEditorAppState); + newState.image[nodeId] = imageNode; + + return newState; + }); + } + render() { return (
- - + +
); } diff --git a/src/Components/DraggableNode/DraggableNode.css b/src/Components/DraggableNode/DraggableNode.css index 28d8d02..2aeb07a 100644 --- a/src/Components/DraggableNode/DraggableNode.css +++ b/src/Components/DraggableNode/DraggableNode.css @@ -1,6 +1,7 @@ .draggable-node { cursor: move; user-select: none; + position: absolute; left: 0; top: 0; diff --git a/src/Components/Sidebar/Sidebar.tsx b/src/Components/Sidebar/Sidebar.tsx index e47495a..9c317ce 100644 --- a/src/Components/Sidebar/Sidebar.tsx +++ b/src/Components/Sidebar/Sidebar.tsx @@ -2,10 +2,11 @@ import * as React from 'react'; import './Sidebar.css'; import { UploadResourcesInput } from '../UploadResourcesInput'; import { AddToCanvasInput } from '../AddToCanvasInput'; -import { CanvasTextNode } from '../../Helpers'; +import { CanvasTextNode, CanvasImageNode } from '../../Helpers'; interface SidebarProps { addTextNode(nodeId: string, textNode: CanvasTextNode): void; + addImageNode(nodeId: string, imgNode: CanvasImageNode): void; } interface SidebarState { @@ -20,7 +21,7 @@ export class Sidebar extends React.Component { return (
- +
); diff --git a/src/Helpers/index.ts b/src/Helpers/index.ts index 2a2adcb..b8546de 100644 --- a/src/Helpers/index.ts +++ b/src/Helpers/index.ts @@ -1,2 +1,2 @@ export { DragContextProvider, DragStartFn, DragSharedInfo } from './DragContextProvider'; -export { XYPair, deppCloneNaive, CanvasTextNode } from './utils'; \ No newline at end of file +export { XYPair, deppCloneNaive, CanvasTextNode, CanvasImageNode } from './utils'; \ No newline at end of file diff --git a/src/Helpers/utils.ts b/src/Helpers/utils.ts index d372663..232e397 100644 --- a/src/Helpers/utils.ts +++ b/src/Helpers/utils.ts @@ -10,4 +10,9 @@ export function deppCloneNaive(originalObject: T): T { export interface CanvasTextNode { value: string; position: XYPair; - } \ No newline at end of file +} + +export interface CanvasImageNode { + url: string; + position: XYPair; +} \ No newline at end of file