@@ -16,7 +16,7 @@ import { ICompressibleTreeRenderer } from 'vs/base/browser/ui/tree/objectTree';
16
16
import { IAsyncDataSource , ITreeNode , ITreeRenderer } from 'vs/base/browser/ui/tree/tree' ;
17
17
import { IAction } from 'vs/base/common/actions' ;
18
18
import { distinct } from 'vs/base/common/arrays' ;
19
- import { IntervalTimer } from 'vs/base/common/async' ;
19
+ import { IntervalTimer , disposableTimeout } from 'vs/base/common/async' ;
20
20
import { Codicon } from 'vs/base/common/codicons' ;
21
21
import { Emitter , Event } from 'vs/base/common/event' ;
22
22
import { FuzzyScore } from 'vs/base/common/filters' ;
@@ -70,6 +70,7 @@ interface IChatListItemTemplate {
70
70
readonly rowContainer : HTMLElement ;
71
71
readonly titleToolbar : MenuWorkbenchToolBar ;
72
72
readonly avatarContainer : HTMLElement ;
73
+ readonly agentAvatarContainer : HTMLElement ;
73
74
readonly username : HTMLElement ;
74
75
readonly detail : HTMLElement ;
75
76
readonly value : HTMLElement ;
@@ -225,6 +226,7 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
225
226
const header = dom . append ( rowContainer , $ ( '.header' ) ) ;
226
227
const user = dom . append ( header , $ ( '.user' ) ) ;
227
228
const avatarContainer = dom . append ( user , $ ( '.avatar-container' ) ) ;
229
+ const agentAvatarContainer = dom . append ( user , $ ( '.agent-avatar-container' ) ) ;
228
230
const username = dom . append ( user , $ ( 'h3.username' ) ) ;
229
231
const detailContainer = dom . append ( user , $ ( 'span.detail-container' ) ) ;
230
232
const detail = dom . append ( detailContainer , $ ( 'span.detail' ) ) ;
@@ -249,7 +251,7 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
249
251
} ) ) ;
250
252
251
253
252
- const template : IChatListItemTemplate = { avatarContainer, username, detail, referencesListContainer, value, rowContainer, elementDisposables, titleToolbar, templateDisposables, contextKeyService } ;
254
+ const template : IChatListItemTemplate = { avatarContainer, agentAvatarContainer , username, detail, referencesListContainer, value, rowContainer, elementDisposables, titleToolbar, templateDisposables, contextKeyService } ;
253
255
return template ;
254
256
}
255
257
@@ -361,15 +363,29 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
361
363
}
362
364
363
365
if ( isResponseVM ( element ) && element . agent && ! element . agent . metadata . isDefault ) {
366
+ dom . show ( templateData . agentAvatarContainer ) ;
364
367
const icon = this . getAgentIcon ( element . agent . metadata ) ;
365
368
if ( icon instanceof URI ) {
366
369
const avatarIcon = dom . $ < HTMLImageElement > ( 'img.icon' ) ;
367
370
avatarIcon . src = FileAccess . uriToBrowserUri ( icon ) . toString ( true ) ;
368
- templateData . avatarContainer . appendChild ( dom . $ ( '.avatar' , undefined , avatarIcon ) ) ;
371
+ templateData . agentAvatarContainer . replaceChildren ( dom . $ ( '.avatar' , undefined , avatarIcon ) ) ;
369
372
} else if ( icon ) {
370
373
const avatarIcon = dom . $ ( ThemeIcon . asCSSSelector ( icon ) ) ;
371
- templateData . avatarContainer . appendChild ( dom . $ ( '.avatar.codicon-avatar' , undefined , avatarIcon ) ) ;
374
+ templateData . agentAvatarContainer . replaceChildren ( dom . $ ( '.avatar.codicon-avatar' , undefined , avatarIcon ) ) ;
372
375
}
376
+
377
+ templateData . agentAvatarContainer . classList . toggle ( 'complete' , element . isComplete ) ;
378
+ if ( ! element . agentAvatarHasBeenRendered && ! element . isComplete ) {
379
+ element . agentAvatarHasBeenRendered = true ;
380
+ templateData . agentAvatarContainer . classList . remove ( 'loading' ) ;
381
+ templateData . elementDisposables . add ( disposableTimeout ( ( ) => {
382
+ templateData . agentAvatarContainer . classList . toggle ( 'loading' , ! element . isComplete ) ;
383
+ } , 100 ) ) ;
384
+ } else {
385
+ templateData . agentAvatarContainer . classList . toggle ( 'loading' , ! element . isComplete ) ;
386
+ }
387
+ } else {
388
+ dom . hide ( templateData . agentAvatarContainer ) ;
373
389
}
374
390
}
375
391
0 commit comments