diff --git a/webapp/package-lock.json b/webapp/package-lock.json
index aef21f4..2c5b63a 100644
--- a/webapp/package-lock.json
+++ b/webapp/package-lock.json
@@ -23,6 +23,7 @@
"react-scripts": "^5.0.1",
"react-use-websocket": "^4.3.1",
"sass": "^1.66.1",
+ "typescript": "^5.2.2",
"web-vitals": "^2.1.4",
"websocket": "^1.0.34"
}
@@ -16627,16 +16628,15 @@
}
},
"node_modules/typescript": {
- "version": "4.9.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
- "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
- "peer": true,
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
- "node": ">=4.2.0"
+ "node": ">=14.17"
}
},
"node_modules/unbox-primitive": {
diff --git a/webapp/package.json b/webapp/package.json
index 4dbe338..cf502de 100644
--- a/webapp/package.json
+++ b/webapp/package.json
@@ -18,6 +18,7 @@
"react-scripts": "^5.0.1",
"react-use-websocket": "^4.3.1",
"sass": "^1.66.1",
+ "typescript": "^5.2.2",
"web-vitals": "^2.1.4",
"websocket": "^1.0.34"
},
diff --git a/webapp/src/components/SimControl/SimControl.jsx b/webapp/src/components/SimControl/SimControl.jsx
index d999b0f..7dbc404 100644
--- a/webapp/src/components/SimControl/SimControl.jsx
+++ b/webapp/src/components/SimControl/SimControl.jsx
@@ -1,8 +1,16 @@
import React, { Component } from "react";
import {w3cwebsocket as W3CWebSocket} from "websocket"
// import Header from './components/Header';
-import Controls from "./components/control/controls";
import OpenSeaMap from "./components/OpenSeaMap/OpenSeaMap";
+import EntityControl from './components/EntityControl/EntityControl';
+import Tracklist from './components/Tracklist'
+
+import Tab from 'react-bootstrap/Tab';
+import Tabs from 'react-bootstrap/Tabs';
+
+import TrackListClass from "./Tracklist.tsx";
+import Track from "./Track.tsx";
+
const config = {
// apiUrl: process.env.REACT_APP_WEBAPP_WS_URL,
@@ -17,7 +25,8 @@ class SimControl extends Component {
state = {
Entities: [],
EntityOnFocus: undefined,
- PositionClicked: undefined
+ PositionClicked: undefined,
+ TrackList_: new TrackListClass()
}
componentDidMount() {
@@ -33,55 +42,32 @@ class SimControl extends Component {
if(dataFromServer.Data === "COP")
{
- if(dataFromServer.Entities === undefined)
- {
- dataFromServer.Entities = [];
- }
- // console.log(this.state.EntityOnFocus);
- let tmp = new Array(); ;
-
- if(this.state.Entities !== undefined && this.state.Entities.length !== 0){
-
- if(dataFromServer.Entities.length > 0)
- {
+
+
+
+
+
dataFromServer.Entities.forEach((elementFromWS, indexWS) => {
-
- if (this.isStored(elementFromWS.id) !== true)
- {
- tmp.push(elementFromWS);
- }
- this.state.Entities.forEach((elementStored, indexStore) => {
- if(elementFromWS.id === elementStored.id)
- {
- // console.log(elementStored);
-
- if(elementStored.onFocus !==true | elementStored.onFocus === undefined)
- {
- tmp.push(elementFromWS);
-
- }else
- {
- tmp.push(elementStored);
- }
- }else{
- // console.log(elementFromWS);
- // tmp.push(elementFromWS);
- }
- });
+
+ // console.log(elementFromWS);
+ if(this.state.TrackList_.isInList(elementFromWS.id))
+ {
+ this.state.TrackList_.updateTrack(elementFromWS);
+
+ }else{
+
+ this.state.TrackList_.addTrack(structuredClone(new Track(elementFromWS)));
+ }
+
});
- }
- }else{
- tmp = dataFromServer.Entities;
- }
- // console.log(tmp);
- this.setState((state) => ({
- // Entities: structuredClone(dataFromServer.Entities)
- Entities: structuredClone(tmp)
-
- })
- )
+ // console.log(this.state.TrackList_.getSize());
+ this.setState((state) => ({
+ // // Entities: structuredClone(dataFromServer.Entities)
+ // Entities: structuredClone(tmp)
+
+ }))
}
}
@@ -127,42 +113,10 @@ class SimControl extends Component {
setEntityOnFocus(Entity)
{
- if(Entity === undefined)
- {
- this.resetEntityOnFocus();
- return;
- }
-
- this.getEntityFromID(this.state.Entities,Entity)
console.log(Entity);
- this.setState({
- EntityOnFocus: Entity
- });
- this.state.Entities.forEach((element, index) => {
- // console.log(element);
-
- if(element.id === Entity.EntityID)
- {
- var tmpList = structuredClone(this.state.Entities);
- tmpList[index].onFocus = true;
- if(Entity.NewPos !== undefined)
- {
- tmpList[index].Position = Entity.NewPos
- }
- this.setState({
- Entities: structuredClone(tmpList)
- });
- if(Entity.dragged !== undefined)
- {
- if(Entity.dragged === true)
- {
- tmpList[index].dragged = true;
- }
- }
- console.log(tmpList[index]);
-
- }
- });
+ this.setState({
+ EntityOnFocus: structuredClone(this.state.TrackList_.getTrack(Entity))
+ })
}
resetEntityOnFocus()
@@ -194,20 +148,44 @@ class SimControl extends Component {
Functions = {
updateEntities: this.updateEntities.bind(this),
- resetEntityOnFocus: this.resetEntityOnFocus.bind(this)
+ resetEntityOnFocus: this.resetEntityOnFocus.bind(this),
+ PositionClicked: this.setFocusPosition.bind(this)
}
render() {
- const {name} = this.state;
return (
-
+ {/*
*/}
+
+
+
+
+
+
+
+ Internaltracklist
+
+
+ Orders
+
+
+
-
+
diff --git a/webapp/src/components/SimControl/SimControl.scss b/webapp/src/components/SimControl/SimControl.scss
index e69de29..f5cdcdd 100644
--- a/webapp/src/components/SimControl/SimControl.scss
+++ b/webapp/src/components/SimControl/SimControl.scss
@@ -0,0 +1,5 @@
+.controls{
+ /* display: flex; */
+ width: 24%;
+ float: left;
+}
\ No newline at end of file
diff --git a/webapp/src/components/SimControl/Track.tsx b/webapp/src/components/SimControl/Track.tsx
new file mode 100644
index 0000000..e11bd1d
--- /dev/null
+++ b/webapp/src/components/SimControl/Track.tsx
@@ -0,0 +1,38 @@
+class Track{
+ Id : string;
+ Name = String();
+ Type = String();
+ Side = String();
+ Course = Number();
+ Speed = Number();
+ External = Boolean();
+ Height = Number();
+ Position = [Number(), Number()]
+ isOnFucus = Boolean();
+ isOnEdit = Boolean();
+
+ constructor(input)
+ {
+ if(input.id !== undefined)
+ {
+ this.Id = input.id;
+ }else{
+ return;
+ }
+
+ this.Name = input.Name;
+ this.Course = input.Course;
+ this.Speed = input.Speed;
+ this.External = input.External;
+ this.Height = input.Height;
+ this.Position = input.Position;
+ this.Type = input.Type;
+ this.Side = input.Side;
+ this.isOnFucus = false;
+ this.isOnEdit = false;
+
+
+
+ }
+};
+export default Track
\ No newline at end of file
diff --git a/webapp/src/components/SimControl/Tracklist.tsx b/webapp/src/components/SimControl/Tracklist.tsx
new file mode 100644
index 0000000..5b9594a
--- /dev/null
+++ b/webapp/src/components/SimControl/Tracklist.tsx
@@ -0,0 +1,86 @@
+
+import { ObjectType } from 'typescript';
+import Track from './Track'
+
+
+class TrackListCLass
+{
+ constructor()
+ {
+ this.trackMap = new Map
();
+ }
+
+
+ trackMap: Map ;
+
+
+ getTrack(id :string)
+ {
+ return this.trackMap.get(id);
+ }
+
+ isInList(id :string)
+ {
+ return this.trackMap.has(id);
+ }
+
+ addTrack(track :Track)
+ {
+ this.trackMap.set(track.Id,track);
+ }
+
+ updateTrack(input: { id: string; Name: string; Course: number; Speed: number; External: boolean; Height: number; Position: number[]; Type: string; Side: string; })
+ {
+
+ var Track = this.trackMap.get(input.id);
+ if(Track === undefined)
+ {
+ return;
+ }
+
+ if(Track.isOnEdit === false)
+ {
+ console.log("update");
+ Track.Name = input.Name;
+ Track.Course = input.Course;
+ Track.Speed = input.Speed;
+ Track.External = input.External;
+ Track.Height = input.Height;
+ Track.Position = input.Position;
+ Track.Type = input.Type;
+ Track.Side = input.Side;
+
+ }
+ }
+
+ getKeys()
+ {
+ return this.trackMap.keys;
+ }
+ getSize()
+ {
+ return this.trackMap.size;
+ }
+
+ getTracks()
+ {
+ var Tracks = new Array