5
5
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
6
*/
7
7
8
- import { SyntheticEvent , useCallback , useMemo , useState } from 'react' ;
8
+ import { SyntheticEvent , useMemo , useState } from 'react' ;
9
9
import { Box , LinearProgress , Tab , Tabs } from '@mui/material' ;
10
10
import SensitivityAnalysisTabs from './sensitivity-analysis-tabs.js' ;
11
11
import PagedSensitivityAnalysisResult from './paged-sensitivity-analysis-result' ;
12
- import {
13
- DATA_KEY_TO_FILTER_KEY_N ,
14
- DATA_KEY_TO_FILTER_KEY_NK ,
15
- DATA_KEY_TO_SORT_KEY ,
16
- FUNCTION_TYPES ,
17
- isSensiKind ,
18
- mappingTabs ,
19
- SensitivityResultTabs ,
20
- } from './sensitivity-analysis-result-utils' ;
21
12
import { useSelector } from 'react-redux' ;
22
13
import { ComputationReportViewer } from '../common/computation-report-viewer' ;
23
14
import { RunningStatus } from '../../utils/running-status' ;
24
15
import { useOpenLoaderShortWait } from '../../dialogs/commons/handle-loader' ;
25
16
import { RESULTS_LOADING_DELAY } from '../../network/constants' ;
26
- import { exportSensitivityResultsAsCsv } from '../../../services/study/sensitivity-analysis' ;
27
- import { downloadZipFile } from '../../../services/utils' ;
28
- import { ComputingType , PARAM_LANGUAGE , useSnackMessage } from '@gridsuite/commons-ui' ;
29
- import { ExportButton } from '../../utils/export-button' ;
17
+ import { ComputingType } from '@gridsuite/commons-ui' ;
30
18
import { AppState } from '../../../redux/reducer' ;
31
19
import { UUID } from 'crypto' ;
32
20
import {
33
21
COMPUTATION_RESULTS_LOGS ,
34
- SensiKind ,
35
22
SensiTab ,
36
23
SENSITIVITY_AT_NODE ,
37
24
SENSITIVITY_IN_DELTA_MW ,
@@ -40,9 +27,8 @@ import useGlobalFilters from '../common/global-filter/use-global-filters';
40
27
import GlobalFilterSelector from '../common/global-filter/global-filter-selector' ;
41
28
import { EQUIPMENT_TYPES } from '../../utils/equipment-types' ;
42
29
import { useGlobalFilterOptions } from '../common/global-filter/use-global-filter-options' ;
43
- import { useFilterSelector } from '../../../hooks/use-filter-selector' ;
44
- import { FilterType as AgGridFilterType , SortWay } from '../../../types/custom-aggrid-types' ;
45
- import { SENSITIVITY_ANALYSIS_RESULT_SORT_STORE } from '../../../utils/store-sort-filter-fields' ;
30
+ import { SensitivityExportButton } from './sensitivity-analysis-export-button.js' ;
31
+ import { isSensiKind , SensitivityResultTabs } from './sensitivity-analysis-result-utils.js' ;
46
32
47
33
export type SensitivityAnalysisResultTabProps = {
48
34
studyUuid : UUID ;
@@ -55,38 +41,16 @@ function SensitivityAnalysisResultTab({
55
41
nodeUuid,
56
42
currentRootNetworkUuid,
57
43
} : Readonly < SensitivityAnalysisResultTabProps > ) {
58
- const { snackError } = useSnackMessage ( ) ;
59
44
const [ nOrNkIndex , setNOrNkIndex ] = useState < number > ( 0 ) ;
60
45
const [ sensiTab , setSensiTab ] = useState < SensiTab > ( SENSITIVITY_IN_DELTA_MW ) ;
61
- const [ isCsvExportSuccessful , setIsCsvExportSuccessful ] = useState < boolean > ( false ) ;
62
- const [ isCsvExportLoading , setIsCsvExportLoading ] = useState < boolean > ( false ) ;
63
46
const sensitivityAnalysisStatus = useSelector (
64
47
( state : AppState ) => state . computingStatus [ ComputingType . SENSITIVITY_ANALYSIS ]
65
48
) ;
66
- const language = useSelector ( ( state : AppState ) => state [ PARAM_LANGUAGE ] ) ;
67
49
68
50
const { globalFilters, handleGlobalFilterChange, getGlobalFilterParameter } = useGlobalFilters ( { } ) ;
69
51
const { countriesFilter, voltageLevelsFilter, propertiesFilter } = useGlobalFilterOptions ( ) ;
70
- const { filters } = useFilterSelector (
71
- AgGridFilterType . SensitivityAnalysis ,
72
- mappingTabs ( sensiTab as SensiKind , nOrNkIndex )
73
- ) ;
74
- const sortConfig = useSelector (
75
- ( state : AppState ) =>
76
- state . tableSort [ SENSITIVITY_ANALYSIS_RESULT_SORT_STORE ] [ mappingTabs ( sensiTab as SensiKind , nOrNkIndex ) ]
77
- ) ;
78
-
79
- const initTable = ( ) => {
80
- setIsCsvExportSuccessful ( false ) ;
81
- } ;
82
-
83
- const handleSensiTabChange = ( newSensiTab : SensiTab ) => {
84
- initTable ( ) ;
85
- setSensiTab ( newSensiTab ) ;
86
- } ;
87
52
88
53
const handleSensiNOrNkIndexChange = ( event : SyntheticEvent , newNOrNKIndex : number ) => {
89
- initTable ( ) ;
90
54
setNOrNkIndex ( newNOrNKIndex ) ;
91
55
} ;
92
56
@@ -98,76 +62,6 @@ function SensitivityAnalysisResultTab({
98
62
const [ csvHeaders , setCsvHeaders ] = useState < string [ ] > ( [ ] ) ;
99
63
const [ isCsvButtonDisabled , setIsCsvButtonDisabled ] = useState ( true ) ;
100
64
101
- const handleExportResultAsCsv = useCallback ( ( ) => {
102
- setIsCsvExportLoading ( true ) ;
103
- setIsCsvExportSuccessful ( false ) ;
104
- const mappedFilters = filters ?. map ( ( elem ) => {
105
- const keyMap = nOrNkIndex === 0 ? DATA_KEY_TO_FILTER_KEY_N : DATA_KEY_TO_FILTER_KEY_NK ;
106
- const newColumn = keyMap [ elem . column as keyof typeof keyMap ] ;
107
- return { ...elem , column : newColumn } ;
108
- } ) ;
109
- const sortSelector = sortConfig ?. length
110
- ? {
111
- sortKeysWithWeightAndDirection : Object . fromEntries (
112
- sortConfig . map ( ( value ) => [
113
- DATA_KEY_TO_SORT_KEY [ value . colId as keyof typeof DATA_KEY_TO_SORT_KEY ] ,
114
- value . sort === SortWay . DESC ? - 1 : 1 ,
115
- ] )
116
- ) ,
117
- }
118
- : { } ;
119
- const selector = {
120
- tabSelection : SensitivityResultTabs [ nOrNkIndex ] . id ,
121
- functionType : FUNCTION_TYPES [ sensiTab as SensiKind ] ,
122
- offset : 0 ,
123
- pageNumber : 0 ,
124
- pageSize : - 1 , // meaning 'All'
125
- ...sortSelector ,
126
- } ;
127
-
128
- exportSensitivityResultsAsCsv (
129
- studyUuid ,
130
- nodeUuid ,
131
- currentRootNetworkUuid ,
132
- {
133
- csvHeaders : csvHeaders ,
134
- resultTab : SensitivityResultTabs [ nOrNkIndex ] . id ,
135
- sensitivityFunctionType : isSensiKind ( sensiTab ) ? FUNCTION_TYPES [ sensiTab ] : undefined ,
136
- language : language ,
137
- } ,
138
- selector ,
139
- mappedFilters ,
140
- getGlobalFilterParameter ( globalFilters )
141
- )
142
- . then ( ( response ) => {
143
- response . blob ( ) . then ( ( blob : Blob ) => {
144
- downloadZipFile ( blob , 'sensitivity_analyse_results.zip' ) ;
145
- setIsCsvExportSuccessful ( true ) ;
146
- } ) ;
147
- } )
148
- . catch ( ( error ) => {
149
- snackError ( {
150
- messageTxt : error . message ,
151
- headerId : 'csvExportSensitivityResultError' ,
152
- } ) ;
153
- setIsCsvExportSuccessful ( false ) ;
154
- } )
155
- . finally ( ( ) => setIsCsvExportLoading ( false ) ) ;
156
- } , [
157
- filters ,
158
- sortConfig ,
159
- nOrNkIndex ,
160
- sensiTab ,
161
- studyUuid ,
162
- nodeUuid ,
163
- currentRootNetworkUuid ,
164
- csvHeaders ,
165
- language ,
166
- getGlobalFilterParameter ,
167
- globalFilters ,
168
- snackError ,
169
- ] ) ;
170
-
171
65
const filterableEquipmentTypes : EQUIPMENT_TYPES [ ] = useMemo ( ( ) => {
172
66
return sensiTab === SENSITIVITY_AT_NODE ? [ ] : [ EQUIPMENT_TYPES . TWO_WINDINGS_TRANSFORMER , EQUIPMENT_TYPES . LINE ] ;
173
67
} , [ sensiTab ] ) ;
@@ -179,7 +73,7 @@ function SensitivityAnalysisResultTab({
179
73
180
74
return (
181
75
< >
182
- < SensitivityAnalysisTabs sensiTab = { sensiTab } setSensiTab = { handleSensiTabChange } />
76
+ < SensitivityAnalysisTabs sensiTab = { sensiTab } setSensiTab = { setSensiTab } />
183
77
{ isSensiKind ( sensiTab ) && (
184
78
< >
185
79
< Box
@@ -203,11 +97,15 @@ function SensitivityAnalysisResultTab({
203
97
disableGenericFilters = { sensiTab === SENSITIVITY_AT_NODE }
204
98
/>
205
99
</ Box >
206
- < ExportButton
100
+ < SensitivityExportButton
101
+ studyUuid = { studyUuid }
102
+ nodeUuid = { nodeUuid }
103
+ currentRootNetworkUuid = { currentRootNetworkUuid }
104
+ csvHeaders = { csvHeaders }
105
+ nOrNkIndex = { nOrNkIndex }
106
+ sensiKind = { sensiTab }
107
+ globalFilters = { getGlobalFilterParameter ( globalFilters ) }
207
108
disabled = { isCsvButtonDisabled }
208
- onClick = { handleExportResultAsCsv }
209
- isDownloadLoading = { isCsvExportLoading }
210
- isDownloadSuccessful = { isCsvExportSuccessful }
211
109
/>
212
110
</ Box >
213
111
< PagedSensitivityAnalysisResult
0 commit comments