From c0c148d511f2ace9c918d64d16788bfbd3df551b Mon Sep 17 00:00:00 2001 From: Kush Makkapati Date: Fri, 10 Apr 2026 20:45:54 +0100 Subject: [PATCH 1/2] Fix battery data sorting to avoid mutating state --- gcs/src/redux/slices/droneInfoSlice.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcs/src/redux/slices/droneInfoSlice.js b/gcs/src/redux/slices/droneInfoSlice.js index af988493d..33b9cbca9 100644 --- a/gcs/src/redux/slices/droneInfoSlice.js +++ b/gcs/src/redux/slices/droneInfoSlice.js @@ -414,7 +414,7 @@ const droneInfoSlice = createSlice({ selectAircraftType: (state) => state.aircraftType, selectBatteryData: (state) => - state.batteryData.sort((b1, b2) => b1.id - b2.id), + [...state.batteryData].sort((b1, b2) => b1.id - b2.id), selectGuidedModePinData: (state) => state.guidedModePinData, selectSelectedDisplayTelemetry: (state) => state.selectedDisplayTelemetry, selectStatusText: (state) => state.statusText, From 4995fa197bb557d7b71bc8bb4e7c7c2c83bb4c6b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 10 Apr 2026 19:51:42 +0000 Subject: [PATCH 2/2] Memoize selectBatteryData with createSelector to avoid rerenders Agent-Logs-Url: https://github.com/Avis-Drone-Labs/FGCS/sessions/40eb713b-8875-4857-9130-7ed9b003df1c Co-authored-by: 1Blademaster <39247152+1Blademaster@users.noreply.github.com> --- gcs/src/redux/slices/droneInfoSlice.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gcs/src/redux/slices/droneInfoSlice.js b/gcs/src/redux/slices/droneInfoSlice.js index 33b9cbca9..571a956b3 100644 --- a/gcs/src/redux/slices/droneInfoSlice.js +++ b/gcs/src/redux/slices/droneInfoSlice.js @@ -413,8 +413,7 @@ const droneInfoSlice = createSlice({ selectRSSI: (state) => state.rssi, selectAircraftType: (state) => state.aircraftType, - selectBatteryData: (state) => - [...state.batteryData].sort((b1, b2) => b1.id - b2.id), + selectRawBatteryData: (state) => state.batteryData, selectGuidedModePinData: (state) => state.guidedModePinData, selectSelectedDisplayTelemetry: (state) => state.selectedDisplayTelemetry, selectStatusText: (state) => state.statusText, @@ -462,6 +461,11 @@ export const { } = droneInfoSlice.actions // Memoized selectors because redux is a bitch +export const selectBatteryData = createSelector( + [droneInfoSlice.selectors.selectRawBatteryData], + (batteryData) => [...batteryData].sort((b1, b2) => b1.id - b2.id), +) + export const selectDroneCoords = createSelector( [droneInfoSlice.selectors.selectGPS], ({ lat, lon }) => { @@ -611,7 +615,6 @@ export const { selectEscTelemetry5To8, selectFlightMode, selectAircraftType, - selectBatteryData, selectGuidedModePinData, selectSelectedDisplayTelemetry, selectGraphValues,