diff --git a/src/components/spreadsheet-view/spreadsheet-tabs/toolbar/PartialLoadingMenuButton.tsx b/src/components/spreadsheet-view/spreadsheet-tabs/toolbar/PartialLoadingMenuButton.tsx index 98bf33c3fd..962d206a54 100644 --- a/src/components/spreadsheet-view/spreadsheet-tabs/toolbar/PartialLoadingMenuButton.tsx +++ b/src/components/spreadsheet-view/spreadsheet-tabs/toolbar/PartialLoadingMenuButton.tsx @@ -49,6 +49,10 @@ export default function PartialLoadingMenuButton({ disabled }: Readonly state.spreadsheetOptionalLoadingParameters[SpreadsheetEquipmentType.GENERATOR].regulatingTerminal ); + const remoteBatteryRegTerm = useSelector( + (state: AppState) => + state.spreadsheetOptionalLoadingParameters[SpreadsheetEquipmentType.BATTERY].regulatingTerminal + ); const remoteBusNetworkComponents = useSelector( (state: AppState) => state.spreadsheetOptionalLoadingParameters[SpreadsheetEquipmentType.BUS].networkComponents ); @@ -56,6 +60,7 @@ export default function PartialLoadingMenuButton({ disabled }: Readonly(remoteLineOlg); const [localTwtOlg, setLocalTwtOlg] = useState(remoteTwtOlg); const [localGeneratorRegTerm, setLocalGeneratorRegTerm] = useState(remoteGeneratorRegTerm); + const [localBatteryRegTerm, setLocalBatteryRegTerm] = useState(remoteBatteryRegTerm); const [localBusNetworkComponents, setLocalBusNetworkComponents] = useState(remoteBusNetworkComponents); const handleClick = useCallback>( @@ -65,9 +70,17 @@ export default function PartialLoadingMenuButton({ disabled }: Readonly { @@ -77,6 +90,7 @@ export default function PartialLoadingMenuButton({ disabled }: Readonly remoteBranchOlg || remoteLineOlg || remoteTwtOlg || remoteGeneratorRegTerm || remoteBusNetworkComponents, - [remoteBranchOlg, remoteBusNetworkComponents, remoteGeneratorRegTerm, remoteLineOlg, remoteTwtOlg] + () => + remoteBranchOlg || + remoteLineOlg || + remoteTwtOlg || + remoteGeneratorRegTerm || + remoteBatteryRegTerm || + remoteBusNetworkComponents, + [ + remoteBatteryRegTerm, + remoteBranchOlg, + remoteBusNetworkComponents, + remoteGeneratorRegTerm, + remoteLineOlg, + remoteTwtOlg, + ] ); return ( @@ -181,6 +213,15 @@ export default function PartialLoadingMenuButton({ disabled }: Readonly + + + + + diff --git a/src/components/spreadsheet-view/spreadsheet/spreadsheet-content/hooks/use-optional-loading-parameters-for-equipments.ts b/src/components/spreadsheet-view/spreadsheet/spreadsheet-content/hooks/use-optional-loading-parameters-for-equipments.ts index 492c5581b9..ce74e0902b 100644 --- a/src/components/spreadsheet-view/spreadsheet/spreadsheet-content/hooks/use-optional-loading-parameters-for-equipments.ts +++ b/src/components/spreadsheet-view/spreadsheet/spreadsheet-content/hooks/use-optional-loading-parameters-for-equipments.ts @@ -8,7 +8,7 @@ import { useSelector } from 'react-redux'; import type { AppState } from '../../../../../redux/reducer.type'; import { SpreadsheetEquipmentType } from '../../../types/spreadsheet.type'; -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; type OptionalLoadingParameters = Record; @@ -33,6 +33,15 @@ const initialOptionalLoadingParameters: Record @@ -51,14 +60,22 @@ export function useOptionalLoadingParametersForEquipments() { (state: AppState) => state.spreadsheetOptionalLoadingParameters[SpreadsheetEquipmentType.GENERATOR].regulatingTerminal ); + const remoteBatteryRegTerm = useSelector( + (state: AppState) => + state.spreadsheetOptionalLoadingParameters[SpreadsheetEquipmentType.BATTERY].regulatingTerminal + ); const remoteBusNetworkComponents = useSelector( (state: AppState) => state.spreadsheetOptionalLoadingParameters[SpreadsheetEquipmentType.BUS].networkComponents ); - const [branchOlg, setBranchOlg] = useState(remoteBranchOlg); - const [lineOlg, setLineOlg] = useState(remoteLineOlg); - const [twtOlg, setTwtOlg] = useState(remoteTwtOlg); - const [generatorRegTerm, setGeneratorRegTerm] = useState(remoteGeneratorRegTerm); - const [busNetworkComponents, setBusNetworkComponents] = useState(remoteBusNetworkComponents); + + const previousValuesRef = useRef([ + remoteBranchOlg, + remoteLineOlg, + remoteTwtOlg, + remoteGeneratorRegTerm, + remoteBatteryRegTerm, + remoteBusNetworkComponents, + ]); const [loadOptional, setLoadOptional] = useState(initialOptionalLoadingParameters); const [cleanOptional, setCleanOptional] = useState(initialOptionalLoadingParameters); @@ -76,67 +93,59 @@ export function useOptionalLoadingParametersForEquipments() { }, []); useEffect(() => { - if (remoteBranchOlg !== branchOlg && remoteBranchOlg) { - setLoadOptional((prevState) => { - return { ...prevState, [SpreadsheetEquipmentType.BRANCH]: true }; - }); - } else if (remoteBranchOlg !== branchOlg && !remoteBranchOlg) { - setCleanOptional((prevState) => { - return { ...prevState, [SpreadsheetEquipmentType.BRANCH]: true }; - }); - } - if (remoteLineOlg !== lineOlg && remoteLineOlg) { - setLoadOptional((prevState) => { - return { ...prevState, [SpreadsheetEquipmentType.LINE]: true }; - }); - } else if (remoteLineOlg !== lineOlg && !remoteLineOlg) { - setCleanOptional((prevState) => { - return { ...prevState, [SpreadsheetEquipmentType.LINE]: true }; - }); - } - if (remoteTwtOlg !== twtOlg && remoteTwtOlg) { - setLoadOptional((prevState) => { - return { ...prevState, [SpreadsheetEquipmentType.TWO_WINDINGS_TRANSFORMER]: true }; - }); - } else if (remoteTwtOlg !== twtOlg && !remoteTwtOlg) { - setCleanOptional((prevState) => { - return { ...prevState, [SpreadsheetEquipmentType.TWO_WINDINGS_TRANSFORMER]: true }; - }); - } - if (remoteGeneratorRegTerm !== generatorRegTerm && remoteGeneratorRegTerm) { - setLoadOptional((prevState) => { - return { ...prevState, [SpreadsheetEquipmentType.GENERATOR]: true }; - }); - } else if (remoteGeneratorRegTerm !== generatorRegTerm && !remoteGeneratorRegTerm) { - setCleanOptional((prevState) => { - return { ...prevState, [SpreadsheetEquipmentType.GENERATOR]: true }; + const currentValues = [ + remoteBranchOlg, + remoteLineOlg, + remoteTwtOlg, + remoteGeneratorRegTerm, + remoteBatteryRegTerm, + remoteBusNetworkComponents, + ]; + const previousValues = previousValuesRef.current; + + const toLoad: SpreadsheetEquipmentType[] = []; + const toClean: SpreadsheetEquipmentType[] = []; + + TRACKED_TYPES.forEach((type, index) => { + const current = currentValues[index]; + if (current === previousValues[index]) { + return; + } + if (current) { + toLoad.push(type); + } else { + toClean.push(type); + } + }); + + if (toLoad.length > 0) { + setLoadOptional((prev) => { + const next = { ...prev }; + toLoad.forEach((type) => { + next[type] = true; + }); + return next; }); } - if (remoteBusNetworkComponents !== busNetworkComponents && remoteBusNetworkComponents) { - setLoadOptional((prevState) => { - return { ...prevState, [SpreadsheetEquipmentType.BUS]: true }; - }); - } else if (remoteBusNetworkComponents !== busNetworkComponents && !remoteBusNetworkComponents) { - setCleanOptional((prevState) => { - return { ...prevState, [SpreadsheetEquipmentType.BUS]: true }; + + if (toClean.length > 0) { + setCleanOptional((prev) => { + const next = { ...prev }; + toClean.forEach((type) => { + next[type] = true; + }); + return next; }); } - setBranchOlg(remoteBranchOlg); - setLineOlg(remoteLineOlg); - setTwtOlg(remoteTwtOlg); - setGeneratorRegTerm(remoteGeneratorRegTerm); - setBusNetworkComponents(remoteBusNetworkComponents); + + previousValuesRef.current = currentValues; }, [ - branchOlg, - busNetworkComponents, - generatorRegTerm, - lineOlg, remoteBranchOlg, - remoteBusNetworkComponents, - remoteGeneratorRegTerm, remoteLineOlg, remoteTwtOlg, - twtOlg, + remoteGeneratorRegTerm, + remoteBatteryRegTerm, + remoteBusNetworkComponents, ]); return { diff --git a/src/components/spreadsheet-view/types/spreadsheet.type.ts b/src/components/spreadsheet-view/types/spreadsheet.type.ts index 6139071cab..0a9ba20114 100644 --- a/src/components/spreadsheet-view/types/spreadsheet.type.ts +++ b/src/components/spreadsheet-view/types/spreadsheet.type.ts @@ -125,6 +125,9 @@ export type SpreadsheetOptionalLoadingParameters = { [SpreadsheetEquipmentType.GENERATOR]: { regulatingTerminal: boolean; }; + [SpreadsheetEquipmentType.BATTERY]: { + regulatingTerminal: boolean; + }; [SpreadsheetEquipmentType.BUS]: { networkComponents: boolean; }; diff --git a/src/redux/reducer.ts b/src/redux/reducer.ts index 53a0cd1b77..032035c3a0 100644 --- a/src/redux/reducer.ts +++ b/src/redux/reducer.ts @@ -531,6 +531,9 @@ const initialState: AppState = { [SpreadsheetEquipmentType.BUS]: { networkComponents: false, }, + [SpreadsheetEquipmentType.BATTERY]: { + regulatingTerminal: false, + }, }, networkVisualizationsParameters: null, highlightedModificationUuid: null,