@@ -23,12 +23,11 @@ import { IThemeService } from '../../../../platform/theme/common/themeService.js
2323import { getLocationBasedViewColors , ViewPane } from '../../../browser/parts/views/viewPane.js' ;
2424import { IViewletViewOptions } from '../../../browser/parts/views/viewsViewlet.js' ;
2525import { IViewDescriptorService } from '../../../common/views.js' ;
26- import { IMcpWorkbenchService , IWorkbenchMcpServer , McpServerContainers , mcpServerIcon } from '../common/mcpTypes.js' ;
26+ import { IMcpWorkbenchService , IWorkbenchMcpServer , McpServerContainers } from '../common/mcpTypes.js' ;
2727import { DropDownAction , InstallAction , ManageMcpServerAction } from './mcpServerActions.js' ;
28- import { PublisherWidget , InstallCountWidget , RatingsWidget } from './mcpServerWidgets.js' ;
28+ import { PublisherWidget , InstallCountWidget , RatingsWidget , McpServerIconWidget } from './mcpServerWidgets.js' ;
2929import { ActionRunner , IAction , Separator } from '../../../../base/common/actions.js' ;
3030import { IActionViewItemOptions } from '../../../../base/browser/ui/actionbar/actionViewItems.js' ;
31- import { ThemeIcon } from '../../../../base/common/themables.js' ;
3231
3332export class McpServersListView extends ViewPane {
3433
@@ -136,7 +135,6 @@ export class McpServersListView extends ViewPane {
136135interface IMcpServerTemplateData {
137136 root : HTMLElement ;
138137 element : HTMLElement ;
139- icon : HTMLElement ;
140138 name : HTMLElement ;
141139 description : HTMLElement ;
142140 installCount : HTMLElement ;
@@ -159,7 +157,8 @@ class McpServerRenderer implements IListRenderer<IWorkbenchMcpServer, IMcpServer
159157
160158 renderTemplate ( root : HTMLElement ) : IMcpServerTemplateData {
161159 const element = dom . append ( root , dom . $ ( '.mcp-server-item.extension-list-item' ) ) ;
162- const icon = dom . append ( element , dom . $ ( '.icon-container' ) ) ;
160+ const iconContainer = dom . append ( element , dom . $ ( '.icon-container' ) ) ;
161+ const iconWidget = this . instantiationService . createInstance ( McpServerIconWidget , iconContainer ) ;
163162 const details = dom . append ( element , dom . $ ( '.details' ) ) ;
164163 const headerContainer = dom . append ( details , dom . $ ( '.header-container' ) ) ;
165164 const header = dom . append ( headerContainer , dom . $ ( '.header' ) ) ;
@@ -188,6 +187,7 @@ class McpServerRenderer implements IListRenderer<IWorkbenchMcpServer, IMcpServer
188187 ] ;
189188
190189 const widgets = [
190+ iconWidget ,
191191 publisherWidget ,
192192 this . instantiationService . createInstance ( InstallCountWidget , installCount , true ) ,
193193 this . instantiationService . createInstance ( RatingsWidget , ratings , true ) ,
@@ -198,7 +198,7 @@ class McpServerRenderer implements IListRenderer<IWorkbenchMcpServer, IMcpServer
198198 const disposable = combinedDisposable ( ...actions , ...widgets , actionbar , actionBarListener , extensionContainers ) ;
199199
200200 return {
201- root, element, icon , name, description, installCount, ratings, disposables : [ disposable ] , actionbar,
201+ root, element, name, description, installCount, ratings, disposables : [ disposable ] , actionbar,
202202 mcpServerDisposables : [ ] ,
203203 set mcpServer ( mcpServer : IWorkbenchMcpServer ) {
204204 extensionContainers . mcpServer = mcpServer ;
@@ -210,25 +210,6 @@ class McpServerRenderer implements IListRenderer<IWorkbenchMcpServer, IMcpServer
210210 data . element . classList . remove ( 'loading' ) ;
211211 data . mcpServerDisposables = dispose ( data . mcpServerDisposables ) ;
212212 data . root . setAttribute ( 'data-mcp-server-id' , mcpServer . id ) ;
213-
214- dom . clearNode ( data . icon ) ;
215- if ( mcpServer . iconUrl ) {
216- const icon = dom . append ( data . icon , dom . $ < HTMLImageElement > ( 'img.icon' , { alt : '' } ) ) ;
217- data . mcpServerDisposables . push ( dom . addDisposableListener ( icon , 'error' , ( ) => {
218- dom . clearNode ( data . icon ) ;
219- dom . append ( data . icon , dom . $ ( ThemeIcon . asCSSSelector ( mcpServerIcon ) ) ) ;
220- } , { once : true } ) ) ;
221- icon . src = mcpServer . iconUrl ;
222- if ( ! icon . complete ) {
223- data . icon . style . visibility = 'hidden' ;
224- icon . onload = ( ) => icon . style . visibility = 'inherit' ;
225- } else {
226- icon . style . visibility = 'inherit' ;
227- }
228- } else {
229- dom . append ( data . icon , dom . $ ( ThemeIcon . asCSSSelector ( mcpServerIcon ) ) ) ;
230- }
231-
232213 data . name . textContent = mcpServer . label ;
233214 data . description . textContent = mcpServer . description ;
234215
0 commit comments