Skip to content

Commit ea65299

Browse files
author
Alexander Czigler
authored
feat: move functionality to new menu (#263)
* chore: do not bust cache on .gitignore * refactor: cleanup * feat: add layer toggles to new menu * refactor: cleanup * feat: edit experiment modal * chore: remove unused code * refactor: moved reset button to new component * fix: styling * refactor: move modal to new component * refactor: naming * fix: styling * refactor: cleaning up * fix: modal styling * feat: add logo * feat: show modal with kibana link * fix: naming * feat: show experiment id
1 parent a839cef commit ea65299

File tree

21 files changed

+458
-848
lines changed

21 files changed

+458
-848
lines changed

packages/simulator/web/routes.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ function start(socket) {
3434
socket.data.experiment = experiment
3535
experiment.subscriptions = subscribe(experiment, socket)
3636
experiment.virtualTime.waitUntil(moment().endOf('day').valueOf()).then(() => {
37+
socket.emit('reset')
3738
info('Experiment finished. Restarting...')
3839
process.kill(process.pid, 'SIGUSR2')
3940
})
@@ -58,7 +59,7 @@ function register(io) {
5859
socket.data.emitTaxiUpdates = defaultEmitters.includes('taxis')
5960
socket.data.emitBusUpdates = defaultEmitters.includes('buses')
6061

61-
socket.emit('reset')
62+
socket.emit('init')
6263
socket.on('reset', () => {
6364
socket.data.experiment.subscriptions.map((e) => e.unsubscribe())
6465
start(socket)
@@ -70,7 +71,7 @@ function register(io) {
7071
socket.on('experimentParameters', (value) => {
7172
info('New expiriment settings: ', value)
7273
save(value)
73-
socket.emit('reset')
74+
socket.emit('init')
7475
})
7576

7677
socket.emit('parameters', socket.data.experiment.parameters)
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
dist/
21
.dockerignore
2+
.gitignore
3+
4+
dist/
35
Dockerfile
46
node_modules
57
README.md

packages/visualisation/src/App.jsx

Lines changed: 69 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
1-
import React, { useState, useEffect } from 'react'
1+
import React, { useState } from 'react'
2+
import 'jsoneditor-react/es/editor.min.css'
23
import { useSocket } from './hooks/useSocket.js'
4+
35
import Map from './Map.jsx'
4-
import PlaybackOptions from './components/PlaybackOptions'
56
import Loading from './components/Loading'
6-
import styled from 'styled-components'
7-
import ResetIcon from './icons/svg/resetIcon.svg'
8-
import TransparentButton from './components/TransparentButton'
9-
import SideMenu from './components/SideMenu'
10-
11-
const Wrapper = styled.div`
12-
position: absolute;
13-
z-index: 2;
14-
bottom: 3rem;
15-
left: 11.3rem;
16-
`
7+
import PlaybackOptions from './components/PlaybackOptions'
8+
import ResetExperiment from './components/ResetExperiment'
9+
import EditExperimentModal from './components/EditExperimentModal'
10+
import Logo from './components/Logo'
11+
import ExperimentDoneModal from './components/ExperimentDoneModal/index.jsx'
1712

1813
const App = () => {
1914
const [activeCar, setActiveCar] = useState(null)
@@ -30,9 +25,12 @@ const App = () => {
3025
const [commercialAreasLayer, setCommercialAreasLayer] = useState(false)
3126
const [busLineLayer, setBusLineLayer] = useState(true)
3227
const [kommunLayer, setKommunLayer] = useState(true)
33-
const [newParameters, setNewParameters] = useState({})
28+
const [experimentParameters, setExperimentParameters] = useState({})
3429
const [currentParameters, setCurrentParameters] = useState({})
3530
const [fleets, setFleets] = useState({})
31+
const [showEditExperimentModal, setShowEditExperimentModal] = useState(false)
32+
const [showExperimentDoneModal, setShowExperimentDoneModal] = useState(false)
33+
const [previousExperimentId, setPreviousExperimentId] = useState(null)
3634

3735
const [connected, setConnected] = useState(false)
3836

@@ -61,12 +59,13 @@ const App = () => {
6159
setBusLineLayer,
6260
}
6361

64-
const newExperiment = () => {
65-
socket.emit('experimentParameters', newParameters)
62+
const restartSimulation = () => {
63+
setShowEditExperimentModal(false)
64+
socket.emit('experimentParameters', experimentParameters)
6665
}
6766

68-
useSocket('reset', () => {
69-
console.log('received reset')
67+
useSocket('init', () => {
68+
console.log('Init experiment')
7069
setBookings([])
7170
setPassengers([])
7271
setCars([])
@@ -78,6 +77,12 @@ const App = () => {
7877
socket.emit('speed', speed) // reset speed on server
7978
})
8079

80+
useSocket('reset', () => {
81+
console.log('Reset experiment')
82+
setPreviousExperimentId(experimentParameters.id)
83+
setShowExperimentDoneModal(true)
84+
})
85+
8186
function upsert(array, object, idProperty = 'id', deep = false) {
8287
const currentIndex = array.findIndex(
8388
(k) => k[idProperty] === object[idProperty]
@@ -183,7 +188,11 @@ const App = () => {
183188
})
184189

185190
useSocket('parameters', (currentParameters) => {
186-
console.log('new experimentId', currentParameters.id)
191+
console.log('ExperimentId', currentParameters.id)
192+
193+
if (!previousExperimentId) {
194+
setPreviousExperimentId(currentParameters.id)
195+
}
187196

188197
setCurrentParameters(currentParameters)
189198
const layerSetFunctions = {
@@ -206,10 +215,8 @@ const App = () => {
206215
}
207216
})
208217

209-
console.log(currentParameters)
210218
setFleets(currentParameters.fleets)
211-
212-
setNewParameters(currentParameters)
219+
setExperimentParameters(currentParameters)
213220
})
214221
const [passengers, setPassengers] = React.useState([])
215222
useSocket('passengers', (passengers) => {
@@ -257,27 +264,18 @@ const App = () => {
257264
setConnected(true)
258265
})
259266

267+
/**
268+
* Update the fleets part of the parameters.
269+
*/
270+
const saveFleets = (updatedJson) => {
271+
setExperimentParameters({ ...experimentParameters, fleets: updatedJson })
272+
}
273+
260274
return (
261275
<>
262-
<Wrapper>
263-
<TransparentButton onClick={() => resetSimulation()}>
264-
<img src={ResetIcon} alt="Reset" />
265-
</TransparentButton>
266-
</Wrapper>
267-
<SideMenu
268-
activeLayers={activeLayers}
269-
currentParameters={currentParameters}
270-
newParameters={newParameters}
271-
newExperiment={newExperiment}
272-
setNewParameters={setNewParameters}
273-
fleets={fleets}
274-
/>
276+
<Logo />
275277

276-
<PlaybackOptions
277-
onPause={onPause}
278-
onPlay={onPlay}
279-
onSpeedChange={onSpeedChange}
280-
/>
278+
{/* Loader. */}
281279
{(!connected || reset || !cars.length || !bookings.length) && (
282280
<Loading
283281
connected={connected}
@@ -290,6 +288,34 @@ const App = () => {
290288
parameters={currentParameters}
291289
/>
292290
)}
291+
292+
{/* Playback controls. */}
293+
<PlaybackOptions
294+
onPause={onPause}
295+
onPlay={onPlay}
296+
onSpeedChange={onSpeedChange}
297+
/>
298+
299+
{/* Reset experiment button. */}
300+
<ResetExperiment resetSimulation={resetSimulation} />
301+
302+
{/* Edit experiment modal. */}
303+
<EditExperimentModal
304+
fleets={fleets}
305+
show={showEditExperimentModal}
306+
setShow={setShowEditExperimentModal}
307+
restartSimulation={restartSimulation}
308+
saveFleets={saveFleets}
309+
/>
310+
311+
{/* Experiment done modal. */}
312+
<ExperimentDoneModal
313+
experimentId={previousExperimentId}
314+
show={showExperimentDoneModal}
315+
setShow={setShowExperimentDoneModal}
316+
/>
317+
318+
{/* Map. */}
293319
<Map
294320
activeLayers={activeLayers}
295321
passengers={passengers}
@@ -303,6 +329,9 @@ const App = () => {
303329
time={time}
304330
setActiveCar={setActiveCar}
305331
lineShapes={lineShapes}
332+
showEditExperimentModal={showEditExperimentModal}
333+
setShowEditExperimentModal={setShowEditExperimentModal}
334+
experimentId={currentParameters.id}
306335
/>
307336
</>
308337
)

packages/visualisation/src/Map.jsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,10 @@ import DeckGL, {
1010
import { GeoJsonLayer } from '@deck.gl/layers'
1111
import inside from 'point-in-polygon'
1212
import { ParagraphLarge } from './components/Typography'
13-
1413
import KommunStatisticsBox from './components/KommunStatisticsBox'
1514
import TimeProgressBar from './components/TimeProgressBar'
16-
1715
import LayersMenu from './components/LayersMenu/index.jsx'
18-
import mapboxgl from 'mapbox-gl'
1916
import HoverInfoBox from './components/HoverInfoBox'
20-
import { IconButton, Menu, MenuItem } from '@mui/material'
2117

2218
const transitionInterpolator = new LinearInterpolator(['bearing'])
2319

@@ -34,6 +30,8 @@ const Map = ({
3430
activeCar,
3531
setActiveCar,
3632
time,
33+
setShowEditExperimentModal,
34+
experimentId,
3735
}) => {
3836
const [mapState, setMapState] = useState({
3937
latitude: 65.0964472642777,
@@ -379,7 +377,7 @@ const Map = ({
379377

380378
const bookingLayer = new ScatterplotLayer({
381379
id: 'booking-layer',
382-
data: bookings.filter(b => b.type !== 'busstop'), //.filter((b) => !b.assigned), // TODO: revert change
380+
data: bookings.filter((b) => b.type !== 'busstop'), //.filter((b) => !b.assigned), // TODO: revert change
383381
opacity: 1,
384382
stroked: false,
385383
filled: true,
@@ -619,12 +617,15 @@ const Map = ({
619617
}}
620618
>
621619
<LayersMenu
620+
activeLayers={activeLayers}
622621
showArcLayer={showArcLayer}
623622
setShowArcLayer={setShowArcLayer}
624623
showActiveDeliveries={showActiveDeliveries}
625624
setShowActiveDeliveries={setShowActiveDeliveries}
626625
showAssignedBookings={showAssignedBookings}
627626
setShowAssignedBookings={setShowAssignedBookings}
627+
setShowEditExperimentModal={setShowEditExperimentModal}
628+
experimentId={experimentId}
628629
/>
629630
</div>
630631
<StaticMap
@@ -636,7 +637,11 @@ const Map = ({
636637
mapboxApiAccessToken={import.meta.env.VITE_MAPBOX_ACCESS_TOKEN}
637638
/>
638639
{hoverInfo && mapState.zoom > 6 && <HoverInfoBox data={hoverInfo} />}
640+
641+
{/* Time progress bar. */}
639642
<TimeProgressBar time={time} />
643+
644+
{/* Experiment clock. */}
640645
<div
641646
style={{
642647
right: '3rem',
@@ -656,6 +661,8 @@ const Map = ({
656661
<br />i simuleringen
657662
</ParagraphLarge>
658663
</div>
664+
665+
{/* Municipality stats. */}
659666
{kommunInfo && <KommunStatisticsBox {...kommunInfo} />}
660667
</DeckGL>
661668
)

packages/visualisation/src/components/DropDown/index.jsx

Lines changed: 0 additions & 44 deletions
This file was deleted.

0 commit comments

Comments
 (0)