UI - Restore packs logic to host details (#13031)

## Addresses ##13032
### Restore packs logic per product decision
<img width="849" alt="Screenshot 2023-07-28 at 12 12 48 PM"
src="https://github.com/fleetdm/fleet/assets/61553566/93603522-18c0-4d40-8e63-5d516e1345f2">

- [x] Manual QA for all new/changed functionality

---------

Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
This commit is contained in:
Jacob Shandling 2023-07-28 12:27:12 -07:00 committed by GitHub
parent 40e8f83829
commit 37203dbad2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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<number | null>(null);
const [showRefetchSpinner, setShowRefetchSpinner] = useState(false);
const [schedule, setSchedule] = useState<IQueryStats[]>();
const [packsState, setPacksState] = useState<IPackStats[]>();
const [hostSoftware, setHostSoftware] = useState<ISoftware[]>([]);
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 && (
<PacksCard packsState={packsState} isLoading={isLoadingHost} />
)}
</TabPanel>
<TabPanel>
<PoliciesCard