mirror of
https://github.com/fleetdm/fleet
synced 2026-05-20 07:29:08 +00:00
## Addresses a conversation in which we decided _not_ to remove the host details page's Query action and Schedule tab after all. @zhumo @rachaelshaw, related to #12636 ### Restores these features <img width="758" alt="Screenshot 2023-07-18 at 4 17 41 PM" src="https://github.com/fleetdm/fleet/assets/61553566/6a7ce26a-6ee2-4c3d-b2a3-524b90e417f8"> - [x] Manual QA for all new/changed functionality --------- Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
116 lines
2.8 KiB
TypeScript
116 lines
2.8 KiB
TypeScript
import React from "react";
|
||
import classnames from "classnames";
|
||
import { uniqueId } from "lodash";
|
||
|
||
import ReactTooltip from "react-tooltip";
|
||
|
||
interface IPillCellProps {
|
||
value: { indicator: string; id: number };
|
||
customIdPrefix?: string;
|
||
hostDetails?: boolean;
|
||
}
|
||
|
||
const generateClassTag = (rawValue: string): string => {
|
||
return rawValue.replace(" ", "-").toLowerCase();
|
||
};
|
||
|
||
const PillCell = ({
|
||
value,
|
||
customIdPrefix,
|
||
hostDetails,
|
||
}: IPillCellProps): JSX.Element => {
|
||
const { indicator, id } = value;
|
||
const pillClassName = classnames(
|
||
"data-table__pill",
|
||
`data-table__pill--${generateClassTag(indicator || "")}`,
|
||
"tooltip"
|
||
);
|
||
|
||
const disable = () => {
|
||
switch (indicator) {
|
||
case "Minimal":
|
||
return false;
|
||
case "Considerable":
|
||
return false;
|
||
case "Excessive":
|
||
return false;
|
||
case "Undetermined":
|
||
return false;
|
||
default:
|
||
return true;
|
||
}
|
||
};
|
||
|
||
const tooltipText = () => {
|
||
switch (indicator) {
|
||
case "Minimal":
|
||
return (
|
||
<>
|
||
Running this query very <br />
|
||
frequently has little to no <br /> impact on your device’s <br />
|
||
performance.
|
||
</>
|
||
);
|
||
case "Considerable":
|
||
return (
|
||
<>
|
||
Running this query <br /> frequently can have a <br /> noticeable
|
||
impact on your <br /> device’s performance.
|
||
</>
|
||
);
|
||
case "Excessive":
|
||
return (
|
||
<>
|
||
Running this query, even <br /> infrequently, can have a <br />
|
||
significant impact on your <br /> device’s performance.
|
||
</>
|
||
);
|
||
case "Denylisted":
|
||
return (
|
||
<>
|
||
This query has been <br /> stopped from running <br /> because of
|
||
excessive <br /> resource consumption.
|
||
</>
|
||
);
|
||
case "Undetermined":
|
||
return (
|
||
<>
|
||
To see performance impact, this query must have run with{" "}
|
||
<b>automations</b> on {hostDetails ? "this" : "at least one"} host.
|
||
</>
|
||
);
|
||
default:
|
||
return null;
|
||
}
|
||
};
|
||
const tooltipId = uniqueId();
|
||
|
||
return (
|
||
<>
|
||
<span
|
||
data-tip
|
||
data-for={`${customIdPrefix || "pill"}__${id?.toString() || tooltipId}`}
|
||
data-tip-disable={disable()}
|
||
>
|
||
<span className={pillClassName}>{indicator}</span>
|
||
</span>
|
||
<ReactTooltip
|
||
place="top"
|
||
effect="solid"
|
||
backgroundColor="#3e4771"
|
||
id={`${customIdPrefix || "pill"}__${id?.toString() || tooltipId}`}
|
||
data-html
|
||
>
|
||
<span
|
||
className={`tooltip ${generateClassTag(
|
||
indicator || ""
|
||
)}__tooltip-text`}
|
||
>
|
||
{tooltipText()}
|
||
</span>
|
||
</ReactTooltip>
|
||
</>
|
||
);
|
||
};
|
||
|
||
export default PillCell;
|