From 37203dbad2f2e98a5a253cf0b105dbc895a2696d Mon Sep 17 00:00:00 2001
From: Jacob Shandling <61553566+jacobshandling@users.noreply.github.com>
Date: Fri, 28 Jul 2023 12:27:12 -0700
Subject: [PATCH] UI - Restore packs logic to host details (#13031)
## Addresses ##13032
### Restore packs logic per product decision
- [x] Manual QA for all new/changed functionality
---------
Co-authored-by: Jacob Shandling
---
.../HostDetailsPage/HostDetailsPage.tsx | 28 +++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/frontend/pages/hosts/details/HostDetailsPage/HostDetailsPage.tsx b/frontend/pages/hosts/details/HostDetailsPage/HostDetailsPage.tsx
index a982fac447..3e6e35d811 100644
--- a/frontend/pages/hosts/details/HostDetailsPage/HostDetailsPage.tsx
+++ b/frontend/pages/hosts/details/HostDetailsPage/HostDetailsPage.tsx
@@ -18,12 +18,14 @@ import {
IHost,
IDeviceMappingResponse,
IMacadminsResponse,
+ IPackStats,
IHostResponse,
IHostMdmData,
IPackStats,
} from "interfaces/host";
import { ILabel } from "interfaces/label";
import { IHostPolicy } from "interfaces/policy";
+import { IQueryStats } from "interfaces/query_stats";
import { ISoftware } from "interfaces/software";
import { ITeam } from "interfaces/team";
import {
@@ -40,6 +42,7 @@ import InfoBanner from "components/InfoBanner";
import BackLink from "components/BackLink";
import { normalizeEmptyValues, wrapFleetHelper } from "utilities/helpers";
+import permissions from "utilities/permissions";
import HostSummaryCard from "../cards/HostSummary";
import AboutCard from "../cards/About";
@@ -50,6 +53,7 @@ import SoftwareCard from "../cards/Software";
import UsersCard from "../cards/Users";
import PoliciesCard from "../cards/Policies";
import ScheduleCard from "../cards/Schedule";
+import PacksCard from "../cards/Packs";
import PolicyDetailsModal from "../cards/Policies/HostPoliciesTable/PolicyDetailsModal";
import OSPolicyModal from "./modals/OSPolicyModal";
import UnenrollMdmModal from "./modals/UnenrollMdmModal";
@@ -115,7 +119,9 @@ const HostDetailsPage = ({
const {
config,
+ currentUser,
isGlobalAdmin = false,
+ isGlobalObserver,
isPremiumTier = false,
isSandboxMode,
isOnlyObserver,
@@ -152,6 +158,7 @@ const HostDetailsPage = ({
const [refetchStartTime, setRefetchStartTime] = useState(null);
const [showRefetchSpinner, setShowRefetchSpinner] = useState(false);
const [schedule, setSchedule] = useState();
+ const [packsState, setPacksState] = useState();
const [hostSoftware, setHostSoftware] = useState([]);
const [usersState, setUsersState] = useState<{ username: string }[]>([]);
const [usersSearchString, setUsersSearchString] = useState("");
@@ -313,6 +320,7 @@ const HostDetailsPage = ({
{ packs: [], schedule: [] }
);
setSchedule(packStatsByType.schedule);
+ setPacksState(packStatsByType.packs);
}
},
onError: (error) => handlePageError(error),
@@ -614,6 +622,23 @@ const HostDetailsPage = ({
host?.mdm.name === "Fleet" &&
host?.mdm.macos_settings?.disk_encryption === "action_required";
+ /* Context team id might be different that host's team id
+ Observer plus must be checked against host's team id */
+ const isGlobalOrHostsTeamObserverPlus =
+ currentUser && host?.team_id
+ ? permissions.isObserverPlus(currentUser, host.team_id)
+ : false;
+
+ const isHostsTeamObserver =
+ currentUser && host?.team_id
+ ? permissions.isTeamObserver(currentUser, host.team_id)
+ : false;
+
+ const canViewPacks =
+ !isGlobalObserver &&
+ !isGlobalOrHostsTeamObserverPlus &&
+ !isHostsTeamObserver;
+
const bootstrapPackageData = {
status: host?.mdm.macos_setup?.bootstrap_package_status,
details: host?.mdm.macos_setup?.details,
@@ -726,6 +751,9 @@ const HostDetailsPage = ({
schedule={schedule}
isLoading={isLoadingHost}
/>
+ {canViewPacks && (
+
+ )}