diff --git a/src/components/dialogs/parameters/use-get-pcc-min-parameters.ts b/src/components/dialogs/parameters/use-get-pcc-min-parameters.ts new file mode 100644 index 0000000000..1196750892 --- /dev/null +++ b/src/components/dialogs/parameters/use-get-pcc-min-parameters.ts @@ -0,0 +1,73 @@ +/** + * 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 { useCallback, useEffect, useRef, useState } from 'react'; +import { useSelector } from 'react-redux'; +import { AppState } from '../../../redux/reducer'; +import { + ComputingType, + getPccMinStudyParameters, + NotificationsUrlKeys, + PccMinParameters, + useNotificationsListener, + useSnackMessage, +} from '@gridsuite/commons-ui'; +import { useOptionalServiceStatus } from '../../../hooks/use-optional-service-status'; +import { OptionalServicesNames, OptionalServicesStatus } from '../../utils/optional-services'; +import type { UUID } from 'node:crypto'; +import { haveComputationParametersChanged } from './use-parameters-notification'; +import { isComputationParametersUpdatedNotification } from 'types/notification-types'; + +export const useGetPccMinParameters = (): PccMinParameters | null => { + const studyUuid = useSelector((state: AppState) => state.studyUuid); + const { snackError } = useSnackMessage(); + const [pccMinParams, setPccMinParams] = useState(null); + + const pccMinAvailability = useOptionalServiceStatus(OptionalServicesNames.PccMin); + + const fetchPccMinStudyParameters = useCallback( + (studyUuid: UUID) => { + getPccMinStudyParameters(studyUuid) + .then((params) => { + setPccMinParams(params); + }) + .catch((error) => { + snackError({ + messageTxt: error.message, + headerId: 'paramsRetrievingError', + }); + }); + }, + [snackError] + ); + useEffect(() => { + if (studyUuid && pccMinAvailability === OptionalServicesStatus.Up) { + fetchPccMinStudyParameters(studyUuid); + } + }, [pccMinAvailability, studyUuid, fetchPccMinStudyParameters]); + + const pccMinParamsUpdated = useCallback( + (event: MessageEvent) => { + const eventData = JSON.parse(event.data); + if ( + studyUuid && + pccMinAvailability === OptionalServicesStatus.Up && + isComputationParametersUpdatedNotification(eventData) && + haveComputationParametersChanged(ComputingType.PCC_MIN, eventData) + ) { + fetchPccMinStudyParameters(studyUuid); + } + }, + [studyUuid, fetchPccMinStudyParameters, pccMinAvailability] + ); + + useNotificationsListener(NotificationsUrlKeys.STUDY, { + listenerCallbackMessage: pccMinParamsUpdated, + }); + + return pccMinParams; +}; diff --git a/src/components/parameters-tabs.tsx b/src/components/parameters-tabs.tsx index 829cf2e6b1..67cfac9088 100644 --- a/src/components/parameters-tabs.tsx +++ b/src/components/parameters-tabs.tsx @@ -53,6 +53,7 @@ import { getSecurityAnalysisDefaultLimitReductions, LoadFlowParametersInline, NetworkVisualizationParametersInline, + PccMinParametersInLine, SecurityAnalysisParametersInline, SensitivityAnalysisParametersInline, ShortCircuitParametersInLine, @@ -61,6 +62,7 @@ import { } from '@gridsuite/commons-ui'; import { useParametersNotification } from './dialogs/parameters/use-parameters-notification'; import { useGetVoltageInitParameters } from './dialogs/parameters/use-get-voltage-init-parameters'; +import { useGetPccMinParameters } from './dialogs/parameters/use-get-pcc-min-parameters'; enum TAB_VALUES { lfParamsTabValue = 'LOAD_FLOW', @@ -103,6 +105,7 @@ const ParametersTabs: FunctionComponent = ({ view }) => { const voltageInitAvailability = useOptionalServiceStatus(OptionalServicesNames.VoltageInit); const shortCircuitAvailability = useOptionalServiceStatus(OptionalServicesNames.ShortCircuit); const stateEstimationAvailability = useOptionalServiceStatus(OptionalServicesNames.StateEstimation); + const pccMinAvailability = useOptionalServiceStatus(OptionalServicesNames.PccMin); const networkVisualizationsParameters = useSelector((state: AppState) => state.networkVisualizationsParameters); @@ -180,6 +183,7 @@ const ParametersTabs: FunctionComponent = ({ view }) => { ); const shortCircuitParameters = useGetShortCircuitParameters(); + const pccMinParameters = useGetPccMinParameters(); const voltageInitParameters = useGetVoltageInitParameters(); const useStateEstimationParameters = useGetStateEstimationParameters(); @@ -228,6 +232,7 @@ const ParametersTabs: FunctionComponent = ({ view }) => { (!enableDeveloperMode && (oldValue === TAB_VALUES.sensitivityAnalysisParamsTabValue || oldValue === TAB_VALUES.shortCircuitParamsTabValue || + oldValue === TAB_VALUES.pccMinTabValue || oldValue === TAB_VALUES.dynamicSimulationParamsTabValue || oldValue === TAB_VALUES.dynamicSecurityAnalysisParamsTabValue)) || oldValue === TAB_VALUES.stateEstimationTabValue @@ -286,6 +291,14 @@ const ParametersTabs: FunctionComponent = ({ view }) => { enableDeveloperMode={enableDeveloperMode} /> ); + case TAB_VALUES.pccMinTabValue: + return ( + + ); case TAB_VALUES.dynamicSimulationParamsTabValue: return ; case TAB_VALUES.dynamicSecurityAnalysisParamsTabValue: @@ -328,6 +341,7 @@ const ParametersTabs: FunctionComponent = ({ view }) => { currentRootNetworkUuid, sensitivityAnalysisBackend, shortCircuitParameters, + pccMinParameters, user, voltageInitParameters, useStateEstimationParameters, @@ -375,6 +389,13 @@ const ParametersTabs: FunctionComponent = ({ view }) => { label={} value={TAB_VALUES.shortCircuitParamsTabValue} /> + {enableDeveloperMode ? ( + } + value={TAB_VALUES.pccMinTabValue} + /> + ) : null} {enableDeveloperMode ? (