14
14
* limitations under the License.
15
15
*/
16
16
17
- import React , { Suspense , useEffect , useRef , useState } from 'react'
17
+ import { Suspense , useEffect , useRef , useState } from 'react'
18
18
import { useRouteMatch , useParams , Redirect , useLocation , useHistory , Switch , Route } from 'react-router-dom'
19
- import { ErrorScreenManager , DetailsProgressing , showError } from '@devtron-labs/devtron-fe-common-lib'
19
+ import {
20
+ ErrorScreenManager ,
21
+ DetailsProgressing ,
22
+ showError ,
23
+ getIsRequestAborted ,
24
+ } from '@devtron-labs/devtron-fe-common-lib'
20
25
import { URLS } from '../../config'
21
26
import { sortOptionsByValue } from '../common'
22
27
import ValuesComponent from './values/ChartValues.component'
@@ -45,6 +50,8 @@ const RouterComponent = ({ envType }) => {
45
50
const { path } = useRouteMatch ( )
46
51
const location = useLocation ( )
47
52
const history = useHistory ( )
53
+ const abortControllerRef = useRef < AbortController > ( new AbortController ( ) )
54
+
48
55
const [ errorResponseCode , setErrorResponseCode ] = useState ( undefined )
49
56
const [ externalLinksAndTools , setExternalLinksAndTools ] = useState < ExternalLinksAndToolsType > ( {
50
57
externalLinks : [ ] ,
@@ -78,6 +85,12 @@ const RouterComponent = ({ envType }) => {
78
85
}
79
86
} , [ params . appId , params . envId ] )
80
87
88
+ useEffect ( ( ) => {
89
+ return ( ) => {
90
+ abortControllerRef . current . abort ( )
91
+ }
92
+ } , [ ] )
93
+
81
94
// clearing the timer on component unmount
82
95
useEffect ( ( ) => {
83
96
return ( ) : void => {
@@ -105,6 +118,11 @@ const RouterComponent = ({ envType }) => {
105
118
}
106
119
107
120
const handleAppDetailsCallError = ( e : any ) => {
121
+ if ( getIsRequestAborted ( e ) ) {
122
+ // FIXME: initTimer
123
+ return
124
+ }
125
+
108
126
setErrorResponseCode ( e . code )
109
127
if ( e . code === 404 && initTimer ) {
110
128
clearTimeout ( initTimer )
@@ -124,7 +142,7 @@ const RouterComponent = ({ envType }) => {
124
142
const _getAndSetAppDetail = async ( fetchExternalLinks : boolean ) => {
125
143
if ( envType === EnvType . CHART ) {
126
144
// Get App Details
127
- getInstalledChartDetail ( + params . appId , + params . envId )
145
+ getInstalledChartDetail ( + params . appId , + params . envId , abortControllerRef )
128
146
. then ( ( response ) => {
129
147
handlePublishAppDetails ( response )
130
148
isVirtualRef . current = response . result ?. isVirtualEnvironment
@@ -139,7 +157,7 @@ const RouterComponent = ({ envType }) => {
139
157
} )
140
158
141
159
// Get App Resource Tree
142
- getInstalledChartResourceTree ( + params . appId , + params . envId )
160
+ getInstalledChartResourceTree ( + params . appId , + params . envId , abortControllerRef )
143
161
. then ( handlePublishAppDetails )
144
162
. catch ( handleAppDetailsCallError )
145
163
. finally ( ( ) => {
@@ -162,10 +180,12 @@ const RouterComponent = ({ envType }) => {
162
180
const handleReloadResourceTree = ( ) => {
163
181
if ( envType === EnvType . CHART ) {
164
182
setIsReloadResourceTreeInProgress ( true )
165
- getInstalledChartResourceTree ( + params . appId , + params . envId )
183
+ getInstalledChartResourceTree ( + params . appId , + params . envId , abortControllerRef )
166
184
. then ( handlePublishAppDetails )
167
185
. catch ( ( err ) => {
168
- showError ( err )
186
+ if ( ! getIsRequestAborted ( err ) ) {
187
+ showError ( err )
188
+ }
169
189
} )
170
190
. finally ( ( ) => {
171
191
setLoadingResourceTree ( false )
0 commit comments