diff --git a/public/app/features/plugins/admin/api.ts b/public/app/features/plugins/admin/api.ts index f79968d47ae..86c8217a402 100644 --- a/public/app/features/plugins/admin/api.ts +++ b/public/app/features/plugins/admin/api.ts @@ -3,7 +3,7 @@ import { getBackendSrv, isFetchError } from '@grafana/runtime'; import { accessControlQueryParam } from 'app/core/utils/accessControl'; import { API_ROOT, GCOM_API_ROOT, INSTANCE_API_ROOT } from './constants'; -import { isLocalPluginVisibleByConfig, isRemotePluginVisibleByConfig } from './helpers'; +import { dependantPlugins, isLocalPluginVisibleByConfig, isRemotePluginVisibleByConfig } from './helpers'; import { LocalPlugin, RemotePlugin, @@ -29,6 +29,7 @@ export async function getPluginDetails(id: string): Promise dep.name); if (dependencyOf?.length) { - disableUninstall = true; - uninstallTitle = `Dependent plugins must be removed first: ${dependencyOf.join(', ')}`; + uninstallConfirmationBody = `This plugin is a dependency of ${dependencyOf.join(', ')}. Are you sure you want to uninstall this plugin?`; + } + + // TODO && dependency plugin is still installed + const hasDependency = plugin.details?.pluginDependencies?.map((dep) => dep.name); + if (hasDependency?.length) { + uninstallConfirmationBody = `This plugin has dependencies on ${hasDependency.join(', ')}. Are you sure you want to uninstall this plugin?`; } if (pluginStatus === PluginStatus.UNINSTALL) { @@ -139,7 +145,7 @@ export function InstallControlsButton({