@@ -29,6 +29,10 @@ export interface ExtensionRegistryViewProps {
2929 extension : RegistryExtension ,
3030 requestConsentOverride ?: ( consent : string ) => Promise < boolean > ,
3131 ) => void | Promise < void > ;
32+ onLink ?: (
33+ extension : RegistryExtension ,
34+ requestConsentOverride ?: ( consent : string ) => Promise < boolean > ,
35+ ) => void | Promise < void > ;
3236 onClose ?: ( ) => void ;
3337 extensionManager : ExtensionManager ;
3438}
@@ -39,6 +43,7 @@ interface ExtensionItem extends GenericListItem {
3943
4044export function ExtensionRegistryView ( {
4145 onSelect,
46+ onLink,
4247 onClose,
4348 extensionManager,
4449} : ExtensionRegistryViewProps ) : React . JSX . Element {
@@ -96,6 +101,22 @@ export function ExtensionRegistryView({
96101 [ onSelect , extensionManager ] ,
97102 ) ;
98103
104+ const handleLink = useCallback (
105+ async (
106+ extension : RegistryExtension ,
107+ requestConsentOverride ?: ( consent : string ) => Promise < boolean > ,
108+ ) => {
109+ await onLink ?.( extension , requestConsentOverride ) ;
110+
111+ // Refresh installed extensions list
112+ setInstalledExtensions ( extensionManager . getExtensions ( ) ) ;
113+
114+ // Go back to the search page (list view)
115+ setSelectedExtension ( null ) ;
116+ } ,
117+ [ onLink , extensionManager ] ,
118+ ) ;
119+
99120 const renderItem = useCallback (
100121 ( item : ExtensionItem , isActive : boolean , _labelWidth : number ) => {
101122 const isInstalled = installedExtensions . some (
@@ -260,6 +281,9 @@ export function ExtensionRegistryView({
260281 onInstall = { async ( requestConsentOverride ) => {
261282 await handleInstall ( selectedExtension , requestConsentOverride ) ;
262283 } }
284+ onLink = { async ( requestConsentOverride ) => {
285+ await handleLink ( selectedExtension , requestConsentOverride ) ;
286+ } }
263287 isInstalled = { installedExtensions . some (
264288 ( e ) => e . name === selectedExtension . extensionName ,
265289 ) }
0 commit comments