From 092b156cc07061cc7da03c48978fd1d49be24d47 Mon Sep 17 00:00:00 2001 From: Siklos Date: Mon, 1 Aug 2022 10:50:58 +0200 Subject: [PATCH] Implement selected container --- src/App.tsx | 59 ++++++++++++----------- src/Components/SVG/Elements/Container.tsx | 2 + 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 6245066..fc3b721 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -14,7 +14,8 @@ interface IAppState { isSidebarOpen: boolean, isSVGSidebarOpen: boolean, configuration: Configuration, - MainContainer: Container | null + MainContainer: Container | null, + SelectedContainer: Container | null } class App extends React.Component { @@ -30,29 +31,33 @@ class App extends React.Component { AvailableSymbols: [], MainContainer: {} as AvailableContainer }, - MainContainer: null + MainContainer: null, + SelectedContainer: null }; } componentDidMount() { fetchConfiguration().then((configuration: Configuration) => { + const MainContainer = new Container( + { + parent: null, + id: 'main', + x: 0, + y: 0, + width: configuration.MainContainer.Width, + height: configuration.MainContainer.Height, + children: [], + style: { + fillOpacity: 0, + stroke: 'black' + } as React.CSSProperties + } + ); this.setState(prevState => ({ ...prevState, configuration, - MainContainer: new Container( - { - id: 'main', - x: 0, - y: 0, - width: configuration.MainContainer.Width, - height: configuration.MainContainer.Height, - children: [], - style: { - fillOpacity: 0, - stroke: 'black' - } as React.CSSProperties - } - ) + MainContainer, + SelectedContainer: MainContainer })); }); } @@ -70,6 +75,11 @@ class App extends React.Component { } public AddContainer(type: string): void { + if (this.state.SelectedContainer === null || + this.state.SelectedContainer === undefined) { + return; + } + if (this.state.MainContainer === null || this.state.MainContainer === undefined) { return; @@ -82,8 +92,9 @@ class App extends React.Component { } const container = new Container({ - id: this.state.MainContainer.props.children.length.toString(), - x: 0 + properties?.Width * this.state.MainContainer.props.children.length, + parent: this.state.SelectedContainer, + id: this.state.SelectedContainer.props.children.length.toString(), + x: 0, y: 0, width: properties?.Width, height: this.state.configuration.MainContainer.Height, @@ -94,15 +105,9 @@ class App extends React.Component { } }); - const newMainContainer = new Container({ - id: this.state.MainContainer.props.id, - x: this.state.MainContainer.props.x, - y: this.state.MainContainer.props.y, - width: this.state.MainContainer.props.width, - height: this.state.MainContainer.props.height, - style: this.state.MainContainer.props.style, - children: this.state.MainContainer.props.children.concat([container]) - }); + this.state.SelectedContainer.props.children.push(container); + + const newMainContainer = new Container(Object.assign({}, this.state.MainContainer.props)); this.setState({ MainContainer: newMainContainer diff --git a/src/Components/SVG/Elements/Container.tsx b/src/Components/SVG/Elements/Container.tsx index 86f69cd..b9d33a3 100644 --- a/src/Components/SVG/Elements/Container.tsx +++ b/src/Components/SVG/Elements/Container.tsx @@ -1,6 +1,8 @@ import * as React from 'react'; interface IContainerProps { + // eslint-disable-next-line no-use-before-define + parent: Container | null, id: string, // eslint-disable-next-line no-use-before-define children: Container[],