mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 21:47:20 +00:00
## Addresses second major part of #15011 (item 3) – Host query report _Note for reviewers: The most important files here are:_ - HostQueryReport.tsx - HQRTable.tsx - HQRTableConfig.tsx _The rest are associated API services, interfaces, helpers, routes, styles, and miscellanious code improvements I made along the way._ ____________ ### See linked issue for enumeration of feature-related tasks <img width="1230" alt="Screenshot 2023-12-08 at 4 23 50 PM" src="https://github.com/fleetdm/fleet/assets/61553566/4ae4b41b-9209-4afa-ae50-8844d01ff8fd"> <img width="1230" alt="collecting" src="https://github.com/fleetdm/fleet/assets/61553566/061ac2bc-899f-4b29-91ba-36ebecf5ce58"> <img width="1230" alt="Screenshot 2023-12-08 at 4 24 39 PM" src="https://github.com/fleetdm/fleet/assets/61553566/f8b25e01-fe3b-47e6-b980-eba9538b1a01"> <img width="1230" alt="Screenshot 2023-12-08 at 4 25 01 PM" src="https://github.com/fleetdm/fleet/assets/61553566/46360274-8500-494c-8fb7-3a1d45347ce0"> Re-routes to host details > queries if: - query reports are globally disabled: https://github.com/fleetdm/fleet/assets/61553566/ac67da8c-57bc-4d9b-96be-daf3b198e704 - query has `Discard data` enabled: https://github.com/fleetdm/fleet/assets/61553566/b797dd24-9893-4360-bf40-b80298848864 - [x] Manual QA for all new/changed functionality --------- Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
105 lines
2.9 KiB
TypeScript
105 lines
2.9 KiB
TypeScript
import React from "react";
|
|
import ReactTooltip from "react-tooltip";
|
|
import { uniqueId } from "lodash";
|
|
|
|
import Icon from "components/Icon";
|
|
import TextCell from "components/TableContainer/DataTable/TextCell";
|
|
import {
|
|
FLEET_FILEVAULT_PROFILE_DISPLAY_NAME,
|
|
ProfileOperationType,
|
|
} from "interfaces/mdm";
|
|
import { COLORS } from "styles/var/colors";
|
|
|
|
import {
|
|
isMdmProfileStatus,
|
|
OsSettingsTableStatusValue,
|
|
} from "../OSSettingsTableConfig";
|
|
import TooltipContent from "./components/Tooltip/TooltipContent";
|
|
import {
|
|
PROFILE_DISPLAY_CONFIG,
|
|
ProfileDisplayOption,
|
|
WINDOWS_DISK_ENCRYPTION_DISPLAY_CONFIG,
|
|
} from "./helpers";
|
|
|
|
const baseClass = "os-setting-status-cell";
|
|
|
|
interface IOSSettingStatusCellProps {
|
|
status: OsSettingsTableStatusValue;
|
|
operationType: ProfileOperationType | null;
|
|
profileName: string;
|
|
}
|
|
|
|
const OSSettingStatusCell = ({
|
|
status,
|
|
operationType,
|
|
profileName = "",
|
|
}: IOSSettingStatusCellProps) => {
|
|
let displayOption: ProfileDisplayOption = null;
|
|
|
|
// windows hosts do not have an operation type at the moment and their display options are
|
|
// different than mac hosts.
|
|
if (!operationType && isMdmProfileStatus(status)) {
|
|
displayOption = WINDOWS_DISK_ENCRYPTION_DISPLAY_CONFIG[status];
|
|
}
|
|
|
|
if (operationType) {
|
|
displayOption = PROFILE_DISPLAY_CONFIG[operationType]?.[status];
|
|
}
|
|
|
|
const isDeviceUser = window.location.pathname
|
|
.toLowerCase()
|
|
.includes("/device/");
|
|
|
|
const isDiskEncryptionProfile =
|
|
profileName === FLEET_FILEVAULT_PROFILE_DISPLAY_NAME;
|
|
|
|
if (displayOption) {
|
|
const { statusText, iconName, tooltip } = displayOption;
|
|
const tooltipId = uniqueId();
|
|
return (
|
|
<span className={baseClass}>
|
|
<Icon name={iconName} />
|
|
{tooltip ? (
|
|
<>
|
|
<span
|
|
className="tooltip tooltip__tooltip-icon"
|
|
data-tip
|
|
data-for={tooltipId}
|
|
data-tip-disable={false}
|
|
>
|
|
{statusText}
|
|
</span>
|
|
<ReactTooltip
|
|
place="top"
|
|
effect="solid"
|
|
backgroundColor={COLORS["tooltip-bg"]}
|
|
id={tooltipId}
|
|
data-html
|
|
>
|
|
<span className="tooltip__tooltip-text">
|
|
{status !== "action_required" ? (
|
|
<TooltipContent
|
|
innerContent={tooltip}
|
|
innerProps={{
|
|
isDiskEncryptionProfile,
|
|
}}
|
|
/>
|
|
) : (
|
|
<TooltipContent
|
|
innerContent={tooltip}
|
|
innerProps={{ isDeviceUser, profileName }}
|
|
/>
|
|
)}
|
|
</span>
|
|
</ReactTooltip>
|
|
</>
|
|
) : (
|
|
statusText
|
|
)}
|
|
</span>
|
|
);
|
|
}
|
|
// graceful error - this state should not be reached based on the API spec
|
|
return <TextCell value="Unrecognized" />;
|
|
};
|
|
export default OSSettingStatusCell;
|