Implement selected container

This commit is contained in:
Siklos 2022-08-01 10:50:58 +02:00
parent 6c316e8032
commit 092b156cc0
2 changed files with 34 additions and 27 deletions

View file

@ -14,7 +14,8 @@ interface IAppState {
isSidebarOpen: boolean, isSidebarOpen: boolean,
isSVGSidebarOpen: boolean, isSVGSidebarOpen: boolean,
configuration: Configuration, configuration: Configuration,
MainContainer: Container | null MainContainer: Container | null,
SelectedContainer: Container | null
} }
class App extends React.Component<IAppProps> { class App extends React.Component<IAppProps> {
@ -30,29 +31,33 @@ class App extends React.Component<IAppProps> {
AvailableSymbols: [], AvailableSymbols: [],
MainContainer: {} as AvailableContainer MainContainer: {} as AvailableContainer
}, },
MainContainer: null MainContainer: null,
SelectedContainer: null
}; };
} }
componentDidMount() { componentDidMount() {
fetchConfiguration().then((configuration: Configuration) => { 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 => ({ this.setState(prevState => ({
...prevState, ...prevState,
configuration, configuration,
MainContainer: new Container( MainContainer,
{ SelectedContainer: MainContainer
id: 'main',
x: 0,
y: 0,
width: configuration.MainContainer.Width,
height: configuration.MainContainer.Height,
children: [],
style: {
fillOpacity: 0,
stroke: 'black'
} as React.CSSProperties
}
)
})); }));
}); });
} }
@ -70,6 +75,11 @@ class App extends React.Component<IAppProps> {
} }
public AddContainer(type: string): void { public AddContainer(type: string): void {
if (this.state.SelectedContainer === null ||
this.state.SelectedContainer === undefined) {
return;
}
if (this.state.MainContainer === null || if (this.state.MainContainer === null ||
this.state.MainContainer === undefined) { this.state.MainContainer === undefined) {
return; return;
@ -82,8 +92,9 @@ class App extends React.Component<IAppProps> {
} }
const container = new Container({ const container = new Container({
id: this.state.MainContainer.props.children.length.toString(), parent: this.state.SelectedContainer,
x: 0 + properties?.Width * this.state.MainContainer.props.children.length, id: this.state.SelectedContainer.props.children.length.toString(),
x: 0,
y: 0, y: 0,
width: properties?.Width, width: properties?.Width,
height: this.state.configuration.MainContainer.Height, height: this.state.configuration.MainContainer.Height,
@ -94,15 +105,9 @@ class App extends React.Component<IAppProps> {
} }
}); });
const newMainContainer = new Container({ this.state.SelectedContainer.props.children.push(container);
id: this.state.MainContainer.props.id,
x: this.state.MainContainer.props.x, const newMainContainer = new Container(Object.assign({}, this.state.MainContainer.props));
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.setState({ this.setState({
MainContainer: newMainContainer MainContainer: newMainContainer

View file

@ -1,6 +1,8 @@
import * as React from 'react'; import * as React from 'react';
interface IContainerProps { interface IContainerProps {
// eslint-disable-next-line no-use-before-define
parent: Container | null,
id: string, id: string,
// eslint-disable-next-line no-use-before-define // eslint-disable-next-line no-use-before-define
children: Container[], children: Container[],