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 Screenshot 2023-07-28 at 12 12 48 PM - [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 && ( + + )}