diff --git a/src/App.tsx b/src/App.tsx index 00b0f4a..12cf62d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,6 +4,8 @@ import Sidebar from './Components/Sidebar/Sidebar'; import { SVGSidebar } from './Components/SVGSidebar/SVGSidebar'; import { AvailableContainer } from './Interfaces/AvailableContainer'; import { Configuration } from './Interfaces/Configuration'; +import { Container } from './SVG/Elements/Container'; +import { MainContainer } from './SVG/Elements/MainContainer'; import { SVG } from './SVG/SVG'; interface IAppProps { @@ -12,7 +14,8 @@ interface IAppProps { interface IAppState { isSidebarOpen: boolean, isSVGSidebarOpen: boolean, - configuration: Configuration + configuration: Configuration, + MainContainer: MainContainer | null } class App extends React.Component { @@ -27,7 +30,8 @@ class App extends React.Component { AvailableContainers: [], AvailableSymbols: [], MainContainer: {} as AvailableContainer - } + }, + MainContainer: null }; } @@ -35,33 +39,70 @@ class App extends React.Component { fetchConfiguration().then((configuration: Configuration) => { this.setState(prevState => ({ ...prevState, - configuration + configuration, + MainContainer: new MainContainer( + { + width: configuration.MainContainer.Width, + height: configuration.MainContainer.Height, + children: [] + } + ) })); }); } public ToggleSidebar() { - this.setState(prevState => ({ - ...prevState, + this.setState({ isSidebarOpen: !this.state.isSidebarOpen - } as IAppState)); + } as IAppState); } public ToggleSVGSidebar() { - this.setState(prevState => ({ - ...prevState, + this.setState({ isSVGSidebarOpen: !this.state.isSVGSidebarOpen - } as IAppState)); + } as IAppState); + } + + public AddContainer(type: string): void { + if (this.state.MainContainer === null || + this.state.MainContainer === undefined) { + return; + } + + const container = new Container({ + x: 0, + y: 0, + width: 300, + height: this.state.configuration.MainContainer.Height, + children: [] + }); + + const newMainContainer = new MainContainer({ + width: this.state.MainContainer.props.width, + height: this.state.MainContainer.props.height, + children: this.state.MainContainer.props.children.concat([container]) + }); + + this.setState({ + MainContainer: newMainContainer + }); } render() { return (
- this.ToggleSidebar()} /> + this.ToggleSidebar()} + buttonOnClick={(type: string) => this.AddContainer(type)} + /> this.ToggleSVGSidebar()}/> - + + { this.state.MainContainer } +
); } diff --git a/src/Components/Sidebar/Sidebar.tsx b/src/Components/Sidebar/Sidebar.tsx index 8d806a5..f8da2b6 100644 --- a/src/Components/Sidebar/Sidebar.tsx +++ b/src/Components/Sidebar/Sidebar.tsx @@ -5,12 +5,13 @@ interface ISidebarProps { componentOptions: AvailableContainer[] isOpen: boolean; onClick: () => void; + buttonOnClick: (type: string) => void; } export default class Sidebar extends React.Component { public render() { const listElements = this.props.componentOptions.map(componentOption => - ); diff --git a/src/SVG/Elements/Container.tsx b/src/SVG/Elements/Container.tsx index 71dfa35..9c4dc9a 100644 --- a/src/SVG/Elements/Container.tsx +++ b/src/SVG/Elements/Container.tsx @@ -7,16 +7,22 @@ interface IContainerProps { y: number, width: number, height: number, - style: React.CSSProperties, + style?: React.CSSProperties, } export class Container extends React.Component { - public render(): React.ReactNode { - const containersElements = this.props.children.map(child => child.render()); + public static ContainerCount = 0; + componentWillUnMount() { + } + + public render(): React.ReactNode { + Container.ContainerCount++; + const containersElements = this.props.children.map(child => child.render()); return ( { ], value: { viewerWidth: window.innerWidth, - viewerHeight: window.innerHeight, - SVGHeight: this.props.MainContainer.Height, - SVGWidth: this.props.MainContainer.Width + viewerHeight: window.innerHeight } as Value, tool: TOOL_PAN }; @@ -65,7 +61,12 @@ export class SVG extends React.Component { xmlns }; - const children: Container[] = []; + let children: React.ReactNode | React.ReactNode[] = []; + if (Array.isArray(this.props.children)) { + children = this.props.children.map(child => child.render()); + } else if (this.props.children !== null) { + children = this.props.children.render(); + } return ( { tool={this.state.tool} onChangeTool={tool => this.setState({ tool })} > - - { children } - + { children } );