From 1694603d0a4e1ce4011b39fe377e07d2a05c1246 Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Wed, 15 Oct 2025 11:10:08 +0200 Subject: [PATCH 1/7] launch, stop pcc min N-1 computation Signed-off-by: SOUISSI Maissa (Externe) --- .../use-all-computing-status.ts | 18 +++++++ src/components/parameters-tabs.tsx | 1 + src/components/run-button-container.jsx | 35 ++++++++++++-- src/components/study-container.jsx | 6 +++ src/components/utils/optional-services.ts | 1 + src/components/utils/running-status.ts | 13 +++++ src/redux/reducer.ts | 2 + src/services/study/pcc-min.ts | 47 +++++++++++++++++++ src/translations/en.json | 3 ++ src/translations/fr.json | 3 ++ src/types/notification-types.ts | 41 ++++++++++++++-- 11 files changed, 164 insertions(+), 6 deletions(-) create mode 100644 src/services/study/pcc-min.ts diff --git a/src/components/computing-status/use-all-computing-status.ts b/src/components/computing-status/use-all-computing-status.ts index 6bfab438bc..11e6bba8dc 100644 --- a/src/components/computing-status/use-all-computing-status.ts +++ b/src/components/computing-status/use-all-computing-status.ts @@ -10,6 +10,7 @@ import { getDynamicSecurityAnalysisRunningStatus, getDynamicSimulationRunningStatus, getLoadFlowRunningStatus, + getPccMinRunningStatus, getSecurityAnalysisRunningStatus, getSensitivityAnalysisRunningStatus, getShortCircuitAnalysisRunningStatus, @@ -33,6 +34,7 @@ import { useOptionalServiceStatus } from '../../hooks/use-optional-service-statu import { fetchStateEstimationStatus } from '../../services/study/state-estimation'; import { fetchDynamicSecurityAnalysisStatus } from '../../services/study/dynamic-security-analysis'; import { NotificationType } from 'types/notification-types'; +import { fetchPccMinStatus } from 'services/study/pcc-min'; // status invalidations const loadFlowStatusInvalidations = [NotificationType.LOADFLOW_STATUS, NotificationType.LOADFLOW_FAILED]; @@ -65,6 +67,7 @@ const stateEstimationStatusInvalidations = [ NotificationType.STATE_ESTIMATION_STATUS, NotificationType.STATE_ESTIMATION_FAILED, ]; +const pccMinStatusInvalidations = [NotificationType.PCC_MIN_STATUS, NotificationType.PCC_MIN_FAILED]; // status completions const loadFlowStatusCompletions = [NotificationType.LOADFLOW_RESULT, NotificationType.LOADFLOW_FAILED]; @@ -97,6 +100,7 @@ const stateEstimationStatusCompletions = [ NotificationType.STATE_ESTIMATION_RESULT, NotificationType.STATE_ESTIMATION_FAILED, ]; +const pccMinStatusCompletions = [NotificationType.PCC_MIN_RESULT, NotificationType.PCC_MIN_FAILED]; // result invalidations export const loadflowResultInvalidations = [NotificationType.LOADFLOW_RESULT]; @@ -115,6 +119,7 @@ export const useAllComputingStatus = (studyUuid: UUID, currentNodeUuid: UUID, cu const voltageInitAvailability = useOptionalServiceStatus(OptionalServicesNames.VoltageInit); const shortCircuitAvailability = useOptionalServiceStatus(OptionalServicesNames.ShortCircuit); const stateEstimationAvailability = useOptionalServiceStatus(OptionalServicesNames.StateEstimation); + const pccMinAvailability = useOptionalServiceStatus(OptionalServicesNames.PccMin); useComputingStatus( studyUuid, @@ -231,4 +236,17 @@ export const useAllComputingStatus = (studyUuid: UUID, currentNodeUuid: UUID, cu undefined, stateEstimationAvailability ); + + useComputingStatus( + studyUuid, + currentNodeUuid, + currentRootNetworkUuid, + fetchPccMinStatus, + pccMinStatusInvalidations, + pccMinStatusCompletions, + getPccMinRunningStatus, + ComputingType.PCC_MIN, + undefined, + pccMinAvailability + ); }; diff --git a/src/components/parameters-tabs.tsx b/src/components/parameters-tabs.tsx index 101ede918b..f657232081 100644 --- a/src/components/parameters-tabs.tsx +++ b/src/components/parameters-tabs.tsx @@ -71,6 +71,7 @@ enum TAB_VALUES { dynamicSecurityAnalysisParamsTabValue = 'DYNAMIC_SECURITY_ANALYSIS', voltageInitParamsTabValue = 'VOLTAGE_INITIALIZATION', stateEstimationTabValue = 'STATE_ESTIMATION', + pccMinTabValue = 'PCC_MIN', networkVisualizationsParams = 'networkVisualizationsParams', } diff --git a/src/components/run-button-container.jsx b/src/components/run-button-container.jsx index 3e6ced24ea..4e2fb58de6 100644 --- a/src/components/run-button-container.jsx +++ b/src/components/run-button-container.jsx @@ -48,6 +48,7 @@ import useComputationDebug from '../hooks/use-computation-debug'; import { PaginationType } from 'types/custom-aggrid-types'; import { usePaginationReset } from 'hooks/use-pagination-selector'; import { useLogsPaginationResetByType } from './report-viewer/use-logs-pagination'; +import { startPccMin, stopPccMin } from 'services/study/pcc-min'; const checkDynamicSimulationParameters = (studyUuid) => { return fetchDynamicSimulationParameters(studyUuid).then((params) => { @@ -94,6 +95,7 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU ); const voltageInitStatus = useSelector((state) => state.computingStatus[ComputingType.VOLTAGE_INITIALIZATION]); const stateEstimationStatus = useSelector((state) => state.computingStatus[ComputingType.STATE_ESTIMATION]); + const pccMinStatus = useSelector((state) => state.computingStatus[ComputingType.PCC_MIN]); const [showContingencyListSelector, setShowContingencyListSelector] = useState(false); @@ -120,6 +122,7 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU const voltageInitAvailability = useOptionalServiceStatus(OptionalServicesNames.VoltageInit); const shortCircuitAvailability = useOptionalServiceStatus(OptionalServicesNames.ShortCircuit); const stateEstimationAvailability = useOptionalServiceStatus(OptionalServicesNames.StateEstimation); + const pccMinAvailability = useOptionalServiceStatus(OptionalServicesNames.PccMin); const resetSecurityAnalysisPagination = usePaginationReset(PaginationType.SecurityAnalysis); const resetSensitivityAnalysisPagination = usePaginationReset(PaginationType.SensitivityAnalysis); @@ -489,6 +492,27 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU ); }, }, + + [ComputingType.PCC_MIN]: { + messageId: 'PccMin', + startComputation() { + startComputationAsync( + ComputingType.PCC_MIN, + null, + () => { + return startPccMin(studyUuid, currentNode?.id, currentRootNetworkUuid); + }, + () => {}, + null, + 'startPccMinError' + ); + }, + actionOnRunnable() { + actionOnRunnables(ComputingType.PCC_MIN, () => + stopPccMin(studyUuid, currentNode?.id, currentRootNetworkUuid) + ); + }, + }, }; }, [ dispatch, @@ -524,6 +548,8 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU return voltageInitStatus; case ComputingType.STATE_ESTIMATION: return stateEstimationStatus; + case ComputingType.PCC_MIN: + return pccMinStatus; default: return null; } @@ -538,6 +564,7 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU dynamicSecurityAnalysisStatus, voltageInitStatus, stateEstimationStatus, + pccMinStatus, ] ); @@ -561,16 +588,18 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU ...(stateEstimationAvailability === OptionalServicesStatus.Up && enableDeveloperMode ? [ComputingType.STATE_ESTIMATION] : []), + ...(pccMinAvailability === OptionalServicesStatus.Up && enableDeveloperMode ? [ComputingType.PCC_MIN] : []), ]; }, [ - dynamicSimulationAvailability, - dynamicSecurityAnalysisAvailability, securityAnalysisAvailability, sensitivityAnalysisUnavailability, shortCircuitAvailability, + dynamicSimulationAvailability, + enableDeveloperMode, + dynamicSecurityAnalysisAvailability, voltageInitAvailability, stateEstimationAvailability, - enableDeveloperMode, + pccMinAvailability, ]); return ( diff --git a/src/components/study-container.jsx b/src/components/study-container.jsx index 5132abe61a..7fddad876f 100644 --- a/src/components/study-container.jsx +++ b/src/components/study-container.jsx @@ -218,6 +218,12 @@ export function StudyContainer({ view, onChangeTab }) { messageTxt: errorMessage, }); } + if (updateTypeHeader === NotificationType.PCC_MIN_FAILED) { + snackError({ + headerId: 'pccMinError', + messageTxt: errorMessage, + }); + } }, [snackError, userName] ); diff --git a/src/components/utils/optional-services.ts b/src/components/utils/optional-services.ts index da7c028d9c..e368f7df42 100644 --- a/src/components/utils/optional-services.ts +++ b/src/components/utils/optional-services.ts @@ -13,6 +13,7 @@ export enum OptionalServicesNames { ShortCircuit = 'ShortCircuit', VoltageInit = 'VoltageInit', StateEstimation = 'StateEstimation', + PccMin = 'PccMin', } export enum OptionalServicesStatus { Up = 'UP', diff --git a/src/components/utils/running-status.ts b/src/components/utils/running-status.ts index 41066508d8..35c8e0bde0 100644 --- a/src/components/utils/running-status.ts +++ b/src/components/utils/running-status.ts @@ -131,3 +131,16 @@ export function getStateEstimationRunningStatus(stateEstimationStatus: string | return RunningStatus.IDLE; } } + +export function getPccMinRunningStatus(pccMinStatus: string | null): RunningStatus { + switch (pccMinStatus) { + case 'COMPLETED': + return RunningStatus.SUCCEED; + case 'RUNNING': + return RunningStatus.RUNNING; + case 'NOT_DONE': + return RunningStatus.IDLE; + default: + return RunningStatus.IDLE; + } +} diff --git a/src/redux/reducer.ts b/src/redux/reducer.ts index 05bbc21363..fad83ca2cf 100644 --- a/src/redux/reducer.ts +++ b/src/redux/reducer.ts @@ -442,6 +442,7 @@ export interface ComputingStatus { [ComputingType.DYNAMIC_SECURITY_ANALYSIS]: RunningStatus; [ComputingType.VOLTAGE_INITIALIZATION]: RunningStatus; [ComputingType.STATE_ESTIMATION]: RunningStatus; + [ComputingType.PCC_MIN]: RunningStatus; } export interface LoadFlowStatusParameters { @@ -811,6 +812,7 @@ const initialState: AppState = { [ComputingType.DYNAMIC_SECURITY_ANALYSIS]: RunningStatus.IDLE, [ComputingType.VOLTAGE_INITIALIZATION]: RunningStatus.IDLE, [ComputingType.STATE_ESTIMATION]: RunningStatus.IDLE, + [ComputingType.PCC_MIN]: RunningStatus.IDLE, }, computingStatusParameters: { [ComputingType.LOAD_FLOW]: null, diff --git a/src/services/study/pcc-min.ts b/src/services/study/pcc-min.ts new file mode 100644 index 0000000000..39082ea68d --- /dev/null +++ b/src/services/study/pcc-min.ts @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 { getStudyUrlWithNodeUuidAndRootNetworkUuid } from './index'; +import { backendFetch, backendFetchText } from '../utils'; +import type { UUID } from 'node:crypto'; + +export function startPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID): Promise { + console.info( + `Running pccMin on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` + ); + const url = + getStudyUrlWithNodeUuidAndRootNetworkUuid(studyUuid, currentNodeUuid, currentRootNetworkUuid) + '/pcc-min/run'; + + console.debug(url); + return backendFetch(url, { method: 'post' }); +} + +export function stopPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID) { + console.info( + `Stopping pccMin on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` + ); + const url = `${getStudyUrlWithNodeUuidAndRootNetworkUuid( + studyUuid, + currentNodeUuid, + currentRootNetworkUuid + )}/pcc-min/stop`; + console.debug(url); + return backendFetch(url, { method: 'put' }); +} + +export function fetchPccMinStatus(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID) { + console.info( + `Fetching pccMin status on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` + ); + const url = `${getStudyUrlWithNodeUuidAndRootNetworkUuid( + studyUuid, + currentNodeUuid, + currentRootNetworkUuid + )}/pcc-min/status`; + console.debug(url); + return backendFetchText(url); +} diff --git a/src/translations/en.json b/src/translations/en.json index cd1264809c..89e84ba4c2 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -1392,6 +1392,9 @@ "StateEstimation": "State estimation", "startStateEstmationError": "An error occurred while launching the state estimation", "stateEstimationError": "An error occurred when executing the state estimation", + "PccMin": "Pcc min N-1", + "startPccMinError": "An error occurred while launching the pcc min", + "pccMinError": "An error occurred when executing the pcc min", "NoFilter": "No filter", "searchPlaceholder": "Search", "searchPlaceholderLog": "Search in Logs", diff --git a/src/translations/fr.json b/src/translations/fr.json index 99944f20a0..10eb1f9a02 100644 --- a/src/translations/fr.json +++ b/src/translations/fr.json @@ -1392,6 +1392,9 @@ "StateEstimation": "Estimation d'état", "startStateEstimationError": "Une erreur est survenue lors du lancement de l'estimation d'état", "stateEstimationError": "Une erreur est survenue lors de l'exécution de l'estimation d'état", + "PccMin": "Pcc min N-1", + "startPccMinError": "Une erreur est survenue lors du lancement de pccMin", + "pccMinError": "Une erreur est survenue lors de l'exécution de pccMin", "NoFilter": "Aucun filtre", "searchPlaceholder": "Recherche", "searchPlaceholderLog": "Rechercher dans les Logs", diff --git a/src/types/notification-types.ts b/src/types/notification-types.ts index ed81c9ba7e..d0f157fd9f 100644 --- a/src/types/notification-types.ts +++ b/src/types/notification-types.ts @@ -79,6 +79,9 @@ export enum NotificationType { STATE_ESTIMATION_RESULT = 'stateEstimationResult', STATE_ESTIMATION_FAILED = 'stateEstimation_failed', STATE_ESTIMATION_STATUS = 'stateEstimation_status', + PCC_MIN_RESULT = 'pccMinResult', + PCC_MIN_FAILED = 'pccMin_failed', + PCC_MIN_STATUS = 'pccMin_status', // spreadsheets SPREADSHEET_NODE_ALIASES_UPDATED = 'nodeAliasesUpdated', @@ -126,7 +129,7 @@ export const MODIFYING_NODE_NOTIFICATION_TYPES = [ NotificationType.NODE_BUILD_FAILED, ] as NotificationType[]; -export const COMPUTATION_NOTIFIACTION_TYPES = [ +export const COMPUTATION_NOTIFICATION_TYPES = [ NotificationType.LOADFLOW_RESULT, NotificationType.LOADFLOW_FAILED, NotificationType.LOADFLOW_STATUS, @@ -155,6 +158,9 @@ export const COMPUTATION_NOTIFIACTION_TYPES = [ NotificationType.STATE_ESTIMATION_RESULT, NotificationType.STATE_ESTIMATION_FAILED, NotificationType.STATE_ESTIMATION_STATUS, + NotificationType.PCC_MIN_RESULT, + NotificationType.PCC_MIN_FAILED, + NotificationType.PCC_MIN_STATUS, ] as NotificationType[]; export enum RootNetworkIndexationStatus { @@ -494,7 +500,16 @@ interface StateEstimationFailedEventDataHeaders extends ComputationFailedEventDa interface StateEstimationStatusEventDataHeaders extends ComputationStatusEventDataHeaders { updateType: NotificationType.STATE_ESTIMATION_STATUS; } +interface PccMinStatusEventDataHeaders extends ComputationStatusEventDataHeaders { + updateType: NotificationType.PCC_MIN_STATUS; +} +interface PccMinResultEventDataHeaders extends ComputationResultEventDataHeaders { + updateType: NotificationType.PCC_MIN_RESULT; +} +interface PccMinFailedEventDataHeaders extends ComputationFailedEventDataHeaders { + updateType: NotificationType.PCC_MIN_FAILED; +} // Payloads export interface DeletedEquipment { equipmentId: string; @@ -820,6 +835,19 @@ export interface StateEstimationStatusEventData { payload: undefined; } +export interface PccMinResultEventData { + headers: PccMinResultEventDataHeaders; + payload: undefined; +} +export interface PccMinFailedEventData { + headers: PccMinFailedEventDataHeaders; + payload: undefined; +} + +export interface PccMinStatusEventData { + headers: PccMinStatusEventDataHeaders; + payload: undefined; +} export interface SpreadsheetParametersUpdatedEventData extends Omit { headers: SpreadsheetParametersUpdatedDataHeaders; /** @@ -850,6 +878,10 @@ export function isStateEstimationResultNotification(notif: unknown): notif is St return (notif as StateEstimationResultEventData).headers?.updateType === NotificationType.STATE_ESTIMATION_RESULT; } +export function isPccMinResultNotification(notif: unknown): notif is PccMinResultEventData { + return (notif as PccMinResultEventData).headers?.updateType === NotificationType.PCC_MIN_RESULT; +} + export function isRootNetworkDeletionStartedNotification(notif: unknown): notif is RootNetworkDeletionStartedEventData { return ( (notif as RootNetworkDeletionStartedEventData).headers?.updateType === @@ -1012,10 +1044,13 @@ export type ComputationEventData = | VoltageInitStatusEventData | StateEstimationResultEventData | StateEstimationFailedEventData - | StateEstimationStatusEventData; + | StateEstimationStatusEventData + | PccMinResultEventData + | PccMinFailedEventData + | PccMinStatusEventData; export function isComputationNotification(notif: unknown): notif is ComputationEventData { - return COMPUTATION_NOTIFIACTION_TYPES.includes((notif as CommonStudyEventData).headers?.updateType); + return COMPUTATION_NOTIFICATION_TYPES.includes((notif as CommonStudyEventData).headers?.updateType); } export function isIndexationStatusNotification(notif: unknown): notif is IndexationStatusEventData { From 514fff3cd2dfa1d3a2c005b9f7f8843f48460c0a Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Tue, 21 Oct 2025 16:52:59 +0200 Subject: [PATCH 2/7] fix Signed-off-by: SOUISSI Maissa (Externe) --- src/redux/reducer.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/redux/reducer.ts b/src/redux/reducer.ts index a00ac901d2..410e37906e 100644 --- a/src/redux/reducer.ts +++ b/src/redux/reducer.ts @@ -666,6 +666,7 @@ const initialLogsFilterState: LogsFilterState = { [COMPUTING_AND_NETWORK_MODIFICATION_TYPE.DYNAMIC_SECURITY_ANALYSIS]: [], [COMPUTING_AND_NETWORK_MODIFICATION_TYPE.VOLTAGE_INITIALIZATION]: [], [COMPUTING_AND_NETWORK_MODIFICATION_TYPE.STATE_ESTIMATION]: [], + [COMPUTING_AND_NETWORK_MODIFICATION_TYPE.PCC_MIN]: [], }; const initialLogsPaginationState: LogsPaginationState = { @@ -679,6 +680,7 @@ const initialLogsPaginationState: LogsPaginationState = { [COMPUTING_AND_NETWORK_MODIFICATION_TYPE.DYNAMIC_SECURITY_ANALYSIS]: { ...DEFAULT_LOGS_PAGINATION }, [COMPUTING_AND_NETWORK_MODIFICATION_TYPE.VOLTAGE_INITIALIZATION]: { ...DEFAULT_LOGS_PAGINATION }, [COMPUTING_AND_NETWORK_MODIFICATION_TYPE.STATE_ESTIMATION]: { ...DEFAULT_LOGS_PAGINATION }, + [COMPUTING_AND_NETWORK_MODIFICATION_TYPE.PCC_MIN]: { ...DEFAULT_LOGS_PAGINATION }, }; const emptySpreadsheetEquipmentsByNodes: SpreadsheetEquipmentsByNodes = { From b4cb57e5b8fdd40b4fa109517a905292d33c44ac Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Wed, 22 Oct 2025 15:01:37 +0200 Subject: [PATCH 3/7] asjust Signed-off-by: SOUISSI Maissa (Externe) --- src/components/utils/optional-services.ts | 2 ++ src/types/notification-types.ts | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/utils/optional-services.ts b/src/components/utils/optional-services.ts index e368f7df42..b990f60e1a 100644 --- a/src/components/utils/optional-services.ts +++ b/src/components/utils/optional-services.ts @@ -41,6 +41,8 @@ const getOptionalServiceByServerName = (serverName: string): OptionalServicesNam return OptionalServicesNames.VoltageInit; case 'state-estimation-server': return OptionalServicesNames.StateEstimation; + case 'pcc-min-server': + return OptionalServicesNames.PccMin; default: return; } diff --git a/src/types/notification-types.ts b/src/types/notification-types.ts index d0f157fd9f..d0d9909755 100644 --- a/src/types/notification-types.ts +++ b/src/types/notification-types.ts @@ -1135,7 +1135,10 @@ export type StudyUpdateEventData = | VoltageInitStatusEventData | StateEstimationResultEventData | StateEstimationFailedEventData - | StateEstimationStatusEventData; + | StateEstimationStatusEventData + | PccMinResultEventData + | PccMinFailedEventData + | PccMinStatusEventData; export type StudyUpdateNotification = { eventData: StudyUpdateEventData; From 958e9a7c015469c3cb70fa3692b6b1c480a6436f Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Wed, 22 Oct 2025 15:05:12 +0200 Subject: [PATCH 4/7] imports Signed-off-by: SOUISSI Maissa (Externe) --- src/services/study/pcc-min.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/services/study/pcc-min.ts b/src/services/study/pcc-min.ts index 39082ea68d..5121579dc9 100644 --- a/src/services/study/pcc-min.ts +++ b/src/services/study/pcc-min.ts @@ -6,12 +6,12 @@ */ import { getStudyUrlWithNodeUuidAndRootNetworkUuid } from './index'; -import { backendFetch, backendFetchText } from '../utils'; +import { backendFetch, backendFetchText } from '@gridsuite/commons-ui'; import type { UUID } from 'node:crypto'; -export function startPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID): Promise { +export function startPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID): Promise { console.info( - `Running pccMin on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` + `Running pcc min on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` ); const url = getStudyUrlWithNodeUuidAndRootNetworkUuid(studyUuid, currentNodeUuid, currentRootNetworkUuid) + '/pcc-min/run'; @@ -22,7 +22,7 @@ export function startPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootN export function stopPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID) { console.info( - `Stopping pccMin on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` + `Stopping pcc min on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` ); const url = `${getStudyUrlWithNodeUuidAndRootNetworkUuid( studyUuid, @@ -35,7 +35,7 @@ export function stopPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootNe export function fetchPccMinStatus(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID) { console.info( - `Fetching pccMin status on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` + `Fetching pcc min status on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` ); const url = `${getStudyUrlWithNodeUuidAndRootNetworkUuid( studyUuid, From 30b00a196a8db1469dc2eb3ada1c3dafe11e781d Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Wed, 22 Oct 2025 15:28:57 +0200 Subject: [PATCH 5/7] add pcc min results and logs Signed-off-by: SOUISSI Maissa (Externe) --- .../use-all-computing-status.ts | 1 + src/components/graph/tree-node.type.ts | 1 + src/components/result-view-tab.tsx | 40 ++++-- .../results/pccmin/pcc-min-result-tab.tsx | 107 ++++++++++++++++ .../results/pccmin/pcc-min-result-utils.ts | 49 ++++++++ .../results/pccmin/pcc-min-result.type.ts | 41 +++++++ .../results/pccmin/pcc-min-results.tsx | 115 ++++++++++++++++++ src/hooks/use-computation-results-count.ts | 5 + src/services/study/pcc-min.ts | 26 +++- src/translations/en.json | 6 +- src/translations/fr.json | 6 +- 11 files changed, 380 insertions(+), 17 deletions(-) create mode 100644 src/components/results/pccmin/pcc-min-result-tab.tsx create mode 100644 src/components/results/pccmin/pcc-min-result-utils.ts create mode 100644 src/components/results/pccmin/pcc-min-result.type.ts create mode 100644 src/components/results/pccmin/pcc-min-results.tsx diff --git a/src/components/computing-status/use-all-computing-status.ts b/src/components/computing-status/use-all-computing-status.ts index 11e6bba8dc..594e203977 100644 --- a/src/components/computing-status/use-all-computing-status.ts +++ b/src/components/computing-status/use-all-computing-status.ts @@ -109,6 +109,7 @@ export const dynamicSimulationResultInvalidations = [NotificationType.DYNAMIC_SI export const dynamicSecurityAnalysisResultInvalidations = [NotificationType.DYNAMIC_SECURITY_ANALYSIS_RESULT]; export const voltageInitResultInvalidations = [NotificationType.VOLTAGE_INIT_RESULT]; export const stateEstimationResultInvalidations = [NotificationType.STATE_ESTIMATION_RESULT]; +export const pccMinResultInvalidations = [NotificationType.PCC_MIN_RESULT]; // this hook loads all current computation status into redux then keeps them up to date according to notifications export const useAllComputingStatus = (studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID): void => { diff --git a/src/components/graph/tree-node.type.ts b/src/components/graph/tree-node.type.ts index 5780375424..c3245fdafb 100644 --- a/src/components/graph/tree-node.type.ts +++ b/src/components/graph/tree-node.type.ts @@ -60,6 +60,7 @@ export type NetworkModificationNodeData = AbstractNode & { sensitivityAnalysisResultUuid?: UUID; dynamicSimulationResultUuid?: UUID; stateEstimationResultUuid?: UUID; + pccMinResultUuid?: UUID; nodeBuildStatus?: NodeBuildStatus; nodeType?: NetworkModificationNodeType; }; diff --git a/src/components/result-view-tab.tsx b/src/components/result-view-tab.tsx index a99117dfde..4bab96d56a 100644 --- a/src/components/result-view-tab.tsx +++ b/src/components/result-view-tab.tsx @@ -29,6 +29,7 @@ import { ComputingType, type MuiStyles, usePrevious } from '@gridsuite/commons-u import { useParameterState } from './dialogs/parameters/use-parameters-state'; import { IService } from './result-view-tab.type'; import { CurrentTreeNode } from './graph/tree-node.type'; +import { PccMinResultTab } from './results/pccmin/pcc-min-result-tab'; const styles = { table: { @@ -85,6 +86,7 @@ export const ResultViewTab: FunctionComponent = ({ const voltageInitAvailability = useOptionalServiceStatus(OptionalServicesNames.VoltageInit); const shortCircuitAvailability = useOptionalServiceStatus(OptionalServicesNames.ShortCircuit); const stateEstimationAvailability = useOptionalServiceStatus(OptionalServicesNames.StateEstimation); + const pccMinAvailability = useOptionalServiceStatus(OptionalServicesNames.PccMin); const renderLoadFlowResult = useMemo(() => { return ( @@ -186,6 +188,18 @@ export const ResultViewTab: FunctionComponent = ({ ); }, [studyUuid, currentNode, currentRootNetworkUuid]); + const renderPccMinResult = useMemo(() => { + return ( + + + + ); + }, [currentNode?.id, currentRootNetworkUuid, studyUuid]); + const services: IService[] = useMemo(() => { return [ { @@ -236,24 +250,32 @@ export const ResultViewTab: FunctionComponent = ({ displayed: enableDeveloperMode && stateEstimationAvailability === OptionalServicesStatus.Up, renderResult: renderStateEstimationResult, }, + { + id: 'PccMin', + computingType: [ComputingType.PCC_MIN], + displayed: enableDeveloperMode && pccMinAvailability === OptionalServicesStatus.Up, + renderResult: renderPccMinResult, + }, ].filter(({ displayed }: IService) => displayed); }, [ - sensitivityAnalysisUnavailability, + renderLoadFlowResult, securityAnalysisAvailability, - dynamicSimulationAvailability, - dynamicSecurityAnalysisAvailability, - voltageInitAvailability, + renderSecurityAnalysisResult, + sensitivityAnalysisUnavailability, + renderSensitivityAnalysisResult, shortCircuitAvailability, - stateEstimationAvailability, + renderShortCircuitAnalysisResult, enableDeveloperMode, + dynamicSimulationAvailability, renderDynamicSimulationResult, + dynamicSecurityAnalysisAvailability, renderDynamicSecurityAnalysisResult, - renderSecurityAnalysisResult, - renderSensitivityAnalysisResult, - renderShortCircuitAnalysisResult, + voltageInitAvailability, renderVoltageInitResult, - renderLoadFlowResult, + stateEstimationAvailability, renderStateEstimationResult, + pccMinAvailability, + renderPccMinResult, ]); const resultTabIndexRedirection = useMemo( diff --git a/src/components/results/pccmin/pcc-min-result-tab.tsx b/src/components/results/pccmin/pcc-min-result-tab.tsx new file mode 100644 index 0000000000..cd17353c62 --- /dev/null +++ b/src/components/results/pccmin/pcc-min-result-tab.tsx @@ -0,0 +1,107 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 { FunctionComponent, SyntheticEvent, useMemo, useState } from 'react'; +import Tabs from '@mui/material/Tabs'; +import Tab from '@mui/material/Tab'; +import Box from '@mui/material/Box'; +import { FormattedMessage, useIntl } from 'react-intl/lib'; +import RunningStatus from 'components/utils/running-status'; +import { AppState } from 'redux/reducer'; +import { ComputingType, type MuiStyles } from '@gridsuite/commons-ui'; +import { useSelector } from 'react-redux'; +import GlassPane from '../common/glass-pane'; + +import { ComputationReportViewer } from '../common/computation-report-viewer'; +import { useNodeData } from 'components/use-node-data'; +import { PccMinTabProps } from './pcc-min-result.type'; +import { fetchPccMinResult } from 'services/study/pcc-min'; +import { pccMinResultInvalidations } from 'components/computing-status/use-all-computing-status'; +import { pccMinResultColumnsDefinition } from './pcc-min-result-utils'; +import { PccMinResults } from './pcc-min-results'; + +const styles = { + flexWrapper: { + display: 'flex', + }, + flexElement: { + flexGrow: 0, + }, + show: { + display: 'inherit', + }, + hide: { + display: 'none', + }, + emptySpace: { + flexGrow: 1, + }, +} as const satisfies MuiStyles; + +export const PccMinResultTab: FunctionComponent = ({ studyUuid, nodeUuid, currentRootNetworkUuid }) => { + const intl = useIntl(); + + const [tabIndex, setTabIndex] = useState(0); + const PccMinStatus = useSelector((state: AppState) => state.computingStatus[ComputingType.PCC_MIN]); + + const { result: PccMinResult, isLoading: isLoadingResult } = useNodeData({ + studyUuid, + nodeUuid, + rootNetworkUuid: currentRootNetworkUuid, + fetcher: fetchPccMinResult, + invalidations: pccMinResultInvalidations, + }); + + const pccMinColumns = useMemo(() => { + return pccMinResultColumnsDefinition(intl); + }, [intl]); + + const handleTabChange = (_event: SyntheticEvent, newTabIndex: number) => { + setTabIndex(newTabIndex); + }; + + const result = useMemo(() => { + if (PccMinStatus !== RunningStatus.SUCCEED || !PccMinResult) { + return {}; + } + return PccMinResult; + }, [PccMinStatus, PccMinResult]); + + const renderReportViewer = () => { + return ( + + {(PccMinStatus === RunningStatus.SUCCEED || PccMinStatus === RunningStatus.FAILED) && ( + + )} + + ); + }; + + return ( + <> + + + } /> + } /> + + + + + {tabIndex === 0 && ( + + + + )} + {tabIndex === 1 && renderReportViewer()} + + ); +}; diff --git a/src/components/results/pccmin/pcc-min-result-utils.ts b/src/components/results/pccmin/pcc-min-result-utils.ts new file mode 100644 index 0000000000..29104d3310 --- /dev/null +++ b/src/components/results/pccmin/pcc-min-result-utils.ts @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 { IntlShape } from 'react-intl'; +import { ColDef } from 'ag-grid-community'; +import { makeAgGridCustomHeaderColumn } from 'components/custom-aggrid/utils/custom-aggrid-header-utils'; + +export const pccMinResultColumnsDefinition = (intl: IntlShape): ColDef[] => { + return [ + makeAgGridCustomHeaderColumn({ + headerName: intl.formatMessage({ id: 'Bus' }), + colId: 'busId', + field: 'busId', + }), + makeAgGridCustomHeaderColumn({ + headerName: intl.formatMessage({ id: 'PccMinTri' }), + colId: 'pccMinTri', + field: 'pccMinTri', + context: { numeric: true, fractionDigits: 2 }, + }), + makeAgGridCustomHeaderColumn({ + headerName: intl.formatMessage({ id: 'IccMin' }), + colId: 'iccMinTri', + field: 'iccMinTri', + context: { numeric: true, fractionDigits: 2 }, + }), + makeAgGridCustomHeaderColumn({ + headerName: intl.formatMessage({ id: 'Contingency' }), + colId: 'limitingEquipment', + field: 'limitingEquipment', + }), + makeAgGridCustomHeaderColumn({ + headerName: intl.formatMessage({ id: 'xOhm' }), + colId: 'x', + field: 'x', + context: { numeric: true, fractionDigits: 2 }, + }), + makeAgGridCustomHeaderColumn({ + headerName: intl.formatMessage({ id: 'rOhm' }), + colId: 'r', + field: 'r', + context: { numeric: true, fractionDigits: 2 }, + }), + ]; +}; diff --git a/src/components/results/pccmin/pcc-min-result.type.ts b/src/components/results/pccmin/pcc-min-result.type.ts new file mode 100644 index 0000000000..5062a50d06 --- /dev/null +++ b/src/components/results/pccmin/pcc-min-result.type.ts @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 { ColDef } from 'ag-grid-community'; +import type { UUID } from 'node:crypto'; + +export interface PccMinResult { + resultUuid: UUID; + writeTimeStamp: Date; + singlePccMinResultInfos: SinglePccMinResultInfos[]; +} +export interface SinglePccMinResultInfos { + singlePccMinResultUuid: string; + busId: String; + pccMinTri: number; + limitingEquipment: String; + x: number; + r: number; +} + +export interface PccMinTabProps { + studyUuid: UUID; + nodeUuid: UUID; + currentRootNetworkUuid: UUID; +} + +export interface PccMinResultTableProps { + isLoadingResult: boolean; + columnDefs: ColDef[]; + tableName: string; +} + +export interface PccMinResultStatusProps { + result: PccMinResult; +} + +export interface PccMinResultProps extends PccMinResultTableProps, PccMinResultStatusProps {} diff --git a/src/components/results/pccmin/pcc-min-results.tsx b/src/components/results/pccmin/pcc-min-results.tsx new file mode 100644 index 0000000000..df9a90f1fe --- /dev/null +++ b/src/components/results/pccmin/pcc-min-results.tsx @@ -0,0 +1,115 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 { FunctionComponent, useCallback, useMemo, useRef } from 'react'; + +import { useIntl } from 'react-intl'; +import { useSelector } from 'react-redux'; +import { Box, useTheme } from '@mui/material'; +import { GridReadyEvent, RowClassParams } from 'ag-grid-community'; + +import { ComputingType } from '@gridsuite/commons-ui'; +import { AppState } from '../../../redux/reducer'; + +import { getNoRowsMessage, getRows, useIntlResultStatusMessages } from '../../utils/aggrid-rows-handler'; +import { DefaultCellRenderer } from '../../custom-aggrid/cell-renderers'; + +import LinearProgress from '@mui/material/LinearProgress'; +import { RunningStatus } from '../../utils/running-status'; +import { useOpenLoaderShortWait } from '../../dialogs/commons/handle-loader'; +import { RESULTS_LOADING_DELAY } from '../../network/constants'; +import { RenderTableAndExportCsv } from '../../utils/renderTable-ExportCsv'; +import { AgGridReact } from 'ag-grid-react'; +import { PccMinResultProps } from './pcc-min-result.type'; + +export const PccMinResults: FunctionComponent = ({ + result, + isLoadingResult, + columnDefs, + tableName, +}) => { + const theme = useTheme(); + const intl = useIntl(); + const gridRef = useRef(null); + + const tableNameFormatted = intl.formatMessage({ id: tableName }); + + const PccMinStatus = useSelector((state: AppState) => state.computingStatus[ComputingType.PCC_MIN]); + + //We give each tab its own loader, so we don't have a loader spinning because another tab is still doing some work + const openLoaderTab = useOpenLoaderShortWait({ + isLoading: + // We want the loader to start when the state estimation begins + PccMinStatus === RunningStatus.RUNNING || + // We still want the loader to be displayed for the remaining time there is between "the state estimation is over" + // and "the data is post processed and can be displayed" + PccMinStatus === RunningStatus.SUCCEED || + isLoadingResult, + delay: RESULTS_LOADING_DELAY, + }); + + const getRowStyle = useCallback( + (params: RowClassParams) => { + if (params?.data?.elementId) { + return { + backgroundColor: theme.selectedRow.background, + }; + } + }, + [theme.selectedRow.background] + ); + + const onRowDataUpdated = useCallback((params: any) => { + if (params.api) { + params.api.sizeColumnsToFit(); + } + }, []); + + const onGridReady = useCallback(({ api }: GridReadyEvent) => { + api?.sizeColumnsToFit(); + }, []); + const messages = useIntlResultStatusMessages(intl, true); + + const defaultColDef = useMemo( + () => ({ + filter: false, + sortable: false, + resizable: true, + lockPinned: true, + suppressMovable: true, + wrapHeaderText: true, + autoHeaderHeight: true, + flex: 1, + cellRenderer: DefaultCellRenderer, + }), + [] + ); + + const renderPccMinResults = () => { + const message = getNoRowsMessage(messages, result.singlePccMinResultInfos, PccMinStatus, !isLoadingResult); + const rowsToShow = getRows(result.singlePccMinResultInfos, PccMinStatus); + + return ( + <> + {openLoaderTab && } + + + ); + }; + + return renderPccMinResults(); +}; diff --git a/src/hooks/use-computation-results-count.ts b/src/hooks/use-computation-results-count.ts index 3a36489787..6f6499f66a 100644 --- a/src/hooks/use-computation-results-count.ts +++ b/src/hooks/use-computation-results-count.ts @@ -50,6 +50,7 @@ export const useComputationResultsCount = () => { const stateEstimationStatus = useSelector( (state: AppState) => state.computingStatus[ComputingType.STATE_ESTIMATION] ); + const pccMinStatus = useSelector((state: AppState) => state.computingStatus[ComputingType.PCC_MIN]); const [enableDeveloperMode] = useParameterState(PARAM_DEVELOPER_MODE); @@ -79,6 +80,9 @@ export const useComputationResultsCount = () => { enableDeveloperMode && (stateEstimationStatus === RunningStatus.SUCCEED || stateEstimationStatus === RunningStatus.FAILED); // Can be failed for technical reasons (e.g., server not responding or computation divergence) + const pccMinResultPresent = + enableDeveloperMode && (pccMinStatus === RunningStatus.SUCCEED || pccMinStatus === RunningStatus.FAILED); // Can be failed for technical reasons (e.g., server not responding or computation divergence) + return [ loadflowResultPresent, saResutPresent, @@ -89,5 +93,6 @@ export const useComputationResultsCount = () => { dynamicSimulationResultPresent, dynamicSecurityAnalysisResultPresent, stateEstimationResultPresent, + pccMinResultPresent, ].filter(Boolean).length; }; diff --git a/src/services/study/pcc-min.ts b/src/services/study/pcc-min.ts index 39082ea68d..714c8d2ee2 100644 --- a/src/services/study/pcc-min.ts +++ b/src/services/study/pcc-min.ts @@ -1,17 +1,17 @@ /** - * Copyright (c) 2025, RTE (http://www.rte-france.com) + * Copyright (c) 2024, RTE (http://www.rte-france.com) * This Source Code Form is subject to the terms of the Mozilla Public * 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 { getStudyUrlWithNodeUuidAndRootNetworkUuid } from './index'; -import { backendFetch, backendFetchText } from '../utils'; +import { backendFetch, backendFetchJson, backendFetchText } from '@gridsuite/commons-ui'; import type { UUID } from 'node:crypto'; -export function startPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID): Promise { +export function startPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID): Promise { console.info( - `Running pccMin on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` + `Running pcc min on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` ); const url = getStudyUrlWithNodeUuidAndRootNetworkUuid(studyUuid, currentNodeUuid, currentRootNetworkUuid) + '/pcc-min/run'; @@ -22,7 +22,7 @@ export function startPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootN export function stopPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID) { console.info( - `Stopping pccMin on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` + `Stopping pcc min on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` ); const url = `${getStudyUrlWithNodeUuidAndRootNetworkUuid( studyUuid, @@ -35,7 +35,7 @@ export function stopPccMin(studyUuid: UUID, currentNodeUuid: UUID, currentRootNe export function fetchPccMinStatus(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID) { console.info( - `Fetching pccMin status on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` + `Fetching pcc min status on ${studyUuid} on root network '${currentRootNetworkUuid}' and node ${currentNodeUuid} ...` ); const url = `${getStudyUrlWithNodeUuidAndRootNetworkUuid( studyUuid, @@ -45,3 +45,17 @@ export function fetchPccMinStatus(studyUuid: UUID, currentNodeUuid: UUID, curren console.debug(url); return backendFetchText(url); } + +export function fetchPccMinResult(studyUuid: UUID, currentNodeUuid: UUID, currentRootNetworkUuid: UUID) { + console.info( + `Fetching pcc min result on ${studyUuid} on root network ${currentRootNetworkUuid} and node ${currentNodeUuid} ...` + ); + + const url = `${getStudyUrlWithNodeUuidAndRootNetworkUuid( + studyUuid, + currentNodeUuid, + currentRootNetworkUuid + )}/pcc-min/result`; + console.debug(url); + return backendFetchJson(url); +} diff --git a/src/translations/en.json b/src/translations/en.json index 612201f924..5c07733ee1 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -1641,5 +1641,9 @@ "MissingConnectionsInVoltageLevel": "Missing connections in voltage level (Connections removed from list on validation)", "moveFeederBaysSections": "Feeder bay will be connected onto the selected busbar section", "Length": "Amount of elements", - "equipmentID": "Equipment ID" + "equipmentID": "Equipment ID", + "PccMinTri": "Pcc min (MVA) ", + "IccMin": "Icc min (kA)", + "rOhm": "r (Ohm)", + "xOhm":"x (Ohm)" } diff --git a/src/translations/fr.json b/src/translations/fr.json index 0369f1e257..94323c836a 100644 --- a/src/translations/fr.json +++ b/src/translations/fr.json @@ -1637,5 +1637,9 @@ "MissingConnectionsInVoltageLevel": "Départs absents du poste (Départs supprimés de la liste à la validation)", "moveFeederBaysSections": "Les départs déplacés sont préparés sur la section de barre sélectionnée", "Length": "Nombre d'éléments", - "equipmentID": "ID de l'ouvrage" + "equipmentID": "ID de l'ouvrage", + "PccMinTri": "Pcc min (MVA) ", + "IccMin": "Icc min (kA)", + "rOhm": "r (Ohm)", + "xOhm":"x (Ohm)" } From faafade08d3f43820f97378873ca231c2b55da31 Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Wed, 22 Oct 2025 15:34:41 +0200 Subject: [PATCH 6/7] add pcc min results and logs Signed-off-by: SOUISSI Maissa (Externe) --- src/services/study/pcc-min.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/services/study/pcc-min.ts b/src/services/study/pcc-min.ts index 2ccc225353..5a79d5fc17 100644 --- a/src/services/study/pcc-min.ts +++ b/src/services/study/pcc-min.ts @@ -7,7 +7,6 @@ import { getStudyUrlWithNodeUuidAndRootNetworkUuid } from './index'; import { backendFetch, backendFetchJson, backendFetchText } from '@gridsuite/commons-ui'; - import type { UUID } from 'node:crypto'; From 58cff99851786b78ff8e73f2584dab0f8fc547d3 Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Thu, 30 Oct 2025 09:13:04 +0100 Subject: [PATCH 7/7] fix prettier Signed-off-by: SOUISSI Maissa (Externe) --- src/services/study/pcc-min.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/services/study/pcc-min.ts b/src/services/study/pcc-min.ts index 250d29f564..4e44580229 100644 --- a/src/services/study/pcc-min.ts +++ b/src/services/study/pcc-min.ts @@ -58,4 +58,3 @@ export function fetchPccMinResult(studyUuid: UUID, currentNodeUuid: UUID, curren console.debug(url); return backendFetchJson(url); } -