import React, { useState } from 'react'; import { AppEvents } from '@grafana/data'; import { Button, HorizontalGroup, ConfirmModal } from '@grafana/ui'; import appEvents from 'app/core/app_events'; import { useInstallStatus, useUninstallStatus, useInstall, useUninstall } from '../../state/hooks'; import { CatalogPlugin, PluginStatus, Version } from '../../types'; type InstallControlsButtonProps = { plugin: CatalogPlugin; pluginStatus: PluginStatus; latestCompatibleVersion?: Version; }; export function InstallControlsButton({ plugin, pluginStatus, latestCompatibleVersion }: InstallControlsButtonProps) { const { isInstalling, error: errorInstalling } = useInstallStatus(); const { isUninstalling, error: errorUninstalling } = useUninstallStatus(); const install = useInstall(); const uninstall = useUninstall(); const [isConfirmModalVisible, setIsConfirmModalVisible] = useState(false); const showConfirmModal = () => setIsConfirmModalVisible(true); const hideConfirmModal = () => setIsConfirmModalVisible(false); const uninstallBtnText = isUninstalling ? 'Uninstalling' : 'Uninstall'; const onInstall = async () => { await install(plugin.id, latestCompatibleVersion?.version); if (!errorInstalling) { appEvents.emit(AppEvents.alertSuccess, [`Installed ${plugin.name}`]); } }; const onUninstall = async () => { hideConfirmModal(); await uninstall(plugin.id); if (!errorUninstalling) { appEvents.emit(AppEvents.alertSuccess, [`Uninstalled ${plugin.name}`]); } }; const onUpdate = async () => { await install(plugin.id, latestCompatibleVersion?.version, true); if (!errorInstalling) { appEvents.emit(AppEvents.alertSuccess, [`Updated ${plugin.name}`]); } }; if (pluginStatus === PluginStatus.UNINSTALL) { return ( <> ); } if (pluginStatus === PluginStatus.UPDATE) { return ( ); } return ( ); }