Skip to content

Commit db6e23b

Browse files
authored
Save pagination infos for security, sensitivity, and shortcircuit analysis results (#3195)
Signed-off-by: achour94 <[email protected]>
1 parent 8839213 commit db6e23b

File tree

9 files changed

+324
-55
lines changed

9 files changed

+324
-55
lines changed

src/components/results/securityanalysis/security-analysis-result-tab.tsx

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,17 @@ import { ComputationReportViewer } from '../common/computation-report-viewer';
2222
import { QueryParamsType, SecurityAnalysisTabProps } from './security-analysis.type';
2323
import {
2424
convertFilterValues,
25-
DEFAULT_PAGE_COUNT,
2625
getStoreFields,
2726
mappingColumnToField,
2827
NMK_TYPE,
2928
RESULT_TYPE,
3029
useFetchFiltersEnums,
3130
} from './security-analysis-result-utils';
32-
import { FilterType as AgGridFilterType } from '../../../types/custom-aggrid-types';
31+
import {
32+
FilterType as AgGridFilterType,
33+
PaginationType,
34+
SecurityAnalysisTab,
35+
} from '../../../types/custom-aggrid-types';
3336
import { SelectChangeEvent } from '@mui/material/Select/SelectInput';
3437
import { SecurityAnalysisExportButton } from './security-analysis-export-button';
3538
import { useSecurityAnalysisColumnsDefs } from './use-security-analysis-column-defs';
@@ -45,6 +48,7 @@ import GlobalFilterSelector from '../common/global-filter/global-filter-selector
4548
import useGlobalFilters from '../common/global-filter/use-global-filters';
4649
import { useGlobalFilterOptions } from '../common/global-filter/use-global-filter-options';
4750
import { EQUIPMENT_TYPES } from '../../utils/equipment-types';
51+
import { usePaginationSelector } from 'hooks/use-pagination-selector';
4852

4953
const styles = {
5054
tabsAndToolboxContainer: {
@@ -88,9 +92,7 @@ export const SecurityAnalysisResultTab: FunctionComponent<SecurityAnalysisTabPro
8892
const tabIndexRef = useRef<number>();
8993
tabIndexRef.current = tabIndex;
9094
const [nmkType, setNmkType] = useState(NMK_TYPE.CONSTRAINTS_FROM_CONTINGENCIES);
91-
const [rowsPerPage, setRowsPerPage] = useState<number>(DEFAULT_PAGE_COUNT as number);
9295
const [count, setCount] = useState<number>(0);
93-
const [page, setPage] = useState<number>(0);
9496

9597
useEffect(() => {
9698
if (!enableDeveloperMode && tabIndexRef.current === N_RESULTS_TAB_INDEX) {
@@ -117,6 +119,11 @@ export const SecurityAnalysisResultTab: FunctionComponent<SecurityAnalysisTabPro
117119
);
118120

119121
const { filters } = useFilterSelector(AgGridFilterType.SecurityAnalysis, getStoreFields(tabIndex));
122+
const { pagination, dispatchPagination } = usePaginationSelector(
123+
PaginationType.SecurityAnalysis,
124+
getStoreFields(tabIndex) as SecurityAnalysisTab
125+
);
126+
const { page, rowsPerPage } = pagination;
120127
const { globalFilters, handleGlobalFilterChange, getGlobalFilterParameter } = useGlobalFilters({});
121128
const { countriesFilter, voltageLevelsFilter, propertiesFilter } = useGlobalFilterOptions();
122129

@@ -126,8 +133,8 @@ export const SecurityAnalysisResultTab: FunctionComponent<SecurityAnalysisTabPro
126133
);
127134

128135
const memoizedSetPageCallback = useCallback(() => {
129-
setPage(0);
130-
}, []);
136+
dispatchPagination({ ...pagination, page: 0 });
137+
}, [pagination, dispatchPagination]);
131138

132139
const fetchSecurityAnalysisResultWithQueryParams = useCallback(
133140
(studyUuid: string, nodeUuid: string) => {
@@ -141,7 +148,7 @@ export const SecurityAnalysisResultTab: FunctionComponent<SecurityAnalysisTabPro
141148

142149
if (tabIndex === NMK_RESULTS_TAB_INDEX) {
143150
queryParams['page'] = page;
144-
queryParams['size'] = rowsPerPage;
151+
queryParams['size'] = rowsPerPage as number;
145152
}
146153

147154
if (sortConfig?.length) {
@@ -194,10 +201,10 @@ export const SecurityAnalysisResultTab: FunctionComponent<SecurityAnalysisTabPro
194201
const resetResultStates = useCallback(() => {
195202
setResult(null);
196203
setCount(0);
197-
setPage(0);
198204
}, [setResult]);
199205

200206
const handleChangeNmkType = (event: SelectChangeEvent) => {
207+
dispatchPagination({ page: 0, rowsPerPage });
201208
resetResultStates();
202209
setNmkType(
203210
nmkType === NMK_TYPE.CONSTRAINTS_FROM_CONTINGENCIES
@@ -212,14 +219,20 @@ export const SecurityAnalysisResultTab: FunctionComponent<SecurityAnalysisTabPro
212219
};
213220

214221
// Pagination, sort and filter
215-
const handleChangePage = useCallback((_: React.MouseEvent<HTMLButtonElement> | null, selectedPage: number) => {
216-
setPage(selectedPage);
217-
}, []);
222+
const handleChangePage = useCallback(
223+
(_: React.MouseEvent<HTMLButtonElement> | null, selectedPage: number) => {
224+
dispatchPagination({ ...pagination, page: selectedPage });
225+
},
226+
[pagination, dispatchPagination]
227+
);
218228

219-
const handleChangeRowsPerPage = useCallback((event: React.ChangeEvent<{ value: string }>) => {
220-
setRowsPerPage(parseInt(event.target.value, 10));
221-
setPage(0);
222-
}, []);
229+
const handleChangeRowsPerPage = useCallback(
230+
(event: React.ChangeEvent<{ value: string }>) => {
231+
const newRowsPerPage = parseInt(event.target.value, 10);
232+
dispatchPagination({ page: 0, rowsPerPage: newRowsPerPage });
233+
},
234+
[dispatchPagination]
235+
);
223236

224237
const { loading: filterEnumsLoading, result: filterEnums } = useFetchFiltersEnums();
225238

@@ -329,7 +342,7 @@ export const SecurityAnalysisResultTab: FunctionComponent<SecurityAnalysisTabPro
329342
isFromContingency={nmkType === NMK_TYPE.CONSTRAINTS_FROM_CONTINGENCIES}
330343
paginationProps={{
331344
count,
332-
rowsPerPage,
345+
rowsPerPage: rowsPerPage as number,
333346
page,
334347
onPageChange: handleChangePage,
335348
onRowsPerPageChange: handleChangeRowsPerPage,

src/components/results/sensitivity-analysis/paged-sensitivity-analysis-result.tsx

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {
1010
DATA_KEY_TO_FILTER_KEY_N,
1111
DATA_KEY_TO_FILTER_KEY_NK,
1212
DATA_KEY_TO_SORT_KEY,
13-
DEFAULT_PAGE_COUNT,
1413
FUNCTION_TYPES,
1514
mappingTabs,
1615
PAGE_OPTIONS,
@@ -28,21 +27,25 @@ import { useSelector } from 'react-redux';
2827
import { RunningStatus } from '../../utils/running-status';
2928
import { SENSITIVITY_ANALYSIS_RESULT_SORT_STORE } from '../../../utils/store-sort-filter-fields';
3029
import { useFilterSelector } from '../../../hooks/use-filter-selector';
31-
import { FilterType as AgGridFilterType, SortWay } from '../../../types/custom-aggrid-types';
30+
import {
31+
FilterType as AgGridFilterType,
32+
PaginationType,
33+
SensitivityAnalysisTab,
34+
SortWay,
35+
} from '../../../types/custom-aggrid-types';
3236
import { UUID } from 'crypto';
3337
import { SensiKind, SENSITIVITY_AT_NODE } from './sensitivity-analysis-result.type';
3438
import { AppState } from '../../../redux/reducer';
3539
import { SensitivityResult, SensitivityResultFilterOptions } from '../../../services/study/sensitivity-analysis.type';
3640
import { GlobalFilters } from '../common/global-filter/global-filter-types';
41+
import { usePaginationSelector } from 'hooks/use-pagination-selector';
3742

3843
export type PagedSensitivityAnalysisResultProps = {
3944
studyUuid: UUID;
4045
nodeUuid: UUID;
4146
currentRootNetworkUuid: UUID;
4247
nOrNkIndex: number;
4348
sensiKind: SensiKind;
44-
page: number;
45-
setPage: (newPage: number) => void;
4649
setCsvHeaders: (newHeaders: string[]) => void;
4750
setIsCsvButtonDisabled: (newIsCsv: boolean) => void;
4851
globalFilters?: GlobalFilters;
@@ -54,15 +57,12 @@ function PagedSensitivityAnalysisResult({
5457
studyUuid,
5558
nodeUuid,
5659
currentRootNetworkUuid,
57-
page,
58-
setPage,
5960
setCsvHeaders,
6061
setIsCsvButtonDisabled,
6162
globalFilters,
6263
}: Readonly<PagedSensitivityAnalysisResultProps>) {
6364
const intl = useIntl();
6465

65-
const [rowsPerPage, setRowsPerPage] = useState(DEFAULT_PAGE_COUNT);
6666
const [count, setCount] = useState<number>(0);
6767
const [result, setResult] = useState<SensitivityResult | null>(null);
6868
const [options, setOptions] = useState<SensitivityResultFilterOptions | null>(null);
@@ -74,6 +74,11 @@ function PagedSensitivityAnalysisResult({
7474
);
7575

7676
const { filters } = useFilterSelector(AgGridFilterType.SensitivityAnalysis, mappingTabs(sensiKind, nOrNkIndex));
77+
const { pagination, dispatchPagination } = usePaginationSelector(
78+
PaginationType.SensitivityAnalysis,
79+
mappingTabs(sensiKind, nOrNkIndex) as SensitivityAnalysisTab
80+
);
81+
const { page, rowsPerPage } = pagination;
7782

7883
const filtersDef = useMemo(() => {
7984
const baseFilters = [
@@ -106,22 +111,22 @@ function PagedSensitivityAnalysisResult({
106111

107112
const handleChangePage = useCallback(
108113
(_: MouseEvent<HTMLButtonElement> | null, newPage: number) => {
109-
setPage(newPage);
114+
dispatchPagination({ ...pagination, page: newPage });
110115
},
111-
[setPage]
116+
[pagination, dispatchPagination]
112117
);
113118

114119
const handleChangeRowsPerPage = useCallback(
115120
(event: ChangeEvent<HTMLInputElement>) => {
116-
setRowsPerPage(parseInt(event.target.value, 10));
117-
setPage(0);
121+
const newRowsPerPage = parseInt(event.target.value, 10);
122+
dispatchPagination({ page: 0, rowsPerPage: newRowsPerPage });
118123
},
119-
[setPage]
124+
[dispatchPagination]
120125
);
121126

122127
const onFilter = useCallback(() => {
123-
setPage(0);
124-
}, [setPage]);
128+
dispatchPagination({ ...pagination, page: 0 });
129+
}, [pagination, dispatchPagination]);
125130

126131
const fetchFilterOptions = useCallback(() => {
127132
const selector = {

src/components/results/sensitivity-analysis/sensitivity-analysis-result-tab.tsx

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ function SensitivityAnalysisResultTab({
5050
const [sensiTab, setSensiTab] = useState<SensiTab>(SENSITIVITY_IN_DELTA_MW);
5151
const [isCsvExportSuccessful, setIsCsvExportSuccessful] = useState<boolean>(false);
5252
const [isCsvExportLoading, setIsCsvExportLoading] = useState<boolean>(false);
53-
const [page, setPage] = useState<number>(0);
5453
const sensitivityAnalysisStatus = useSelector(
5554
(state: AppState) => state.computingStatus[ComputingType.SENSITIVITY_ANALYSIS]
5655
);
@@ -60,11 +59,6 @@ function SensitivityAnalysisResultTab({
6059
const { countriesFilter, voltageLevelsFilter, propertiesFilter } = useGlobalFilterOptions();
6160

6261
const initTable = () => {
63-
/* set page to 0 to avoid being in out of range (0 to 0, but page is > 0)
64-
for the page prop of MUI TablePagination if was not on the first page
65-
for the prev sensiKind */
66-
setPage(0);
67-
6862
setIsCsvExportSuccessful(false);
6963
};
7064

@@ -161,8 +155,6 @@ function SensitivityAnalysisResultTab({
161155
studyUuid={studyUuid}
162156
nodeUuid={nodeUuid}
163157
currentRootNetworkUuid={currentRootNetworkUuid}
164-
page={page}
165-
setPage={setPage}
166158
setCsvHeaders={setCsvHeaders}
167159
setIsCsvButtonDisabled={setIsCsvButtonDisabled}
168160
globalFilters={getGlobalFilterParameter(globalFilters)}

src/components/results/shortcircuit/shortcircuit-analysis-result.tsx

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import { FunctionComponent, useCallback, useEffect, useState } from 'react';
1919
import { fetchShortCircuitAnalysisPagedResults } from '../../../services/study/short-circuit-analysis';
2020
import {
2121
convertFilterValues,
22-
DEFAULT_PAGE_COUNT,
2322
FROM_COLUMN_TO_FIELD,
2423
FROM_COLUMN_TO_FIELD_ONE_BUS,
2524
mappingTabs,
@@ -35,9 +34,10 @@ import { GridReadyEvent, RowDataUpdatedEvent } from 'ag-grid-community';
3534
import { SHORTCIRCUIT_ANALYSIS_RESULT_SORT_STORE } from 'utils/store-sort-filter-fields';
3635
import { fetchAvailableFilterEnumValues } from '../../../services/study';
3736
import { useFilterSelector } from '../../../hooks/use-filter-selector';
38-
import { FilterType } from '../../../types/custom-aggrid-types';
37+
import { FilterType, PaginationType, ShortcircuitAnalysisTab } from '../../../types/custom-aggrid-types';
3938
import { mapFieldsToColumnsFilter } from '../../../utils/aggrid-headers-utils';
4039
import { FilterEnumsType } from '../../custom-aggrid/custom-aggrid-filters/custom-aggrid-filter.type';
40+
import { usePaginationSelector } from 'hooks/use-pagination-selector';
4141

4242
interface IShortCircuitAnalysisGlobalResultProps {
4343
analysisType: ShortCircuitAnalysisType;
@@ -61,9 +61,7 @@ export const ShortCircuitAnalysisResult: FunctionComponent<IShortCircuitAnalysis
6161
const intl = useIntl();
6262
const { snackError } = useSnackMessage();
6363

64-
const [rowsPerPage, setRowsPerPage] = useState<number>(DEFAULT_PAGE_COUNT as number);
6564
const [count, setCount] = useState<number>(0);
66-
const [page, setPage] = useState<number>(0);
6765
const [isFetching, setIsFetching] = useState<boolean>(false);
6866
const [filterEnums, setFilterEnums] = useState<FilterEnumsType>({});
6967

@@ -77,31 +75,36 @@ export const ShortCircuitAnalysisResult: FunctionComponent<IShortCircuitAnalysis
7775
? FROM_COLUMN_TO_FIELD_ONE_BUS
7876
: FROM_COLUMN_TO_FIELD;
7977

80-
const memoizedSetPageCallback = useCallback(() => {
81-
setPage(0);
82-
}, []);
83-
8478
const sortConfig = useSelector(
8579
(state: AppState) => state.tableSort[SHORTCIRCUIT_ANALYSIS_RESULT_SORT_STORE][mappingTabs(analysisType)]
8680
);
8781

8882
const { filters } = useFilterSelector(FilterType.ShortcircuitAnalysis, mappingTabs(analysisType));
83+
const { pagination, dispatchPagination } = usePaginationSelector(
84+
PaginationType.ShortcircuitAnalysis,
85+
mappingTabs(analysisType) as ShortcircuitAnalysisTab
86+
);
87+
const { page, rowsPerPage } = pagination;
8988

9089
const handleChangePage = useCallback(
9190
(_: any, newPage: number) => {
92-
setPage(newPage);
91+
dispatchPagination({ ...pagination, page: newPage });
9392
},
94-
[setPage]
93+
[pagination, dispatchPagination]
9594
);
9695

9796
const handleChangeRowsPerPage = useCallback(
9897
(event: any) => {
99-
setRowsPerPage(parseInt(event.target.value, 10));
100-
setPage(0);
98+
const newRowsPerPage = parseInt(event.target.value, 10);
99+
dispatchPagination({ page: 0, rowsPerPage: newRowsPerPage });
101100
},
102-
[setPage]
101+
[dispatchPagination]
103102
);
104103

104+
const memoizedSetPageCallback = useCallback(() => {
105+
dispatchPagination({ ...pagination, page: 0 });
106+
}, [pagination, dispatchPagination]);
107+
105108
// Effects
106109
useEffect(() => {
107110
if (analysisStatus !== RunningStatus.SUCCEED) {
@@ -123,7 +126,7 @@ export const ShortCircuitAnalysisResult: FunctionComponent<IShortCircuitAnalysis
123126

124127
const selector = {
125128
page,
126-
size: rowsPerPage,
129+
size: rowsPerPage as number,
127130
filter: updatedFilters ? mapFieldsToColumnsFilter(updatedFilters, fromFrontColumnToBackKeys) : null,
128131
sort: backSortConfig,
129132
};

0 commit comments

Comments
 (0)