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;
+}