1
- import { useEffect } from 'react'
1
+ import { useEffect , useState } from 'react'
2
2
import { generatePath , useRouteMatch } from 'react-router-dom'
3
3
4
4
import { DeploymentConfigDiff , DeploymentConfigDiffProps } from '@Shared/Components/DeploymentConfigDiff'
5
- import { SortingOrder } from '@Common/Constants'
5
+ import { DEFAULT_BASE_PAGE_SIZE , SortingOrder } from '@Common/Constants'
6
6
import { useUrlFilters } from '@Common/Hooks'
7
7
import {
8
8
getSelectPickerOptionByValue ,
9
9
SelectPickerOptionType ,
10
10
SelectPickerVariantType ,
11
11
} from '@Shared/Components/SelectPicker'
12
12
import { ComponentSizeType } from '@Shared/constants'
13
+ import { Button , ButtonVariantType } from '@Shared/Components/Button'
13
14
14
15
import {
15
16
DeploymentHistoryDiffDetailedProps ,
16
17
DeploymentHistoryConfigDiffQueryParams ,
17
18
DeploymentHistoryConfigDiffRouteParams ,
18
19
} from './types'
19
- import { getPipelineDeploymentsOptions , parseDeploymentHistoryDiffSearchParams } from './utils'
20
+ import { getPipelineDeployments , getPipelineDeploymentsOptions , parseDeploymentHistoryDiffSearchParams } from './utils'
21
+ import { getTriggerHistory } from '../service'
20
22
21
23
export const DeploymentHistoryConfigDiffCompare = ( {
22
24
envName,
23
25
setFullScreenView,
24
- pipelineDeployments,
26
+ pipelineDeployments : initialPipelineDeployments ,
25
27
wfrId,
26
28
previousWfrId,
27
29
convertVariables,
28
30
setConvertVariables,
29
- triggerHistory,
31
+ triggerHistory : initialTriggerHistory ,
30
32
renderRunSource,
31
33
resourceId,
32
34
isCompareDeploymentConfigNotAvailable,
33
35
...props
34
36
} : DeploymentHistoryDiffDetailedProps ) => {
35
37
// HOOKS
36
38
const { path, params } = useRouteMatch < DeploymentHistoryConfigDiffRouteParams > ( )
37
- const { resourceType, resourceName } = params
39
+ const { resourceType, resourceName, appId , envId } = params
38
40
39
41
// URL FILTERS
40
42
const { compareWfrId, updateSearchParams, sortBy, sortOrder, handleSorting } = useUrlFilters <
@@ -44,6 +46,14 @@ export const DeploymentHistoryConfigDiffCompare = ({
44
46
parseSearchParams : parseDeploymentHistoryDiffSearchParams ( previousWfrId ) ,
45
47
} )
46
48
49
+ // STATES
50
+ const [ triggerHistory , setTriggerHistory ] = useState ( {
51
+ isLoading : false ,
52
+ data : initialTriggerHistory ,
53
+ hasMore : initialTriggerHistory . size >= DEFAULT_BASE_PAGE_SIZE ,
54
+ } )
55
+ const [ pipelineDeployments , setPipelineDeployments ] = useState ( initialPipelineDeployments )
56
+
47
57
useEffect ( ( ) => {
48
58
// Default Search Params Update
49
59
updateSearchParams ( { compareWfrId } )
@@ -56,11 +66,53 @@ export const DeploymentHistoryConfigDiffCompare = ({
56
66
}
57
67
} , [ ] )
58
68
69
+ // METHODS
70
+ const fetchDeploymentHistory = async ( paginationOffset : number ) => {
71
+ setTriggerHistory ( { ...triggerHistory , isLoading : true } )
72
+
73
+ try {
74
+ const { result } = await getTriggerHistory ( {
75
+ appId : + appId ,
76
+ envId : + envId ,
77
+ pagination : { offset : paginationOffset , size : DEFAULT_BASE_PAGE_SIZE } ,
78
+ } )
79
+ const nextTriggerHistory = new Map ( ( result . cdWorkflows || [ ] ) . map ( ( item ) => [ item . id , item ] ) )
80
+ const updatedTriggerHistory = new Map ( [ ...triggerHistory . data , ...nextTriggerHistory ] )
81
+
82
+ setTriggerHistory ( {
83
+ isLoading : false ,
84
+ data : updatedTriggerHistory ,
85
+ hasMore : result . cdWorkflows ?. length === DEFAULT_BASE_PAGE_SIZE ,
86
+ } )
87
+ setPipelineDeployments ( getPipelineDeployments ( updatedTriggerHistory ) )
88
+ } catch {
89
+ setTriggerHistory ( { ...triggerHistory , isLoading : false } )
90
+ }
91
+ }
92
+
93
+ const handleLoadMore = ( ) => fetchDeploymentHistory ( triggerHistory . data . size )
94
+
95
+ // RENDERERS
96
+ const renderOptionsFooter = ( ) =>
97
+ triggerHistory . hasMore ? (
98
+ < div className = "px-4" >
99
+ < Button
100
+ isLoading = { triggerHistory . isLoading }
101
+ onClick = { handleLoadMore }
102
+ dataTestId = "load-more-previous-deployments"
103
+ variant = { ButtonVariantType . borderLess }
104
+ text = "Load more"
105
+ size = { ComponentSizeType . small }
106
+ fullWidth
107
+ />
108
+ </ div >
109
+ ) : null
110
+
59
111
// DEPLOYMENT_CONFIG_DIFF_PROPS
60
112
const { currentDeployment, pipelineDeploymentsOptions } = getPipelineDeploymentsOptions ( {
61
113
pipelineDeployments,
62
114
wfrId,
63
- triggerHistory,
115
+ triggerHistory : triggerHistory . data ,
64
116
renderRunSource,
65
117
resourceId,
66
118
} )
@@ -88,6 +140,7 @@ export const DeploymentHistoryConfigDiffCompare = ({
88
140
onChange : deploymentSelectorOnChange ,
89
141
showSelectedOptionIcon : false ,
90
142
menuSize : ComponentSizeType . large ,
143
+ renderOptionsFooter,
91
144
} ,
92
145
} ,
93
146
]
0 commit comments