diff --git a/app/react/portainer/HomeView/EnvironmentList/KubeconfigButton/KubeconfigButton.tsx b/app/react/portainer/HomeView/EnvironmentList/KubeconfigButton/KubeconfigButton.tsx index f2b20857d..393c55f9c 100644 --- a/app/react/portainer/HomeView/EnvironmentList/KubeconfigButton/KubeconfigButton.tsx +++ b/app/react/portainer/HomeView/EnvironmentList/KubeconfigButton/KubeconfigButton.tsx @@ -7,6 +7,7 @@ import { trackEvent } from '@/angulartics.matomo/analytics-services'; import { Query } from '@/react/portainer/environments/queries/useEnvironmentList'; import { Button } from '@@/buttons'; +import { TooltipWithChildren } from '@@/Tip/TooltipWithChildren'; import { KubeconfigPrompt } from './KubeconfigPrompt'; @@ -23,23 +24,41 @@ export function KubeconfigButton({ environments, envQueryParams }: Props) { isKubernetesEnvironment(env.Type) ); - if (!isKubeconfigButtonVisible()) { - return null; + const isHttp = window.location.protocol === 'http:'; + const noKubeEnvs = kubeEnvs.length === 0; + const isDisabled = noKubeEnvs || isHttp; + + let tooltipMessage = ''; + if (isHttp) { + tooltipMessage = + 'Kubeconfig download is not available when Portainer is accessed via HTTP. Please use HTTPS'; + } else if (noKubeEnvs) { + tooltipMessage = 'No Kubernetes environments detected'; } + const button = ( + + ); + return ( <> - + {isDisabled ? ( + + {button} + + ) : ( + button + )} {prompt()} ); @@ -60,10 +79,6 @@ export function KubeconfigButton({ environments, envQueryParams }: Props) { setIsOpen(false); } - function isKubeconfigButtonVisible() { - return window.location.protocol === 'https:'; - } - function prompt() { return ( isOpen && (