diff --git a/src/components/spreadsheet-view/spreadsheet-tabs/toolbar/PartialLoadingMenuButton.tsx b/src/components/spreadsheet-view/spreadsheet-tabs/toolbar/PartialLoadingMenuButton.tsx index 04d229fd4b..09b816d0b7 100644 --- a/src/components/spreadsheet-view/spreadsheet-tabs/toolbar/PartialLoadingMenuButton.tsx +++ b/src/components/spreadsheet-view/spreadsheet-tabs/toolbar/PartialLoadingMenuButton.tsx @@ -47,10 +47,14 @@ export default function PartialLoadingMenuButton({ disabled, ...props }: Readonl (state: AppState) => state.spreadsheetOptionalLoadingParameters[SpreadsheetEquipmentType.GENERATOR].regulatingTerminal ); + const remoteBusNetworkComponents = useSelector( + (state: AppState) => state.spreadsheetOptionalLoadingParameters[SpreadsheetEquipmentType.BUS].networkComponents + ); const [localBranchOlg, setLocalBranchOlg] = useState(remoteBranchOlg); const [localLineOlg, setLocalLineOlg] = useState(remoteLineOlg); const [localTwtOlg, setLocalTwtOlg] = useState(remoteTwtOlg); const [localGeneratorRegTerm, setLocalGeneratorRegTerm] = useState(remoteGeneratorRegTerm); + const [localBusNetworkComponents, setLocalBusNetworkComponents] = useState(remoteBusNetworkComponents); const handleClick = useCallback>( (event) => { @@ -59,8 +63,9 @@ export default function PartialLoadingMenuButton({ disabled, ...props }: Readonl setLocalLineOlg(remoteLineOlg); setLocalTwtOlg(remoteTwtOlg); setLocalGeneratorRegTerm(remoteGeneratorRegTerm); + setLocalBusNetworkComponents(remoteBusNetworkComponents); }, - [remoteBranchOlg, remoteGeneratorRegTerm, remoteLineOlg, remoteTwtOlg] + [remoteBranchOlg, remoteBusNetworkComponents, remoteGeneratorRegTerm, remoteLineOlg, remoteTwtOlg] ); const handleClose = useCallback(() => { @@ -69,7 +74,8 @@ export default function PartialLoadingMenuButton({ disabled, ...props }: Readonl localBranchOlg !== remoteBranchOlg || localLineOlg !== remoteLineOlg || localTwtOlg !== remoteTwtOlg || - localGeneratorRegTerm !== remoteGeneratorRegTerm + localGeneratorRegTerm !== remoteGeneratorRegTerm || + localBusNetworkComponents !== remoteBusNetworkComponents ) { if (studyUuid) { updateSpreadsheetParameters(studyUuid, { @@ -81,6 +87,9 @@ export default function PartialLoadingMenuButton({ disabled, ...props }: Readonl [SpreadsheetEquipmentType.GENERATOR]: { regulatingTerminal: localGeneratorRegTerm, }, + [SpreadsheetEquipmentType.BUS]: { + networkComponents: localBusNetworkComponents, + }, }); } } @@ -93,14 +102,16 @@ export default function PartialLoadingMenuButton({ disabled, ...props }: Readonl remoteTwtOlg, localGeneratorRegTerm, remoteGeneratorRegTerm, + localBusNetworkComponents, + remoteBusNetworkComponents, studyUuid, ]); const open = anchorEl !== undefined; const isOptionalData = useMemo( - () => remoteBranchOlg || remoteLineOlg || remoteTwtOlg || remoteGeneratorRegTerm, - [remoteBranchOlg, remoteGeneratorRegTerm, remoteLineOlg, remoteTwtOlg] + () => remoteBranchOlg || remoteLineOlg || remoteTwtOlg || remoteGeneratorRegTerm || remoteBusNetworkComponents, + [remoteBranchOlg, remoteBusNetworkComponents, remoteGeneratorRegTerm, remoteLineOlg, remoteTwtOlg] ); return ( @@ -166,6 +177,15 @@ export default function PartialLoadingMenuButton({ disabled, ...props }: Readonl labelId="spreadsheet/tabs/lazy_loading/labels/regulatingTerminal" onChange={setLocalGeneratorRegTerm} /> + + + + + ); 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 640aab9906..ff01784eba 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 @@ -29,10 +29,14 @@ export function useOptionalLoadingParametersForEquipments(type: SpreadsheetEquip (state: AppState) => state.spreadsheetOptionalLoadingParameters[SpreadsheetEquipmentType.GENERATOR].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 { value: shouldLoadOptionalLoadingParameters, setValue: setShouldLoadOptionalLoadingParameters, @@ -77,16 +81,31 @@ export function useOptionalLoadingParametersForEquipments(type: SpreadsheetEquip !remoteGeneratorRegTerm ) { setShouldCleanOptionalLoadingParameters(true); + } else if ( + type === SpreadsheetEquipmentType.BUS && + remoteBusNetworkComponents !== busNetworkComponents && + remoteBusNetworkComponents + ) { + setShouldLoadOptionalLoadingParameters(true); + } else if ( + type === SpreadsheetEquipmentType.BUS && + remoteBusNetworkComponents !== busNetworkComponents && + !remoteBusNetworkComponents + ) { + setShouldCleanOptionalLoadingParameters(true); } setBranchOlg(remoteBranchOlg); setLineOlg(remoteLineOlg); setTwtOlg(remoteTwtOlg); setGeneratorRegTerm(remoteGeneratorRegTerm); + setBusNetworkComponents(remoteBusNetworkComponents); }, [ branchOlg, + busNetworkComponents, generatorRegTerm, lineOlg, remoteBranchOlg, + remoteBusNetworkComponents, remoteGeneratorRegTerm, remoteLineOlg, remoteTwtOlg, diff --git a/src/components/spreadsheet-view/types/spreadsheet.type.ts b/src/components/spreadsheet-view/types/spreadsheet.type.ts index 46ae0c7c90..63473a6a3c 100644 --- a/src/components/spreadsheet-view/types/spreadsheet.type.ts +++ b/src/components/spreadsheet-view/types/spreadsheet.type.ts @@ -122,4 +122,7 @@ export type SpreadsheetOptionalLoadingParameters = { [SpreadsheetEquipmentType.GENERATOR]: { regulatingTerminal: boolean; }; + [SpreadsheetEquipmentType.BUS]: { + networkComponents: boolean; + }; }; diff --git a/src/redux/reducer.ts b/src/redux/reducer.ts index 62893d8078..b89b029ca9 100644 --- a/src/redux/reducer.ts +++ b/src/redux/reducer.ts @@ -776,6 +776,9 @@ const initialState: AppState = { [SpreadsheetEquipmentType.GENERATOR]: { regulatingTerminal: false, }, + [SpreadsheetEquipmentType.BUS]: { + networkComponents: false, + }, }, diagramGridLayout: { gridLayouts: {}, @@ -1612,24 +1615,37 @@ export const reducer = createReducer(initialState, (builder) => { action.equipmentType !== SpreadsheetEquipmentType.BRANCH && action.equipmentType !== SpreadsheetEquipmentType.LINE && action.equipmentType !== SpreadsheetEquipmentType.TWO_WINDINGS_TRANSFORMER && - action.equipmentType !== SpreadsheetEquipmentType.GENERATOR + action.equipmentType !== SpreadsheetEquipmentType.GENERATOR && + action.equipmentType !== SpreadsheetEquipmentType.BUS ) { return; } - const propsToClean = - action.equipmentType === SpreadsheetEquipmentType.GENERATOR - ? { - regulatingTerminalVlName: undefined, - regulatingTerminalConnectableId: undefined, - regulatingTerminalConnectableType: undefined, - regulatingTerminalVlId: undefined, - } - : { - operationalLimitsGroup1: undefined, - operationalLimitsGroup1Names: undefined, - operationalLimitsGroup2: undefined, - operationalLimitsGroup2Names: undefined, - }; + let propsToClean; + switch (action.equipmentType) { + case SpreadsheetEquipmentType.GENERATOR: + propsToClean = { + regulatingTerminalVlName: undefined, + regulatingTerminalConnectableId: undefined, + regulatingTerminalConnectableType: undefined, + regulatingTerminalVlId: undefined, + }; + break; + case SpreadsheetEquipmentType.LINE: + case SpreadsheetEquipmentType.TWO_WINDINGS_TRANSFORMER: + case SpreadsheetEquipmentType.BRANCH: + propsToClean = { + operationalLimitsGroup1: undefined, + operationalLimitsGroup1Names: undefined, + operationalLimitsGroup2: undefined, + operationalLimitsGroup2Names: undefined, + }; + break; + case SpreadsheetEquipmentType.BUS: + propsToClean = { + synchronousComponentNum: undefined, + connectedComponentNum: undefined, + }; + } state.spreadsheetNetwork[action.equipmentType].nodesId.forEach((nodeId: UUID) => { state.spreadsheetNetwork[action.equipmentType].equipmentsByNodeId[nodeId] = Object.values( state.spreadsheetNetwork[action.equipmentType].equipmentsByNodeId[nodeId] diff --git a/src/translations/spreadsheet-en.ts b/src/translations/spreadsheet-en.ts index 23a86704d0..8f27bf1062 100644 --- a/src/translations/spreadsheet-en.ts +++ b/src/translations/spreadsheet-en.ts @@ -122,6 +122,7 @@ const spreadsheetEn = { 'spreadsheet/tabs/lazy_loading/toolbar_button_tooltip': 'Include additional data', 'spreadsheet/tabs/lazy_loading/labels/operationalLimitsGroups': 'Inactive limit sets', 'spreadsheet/tabs/lazy_loading/labels/regulatingTerminal': 'Regulated terminals', + 'spreadsheet/tabs/lazy_loading/labels/networkComponentsInformation': 'Network components', 'spreadsheet/global-model-edition/edit': 'Model edition', 'spreadsheet/global-model-edition/column_id': 'ID', diff --git a/src/translations/spreadsheet-fr.ts b/src/translations/spreadsheet-fr.ts index ee86004158..508d0f8517 100644 --- a/src/translations/spreadsheet-fr.ts +++ b/src/translations/spreadsheet-fr.ts @@ -126,6 +126,7 @@ const spreadsheetFr = { 'spreadsheet/tabs/lazy_loading/toolbar_button_tooltip': 'Inclure données supplémentaires', 'spreadsheet/tabs/lazy_loading/labels/operationalLimitsGroups': 'Sets de limites inactifs', 'spreadsheet/tabs/lazy_loading/labels/regulatingTerminal': 'Terminaux distants réglés', + 'spreadsheet/tabs/lazy_loading/labels/networkComponentsInformation': 'Composantes de réseau', 'spreadsheet/global-model-edition/edit': 'Éditer le modèle', 'spreadsheet/global-model-edition/column_id': 'ID',