diff --git a/src/App.tsx b/src/App.tsx index e6ea857..58e73c5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -40,6 +40,22 @@ export class App extends React.Component { }; } + componentDidMount() { + const queryString = window.location.search; + const urlParams = new URLSearchParams(queryString); + const state = urlParams.get('state'); + + if (state === null) { + return; + } + + fetch(state) + .then((response) => response.json()) + .then((data: IEditorState) => { + this.LoadState(data); + }); + } + public NewEditor() { // Fetch the configuration from the API fetchConfiguration().then((configuration: Configuration) => { @@ -86,18 +102,22 @@ export class App extends React.Component { const result = reader.result as string; const editorState: IEditorState = JSON.parse(result); - Revive(editorState); - - this.setState({ - configuration: editorState.configuration, - history: editorState.history, - historyCurrentStep: editorState.historyCurrentStep, - isLoaded: true - } as IAppState); + this.LoadState(editorState); }); reader.readAsText(file); } + private LoadState(editorState: IEditorState) { + Revive(editorState); + + this.setState({ + configuration: editorState.configuration, + history: editorState.history, + historyCurrentStep: editorState.historyCurrentStep, + isLoaded: true + } as IAppState); + } + public render() { if (this.state.isLoaded) { return ( diff --git a/src/tests/resources/state.json b/src/tests/resources/state.json new file mode 100644 index 0000000..2152cd1 --- /dev/null +++ b/src/tests/resources/state.json @@ -0,0 +1,182 @@ +{ + "isSidebarOpen": true, + "isElementsSidebarOpen": false, + "isHistoryOpen": false, + "configuration": { + "AvailableContainers": [ + { + "Type": "Chassis", + "Width": 500, + "Style": { + "fillOpacity": 0, + "borderWidth": 2, + "stroke": "red" + } + }, + { + "Type": "Trou", + "Width": 300, + "Style": { + "fillOpacity": 0, + "borderWidth": 2, + "stroke": "green" + } + }, + { + "Type": "Montant", + "Width": 100, + "Style": { + "fillOpacity": 0, + "borderWidth": 2, + "stroke": "blue", + "transform": "translateX(-50%)", + "transformOrigin": "center", + "transformBox": "fill-box" + } + } + ], + "AvailableSymbols": [ + { + "Height": 0, + "Image": { + "Base64Image": null, + "Name": null, + "Svg": null, + "Url": "https://www.manutan.fr/img/S/GRP/ST/AIG3930272.jpg" + }, + "Name": "Poteau structure", + "Width": 0, + "XPositionReference": 1 + }, + { + "Height": 0, + "Image": { + "Base64Image": null, + "Name": null, + "Svg": null, + "Url": "https://e7.pngegg.com/pngimages/647/127/png-clipart-svg-working-group-information-world-wide-web-internet-structure.png" + }, + "Name": "Joint de structure", + "Width": 0, + "XPositionReference": 0 + } + ], + "MainContainer": { + "Height": 200, + "Width": 1000 + } + }, + "history": [ + { + "MainContainer": { + "children": [], + "properties": { + "id": "main", + "parentId": "null", + "x": 0, + "y": 0, + "width": 1000, + "height": 200, + "fillOpacity": 0, + "stroke": "black" + }, + "userData": {} + }, + "TypeCounters": {} + }, + { + "MainContainer": { + "children": [ + { + "children": [], + "properties": { + "id": "Chassis-0", + "parentId": "main", + "x": 0, + "y": 0, + "width": 500, + "height": 200, + "fillOpacity": 0, + "borderWidth": 2, + "stroke": "red" + }, + "userData": { + "type": "Chassis" + } + } + ], + "properties": { + "id": "main", + "parentId": "null", + "x": 0, + "y": 0, + "width": 1000, + "height": 200, + "fillOpacity": 0, + "stroke": "black" + }, + "userData": {} + }, + "TypeCounters": { + "Chassis": 0 + }, + "SelectedContainerId": "main" + }, + { + "MainContainer": { + "children": [ + { + "children": [], + "properties": { + "id": "Chassis-0", + "parentId": "main", + "x": 0, + "y": 0, + "width": 500, + "height": 200, + "fillOpacity": 0, + "borderWidth": 2, + "stroke": "red" + }, + "userData": { + "type": "Chassis" + } + }, + { + "children": [], + "properties": { + "id": "Chassis-1", + "parentId": "main", + "x": 500, + "y": 0, + "width": 500, + "height": 200, + "fillOpacity": 0, + "borderWidth": 2, + "stroke": "red" + }, + "userData": { + "type": "Chassis" + } + } + ], + "properties": { + "id": "main", + "parentId": "null", + "x": 0, + "y": 0, + "width": 1000, + "height": 200, + "fillOpacity": 0, + "stroke": "black" + }, + "userData": {} + }, + "TypeCounters": { + "Chassis": 1 + }, + "SelectedContainerId": "main" + } + ], + "historyCurrentStep": 2 +} \ No newline at end of file