From 76f7c674505e1fd86b5b57b99f341b6509459003 Mon Sep 17 00:00:00 2001
From: RachelElysia <71795832+RachelElysia@users.noreply.github.com>
Date: Fri, 5 Sep 2025 09:38:11 -0400
Subject: [PATCH] Fleet UI: Display UI after osVersions loads only (#32604)
---
.../hosts/ManageHostsPage/ManageHostsPage.tsx | 20 +++++++++++--------
.../HostsFilterBlock/HostsFilterBlock.tsx | 6 ++++++
2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/frontend/pages/hosts/ManageHostsPage/ManageHostsPage.tsx b/frontend/pages/hosts/ManageHostsPage/ManageHostsPage.tsx
index 3598365134..58dd0c5f16 100644
--- a/frontend/pages/hosts/ManageHostsPage/ManageHostsPage.tsx
+++ b/frontend/pages/hosts/ManageHostsPage/ManageHostsPage.tsx
@@ -505,7 +505,7 @@ const ManageHostsPage = ({
}
);
- const { data: osVersions } = useQuery<
+ const { data: osVersions, isLoading: isLoadingOsVersions } = useQuery<
IOSVersionsResponse,
Error,
IOperatingSystemVersion[],
@@ -1685,6 +1685,15 @@ const ManageHostsPage = ({
filter in queryParams // TODO: replace this with `Object.hasOwn(queryParams, filter)` when we upgrade to es2022
);
+ // Ensures rendering table/pills simultaneously when all API calls are done
+ const isLoading =
+ isLoadingHosts ||
+ isLoadingHostsCount ||
+ isLoadingPolicy ||
+ isLoadingOsVersions ||
+ isLoadingConfigProfile ||
+ isLoadingScriptBatchSummary;
+
const renderTable = () => {
if (!config || !currentUser || !isRouteOk) {
return ;
@@ -1828,13 +1837,7 @@ const ManageHostsPage = ({
resultsTitle="hosts"
columnConfigs={tableColumns}
data={hostsData?.hosts || []}
- isLoading={
- isLoadingHosts ||
- isLoadingHostsCount ||
- isLoadingPolicy ||
- isLoadingConfigProfile ||
- isLoadingScriptBatchSummary
- }
+ isLoading={isLoading}
manualSortBy
defaultSortHeader={(sortBy[0] && sortBy[0].key) || DEFAULT_SORT_HEADER}
defaultSortDirection={
@@ -2000,6 +2003,7 @@ const ManageHostsPage = ({
}
onClickEditLabel={onEditLabelClick}
onClickDeleteLabel={toggleDeleteLabelModal}
+ isLoading={isLoading}
/>
{renderNoEnrollSecretBanner()}
{renderTable()}
diff --git a/frontend/pages/hosts/ManageHostsPage/components/HostsFilterBlock/HostsFilterBlock.tsx b/frontend/pages/hosts/ManageHostsPage/components/HostsFilterBlock/HostsFilterBlock.tsx
index c3579325e1..3737251a7f 100644
--- a/frontend/pages/hosts/ManageHostsPage/components/HostsFilterBlock/HostsFilterBlock.tsx
+++ b/frontend/pages/hosts/ManageHostsPage/components/HostsFilterBlock/HostsFilterBlock.tsx
@@ -109,6 +109,7 @@ interface IHostsFilterBlockProps {
onChangeScriptBatchStatusFilter: (newStatus: ScriptBatchHostCountV1) => void;
onClickEditLabel: (evt: React.MouseEvent) => void;
onClickDeleteLabel: () => void;
+ isLoading?: boolean;
}
/**
@@ -162,9 +163,14 @@ const HostsFilterBlock = ({
onChangeScriptBatchStatusFilter,
onClickEditLabel,
onClickDeleteLabel,
+ isLoading = false,
}: IHostsFilterBlockProps) => {
const { currentUser, isOnGlobalTeam } = useContext(AppContext);
+ if (isLoading) {
+ return <>>;
+ }
+
const renderLabelFilterPill = () => {
if (selectedLabel) {
const {