UI: make diskspace graph behavior os-dependent (#8792)

Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
This commit is contained in:
Jacob Shandling
2022-11-22 14:43:30 -08:00
committed by GitHub
co-authored by Jacob Shandling
parent 9796a15b4d
commit b131839b7f
5 changed files with 48 additions and 31 deletions
@@ -0,0 +1 @@
* Remove tooltips and conditional coloring in the disk space graph for Linux hosts
@@ -7,6 +7,7 @@ interface IDiskSpaceGraphProps {
gigsDiskSpaceAvailable: number | string;
percentDiskSpaceAvailable: number;
id: string;
platform: string;
}
const DiskSpaceGraph = ({
@@ -14,28 +15,31 @@ const DiskSpaceGraph = ({
gigsDiskSpaceAvailable,
percentDiskSpaceAvailable,
id,
platform,
}: IDiskSpaceGraphProps): JSX.Element => {
const diskSpaceIndicator = () => {
switch (true) {
case gigsDiskSpaceAvailable < 16:
const getDiskSpaceIndicatorColor = (): string => {
// return space-dependent graph colors for mac and windows hosts, green for linux
if (platform === "darwin" || platform === "windows") {
if (gigsDiskSpaceAvailable < 16) {
return "red";
case gigsDiskSpaceAvailable < 32:
} else if (gigsDiskSpaceAvailable < 32) {
return "yellow";
default:
return "green";
}
}
return "green";
};
const diskSpaceTooltip = (): string | undefined => {
switch (true) {
case gigsDiskSpaceAvailable < 16:
const diskSpaceTooltipText = ((): string | undefined => {
if (platform === "darwin" || platform === "windows") {
if (gigsDiskSpaceAvailable < 16) {
return "Not enough disk space available to install most small operating systems updates.";
case gigsDiskSpaceAvailable < 32:
} else if (gigsDiskSpaceAvailable < 32) {
return "Not enough disk space available to install most large operating systems updates.";
default:
return "Enough disk space available to install most operating systems updates.";
}
return "Enough disk space available to install most operating systems updates.";
}
};
return undefined;
})();
if (gigsDiskSpaceAvailable === 0 || gigsDiskSpaceAvailable === "---") {
return <span className={`${baseClass}__data`}>No data available</span>;
@@ -46,29 +50,35 @@ const DiskSpaceGraph = ({
<div
className={`${baseClass}__disk-space-wrapper tooltip`}
data-tip
data-for={id}
data-for={`tooltip-${id}`}
>
<div className={`${baseClass}__disk-space`}>
<div
className={`${baseClass}__disk-space--${diskSpaceIndicator()}`}
className={`${baseClass}__disk-space--${getDiskSpaceIndicatorColor()}`}
style={{
width: `${100 - percentDiskSpaceAvailable}%`,
width: `${percentDiskSpaceAvailable}%`,
}}
title="disk space indicator"
/>
</div>
</div>
<ReactTooltip
className={"disk-space-tooltip"}
place="top"
type="dark"
effect="solid"
id={id}
backgroundColor="#3e4771"
>
<span className={`${baseClass}__tooltip-text`}>
{diskSpaceTooltip()}
</span>
</ReactTooltip>
{diskSpaceTooltipText && (
<ReactTooltip
className={"disk-space-tooltip"}
place="top"
type="dark"
effect="solid"
id={`tooltip-${id}`}
backgroundColor="#3e4771"
>
<span
className={`${baseClass}__tooltip-text`}
title="disk space tooltip"
>
{diskSpaceTooltipText}
</span>
</ReactTooltip>
)}
{gigsDiskSpaceAvailable} GB{baseClass === "info-flex" && " available"}
</span>
);
@@ -248,14 +248,18 @@ const allHostTableHeaders: IDataColumn[] = [
),
accessor: "gigs_disk_space_available",
Cell: (cellProps: INumberCellProps): JSX.Element => {
const { id, percent_disk_space_available } = cellProps.row.original;
const {
id,
platform,
percent_disk_space_available,
} = cellProps.row.original;
return (
<DiskSpaceGraph
baseClass="gigs_disk_space_available__cell"
gigsDiskSpaceAvailable={cellProps.cell.value}
percentDiskSpaceAvailable={percent_disk_space_available}
id={`disk-space__${id}`}
platform={platform}
/>
);
},
@@ -334,6 +334,7 @@ const HostDetailsPage = ({
"issues",
"memory",
"cpu_type",
"platform",
"os_version",
"osquery_version",
"enroll_secret_name",
@@ -155,7 +155,8 @@ const HostSummary = ({
baseClass="info-flex"
gigsDiskSpaceAvailable={titleData.gigs_disk_space_available}
percentDiskSpaceAvailable={titleData.percent_disk_space_available}
id={"disk-space-tooltip"}
id={`disk-space-tooltip-${titleData.id}`}
platform={titleData.platform}
/>
</div>
{typeof diskEncryption?.enabled === "boolean" &&