1
- import { useEffect , useState } from 'react'
1
+ import { useCallback , useEffect , useState } from 'react'
2
2
import { useParams } from 'react-router-dom'
3
3
4
4
import {
5
- useCreateBranchMutation ,
5
+ DeleteTagErrorResponse ,
6
6
useCreateTagMutation ,
7
7
useDeleteTagMutation ,
8
- useFindRepositoryQuery ,
9
- useListBranchesQuery ,
10
8
useListTagsQuery
11
9
} from '@harnessio/code-service-client'
12
- import { DeleteAlertDialog } from '@harnessio/ui/components'
10
+ import { DeleteAlertDialog , DeleteAlertDialogProps } from '@harnessio/ui/components'
13
11
import {
12
+ BranchSelectorListItem ,
14
13
CommitTagType ,
15
- CreateBranchDialog ,
16
- CreateBranchFormFields ,
17
14
CreateTagDialog ,
18
- CreateTagFromFields ,
15
+ CreateTagFormFields ,
19
16
RepoTagsListView
20
17
} from '@harnessio/ui/views'
21
18
19
+ import { BranchSelectorContainer } from '../../components-v2/branch-selector-container'
20
+ import { CreateBranchDialog } from '../../components-v2/create-branch-dialog'
22
21
import { useRoutes } from '../../framework/context/NavigationContext'
23
22
import { useGetRepoRef } from '../../framework/hooks/useGetRepoPath'
24
23
import { useQueryState } from '../../framework/hooks/useQueryState'
25
24
import usePaginationQueryStateWithStore from '../../hooks/use-pagination-query-state-with-store'
26
25
import { useTranslationStore } from '../../i18n/stores/i18n-store'
27
26
import { PathParams } from '../../RouteDefinitions'
28
27
import { PageResponseHeader } from '../../types'
29
- import { useRepoBranchesStore } from './stores/repo-branches-store'
30
28
import { useRepoTagsStore } from './stores/repo-tags-store'
31
- import { transformBranchList } from './transform-utils/branch-transform'
32
29
33
30
export const RepoTagsListContainer = ( ) => {
34
31
const repo_ref = useGetRepoRef ( )
35
- const { setTags, addTag, removeTag, page, setPage, setPaginationFromHeaders } = useRepoTagsStore ( )
36
- const { setBranchList, setDefaultBranch, setSelectedBranchTag, branchList } = useRepoBranchesStore ( )
32
+ const { page, setPage, setPaginationFromHeaders, setTags } = useRepoTagsStore ( )
37
33
const { spaceId, repoId } = useParams < PathParams > ( )
38
34
39
35
const routes = useRoutes ( )
40
36
const [ query , setQuery ] = useQueryState ( 'query' )
41
- const [ branchQuery , setBranchQuery ] = useState ( '' )
42
37
43
38
const { queryPage } = usePaginationQueryStateWithStore ( { page, setPage } )
44
39
40
+ const [ selectedBranchOrTag , setSelectedBranchOrTag ] = useState < BranchSelectorListItem | null > ( null )
41
+
45
42
const [ openCreateTagDialog , setOpenCreateTagDialog ] = useState ( false )
46
43
const [ openCreateBranchDialog , setOpenCreateBranchDialog ] = useState ( false )
47
44
const [ deleteTagDialog , setDeleteTagDialog ] = useState ( false )
48
45
const [ deleteTagName , setDeleteTagName ] = useState < string | null > ( null )
49
46
50
- const { data : { body : repository } = { } } = useFindRepositoryQuery ( { repo_ref : repo_ref } )
47
+ const [ deleteError , setDeleteError ] = useState < DeleteAlertDialogProps [ 'error' ] > ( null )
51
48
52
- const { data : { body : tagsList , headers } = { } , isLoading : isLoadingTags } = useListTagsQuery ( {
49
+ const {
50
+ data : { body : tagsList , headers } = { } ,
51
+ isLoading : isLoadingTags ,
52
+ refetch : refetchTags
53
+ } = useListTagsQuery ( {
53
54
repo_ref : repo_ref ,
54
55
queryParams : {
55
56
query : query ?? '' ,
@@ -58,20 +59,16 @@ export const RepoTagsListContainer = () => {
58
59
}
59
60
} )
60
61
61
- const { data : { body : branches } = { } } = useListBranchesQuery ( {
62
- queryParams : {
63
- limit : 50 ,
64
- query : branchQuery ?? ''
65
- } ,
66
- repo_ref : repo_ref
67
- } )
68
-
69
- const { mutate : createTag , isLoading : isCreatingTag } = useCreateTagMutation (
62
+ const {
63
+ mutate : createTag ,
64
+ isLoading : isCreatingTag ,
65
+ error : createTagError
66
+ } = useCreateTagMutation (
70
67
{ repo_ref : repo_ref } ,
71
68
{
72
- onSuccess : data => {
69
+ onSuccess : ( ) => {
73
70
setOpenCreateTagDialog ( false )
74
- addTag ( data . body as CommitTagType )
71
+ refetchTags ( )
75
72
}
76
73
}
77
74
)
@@ -81,16 +78,12 @@ export const RepoTagsListContainer = () => {
81
78
{
82
79
onSuccess : ( ) => {
83
80
setDeleteTagDialog ( false )
84
- removeTag ( deleteTagName ?? '' )
85
- }
86
- }
87
- )
88
-
89
- const { mutate : createBranch , error : createBranchError } = useCreateBranchMutation (
90
- { } ,
91
- {
92
- onSuccess : ( ) => {
93
- setOpenCreateBranchDialog ( false )
81
+ setDeleteError ( null )
82
+ refetchTags ( )
83
+ } ,
84
+ onError : ( error : DeleteTagErrorResponse ) => {
85
+ const deleteErrorMsg = error ?. message || 'An unknown error occurred.'
86
+ setDeleteError ( { message : deleteErrorMsg } )
94
87
}
95
88
}
96
89
)
@@ -101,30 +94,14 @@ export const RepoTagsListContainer = () => {
101
94
}
102
95
} , [ tagsList , setTags ] )
103
96
104
- useEffect ( ( ) => {
105
- if ( branches ) {
106
- setBranchList ( transformBranchList ( branches , repository ?. default_branch ) )
107
- }
108
- } , [ branches , setBranchList , repository ] )
109
-
110
97
useEffect ( ( ) => {
111
98
setPaginationFromHeaders (
112
- parseInt ( headers ?. get ( PageResponseHeader . xNextPage ) || ' ') ,
113
- parseInt ( headers ?. get ( PageResponseHeader . xPrevPage ) || ' ')
99
+ parseInt ( headers ?. get ( PageResponseHeader . xNextPage ) ?? '0 ') ,
100
+ parseInt ( headers ?. get ( PageResponseHeader . xPrevPage ) ?? '0 ')
114
101
)
115
102
} , [ headers , setPaginationFromHeaders ] )
116
103
117
- useEffect ( ( ) => {
118
- const defaultBranch = branchList ?. find ( branch => branch . default )
119
- setSelectedBranchTag ( {
120
- name : defaultBranch ?. name || repository ?. default_branch || '' ,
121
- sha : defaultBranch ?. sha || '' ,
122
- default : true
123
- } )
124
- setDefaultBranch ( repository ?. default_branch ?? '' )
125
- } , [ branchList , repository ?. default_branch ] )
126
-
127
- const onSubmit = ( data : CreateTagFromFields ) => {
104
+ const onSubmit = ( data : CreateTagFormFields ) => {
128
105
createTag ( {
129
106
body : {
130
107
...data
@@ -139,14 +116,12 @@ export const RepoTagsListContainer = () => {
139
116
} )
140
117
}
141
118
142
- const handleCreateBranch = ( data : CreateBranchFormFields ) => {
143
- createBranch ( {
144
- repo_ref,
145
- body : {
146
- ...data
147
- }
148
- } )
149
- }
119
+ const selectBranchOrTag = useCallback (
120
+ ( branchTagName : BranchSelectorListItem ) => {
121
+ setSelectedBranchOrTag ( branchTagName )
122
+ } ,
123
+ [ repoId , spaceId ]
124
+ )
150
125
151
126
return (
152
127
< >
@@ -169,25 +144,19 @@ export const RepoTagsListContainer = () => {
169
144
open = { openCreateTagDialog }
170
145
onClose = { ( ) => setOpenCreateTagDialog ( false ) }
171
146
onSubmit = { onSubmit }
172
- branchQuery = { branchQuery }
173
- setBranchQuery = { setBranchQuery }
174
- useRepoBranchesStore = { useRepoBranchesStore }
175
147
isLoading = { isCreatingTag }
148
+ error = { createTagError ?. message }
149
+ selectedBranchOrTag = { selectedBranchOrTag }
150
+ renderProp = { ( ) => (
151
+ < BranchSelectorContainer onSelectBranchorTag = { selectBranchOrTag } selectedBranch = { selectedBranchOrTag } />
152
+ ) }
176
153
/>
177
- < CreateBranchDialog
178
- open = { openCreateBranchDialog }
179
- onClose = { ( ) => setOpenCreateBranchDialog ( false ) }
180
- useRepoBranchesStore = { useRepoBranchesStore }
181
- onSubmit = { handleCreateBranch }
182
- useTranslationStore = { useTranslationStore }
183
- handleChangeSearchValue = { setBranchQuery }
184
- error = { createBranchError ?. message }
185
- />
154
+ < CreateBranchDialog open = { openCreateBranchDialog } onClose = { ( ) => setOpenCreateBranchDialog ( false ) } />
186
155
< DeleteAlertDialog
187
156
open = { deleteTagDialog }
188
157
onClose = { ( ) => setDeleteTagDialog ( false ) }
189
158
deleteFn = { onDeleteTag }
190
- error = { { type : '' , message : '' } }
159
+ error = { deleteError }
191
160
type = "tag"
192
161
identifier = { deleteTagName ?? undefined }
193
162
isLoading = { isDeletingTag }
0 commit comments