Skip to content
Snippets Groups Projects
Commit 85b8cf5a authored by Johanna Szepanski's avatar Johanna Szepanski Committed by EREBUS_DMN\jsz
Browse files

generalised ioc icon components and data and moved files to common/status

parent 7d4248fa
No related branches found
No related tags found
2 merge requests!542Prepare 4.1.0,!521CE-3061: Update ioc alerts and status separately
import { IconBadge } from "@ess-ics/ce-ui-common";
import { IOCStatusIcon } from "../IOCIcons";
export function IOCBadge({ ioc, ...rest }) {
return (
<IconBadge
icon={
<IOCStatusIcon
ioc={ioc}
hideAlerts
/>
}
title={ioc.namingName ?? ioc.name}
subtitle={ioc.activeDeployment?.host?.fqdn || "---"}
{...rest}
/>
);
}
import { IOCBadge } from "./IOCBadge";
export { IOCBadge };
export default IOCBadge;
import { SEVERITY, STATUS } from "../../common/Status";
export const getIocStatus = (ioc) => {
let { active, activeDeployment } = ioc;
const alertSeverity = ioc?.alertSeverity?.toLowerCase();
if (
active &&
(alertSeverity === undefined || alertSeverity === SEVERITY.info)
) {
// Active status / running
return STATUS.active;
} else if (
active === false &&
(alertSeverity === undefined || alertSeverity === SEVERITY.info)
) {
// stopped/paused
return STATUS.disabled;
} else if (
active !== undefined &&
alertSeverity !== undefined &&
alertSeverity === SEVERITY.alert
) {
// error
return STATUS.alert;
} else if (
active !== undefined &&
alertSeverity !== undefined &&
alertSeverity === SEVERITY.warning
) {
// warning
return STATUS.warning;
} else if (
(!active || activeDeployment === null) &&
(alertSeverity === undefined || alertSeverity === SEVERITY.info)
) {
// Inactive status
return STATUS.inactive;
} else if (
(!active || activeDeployment === null) &&
alertSeverity !== undefined &&
alertSeverity !== SEVERITY.info
) {
// inactive with warning/error
return STATUS.inactiveAlert;
} else {
// unknown fallback state
return null;
}
};
import { IOCStatusIcon, CommandTypeIcon } from "./IOCIcons";
export { IOCStatusIcon, CommandTypeIcon };
import { useState, useEffect } from "react";
import { LabeledIcon } from "@ess-ics/ce-ui-common"; import { LabeledIcon } from "@ess-ics/ce-ui-common";
import Popover from "../../common/Popover"; import Popover from "../../common/Popover";
import { object, bool } from "prop-types"; import { object, bool, array } from "prop-types";
import { useTheme } from "@mui/material"; import { useTheme } from "@mui/material";
import { PlayCircleFilled, PauseCircleFilled } from "@mui/icons-material"; import { PlayCircleFilled, PauseCircleFilled } from "@mui/icons-material";
import { import { StatusPopoverContent } from "./StatusPopoverContent";
StatusPopoverContent, import { StatusBadge } from "./StatusBadge";
StatusBadge, import { StatusIcon } from "./StatusIcon";
StatusIcon, import { STATUS, statusConfig, getStatus } from "./StatusData";
STATUS,
statusConfig
} from "../../common/Status";
import { getIocStatus } from "./IOCStatusData";
const propsTypes = { const propsTypes = {
ioc: object, state: object,
alert: array,
hideAlerts: bool hideAlerts: bool
}; };
export function IOCStatusIcon({ ioc, hideAlerts = false }) { const checkDisplayBadge = (status, hideAlerts) => {
const theme = useTheme(); return (
let { alerts = [], id } = ioc;
const iocStatus = getIocStatus(ioc);
const displayBadge =
!hideAlerts && !hideAlerts &&
(iocStatus === STATUS.alert || (status === STATUS.alert ||
iocStatus === STATUS.warning || status === STATUS.warning ||
iocStatus === STATUS.inactiveAlert); status === STATUS.inactiveAlert ||
status === STATUS.inactiveWarning)
);
};
export function Status({ state, alert, hideAlerts = false }) {
const [status, setStatus] = useState(null);
const theme = useTheme();
let { id } = state;
useEffect(() => {
setStatus(getStatus(state, alert));
}, [state, alert]);
return ( return (
<Popover <Popover
...@@ -42,28 +50,28 @@ export function IOCStatusIcon({ ioc, hideAlerts = false }) { ...@@ -42,28 +50,28 @@ export function IOCStatusIcon({ ioc, hideAlerts = false }) {
onMouseLeave={handlePopoverClose} onMouseLeave={handlePopoverClose}
style={{ color: theme.palette.status.icons }} style={{ color: theme.palette.status.icons }}
> >
{displayBadge ? ( {checkDisplayBadge(status, hideAlerts) ? (
<StatusBadge <StatusBadge
status={iocStatus} status={status}
theme={theme} theme={theme}
> >
<StatusIcon <StatusIcon
alerts={alerts} alerts={alert?.alerts ? alert.alerts : []}
status={iocStatus} status={status}
/> />
</StatusBadge> </StatusBadge>
) : ( ) : (
<StatusIcon <StatusIcon
alerts={alerts} alerts={alert?.alerts ? alert.alerts : []}
status={iocStatus} status={status}
/> />
)} )}
</div> </div>
)} )}
popoverContents={ popoverContents={
<StatusPopoverContent <StatusPopoverContent
title={statusConfig[iocStatus].title} title={statusConfig[status].title}
alerts={hideAlerts ? [] : alerts} alerts={hideAlerts ? [] : alert?.alerts ? alert.alerts : []}
/> />
} }
anchorOrigin={{ anchorOrigin={{
...@@ -74,7 +82,7 @@ export function IOCStatusIcon({ ioc, hideAlerts = false }) { ...@@ -74,7 +82,7 @@ export function IOCStatusIcon({ ioc, hideAlerts = false }) {
); );
} }
IOCStatusIcon.propsTypes = propsTypes; Status.propsTypes = propsTypes;
export function CommandTypeIcon({ export function CommandTypeIcon({
type, type,
......
...@@ -55,3 +55,56 @@ export const statusConfig = { ...@@ -55,3 +55,56 @@ export const statusConfig = {
icon: HelpOutline icon: HelpOutline
} }
}; };
export const getStatus = (state, alert) => {
let { isActive } = state;
const alertSeverity = alert?.alertSeverity?.toLowerCase();
if (
isActive &&
(alertSeverity === undefined || alertSeverity === SEVERITY.info)
) {
// Active status / running
return STATUS.active;
} else if (
isActive === false &&
(alertSeverity === undefined || alertSeverity === SEVERITY.info)
) {
// stopped/paused
return STATUS.disabled;
} else if (
isActive &&
alertSeverity !== undefined &&
alertSeverity === SEVERITY.alert
) {
// error
return STATUS.alert;
} else if (
isActive &&
alertSeverity !== undefined &&
alertSeverity === SEVERITY.warning
) {
// warning
return STATUS.warning;
} else if (
(!isActive || isActive === null) &&
(alertSeverity === undefined || alertSeverity === SEVERITY.info)
) {
// Inactive status
return STATUS.inactive;
} else if (
(!isActive || isActive === null) &&
alertSeverity === SEVERITY.alert
) {
// inactive with warning/error
return STATUS.inactiveAlert;
} else if (
(!isActive || isActive === null) &&
alertSeverity === SEVERITY.warning
) {
return STATUS.inactiveWarning;
} else {
// unknown fallback state
return null;
}
};
import { Status, CommandTypeIcon } from "./Status";
import { StatusBadge } from "./StatusBadge"; import { StatusBadge } from "./StatusBadge";
import { StatusIcon } from "./StatusIcon"; import { StatusIcon } from "./StatusIcon";
import { StatusPopoverContent } from "./StatusPopoverContent"; import { StatusPopoverContent } from "./StatusPopoverContent";
import { statusConfig, STATUS, SEVERITY } from "./StatusData"; import { statusConfig, STATUS, SEVERITY, getStatus } from "./StatusData";
export { export {
Status,
CommandTypeIcon,
StatusPopoverContent, StatusPopoverContent,
StatusBadge, StatusBadge,
StatusIcon, StatusIcon,
STATUS, STATUS,
SEVERITY, SEVERITY,
statusConfig statusConfig,
getStatus
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment