Skip to content

Commit 639377f

Browse files
authored
Fix useOneBusShortcircuitAnalysisLoader which must consider rootNetwork used (#3399)
* fix(useOneBusShortcircuitAnalysisLoader): consider rootNetworkUuid to manage correctly the loader of the computation on diagram * refactor(): Fix sonar issue : This assertion is unnecessary since the receiver accepts the original type of the expression. * refactor(useOneBusShortcircuitAnalysisLoader): Add `studyUuid` in context as discussed in review Signed-off-by: sBouzols <[email protected]>
1 parent 85d4e84 commit 639377f

File tree

4 files changed

+70
-33
lines changed

4 files changed

+70
-33
lines changed

src/components/grid-layout/cards/diagrams/singleLineDiagram/hooks/use-one-bus-shortcircuit-analysis-loader.tsx

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@
55
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
66
*/
77

8-
import type { UUID } from 'node:crypto';
98
import { ReactElement, useCallback, useEffect, useMemo } from 'react';
109
import { useIntl } from 'react-intl';
1110
import { useDispatch, useSelector } from 'react-redux';
1211
import { AppState } from 'redux/reducer';
1312
import { Chip, darken, lighten } from '@mui/material';
1413
import { type MuiStyles } from '@gridsuite/commons-ui';
15-
import { setOneBusShortcircuitAnalysisDiagram } from 'redux/actions';
14+
import { resetOneBusShortcircuitAnalysisDiagram, setOneBusShortcircuitAnalysisDiagram } from 'redux/actions';
1615
import { AppDispatch } from 'redux/store';
1716
import {
1817
isOneBusShortCircuitFailedNotification,
@@ -40,38 +39,54 @@ type oneBusShortcircuitAnalysisLoader = [ReactElement, boolean, () => void, () =
4039
* A hook that handles the logic behind the diagram one bus shortcircuit analysis loader
4140
*
4241
* @param {string} diagramId - Identifier for the diagram which launched the computation
43-
* @param {UUID} nodeId - Identifier for the node which launched the computation
44-
* @param rootNetworkUuid
4542
*
4643
* @returns {oneBusShortcircuitAnalysisLoader} array which contains the controls necessary for the one bus
4744
* shortcircuit analysis loader. It also comes with a boolean to check if the loader needs to be displayed
4845
* and the message to display for the UI
4946
*/
50-
export function useOneBusShortcircuitAnalysisLoader(
51-
diagramId: string,
52-
nodeId: UUID,
53-
rootNetworkUuid: UUID
54-
): oneBusShortcircuitAnalysisLoader {
47+
export function useOneBusShortcircuitAnalysisLoader(diagramId: string): oneBusShortcircuitAnalysisLoader {
48+
const studyUuid = useSelector((state: AppState) => state.studyUuid);
49+
const currentNode = useSelector((state: AppState) => state.currentTreeNode);
50+
const rootNetworkUuid = useSelector((state: AppState) => state.currentRootNetworkUuid);
51+
5552
const studyUpdatedForce = useSelector((state: AppState) => state.studyUpdated);
5653
const oneBusShortCircuitAnalysisDiagram = useSelector((state: AppState) => state.oneBusShortCircuitAnalysisDiagram);
5754

5855
const dispatch = useDispatch<AppDispatch>();
5956
const intl = useIntl();
6057

6158
const displayOneBusShortcircuitAnalysisLoader = useCallback(() => {
62-
dispatch(setOneBusShortcircuitAnalysisDiagram(diagramId, nodeId));
63-
}, [nodeId, diagramId, dispatch]);
59+
if (!studyUuid || !currentNode?.id || !rootNetworkUuid) {
60+
return;
61+
}
62+
dispatch(setOneBusShortcircuitAnalysisDiagram(diagramId, studyUuid, rootNetworkUuid, currentNode?.id));
63+
}, [currentNode?.id, diagramId, dispatch, rootNetworkUuid, studyUuid]);
6464

6565
const resetOneBusShortcircuitAnalysisLoader = useCallback(() => {
66-
dispatch(setOneBusShortcircuitAnalysisDiagram(null));
66+
dispatch(resetOneBusShortcircuitAnalysisDiagram());
6767
}, [dispatch]);
6868

69-
const isDiagramRunningOneBusShortcircuitAnalysis = useMemo(
70-
() =>
69+
const isDiagramRunningOneBusShortcircuitAnalysis = useMemo(() => {
70+
if (!studyUuid || !currentNode?.id || !rootNetworkUuid) {
71+
return false;
72+
}
73+
74+
return (
7175
diagramId === oneBusShortCircuitAnalysisDiagram?.diagramId &&
72-
nodeId === oneBusShortCircuitAnalysisDiagram?.nodeId,
73-
[nodeId, diagramId, oneBusShortCircuitAnalysisDiagram]
74-
);
76+
studyUuid === oneBusShortCircuitAnalysisDiagram?.studyUuid &&
77+
rootNetworkUuid === oneBusShortCircuitAnalysisDiagram?.rootNetworkUuid &&
78+
currentNode?.id === oneBusShortCircuitAnalysisDiagram?.nodeId
79+
);
80+
}, [
81+
currentNode?.id,
82+
diagramId,
83+
oneBusShortCircuitAnalysisDiagram?.diagramId,
84+
oneBusShortCircuitAnalysisDiagram?.studyUuid,
85+
oneBusShortCircuitAnalysisDiagram?.rootNetworkUuid,
86+
oneBusShortCircuitAnalysisDiagram?.nodeId,
87+
rootNetworkUuid,
88+
studyUuid,
89+
]);
7590

7691
const oneBusShortcircuitAnalysisLoaderMessage = useMemo<ReactElement>(() => {
7792
return (
@@ -90,6 +105,9 @@ export function useOneBusShortcircuitAnalysisLoader(
90105
}, [intl, isDiagramRunningOneBusShortcircuitAnalysis]);
91106

92107
useEffect(() => {
108+
if (!studyUuid || !currentNode?.id || !rootNetworkUuid) {
109+
return;
110+
}
93111
if (
94112
(studyUpdatedForce && isOneBusShortCircuitResultNotification(studyUpdatedForce.eventData)) ||
95113
isOneBusShortCircuitFailedNotification(studyUpdatedForce.eventData)
@@ -99,7 +117,7 @@ export function useOneBusShortcircuitAnalysisLoader(
99117
}
100118
resetOneBusShortcircuitAnalysisLoader();
101119
}
102-
}, [resetOneBusShortcircuitAnalysisLoader, studyUpdatedForce, rootNetworkUuid]);
120+
}, [resetOneBusShortcircuitAnalysisLoader, studyUpdatedForce, rootNetworkUuid, studyUuid, currentNode?.id]);
103121

104122
return [
105123
oneBusShortcircuitAnalysisLoaderMessage,

src/components/grid-layout/cards/diagrams/singleLineDiagram/single-line-diagram-content.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ function SingleLineDiagramContent(props: SingleLineDiagramContentProps) {
112112
isDiagramRunningOneBusShortcircuitAnalysis,
113113
displayOneBusShortcircuitAnalysisLoader,
114114
resetOneBusShortcircuitAnalysisLoader,
115-
] = useOneBusShortcircuitAnalysisLoader(diagramParams.diagramUuid, currentNode?.id!, currentRootNetworkUuid!);
115+
] = useOneBusShortcircuitAnalysisLoader(diagramParams.diagramUuid);
116116

117117
/**
118118
* DIAGRAM INTERACTIVITY

src/redux/actions.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ export type AppActions =
125125
| SetRootNetworkIndexationStatusAction
126126
| SetOptionalServicesAction
127127
| SetOneBusShortcircuitAnalysisDiagramAction
128+
| ResetOneBusShortcircuitAnalysisDiagramAction
128129
| AddToRecentGlobalFiltersAction
129130
| RemoveFromRecentGlobalFiltersAction
130131
| SetLastCompletedComputationAction
@@ -959,25 +960,32 @@ export const SET_ONE_BUS_SHORTCIRCUIT_ANALYSIS_DIAGRAM = 'SET_ONE_BUS_SHORTCIRCU
959960
export type SetOneBusShortcircuitAnalysisDiagramAction = Readonly<
960961
Action<typeof SET_ONE_BUS_SHORTCIRCUIT_ANALYSIS_DIAGRAM>
961962
> &
962-
(OneBusShortCircuitAnalysisDiagram | { diagramId: null });
963-
964-
export function setOneBusShortcircuitAnalysisDiagram(diagramId: null): SetOneBusShortcircuitAnalysisDiagramAction;
963+
OneBusShortCircuitAnalysisDiagram;
965964
export function setOneBusShortcircuitAnalysisDiagram(
966965
diagramId: OneBusShortCircuitAnalysisDiagram['diagramId'],
966+
studyUuid: OneBusShortCircuitAnalysisDiagram['studyUuid'],
967+
rootNetworkUuid: OneBusShortCircuitAnalysisDiagram['rootNetworkUuid'],
967968
nodeId: OneBusShortCircuitAnalysisDiagram['nodeId']
968-
): SetOneBusShortcircuitAnalysisDiagramAction;
969-
export function setOneBusShortcircuitAnalysisDiagram(
970-
diagramId: OneBusShortCircuitAnalysisDiagram['diagramId'] | null,
971-
nodeId?: OneBusShortCircuitAnalysisDiagram['nodeId']
972969
): SetOneBusShortcircuitAnalysisDiagramAction {
973970
return {
974971
type: SET_ONE_BUS_SHORTCIRCUIT_ANALYSIS_DIAGRAM,
975972
diagramId: diagramId,
976-
// @ts-expect-error: function overload protect call
973+
studyUuid: studyUuid,
974+
rootNetworkUuid: rootNetworkUuid,
977975
nodeId: nodeId,
978976
};
979977
}
980978

979+
export const RESET_ONE_BUS_SHORTCIRCUIT_ANALYSIS_DIAGRAM = 'RESET_ONE_BUS_SHORTCIRCUIT_ANALYSIS_DIAGRAM';
980+
export type ResetOneBusShortcircuitAnalysisDiagramAction = Readonly<
981+
Action<typeof RESET_ONE_BUS_SHORTCIRCUIT_ANALYSIS_DIAGRAM>
982+
>;
983+
export function resetOneBusShortcircuitAnalysisDiagram(): ResetOneBusShortcircuitAnalysisDiagramAction {
984+
return {
985+
type: RESET_ONE_BUS_SHORTCIRCUIT_ANALYSIS_DIAGRAM,
986+
};
987+
}
988+
981989
export const ADD_TO_RECENT_GLOBAL_FILTERS = 'ADD_TO_RECENT_GLOBAL_FILTERS';
982990
export type AddToRecentGlobalFiltersAction = Readonly<Action<typeof ADD_TO_RECENT_GLOBAL_FILTERS>> & {
983991
globalFilters: GlobalFilter[];

src/redux/reducer.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ import {
177177
SET_MODIFICATIONS_IN_PROGRESS,
178178
SET_MONO_ROOT_STUDY,
179179
SET_ONE_BUS_SHORTCIRCUIT_ANALYSIS_DIAGRAM,
180+
RESET_ONE_BUS_SHORTCIRCUIT_ANALYSIS_DIAGRAM,
180181
SET_OPEN_MAP,
181182
SET_OPTIONAL_SERVICES,
182183
SET_PARAMS_LOADED,
@@ -199,6 +200,7 @@ import {
199200
type SetModificationsInProgressAction,
200201
type SetMonoRootStudyAction,
201202
type SetOneBusShortcircuitAnalysisDiagramAction,
203+
type ResetOneBusShortcircuitAnalysisDiagramAction,
202204
type SetOpenMapAction,
203205
type SetOptionalServicesAction,
204206
type SetParamsLoadedAction,
@@ -429,6 +431,8 @@ export const DEFAULT_LOGS_PAGINATION: LogsPaginationConfig = {
429431

430432
export interface OneBusShortCircuitAnalysisDiagram {
431433
diagramId: string;
434+
studyUuid: UUID;
435+
rootNetworkUuid: UUID;
432436
nodeId: UUID;
433437
}
434438

@@ -1728,12 +1732,19 @@ export const reducer = createReducer(initialState, (builder) => {
17281732
builder.addCase(
17291733
SET_ONE_BUS_SHORTCIRCUIT_ANALYSIS_DIAGRAM,
17301734
(state, action: SetOneBusShortcircuitAnalysisDiagramAction) => {
1731-
state.oneBusShortCircuitAnalysisDiagram = action.diagramId
1732-
? {
1733-
diagramId: action.diagramId,
1734-
nodeId: action.nodeId,
1735-
}
1736-
: null;
1735+
state.oneBusShortCircuitAnalysisDiagram = {
1736+
diagramId: action.diagramId,
1737+
studyUuid: action.studyUuid,
1738+
rootNetworkUuid: action.rootNetworkUuid,
1739+
nodeId: action.nodeId,
1740+
};
1741+
}
1742+
);
1743+
1744+
builder.addCase(
1745+
RESET_ONE_BUS_SHORTCIRCUIT_ANALYSIS_DIAGRAM,
1746+
(state, action: ResetOneBusShortcircuitAnalysisDiagramAction) => {
1747+
state.oneBusShortCircuitAnalysisDiagram = null;
17371748
}
17381749
);
17391750

0 commit comments

Comments
 (0)