Skip to content

Commit 8ce3605

Browse files
authored
Add pagination reset actions for security, sensitivity, and shortcircuit analyses (#3201)
Signed-off-by: achour94 <[email protected]>
1 parent f7d4e68 commit 8ce3605

File tree

4 files changed

+135
-2
lines changed

4 files changed

+135
-2
lines changed

src/components/run-button-container.jsx

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ import { startDynamicSecurityAnalysis, stopDynamicSecurityAnalysis } from '../se
4343
import { useParameterState } from './dialogs/parameters/use-parameters-state';
4444
import { isSecurityModificationNode } from './graph/tree-node.type';
4545
import useComputationDebug from '../hooks/use-computation-debug';
46+
import { PaginationType } from 'types/custom-aggrid-types';
47+
import { usePaginationReset } from 'hooks/use-pagination-selector';
4648

4749
const checkDynamicSimulationParameters = (studyUuid) => {
4850
return fetchDynamicSimulationParameters(studyUuid).then((params) => {
@@ -53,6 +55,13 @@ const checkDynamicSimulationParameters = (studyUuid) => {
5355
return isMappingValid;
5456
});
5557
};
58+
59+
const COMPUTATIONS_WITH_PAGINATION = [
60+
ComputingType.SECURITY_ANALYSIS,
61+
ComputingType.SENSITIVITY_ANALYSIS,
62+
ComputingType.SHORT_CIRCUIT,
63+
];
64+
5665
export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkUuid, disabled }) {
5766
const loadFlowStatus = useSelector((state) => state.computingStatus[ComputingType.LOAD_FLOW]);
5867
const loadFlowStatusInfos = useSelector((state) => state.computingStatusParameters[ComputingType.LOAD_FLOW]);
@@ -112,6 +121,31 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU
112121
const shortCircuitAvailability = useOptionalServiceStatus(OptionalServicesNames.ShortCircuit);
113122
const stateEstimationAvailability = useOptionalServiceStatus(OptionalServicesNames.StateEstimation);
114123

124+
const resetSecurityAnalysisPagination = usePaginationReset(PaginationType.SecurityAnalysis);
125+
const resetSensitivityAnalysisPagination = usePaginationReset(PaginationType.SensitivityAnalysis);
126+
const resetShortCircuitAnalysisPagination = usePaginationReset(PaginationType.ShortcircuitAnalysis);
127+
128+
const resetPaginationForComputingType = useCallback(
129+
(computingType) => {
130+
if (COMPUTATIONS_WITH_PAGINATION.includes(computingType)) {
131+
switch (computingType) {
132+
case ComputingType.SECURITY_ANALYSIS:
133+
resetSecurityAnalysisPagination();
134+
break;
135+
case ComputingType.SENSITIVITY_ANALYSIS:
136+
resetSensitivityAnalysisPagination();
137+
break;
138+
case ComputingType.SHORT_CIRCUIT:
139+
resetShortCircuitAnalysisPagination();
140+
break;
141+
default:
142+
break;
143+
}
144+
}
145+
},
146+
[resetSecurityAnalysisPagination, resetSensitivityAnalysisPagination, resetShortCircuitAnalysisPagination]
147+
);
148+
115149
// --- for running in debug mode --- //
116150
const subscribeDebug = useComputationDebug({
117151
studyUuid: studyUuid,
@@ -143,11 +177,12 @@ export function RunButtonContainer({ studyUuid, currentNode, currentRootNetworkU
143177
})
144178
.finally(() => {
145179
dispatch(setComputationStarting(false));
180+
resetPaginationForComputingType(computingType);
146181
// we clear the computation logs filter when a new computation is started
147182
dispatch(setLogsFilter(computingType, []));
148183
});
149184
},
150-
[dispatch, snackError]
185+
[dispatch, snackError, resetPaginationForComputingType]
151186
);
152187
//In DynaFlow, we need to verify that the current node is a security node before starting the computation.
153188
const checkLoadFlowProvider = useCallback(

src/hooks/use-pagination-selector.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ import {
1515
ShortcircuitAnalysisTab,
1616
} from '../types/custom-aggrid-types';
1717
import {
18+
resetSecurityAnalysisPagination,
19+
resetSensitivityAnalysisPagination,
20+
resetShortcircuitAnalysisPagination,
1821
setSecurityAnalysisResultPagination,
1922
setSensitivityAnalysisResultPagination,
2023
setShortcircuitAnalysisResultPagination,
@@ -79,3 +82,20 @@ export const usePaginationSelector = (paginationType: PaginationType, pagination
7982

8083
return { pagination, dispatchPagination };
8184
};
85+
86+
const PAGINATION_RESET_DISPATCHERS = {
87+
[PaginationType.SecurityAnalysis]: resetSecurityAnalysisPagination,
88+
[PaginationType.SensitivityAnalysis]: resetSensitivityAnalysisPagination,
89+
[PaginationType.ShortcircuitAnalysis]: resetShortcircuitAnalysisPagination,
90+
} as const;
91+
92+
export const usePaginationReset = (paginationType: PaginationType) => {
93+
const dispatch = useDispatch();
94+
95+
const resetPagination = useCallback(() => {
96+
const resetAction = PAGINATION_RESET_DISPATCHERS[paginationType]();
97+
dispatch(resetAction);
98+
}, [dispatch, paginationType]);
99+
100+
return resetPagination;
101+
};

src/redux/actions.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,10 @@ export type AppActions =
150150
| SetOpenMapAction
151151
| SecurityAnalysisResultPaginationAction
152152
| SensitivityAnalysisResultPaginationAction
153-
| ShortcircuitAnalysisResultPaginationAction;
153+
| ShortcircuitAnalysisResultPaginationAction
154+
| ResetSecurityAnalysisPaginationAction
155+
| ResetSensitivityAnalysisPaginationAction
156+
| ResetShortcircuitAnalysisPaginationAction;
154157

155158
export const SET_APP_TAB_INDEX = 'SET_APP_TAB_INDEX';
156159
export type SetAppTabIndexAction = Readonly<Action<typeof SET_APP_TAB_INDEX>> & {
@@ -1036,6 +1039,15 @@ export function setSecurityAnalysisResultPagination(
10361039
};
10371040
}
10381041

1042+
export const RESET_SECURITY_ANALYSIS_PAGINATION = 'RESET_SECURITY_ANALYSIS_PAGINATION';
1043+
export type ResetSecurityAnalysisPaginationAction = Readonly<Action<typeof RESET_SECURITY_ANALYSIS_PAGINATION>>;
1044+
1045+
export function resetSecurityAnalysisPagination(): ResetSecurityAnalysisPaginationAction {
1046+
return {
1047+
type: RESET_SECURITY_ANALYSIS_PAGINATION,
1048+
};
1049+
}
1050+
10391051
export const SENSITIVITY_ANALYSIS_RESULT_PAGINATION = 'SENSITIVITY_ANALYSIS_RESULT_PAGINATION';
10401052
export type SensitivityAnalysisResultPaginationAction = Readonly<
10411053
Action<typeof SENSITIVITY_ANALYSIS_RESULT_PAGINATION>
@@ -1055,6 +1067,15 @@ export function setSensitivityAnalysisResultPagination(
10551067
};
10561068
}
10571069

1070+
export const RESET_SENSITIVITY_ANALYSIS_PAGINATION = 'RESET_SENSITIVITY_ANALYSIS_PAGINATION';
1071+
export type ResetSensitivityAnalysisPaginationAction = Readonly<Action<typeof RESET_SENSITIVITY_ANALYSIS_PAGINATION>>;
1072+
1073+
export function resetSensitivityAnalysisPagination(): ResetSensitivityAnalysisPaginationAction {
1074+
return {
1075+
type: RESET_SENSITIVITY_ANALYSIS_PAGINATION,
1076+
};
1077+
}
1078+
10581079
export const SHORTCIRCUIT_ANALYSIS_RESULT_PAGINATION = 'SHORTCIRCUIT_ANALYSIS_RESULT_PAGINATION';
10591080
export type ShortcircuitAnalysisResultPaginationAction = Readonly<
10601081
Action<typeof SHORTCIRCUIT_ANALYSIS_RESULT_PAGINATION>
@@ -1074,6 +1095,15 @@ export function setShortcircuitAnalysisResultPagination(
10741095
};
10751096
}
10761097

1098+
export const RESET_SHORTCIRCUIT_ANALYSIS_PAGINATION = 'RESET_SHORTCIRCUIT_ANALYSIS_PAGINATION';
1099+
export type ResetShortcircuitAnalysisPaginationAction = Readonly<Action<typeof RESET_SHORTCIRCUIT_ANALYSIS_PAGINATION>>;
1100+
1101+
export function resetShortcircuitAnalysisPagination(): ResetShortcircuitAnalysisPaginationAction {
1102+
return {
1103+
type: RESET_SHORTCIRCUIT_ANALYSIS_PAGINATION,
1104+
};
1105+
}
1106+
10771107
export const SPREADSHEET_FILTER = 'SPREADSHEET_FILTER';
10781108
export type SpreadsheetFilterAction = Readonly<Action<typeof SPREADSHEET_FILTER>> & {
10791109
filterTab: keyof AppState[typeof SPREADSHEET_STORE_FIELD];

src/redux/reducer.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,13 +122,19 @@ import {
122122
RESET_EQUIPMENTS_POST_COMPUTATION,
123123
RESET_LOGS_FILTER,
124124
RESET_MAP_EQUIPMENTS,
125+
RESET_SECURITY_ANALYSIS_PAGINATION,
126+
RESET_SENSITIVITY_ANALYSIS_PAGINATION,
127+
RESET_SHORTCIRCUIT_ANALYSIS_PAGINATION,
125128
type ResetAllSpreadsheetGlobalFiltersAction,
126129
type ResetDiagramEventAction,
127130
type ResetEquipmentsAction,
128131
type ResetEquipmentsByTypesAction,
129132
type ResetEquipmentsPostComputationAction,
130133
type ResetLogsFilterAction,
131134
type ResetMapEquipmentsAction,
135+
ResetSecurityAnalysisPaginationAction,
136+
ResetSensitivityAnalysisPaginationAction,
137+
ResetShortcircuitAnalysisPaginationAction,
132138
SAVE_SPREADSHEET_GS_FILTER,
133139
type SaveSpreadSheetGlobalFilterAction,
134140
SECURITY_ANALYSIS_RESULT_FILTER,
@@ -297,8 +303,11 @@ import {
297303
import {
298304
FilterConfig,
299305
PaginationConfig,
306+
SECURITY_ANALYSIS_TABS,
300307
SecurityAnalysisTab,
308+
SENSITIVITY_ANALYSIS_TABS,
301309
SensitivityAnalysisTab,
310+
SHORTCIRCUIT_ANALYSIS_TABS,
302311
ShortcircuitAnalysisTab,
303312
SortConfig,
304313
SortWay,
@@ -1635,6 +1644,17 @@ export const reducer = createReducer(initialState, (builder) => {
16351644
action[SECURITY_ANALYSIS_PAGINATION_STORE_FIELD];
16361645
});
16371646

1647+
builder.addCase(RESET_SECURITY_ANALYSIS_PAGINATION, (state, _action: ResetSecurityAnalysisPaginationAction) => {
1648+
// Reset all security analysis tabs to page 0 but keep their rowsPerPage
1649+
SECURITY_ANALYSIS_TABS.forEach((tab) => {
1650+
const currentPagination = state[SECURITY_ANALYSIS_PAGINATION_STORE_FIELD][tab];
1651+
state[SECURITY_ANALYSIS_PAGINATION_STORE_FIELD][tab] = {
1652+
page: 0,
1653+
rowsPerPage: currentPagination.rowsPerPage,
1654+
};
1655+
});
1656+
});
1657+
16381658
builder.addCase(
16391659
SENSITIVITY_ANALYSIS_RESULT_PAGINATION,
16401660
(state, action: SensitivityAnalysisResultPaginationAction) => {
@@ -1643,6 +1663,20 @@ export const reducer = createReducer(initialState, (builder) => {
16431663
}
16441664
);
16451665

1666+
builder.addCase(
1667+
RESET_SENSITIVITY_ANALYSIS_PAGINATION,
1668+
(state, _action: ResetSensitivityAnalysisPaginationAction) => {
1669+
// Reset all sensitivity analysis tabs to page 0 but keep their rowsPerPage
1670+
SENSITIVITY_ANALYSIS_TABS.forEach((tab) => {
1671+
const currentPagination = state[SENSITIVITY_ANALYSIS_PAGINATION_STORE_FIELD][tab];
1672+
state[SENSITIVITY_ANALYSIS_PAGINATION_STORE_FIELD][tab] = {
1673+
page: 0,
1674+
rowsPerPage: currentPagination.rowsPerPage,
1675+
};
1676+
});
1677+
}
1678+
);
1679+
16461680
builder.addCase(
16471681
SHORTCIRCUIT_ANALYSIS_RESULT_PAGINATION,
16481682
(state, action: ShortcircuitAnalysisResultPaginationAction) => {
@@ -1651,6 +1685,20 @@ export const reducer = createReducer(initialState, (builder) => {
16511685
}
16521686
);
16531687

1688+
builder.addCase(
1689+
RESET_SHORTCIRCUIT_ANALYSIS_PAGINATION,
1690+
(state, _action: ResetShortcircuitAnalysisPaginationAction) => {
1691+
// Reset all shortcircuit analysis tabs to page 0 but keep their rowsPerPage
1692+
SHORTCIRCUIT_ANALYSIS_TABS.forEach((tab) => {
1693+
const currentPagination = state[SHORTCIRCUIT_ANALYSIS_PAGINATION_STORE_FIELD][tab];
1694+
state[SHORTCIRCUIT_ANALYSIS_PAGINATION_STORE_FIELD][tab] = {
1695+
page: 0,
1696+
rowsPerPage: currentPagination.rowsPerPage,
1697+
};
1698+
});
1699+
}
1700+
);
1701+
16541702
builder.addCase(SPREADSHEET_FILTER, (state, action: SpreadsheetFilterAction) => {
16551703
state[SPREADSHEET_STORE_FIELD][action.filterTab] = action[SPREADSHEET_STORE_FIELD];
16561704
});

0 commit comments

Comments
 (0)