From 9be88549e2b13286d29066d1d7c26077ea5410ba Mon Sep 17 00:00:00 2001 From: Viktor Avelino <64113566+viktoravelino@users.noreply.github.com> Date: Wed, 8 Apr 2026 12:10:55 -0400 Subject: [PATCH] fix: hide header CTA buttons during empty/loading states (#12560) * fix: hide header CTA buttons during empty/loading states on deployments page Lift useProviderFilter and useGetDeploymentsByProviders hooks to DeploymentsPage so the parent can conditionally render the header button. Hide "New Deployment" when there are no deployments and "New Environment" when there are no providers. Also hide the environment dropdown when the deployment list is empty and remove the unused "no-providers" empty state variant. * fix: update deployment E2E tests for hidden header buttons in empty state Adapt Playwright tests to use subtab-deployments as the page-ready selector instead of new-deployment-btn (now hidden when data is empty). Use empty-state CTA buttons where header buttons are no longer visible. Add test for editing tool name on the review step. --- .../components/deployments-content.tsx | 45 ++++---------- .../components/deployments-empty-state.tsx | 34 +++-------- .../deploymentsPage/deployments-page.tsx | 61 +++++++++++++------ .../core/features/deployment-create.spec.ts | 47 ++++++++++++-- .../core/features/deployment-edit.spec.ts | 2 +- .../features/deployment-providers.spec.ts | 9 ++- .../features/deployment-test-modal.spec.ts | 2 +- .../core/features/deployments-page.spec.ts | 16 +++-- 8 files changed, 115 insertions(+), 101 deletions(-) diff --git a/src/frontend/src/pages/MainPage/pages/deploymentsPage/components/deployments-content.tsx b/src/frontend/src/pages/MainPage/pages/deploymentsPage/components/deployments-content.tsx index b32357c01f..1a3616bbbb 100644 --- a/src/frontend/src/pages/MainPage/pages/deploymentsPage/components/deployments-content.tsx +++ b/src/frontend/src/pages/MainPage/pages/deploymentsPage/components/deployments-content.tsx @@ -7,9 +7,7 @@ import { SelectValue, } from "@/components/ui/select"; import { useDeleteDeployment } from "@/controllers/API/queries/deployments/use-delete-deployment"; -import { useGetDeploymentsByProviders } from "@/controllers/API/queries/deployments/use-get-deployments-by-providers"; import { useDeleteWithConfirmation } from "../hooks/use-delete-with-confirmation"; -import { useProviderFilter } from "../hooks/use-provider-filter"; import { useTestDeploymentModal } from "../hooks/use-test-deployment-modal"; import type { Deployment, ProviderAccount } from "../types"; import DeploymentDetailsModal from "./deployment-details-modal/deployment-details-modal"; @@ -23,30 +21,26 @@ import TypeToConfirmDeleteDialog from "./type-to-confirm-delete-dialog"; const buildDeploymentDeleteParams = (id: string) => ({ deployment_id: id }); interface DeploymentsContentProps { - isLoadingProviders: boolean; providers: ProviderAccount[]; + deployments: Deployment[]; + isLoading: boolean; + selectedProviderId: string; + setSelectedProviderId: (id: string) => void; + providerMap: Record; stepperOpen: boolean; setStepperOpen: (open: boolean) => void; - onGoToProviders: () => void; } export default function DeploymentsContent({ - isLoadingProviders, providers, + deployments, + isLoading, + selectedProviderId, + setSelectedProviderId, + providerMap, stepperOpen, setStepperOpen, - onGoToProviders, }: DeploymentsContentProps) { - const { - selectedProviderId, - setSelectedProviderId, - providerIdsToQuery, - providerMap, - } = useProviderFilter(providers); - - const { deployments, isLoading: isLoadingDeployments } = - useGetDeploymentsByProviders(providerIdsToQuery); - const testModal = useTestDeploymentModal(); const { mutate: deleteDeployment } = useDeleteDeployment(); @@ -64,25 +58,10 @@ export default function DeploymentsContent({ null, ); - const isLoading = isLoadingProviders || isLoadingDeployments; - const hasProviders = providers.length > 0; - const content = (() => { if (isLoading) return ; - if (!hasProviders) - return ( - - ); if (deployments.length === 0) - return ( - setStepperOpen(true)} - /> - ); + return setStepperOpen(true)} />; return ( - {providers.length >= 1 && ( + {providers.length >= 1 && deployments.length > 0 && (
Environment: