Skip to content

Commit 5332a7c

Browse files
add supplementary axis
prettier ùod slight optimisation for enableAes determination optimize supp axes computation remove comma
1 parent 9da5c42 commit 5332a7c

File tree

3 files changed

+37
-9
lines changed

3 files changed

+37
-9
lines changed

front/src/modules/simulationResult/components/ChartHelpers/enableInteractivity.tsx

+15-5
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,15 @@ const updateChart = <
8282
>(
8383
chart: Chart,
8484
keyValues: ChartAxes,
85+
additionalValues: ChartAxes[], // more values to display on the same chart
8586
rotate: boolean,
8687
event: d3.D3ZoomEvent<Element, Datum>
8788
) => {
8889
// recover the new scale & test if movement under 0
8990
const xAxis = getAxis(keyValues, 'x', rotate);
91+
const supplementaryXAxis = additionalValues.map((value) => getAxis(value, 'x', rotate));
9092
const yAxis = getAxis(keyValues, 'y', rotate);
93+
const supplementaryYAxis = additionalValues.map((value) => getAxis(value, 'y', rotate));
9194
const xAxisStart = `${xAxis}_start` as const;
9295
const xAxisEnd = `${xAxis}_end` as const;
9396
const yAxisStart = `${yAxis}_start` as 'time_start' | 'position_start';
@@ -120,12 +123,19 @@ const updateChart = <
120123
chart.yAxisGrid.call(gridY(newY, chart.width));
121124

122125
// update lines & areas
126+
123127
chart.drawZone.selectAll<SVGLineElement, T[]>('.line').attr(
124128
'd',
125129
d3
126130
.line<T>()
127-
.x((d) => newX(d[xAxis as keyof T] as number | Date))
128-
.y((d) => newY(d[yAxis as keyof T] as number | Date))
131+
.x((d) => {
132+
const key = supplementaryXAxis.find((axis) => d[axis as keyof T] !== undefined) || xAxis;
133+
return newX(d[key as keyof T] as number | Date);
134+
})
135+
.y((d) => {
136+
const key = supplementaryYAxis.find((axis) => d[axis as keyof T] !== undefined) || yAxis;
137+
return newY(d[key as keyof T] as number | Date);
138+
})
129139
);
130140

131141
chart.drawZone
@@ -246,10 +256,10 @@ export const enableInteractivity = <
246256
setChart: React.Dispatch<React.SetStateAction<T | undefined>>,
247257
simulationIsPlaying: boolean,
248258
dispatchUpdateTimePositionValues: (newTimePositionValues: Date) => void,
249-
chartDimensions: [Date, Date]
259+
chartDimensions: [Date, Date],
260+
additionalValues: ChartAxes[] = [] // more values to display on the same chart
250261
) => {
251262
if (!chart) return;
252-
253263
const zoom = d3zoom<SVGGElement, unknown>()
254264
.scaleExtent([0.3, 20]) // This controls how much you can unzoom (x0.5) and zoom (x20)
255265
.extent([
@@ -259,7 +269,7 @@ export const enableInteractivity = <
259269
.wheelDelta(wheelDelta)
260270
.on('zoom', (event) => {
261271
event.sourceEvent.preventDefault();
262-
const zoomFunctions = updateChart(chart, keyValues, rotate, event);
272+
const zoomFunctions = updateChart(chart, keyValues, additionalValues, rotate, event);
263273
const newChart = { ...chart, x: zoomFunctions.newX, y: zoomFunctions.newY };
264274
setChart(newChart);
265275
})

front/src/modules/simulationResult/components/SpaceCurvesSlopes.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,8 @@ const SpaceCurvesSlopes = ({
254254
setChart,
255255
simulationIsPlaying,
256256
dispatchUpdateTimePositionValues,
257-
timeScaleRange
257+
timeScaleRange,
258+
[CHART_AXES.SPACE_GRADIENT, CHART_AXES.SPACE_RADIUS, CHART_AXES.SPACE_HEIGHT]
258259
);
259260
setChart(chartLocal);
260261
};

front/src/modules/simulationResult/components/SpeedSpaceChart/SpeedSpaceChart.tsx

+20-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
enableInteractivity,
99
traceVerticalLine,
1010
} from 'modules/simulationResult/components/ChartHelpers/enableInteractivity';
11-
import { CHART_AXES } from 'modules/simulationResult/components/simulationResultsConsts';
11+
import { CHART_AXES, ChartAxes } from 'modules/simulationResult/components/simulationResultsConsts';
1212
import {
1313
createChart,
1414
drawTrain,
@@ -33,6 +33,11 @@ import { interpolateOnPosition } from '../ChartHelpers/ChartHelpers';
3333

3434
const CHART_ID = 'SpeedSpaceChart';
3535
const CHART_MIN_HEIGHT = 250;
36+
const SETTINGS_TO_AXIS = {
37+
altitude: CHART_AXES.SPACE_HEIGHT,
38+
curves: CHART_AXES.SPACE_RADIUS,
39+
slopes: CHART_AXES.SPACE_GRADIENT,
40+
};
3641

3742
export type SpeedSpaceChartProps = {
3843
initialHeight: number;
@@ -165,6 +170,17 @@ export default function SpeedSpaceChart({
165170
}
166171
}, [resetChart]);
167172

173+
/**
174+
* Recompute the enabled axes when the settings change
175+
*/
176+
const additionalAxes = useMemo(
177+
() =>
178+
Object.keys(SETTINGS_TO_AXIS)
179+
.filter((key) => localSettings[key as keyof typeof localSettings])
180+
.map((key) => SETTINGS_TO_AXIS[key as keyof typeof SETTINGS_TO_AXIS] as ChartAxes),
181+
[localSettings]
182+
);
183+
168184
/**
169185
* CHART INTERACTIVITY
170186
*/
@@ -183,9 +199,10 @@ export default function SpeedSpaceChart({
183199
setChart,
184200
simulationIsPlaying,
185201
dispatchUpdateTimePositionValues,
186-
timeScaleRange
202+
timeScaleRange,
203+
additionalAxes
187204
);
188-
}, [chart]);
205+
}, [chart, additionalAxes]);
189206

190207
/**
191208
* coordinate guidelines and pointers with other graphs

0 commit comments

Comments
 (0)