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_ANDROID_CERTIFICATE_TEMPLATE_PROFILE_ID, LinuxDiskEncryptionStatus, ProfileOperationType, ProfilePlatform, } from "interfaces/mdm"; import { COLORS } from "styles/var/colors"; import { OsSettingsTableStatusValue } from "../OSSettingsTableConfig"; import TooltipContent from "./components/Tooltip/TooltipContent"; import { isDiskEncryptionProfile, LINUX_DISK_ENCRYPTION_DISPLAY_CONFIG, PROFILE_DISPLAY_CONFIG, ProfileDisplayOption, ProfileStatus, WINDOWS_DISK_ENCRYPTION_DISPLAY_CONFIG, WindowsDiskEncryptionDisplayStatus, } from "./helpers"; const baseClass = "os-settings-status-cell"; interface IOSSettingStatusCellProps { status: OsSettingsTableStatusValue; operationType: ProfileOperationType | null; profileName: string; hostPlatform?: ProfilePlatform; profileUUID?: string; } const OSSettingStatusCell = ({ status, operationType, profileName = "", hostPlatform, profileUUID, }: IOSSettingStatusCellProps) => { let displayOption: ProfileDisplayOption = null; if (hostPlatform === "linux") { displayOption = LINUX_DISK_ENCRYPTION_DISPLAY_CONFIG[status as LinuxDiskEncryptionStatus]; } // Android host certificate templates. else if ( hostPlatform === "android" && profileUUID === FLEET_ANDROID_CERTIFICATE_TEMPLATE_PROFILE_ID ) { switch (status) { case "pending": case "delivering": case "delivered": if (operationType === "install") { displayOption = { statusText: "Enforcing (pending)", iconName: "pending-outline", tooltip: "The host is running the command to apply settings or will run it when the host comes online.", }; } else { displayOption = { statusText: "Removing enforcement (pending)", iconName: "pending-outline", tooltip: "The host is running the command to remove settings or will run it when the host comes online.", }; } break; case "verified": displayOption = { statusText: "Verified", iconName: "success", tooltip: () => "The host applied the setting. Fleet verified", }; break; case "failed": displayOption = { statusText: "Failed", iconName: "error", tooltip: null, }; break; default: displayOption = null; } } // windows hosts do not have an operation type at the moment and their display options are // different than mac hosts. else if ( !operationType && status !== "success" && status !== "acknowledged" ) { displayOption = WINDOWS_DISK_ENCRYPTION_DISPLAY_CONFIG[ status as WindowsDiskEncryptionDisplayStatus ]; } else if (operationType) { displayOption = PROFILE_DISPLAY_CONFIG[operationType]?.[status as ProfileStatus]; } const isDeviceUser = window.location.pathname .toLowerCase() .includes("/device/"); if (displayOption) { const { statusText, iconName, tooltip } = displayOption; const tooltipId = uniqueId(); return ( {tooltip ? ( <> {statusText} {status !== "action_required" ? ( ) : ( )} ) : ( statusText )} ); } // graceful error - this state should not be reached based on the API spec return ; }; export default OSSettingStatusCell;