diff --git a/src/components/network/selection-creation-panel/use-save-map.ts b/src/components/network/selection-creation-panel/use-save-map.ts index 41e36f46ef..dadf501280 100644 --- a/src/components/network/selection-creation-panel/use-save-map.ts +++ b/src/components/network/selection-creation-panel/use-save-map.ts @@ -4,8 +4,8 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -import { Equipment, snackWithFallback, useSnackMessage } from '@gridsuite/commons-ui'; -import { useCallback, useState } from 'react'; +import { Equipment, fetchAppsMetadata, snackWithFallback, useSnackMessage } from '@gridsuite/commons-ui'; +import { useCallback, useEffect, useState } from 'react'; import { useIntl } from 'react-intl'; import { useSelector } from 'react-redux'; import { AppState } from 'redux/reducer.type'; @@ -30,6 +30,14 @@ export const useSaveMap = (): UseSaveMapOutput => { const currentRootNetworkUuid = useSelector((state: AppState) => state.currentRootNetworkUuid); const { snackInfo, snackError, snackWarning } = useSnackMessage(); const [pendingState, setPendingState] = useState(false); + const [busbarIdAsContingencyName, setBusbarIdAsContingencyName] = useState(false); + + useEffect(() => { + fetchAppsMetadata().then((res) => { + const metadata = res.find((item) => item.name === 'Study'); + setBusbarIdAsContingencyName(!!metadata?.useBusbarIdAsContingencyNameForPolygonCreation); + }); + }, []); const onSaveSelection = useCallback( async ( @@ -83,7 +91,8 @@ export const useSaveMap = (): UseSaveMapOutput => { currentNodeUuid, currentRootNetworkUuid, equipments, - nominalVoltages + nominalVoltages, + busbarIdAsContingencyName ); snackInfo({ messageTxt: intl.formatMessage({ @@ -107,7 +116,16 @@ export const useSaveMap = (): UseSaveMapOutput => { } return true; // success }, - [currentNodeUuid, currentRootNetworkUuid, intl, snackError, snackInfo, snackWarning, studyUuid] + [ + busbarIdAsContingencyName, + currentNodeUuid, + currentRootNetworkUuid, + intl, + snackError, + snackInfo, + snackWarning, + studyUuid, + ] ); return { pendingState, onSaveSelection }; diff --git a/src/services/study/contingency-list.ts b/src/services/study/contingency-list.ts index 846fa0da52..a3615b068f 100644 --- a/src/services/study/contingency-list.ts +++ b/src/services/study/contingency-list.ts @@ -25,11 +25,11 @@ export interface ContingencyList { type: string; } -function createIdentifiersList(selectedEquipments: EquipmentInfos[]) { +function createIdentifiersList(selectedEquipments: EquipmentInfos[], equipmentIdAsContingencyName: boolean) { const identifierLists = selectedEquipments.map((eq) => { return { type: 'LIST', - contingencyId: eq.name ? eq.name : eq.id, + contingencyId: equipmentIdAsContingencyName ? eq.id : (eq.name ?? eq.id), identifierList: [ { type: 'ID_BASED', @@ -41,8 +41,12 @@ function createIdentifiersList(selectedEquipments: EquipmentInfos[]) { return identifierLists; } -export function createIdentifierContingencyList(contingencyListName: string, equipmentList: EquipmentInfos[]) { - const identifiersList = createIdentifiersList(equipmentList); +export function createIdentifierContingencyList( + contingencyListName: string, + equipmentList: EquipmentInfos[], + equipmentIdAsContingencyName: boolean +) { + const identifiersList = createIdentifiersList(equipmentList, equipmentIdAsContingencyName); return { identifierContingencyList: { type: 'identifier', diff --git a/src/services/study/network-map.ts b/src/services/study/network-map.ts index 89c47e1df7..7b0ce5fcf1 100644 --- a/src/services/study/network-map.ts +++ b/src/services/study/network-map.ts @@ -249,13 +249,22 @@ export async function createMapContingencyList( currentNodeUuid: UUID, currentRootNetworkUuid: UUID, selectedEquipments: EquipmentInfos[], - nominalVoltages: number[] + nominalVoltages: number[], + busbarIdAsContingencyName: boolean ) { let equipmentContingencyList: ContingencyList; + // should be in the switch, but TS and eslint do not like fallthrough + let equipmentIdAsContingencyName = + equipmentType === EquipmentType.BUSBAR_SECTION ? busbarIdAsContingencyName : false; + switch (equipmentType) { case EquipmentType.SUBSTATION: case EquipmentType.LINE: - equipmentContingencyList = createIdentifierContingencyList(elementName, selectedEquipments); + equipmentContingencyList = createIdentifierContingencyList( + elementName, + selectedEquipments, + equipmentIdAsContingencyName + ); break; @@ -279,7 +288,11 @@ export async function createMapContingencyList( if (elementsIds?.length === 0) { throw new Error('EmptySelection'); } - equipmentContingencyList = createIdentifierContingencyList(elementName, elementsIds); + equipmentContingencyList = createIdentifierContingencyList( + elementName, + elementsIds, + equipmentIdAsContingencyName + ); break; } if ( @@ -291,15 +304,3 @@ export async function createMapContingencyList( return createContingencyList(equipmentContingencyList, elementName, '', destinationDirectoryId); } - -export function fetchAllNominalVoltages(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID) { - console.info( - `Fetching all nominal voltages of study '${studyUuid}', node '${currentNodeUuid}' and root network '${currentRootNetworkUuid}' ...` - ); - - const fetchNominalVoltagesUrl = - getStudyUrlWithNodeUuidAndRootNetworkUuid(studyUuid, currentNodeUuid, currentRootNetworkUuid) + - '/network-map/nominal-voltages?inUpstreamBuiltParentNode=true'; - console.debug(fetchNominalVoltagesUrl); - return backendFetchJson(fetchNominalVoltagesUrl); -}