@@ -62,12 +62,15 @@ export const PrebuildDetailPage: FC = () => {
62
62
const { toast, dismissToast } = useToast ( ) ;
63
63
const [ currentPrebuild , setCurrentPrebuild ] = useState < Prebuild | undefined > ( ) ;
64
64
const [ logNotFound , setLogNotFound ] = useState ( false ) ;
65
+ const [ selectedTaskId , setSelectedTaskId ] = useState < string | undefined > ( undefined ) ;
66
+
67
+ const taskId = selectedTaskId ?? prebuild ?. status ?. taskLogs . filter ( ( f ) => f . logUrl ) [ 0 ] ?. taskId ?? "0" ;
65
68
66
69
const {
67
70
emitter : logEmitter ,
68
71
isLoading : isStreamingLogs ,
69
72
disposable : disposeStreamingLogs ,
70
- } = usePrebuildLogsEmitter ( prebuildId ) ;
73
+ } = usePrebuildLogsEmitter ( prebuildId , taskId ) ;
71
74
const {
72
75
isFetching : isTriggeringPrebuild ,
73
76
refetch : triggerPrebuild ,
@@ -245,8 +248,8 @@ export const PrebuildDetailPage: FC = () => {
245
248
</ div >
246
249
</ div >
247
250
</ div >
248
- < div className = "px-6 py -4 flex flex-col gap-1 border-pk-border-base" >
249
- < div className = "flex gap-1 items-center" >
251
+ < div className = "pt -4 flex flex-col gap-1 border-pk-border-base" >
252
+ < div className = "px-6 flex gap-1 items-center" >
250
253
{ prebuildPhase . icon }
251
254
< span className = "capitalize" > { prebuildPhase . description } </ span > { " " }
252
255
{ isStreamingLogs && (
@@ -256,8 +259,43 @@ export const PrebuildDetailPage: FC = () => {
256
259
) }
257
260
</ div >
258
261
{ prebuild . status ?. message && (
259
- < div className = "text-pk-content-secondary truncate" > { prebuild . status . message } </ div >
262
+ < div className = "px-6 text-pk-content-secondary truncate" >
263
+ { prebuild . status . message }
264
+ </ div >
260
265
) }
266
+ < div className = "flex mt-3 h-10" >
267
+ { prebuild . status ?. taskLogs
268
+ . filter ( ( t ) => t . logUrl )
269
+ . map ( ( task ) => {
270
+ const commonClasses =
271
+ "pt-2 px-4 rounded-t-lg border border-pk-border-base border-b-0 border-l-0" ;
272
+ if ( task . taskId === taskId ) {
273
+ return (
274
+ < div
275
+ className = {
276
+ commonClasses +
277
+ " bg-pk-surface-secondary z-10 relative -mb-px"
278
+ }
279
+ >
280
+ { task . taskLabel }
281
+ </ div >
282
+ ) ;
283
+ }
284
+ return (
285
+ < div
286
+ onClick = { ( ) => {
287
+ setSelectedTaskId ( task . taskId ) ;
288
+ } }
289
+ className = {
290
+ commonClasses +
291
+ " text-pk-content-secondary hover:text-pk-content-primary hover:bg-pk-surface-tertiary cursor-pointer"
292
+ }
293
+ >
294
+ { task . taskLabel }
295
+ </ div >
296
+ ) ;
297
+ } ) }
298
+ </ div >
261
299
</ div >
262
300
< div className = "h-112 border-pk-border-base" >
263
301
< Suspense fallback = { < div /> } >
@@ -281,8 +319,9 @@ export const PrebuildDetailPage: FC = () => {
281
319
) : (
282
320
< WorkspaceLogs
283
321
classes = "h-full w-full"
284
- xtermClasses = "absolute top-0 left-0 bottom-0 right-0 ml-6 my-0"
322
+ xtermClasses = "absolute top-0 left-0 bottom-0 right-0 ml-6 my-0 mt-4 "
285
323
logsEmitter = { logEmitter }
324
+ key = { taskId }
286
325
/>
287
326
) }
288
327
</ Suspense >
0 commit comments