@@ -69,6 +69,7 @@ import SelectionCreationPanel from './selection-creation-panel/selection-creatio
6969import { useEquipmentMenu } from '../../hooks/use-equipment-menu' ;
7070import useEquipmentDialogs from 'hooks/use-equipment-dialogs' ;
7171import { getNominalVoltageColor } from 'utils/colors' ;
72+ import { getNominalVoltageIntervalName } from './utils/nominal-voltage-filter-utils' ;
7273
7374const INITIAL_POSITION = [ 0 , 0 ] as const ;
7475const INITIAL_ZOOM = 9 ;
@@ -184,9 +185,7 @@ export const NetworkMapPanel = forwardRef<NetworkMapPanelRef, NetworkMapPanelPro
184185
185186 const { snackError } = useSnackMessage ( ) ;
186187
187- const [ filteredNominalVoltages , setFilteredNominalVoltages ] = useState < number [ ] > (
188- mapState ?. filteredNominalVoltages ?? [ ]
189- ) ;
188+ const [ filteredNominalVoltages , setFilteredNominalVoltages ] = useState < number [ ] > ( [ ] ) ;
190189 const [ geoData , setGeoData ] = useState < GeoData > ( ) ;
191190 const geoDataRef = useRef < any > ( ) ;
192191
@@ -1246,23 +1245,46 @@ export const NetworkMapPanel = forwardRef<NetworkMapPanelRef, NetworkMapPanelPro
12461245 ) ;
12471246
12481247 // Set up filteredNominalVoltages once at map initialization
1249- // TODO: how do we must manage case where voltages change (like when changing node), as filters are already initialized?
12501248 const nominalVoltagesFromMapEquipments = mapEquipments ?. getNominalVoltages ( ) ;
1249+ const hasInitializedFilters = useRef ( false ) ;
1250+
12511251 useEffect ( ( ) => {
1252+ // Only initialize once when mapEquipments are loaded
12521253 if (
12531254 nominalVoltagesFromMapEquipments !== undefined &&
12541255 nominalVoltagesFromMapEquipments . length > 0 &&
1255- filteredNominalVoltages . length === 0 &&
1256- ! mapState ?. filteredNominalVoltages // Only initialize if no saved map state exists
1256+ ! hasInitializedFilters . current
12571257 ) {
1258- handleFilteredNominalVoltagesChange ( nominalVoltagesFromMapEquipments ) ;
1258+ hasInitializedFilters . current = true ;
1259+
1260+ // Check if we have saved state to restore
1261+ if ( mapState ?. filteredNominalVoltages && mapState . filteredNominalVoltages . length > 0 ) {
1262+ // Get intervals from saved voltages
1263+ const savedIntervals = new Set (
1264+ mapState . filteredNominalVoltages
1265+ . map ( ( v ) => getNominalVoltageIntervalName ( v ) )
1266+ . filter ( ( interval ) : interval is string => interval !== undefined )
1267+ ) ;
1268+
1269+ // Filter current voltages by matching intervals
1270+ const voltagesMatchingIntervals = nominalVoltagesFromMapEquipments . filter ( ( v ) => {
1271+ const interval = getNominalVoltageIntervalName ( v ) ;
1272+ return interval && savedIntervals . has ( interval ) ;
1273+ } ) ;
1274+
1275+ if ( voltagesMatchingIntervals . length > 0 ) {
1276+ // Restore voltages from matching intervals
1277+ setFilteredNominalVoltages ( voltagesMatchingIntervals ) ;
1278+ } else {
1279+ // No matching intervals found, initialize with all
1280+ setFilteredNominalVoltages ( nominalVoltagesFromMapEquipments ) ;
1281+ }
1282+ } else {
1283+ // No saved state, initialize with all voltages
1284+ setFilteredNominalVoltages ( nominalVoltagesFromMapEquipments ) ;
1285+ }
12591286 }
1260- } , [
1261- filteredNominalVoltages ,
1262- handleFilteredNominalVoltagesChange ,
1263- nominalVoltagesFromMapEquipments ,
1264- mapState ?. filteredNominalVoltages ,
1265- ] ) ;
1287+ } , [ nominalVoltagesFromMapEquipments , mapState ?. filteredNominalVoltages ] ) ;
12661288
12671289 function renderNominalVoltageFilter ( ) {
12681290 return (
0 commit comments