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 (
);
}