@@ -8,14 +8,14 @@ import { Prebuild, PrebuildPhase_Phase, TaskLog } from "@gitpod/public-api/lib/g
8
8
import { BreadcrumbNav } from "@podkit/breadcrumbs/BreadcrumbNav" ;
9
9
import { Button } from "@podkit/buttons/Button" ;
10
10
import { FC , useCallback , useEffect , useMemo , useState } from "react" ;
11
- import { Redirect , useHistory , useParams } from "react-router" ;
11
+ import { useHistory , useParams } from "react-router" ;
12
12
import dayjs from "dayjs" ;
13
13
import { useToast } from "../../components/toasts/Toasts" ;
14
14
import {
15
15
isPrebuildDone ,
16
16
useCancelPrebuildMutation ,
17
17
usePrebuildQuery ,
18
- useTriggerPrebuildQuery ,
18
+ useTriggerPrebuildMutation ,
19
19
watchPrebuild ,
20
20
} from "../../data/prebuilds/prebuild-queries" ;
21
21
import { LinkButton } from "@podkit/buttons/LinkButton" ;
@@ -83,16 +83,35 @@ export const PrebuildDetailPage: FC = () => {
83
83
return selectedTaskId ?? prebuild ?. status ?. taskLogs . filter ( ( f ) => f . logUrl ) [ 0 ] ?. taskId ?? undefined ;
84
84
} , [ isImageBuild , prebuild , selectedTaskId ] ) ;
85
85
86
- const {
87
- isFetching : isTriggeringPrebuild ,
88
- refetch : triggerPrebuild ,
89
- isError : isTriggerError ,
90
- error : triggerError ,
91
- isRefetching : isTriggeringRefetch ,
92
- data : newPrebuildID ,
93
- } = useTriggerPrebuildQuery ( prebuild ?. configurationId , prebuild ?. ref ) ;
86
+ const triggerPrebuildMutation = useTriggerPrebuildMutation ( prebuild ?. configurationId , prebuild ?. ref ) ;
94
87
const cancelPrebuildMutation = useCancelPrebuildMutation ( ) ;
95
88
89
+ const [ isTriggeringNewPrebuild , setTriggeringNewPrebuild ] = useState ( false ) ;
90
+ const triggerPrebuild = useCallback ( async ( ) => {
91
+ if ( ! prebuild ) {
92
+ return ;
93
+ }
94
+
95
+ try {
96
+ setTriggeringNewPrebuild ( true ) ;
97
+ await triggerPrebuildMutation . mutateAsync ( undefined , {
98
+ onSuccess : ( newPrebuildId ) => {
99
+ history . push ( repositoriesRoutes . PrebuildDetail ( newPrebuildId ) ) ;
100
+ } ,
101
+ onError : ( error ) => {
102
+ if ( error instanceof ApplicationError ) {
103
+ toast ( "Failed to trigger prebuild: " + error . message ) ;
104
+ }
105
+ } ,
106
+ onSettled : ( ) => {
107
+ setTriggeringNewPrebuild ( false ) ;
108
+ } ,
109
+ } ) ;
110
+ } catch ( error ) {
111
+ console . error ( "Could not trigger prebuild" , error ) ;
112
+ }
113
+ } , [ history , prebuild , toast , triggerPrebuildMutation ] ) ;
114
+
96
115
const triggeredDate = useMemo ( ( ) => dayjs ( prebuild ?. status ?. startTime ?. toDate ( ) ) , [ prebuild ?. status ?. startTime ] ) ;
97
116
const triggeredString = useMemo ( ( ) => formatDate ( triggeredDate ) , [ triggeredDate ] ) ;
98
117
const stopDate = useMemo ( ( ) => {
@@ -160,12 +179,6 @@ export const PrebuildDetailPage: FC = () => {
160
179
161
180
const notFoundError = error instanceof ApplicationError && error . code === ErrorCodes . NOT_FOUND ;
162
181
163
- useEffect ( ( ) => {
164
- if ( isTriggerError && triggerError ?. message ) {
165
- toast ( "Failed to trigger prebuild: " + triggerError . message ) ;
166
- }
167
- } , [ isTriggerError , triggerError , toast ] ) ;
168
-
169
182
const cancelPrebuild = useCallback ( async ( ) => {
170
183
if ( ! prebuild ) {
171
184
return ;
@@ -178,11 +191,6 @@ export const PrebuildDetailPage: FC = () => {
178
191
}
179
192
} , [ prebuild , cancelPrebuildMutation ] ) ;
180
193
181
- // For some reason, we sometimes hit a case where the newPrebuildID is actually set without us triggering the query.
182
- if ( newPrebuildID && prebuild ?. id !== newPrebuildID ) {
183
- return < Redirect to = { repositoriesRoutes . PrebuildDetail ( newPrebuildID ) } /> ;
184
- }
185
-
186
194
return (
187
195
< div className = "w-full" >
188
196
< BreadcrumbNav
@@ -334,9 +342,11 @@ export const PrebuildDetailPage: FC = () => {
334
342
</ LoadingButton >
335
343
) : (
336
344
< LoadingButton
337
- loading = { isTriggeringRefetch }
345
+ loading = { isTriggeringNewPrebuild }
338
346
disabled = {
339
- isTriggeringPrebuild || ! prebuild . configurationId || ! prebuild . commit ?. sha
347
+ isTriggeringNewPrebuild ||
348
+ ! prebuild . configurationId ||
349
+ ! prebuild . commit ?. sha
340
350
}
341
351
onClick = { ( ) => triggerPrebuild ( ) }
342
352
> { `Rerun Prebuild (${ prebuild . ref } )` } </ LoadingButton >
0 commit comments