diff --git a/public/app/features/plugins/admin/components/InstallControls/InstallControlsButton.test.tsx b/public/app/features/plugins/admin/components/InstallControls/InstallControlsButton.test.tsx index 68090c5ba54..554b9824193 100644 --- a/public/app/features/plugins/admin/components/InstallControls/InstallControlsButton.test.tsx +++ b/public/app/features/plugins/admin/components/InstallControls/InstallControlsButton.test.tsx @@ -230,12 +230,40 @@ describe('InstallControlsButton', () => { expect(button).toBeDisabled(); }); + it('should be disabled when isInstalling=false but isUpdatingFromInstance=true', () => { + store.dispatch({ type: 'plugins/uninstall/fulfilled', payload: { id: '', changes: {} } }); + render( + + + + ); + const button = screen.getByText('Uninstall').closest('button'); + expect(button).toBeDisabled(); + }); + + it('should be disabled when isInstalling=false but isFullyInstalled=false', () => { + store.dispatch({ type: 'plugins/uninstall/fulfilled', payload: { id: '', changes: {} } }); + render( + + + + ); + const button = screen.getByText('Uninstall').closest('button'); + expect(button).toBeDisabled(); + }); + it('should be enabled when isInstalling=false and isUninstallingFromInstance=false', () => { store.dispatch({ type: 'plugins/uninstall/fulfilled', payload: { id: '', changes: {} } }); render( diff --git a/public/app/features/plugins/admin/components/InstallControls/InstallControlsButton.tsx b/public/app/features/plugins/admin/components/InstallControls/InstallControlsButton.tsx index f438752afa6..fa82e9ce628 100644 --- a/public/app/features/plugins/admin/components/InstallControls/InstallControlsButton.tsx +++ b/public/app/features/plugins/admin/components/InstallControls/InstallControlsButton.tsx @@ -117,10 +117,8 @@ export function InstallControlsButton({ } }; - let disableUninstall = - config.pluginAdminExternalManageEnabled && configCore.featureToggles.managedPluginsInstall - ? plugin.isUninstallingFromInstance - : isUninstalling; + let disableUninstall = shouldDisableUninstall(isUninstalling, plugin); + let uninstallTitle = ''; if (plugin.isPreinstalled.found) { disableUninstall = true; @@ -179,3 +177,11 @@ export function InstallControlsButton({ ); } + +function shouldDisableUninstall(isUninstalling: boolean, plugin: CatalogPlugin) { + if (config.pluginAdminExternalManageEnabled && config.featureToggles.managedPluginsInstall) { + return plugin.isUninstallingFromInstance || !plugin.isFullyInstalled || plugin.isUpdatingFromInstance; + } + + return isUninstalling; +}