@@ -16,6 +16,7 @@ import StartWorkspace from "./StartWorkspace";
16
16
import { openAuthorizeWindow } from "../provider-utils" ;
17
17
import { SelectAccountPayload } from "@gitpod/gitpod-protocol/lib/auth" ;
18
18
import { SelectAccountModal } from "../settings/SelectAccountModal" ;
19
+ import { watchHeadlessLogs } from "./WorkspaceLogs" ;
19
20
20
21
const WorkspaceLogs = React . lazy ( ( ) => import ( './WorkspaceLogs' ) ) ;
21
22
@@ -68,27 +69,27 @@ export default class CreateWorkspace extends React.Component<CreateWorkspaceProp
68
69
69
70
async tryAuthorize ( host : string , scopes ?: string [ ] ) {
70
71
try {
71
- await openAuthorizeWindow ( {
72
- host,
73
- scopes,
74
- onSuccess : ( ) => {
75
- window . location . reload ( ) ;
76
- } ,
77
- onError : ( error ) => {
78
- if ( typeof error === "string" ) {
79
- try {
80
- const payload = JSON . parse ( error ) ;
81
- if ( SelectAccountPayload . is ( payload ) ) {
82
- this . setState ( { selectAccountError : payload } ) ;
83
- }
84
- } catch ( error ) {
85
- console . log ( error ) ;
86
- }
87
- }
72
+ await openAuthorizeWindow ( {
73
+ host,
74
+ scopes,
75
+ onSuccess : ( ) => {
76
+ window . location . reload ( ) ;
77
+ } ,
78
+ onError : ( error ) => {
79
+ if ( typeof error === "string" ) {
80
+ try {
81
+ const payload = JSON . parse ( error ) ;
82
+ if ( SelectAccountPayload . is ( payload ) ) {
83
+ this . setState ( { selectAccountError : payload } ) ;
84
+ }
85
+ } catch ( error ) {
86
+ console . log ( error ) ;
88
87
}
89
- } ) ;
88
+ }
89
+ }
90
+ } ) ;
90
91
} catch ( error ) {
91
- console . log ( error )
92
+ console . log ( error )
92
93
}
93
94
} ;
94
95
@@ -100,7 +101,7 @@ export default class CreateWorkspace extends React.Component<CreateWorkspaceProp
100
101
window . location . href = gitpodHostUrl . asAccessControl ( ) . toString ( ) ;
101
102
} } />
102
103
</ div >
103
- </ StartPage > ) ;
104
+ </ StartPage > ) ;
104
105
}
105
106
106
107
let phase = StartPhase . Checking ;
@@ -130,19 +131,19 @@ export default class CreateWorkspace extends React.Component<CreateWorkspaceProp
130
131
// HACK: Hide the error (behind the modal)
131
132
error = undefined ;
132
133
phase = StartPhase . Stopped ;
133
- statusMessage = < LimitReachedPrivateRepoModal /> ;
134
+ statusMessage = < LimitReachedPrivateRepoModal /> ;
134
135
break ;
135
136
case ErrorCodes . TOO_MANY_RUNNING_WORKSPACES :
136
137
// HACK: Hide the error (behind the modal)
137
138
error = undefined ;
138
139
phase = StartPhase . Stopped ;
139
- statusMessage = < LimitReachedParallelWorkspacesModal /> ;
140
+ statusMessage = < LimitReachedParallelWorkspacesModal /> ;
140
141
break ;
141
142
case ErrorCodes . NOT_ENOUGH_CREDIT :
142
143
// HACK: Hide the error (behind the modal)
143
144
error = undefined ;
144
145
phase = StartPhase . Stopped ;
145
- statusMessage = < LimitReachedOutOfHours /> ;
146
+ statusMessage = < LimitReachedOutOfHours /> ;
146
147
break ;
147
148
default :
148
149
statusMessage = < p className = "text-base text-gitpod-red w-96" > Unknown Error: { JSON . stringify ( this . state ?. error , null , 2 ) } </ p > ;
@@ -156,7 +157,7 @@ export default class CreateWorkspace extends React.Component<CreateWorkspaceProp
156
157
}
157
158
158
159
else if ( result ?. existingWorkspaces ) {
159
- statusMessage = < Modal visible = { true } closeable = { false } onClose = { ( ) => { } } >
160
+ statusMessage = < Modal visible = { true } closeable = { false } onClose = { ( ) => { } } >
160
161
< h3 > Running Workspaces</ h3 >
161
162
< div className = "border-t border-b border-gray-200 dark:border-gray-800 mt-4 -mx-6 px-6 py-2" >
162
163
< p className = "mt-1 mb-2 text-base" > You already have running workspaces with the same context. You can open an existing one or open a new workspace.</ p >
@@ -203,7 +204,7 @@ export default class CreateWorkspace extends React.Component<CreateWorkspaceProp
203
204
204
205
function LimitReachedModal ( p : { children : React . ReactNode } ) {
205
206
const { user } = useContext ( UserContext ) ;
206
- return < Modal visible = { true } closeable = { false } onClose = { ( ) => { } } >
207
+ return < Modal visible = { true } closeable = { false } onClose = { ( ) => { } } >
207
208
< h3 className = "flex" >
208
209
< span className = "flex-grow" > Limit Reached</ span >
209
210
< img className = "rounded-full w-8 h-8" src = { user ?. avatarUrl || '' } alt = { user ?. name || 'Anonymous' } />
@@ -237,7 +238,7 @@ function LimitReachedOutOfHours() {
237
238
}
238
239
239
240
function RepositoryNotFoundView ( p : { error : StartWorkspaceError } ) {
240
- const [ statusMessage , setStatusMessage ] = useState < React . ReactNode > ( ) ;
241
+ const [ statusMessage , setStatusMessage ] = useState < React . ReactNode > ( ) ;
241
242
useEffect ( ( ) => {
242
243
( async ( ) => {
243
244
const service = getGitpodService ( ) ;
@@ -250,7 +251,7 @@ function RepositoryNotFoundView(p: { error: StartWorkspaceError }) {
250
251
console . log ( 'lastUpdate' , lastUpdate ) ;
251
252
252
253
if ( ( await service . server . mayAccessPrivateRepo ( ) ) === false ) {
253
- setStatusMessage ( < LimitReachedPrivateRepoModal /> ) ;
254
+ setStatusMessage ( < LimitReachedPrivateRepoModal /> ) ;
254
255
return ;
255
256
}
256
257
@@ -317,6 +318,7 @@ interface RunningPrebuildViewProps {
317
318
runningPrebuild : {
318
319
prebuildID : string
319
320
workspaceID : string
321
+ instanceID : string
320
322
starting : RunningWorkspacePrebuildStarting
321
323
sameCluster : boolean
322
324
} ;
@@ -339,25 +341,11 @@ function RunningPrebuildView(props: RunningPrebuildViewProps) {
339
341
}
340
342
pollTimeout = setTimeout ( pollIsPrebuildDone , 10000 ) ;
341
343
} ;
342
- const watchPrebuild = ( ) => {
343
- service . server . watchHeadlessWorkspaceLogs ( props . runningPrebuild . workspaceID ) ;
344
- pollIsPrebuildDone ( ) ;
345
- } ;
346
- watchPrebuild ( ) ;
347
-
348
- const toDispose = service . registerClient ( {
349
- notifyDidOpenConnection : ( ) => watchPrebuild ( ) ,
350
- onHeadlessWorkspaceLogs : event => {
351
- if ( event . workspaceID !== props . runningPrebuild . workspaceID ) {
352
- return ;
353
- }
354
- logsEmitter . emit ( 'logs' , event . text ) ;
355
- } ,
356
- } ) ;
357
344
345
+ const disposables = watchHeadlessLogs ( service . server , props . runningPrebuild . instanceID , ( chunk ) => logsEmitter . emit ( 'logs' , chunk ) , pollIsPrebuildDone ) ;
358
346
return function cleanup ( ) {
359
347
clearTimeout ( pollTimeout ! ) ;
360
- toDispose . dispose ( ) ;
348
+ disposables . dispose ( ) ;
361
349
} ;
362
350
} , [ ] ) ;
363
351
0 commit comments