From 9500c1f177c56e445824216f6d6cf6c51160e2e4 Mon Sep 17 00:00:00 2001 From: skybrewer <sky.brewer@ess.eu> Date: Thu, 25 Jul 2024 15:37:52 +0200 Subject: [PATCH] Refactor Status out of IOC --- src/components/IOC/IOCIcons/IOCIcons.js | 27 +++++----- .../{iocStatusData.js => IOCStatusData.js} | 53 +------------------ .../Status/StatusBadge.js} | 6 +-- src/components/common/Status/StatusData.js | 52 ++++++++++++++++++ .../IOCIcons => common/Status}/StatusIcon.js | 8 ++- .../Status/StatusPopoverContent.js} | 6 +-- src/components/common/Status/index.js | 13 +++++ 7 files changed, 90 insertions(+), 75 deletions(-) rename src/components/IOC/IOCIcons/{iocStatusData.js => IOCStatusData.js} (57%) rename src/components/{IOC/IOCIcons/IOCStatusBadge.js => common/Status/StatusBadge.js} (85%) create mode 100644 src/components/common/Status/StatusData.js rename src/components/{IOC/IOCIcons => common/Status}/StatusIcon.js (85%) rename src/components/{IOC/IOCIcons/IOCStatusPopoverContent.js => common/Status/StatusPopoverContent.js} (87%) create mode 100644 src/components/common/Status/index.js diff --git a/src/components/IOC/IOCIcons/IOCIcons.js b/src/components/IOC/IOCIcons/IOCIcons.js index 34a3002e..8dfb935e 100644 --- a/src/components/IOC/IOCIcons/IOCIcons.js +++ b/src/components/IOC/IOCIcons/IOCIcons.js @@ -1,13 +1,16 @@ import { LabeledIcon } from "@ess-ics/ce-ui-common"; import Popover from "../../common/Popover"; -import { STATUS, statusConfig, getIocStatus } from "./iocStatusData"; import { object, bool } from "prop-types"; import { useTheme } from "@mui/material"; import { PlayCircleFilled, PauseCircleFilled } from "@mui/icons-material"; -import { StatusIcon } from "./StatusIcon"; -import { IOCStatusPopoverContent } from "./IOCStatusPopoverContent"; -import { IOCStatusBadge } from "./IOCStatusBadge"; - +import { + StatusPopoverContent, + StatusBadge, + StatusIcon, + STATUS, + statusConfig +} from "../../common/Status"; +import { getIocStatus } from "./IOCStatusData"; const propsTypes = { ioc: object, hideAlerts: bool @@ -40,25 +43,25 @@ export function IOCStatusIcon({ ioc, hideAlerts = false }) { style={{ color: theme.palette.status.icons }} > {displayBadge ? ( - <IOCStatusBadge + <StatusBadge status={iocStatus} theme={theme} > <StatusIcon - ioc={ioc} + alerts={alerts} status={iocStatus} /> - </IOCStatusBadge> + </StatusBadge> ) : ( <StatusIcon - ioc={ioc} + alerts={alerts} status={iocStatus} /> )} </div> )} popoverContents={ - <IOCStatusPopoverContent + <StatusPopoverContent title={statusConfig[iocStatus].title} alerts={hideAlerts ? [] : alerts} /> @@ -108,14 +111,14 @@ export function CommandTypeIcon({ const iconStyle = { fill: colorConfig[colorStyle][type.toLowerCase()] }; const iconTitle = commandTypeIcons[type.toLowerCase()].title; - const StatusIcon = commandTypeIcons[type.toLowerCase()].icon; + const statusIcon = commandTypeIcons[type.toLowerCase()].icon; return ( <LabeledIcon label={iconTitle} LabelProps={{ noWrap: true }} labelPosition={labelPosition} - Icon={StatusIcon} + Icon={statusIcon} IconProps={{ style: { iconStyle } }} /> ); diff --git a/src/components/IOC/IOCIcons/iocStatusData.js b/src/components/IOC/IOCIcons/IOCStatusData.js similarity index 57% rename from src/components/IOC/IOCIcons/iocStatusData.js rename to src/components/IOC/IOCIcons/IOCStatusData.js index 9878337b..d11d4d5b 100644 --- a/src/components/IOC/IOCIcons/iocStatusData.js +++ b/src/components/IOC/IOCIcons/IOCStatusData.js @@ -1,55 +1,4 @@ -import { - Brightness1, - StopCircle, - RadioButtonUnchecked, - HelpOutline -} from "@mui/icons-material"; - -export const STATUS = { - active: "active", - disabled: "disabled", - alert: "alert", - warning: "warning", - inactive: "inactive", - inactiveAlert: "inactive alert" -}; - -export const SEVERITY = { - info: "info", - alert: "error", - warning: "warning" -}; - -export const statusConfig = { - [STATUS.active]: { - title: "Active", - icon: Brightness1 - }, - [STATUS.disabled]: { - title: "Disabled", - icon: StopCircle - }, - [STATUS.alert]: { - title: "Alert", - icon: Brightness1 - }, - [STATUS.warning]: { - title: "Warning", - icon: Brightness1 - }, - [STATUS.inactive]: { - title: "Inactive", - icon: RadioButtonUnchecked - }, - [STATUS.inactiveAlert]: { - title: "Alert", - icon: RadioButtonUnchecked - }, - null: { - title: "Unknown", - icon: HelpOutline - } -}; +import { SEVERITY, STATUS } from "../../common/Status"; export const getIocStatus = (ioc) => { let { active, activeDeployment } = ioc; diff --git a/src/components/IOC/IOCIcons/IOCStatusBadge.js b/src/components/common/Status/StatusBadge.js similarity index 85% rename from src/components/IOC/IOCIcons/IOCStatusBadge.js rename to src/components/common/Status/StatusBadge.js index 97caebd3..9207e420 100644 --- a/src/components/IOC/IOCIcons/IOCStatusBadge.js +++ b/src/components/common/Status/StatusBadge.js @@ -1,5 +1,5 @@ import { string, object, arrayOf, oneOfType, node } from "prop-types"; -import { STATUS } from "./iocStatusData"; +import { STATUS } from "./StatusData"; import { Stack } from "@mui/material"; import WarningAmberIcon from "@mui/icons-material/WarningAmber"; import ErrorOutlineIcon from "@mui/icons-material/ErrorOutline"; @@ -17,7 +17,7 @@ const commonStyles = { fontSize: "20px" }; -export const IOCStatusBadge = ({ status, theme, children }) => ( +export const StatusBadge = ({ status, theme, children }) => ( <Stack sx={{ position: "relative" }}> {children} {status === STATUS.warning ? ( @@ -36,4 +36,4 @@ export const IOCStatusBadge = ({ status, theme, children }) => ( </Stack> ); -IOCStatusBadge.propTypes = propTypes; +StatusBadge.propTypes = propTypes; diff --git a/src/components/common/Status/StatusData.js b/src/components/common/Status/StatusData.js new file mode 100644 index 00000000..461f972a --- /dev/null +++ b/src/components/common/Status/StatusData.js @@ -0,0 +1,52 @@ +import { + Brightness1, + StopCircle, + RadioButtonUnchecked, + HelpOutline +} from "@mui/icons-material"; + +export const STATUS = { + active: "active", + disabled: "disabled", + alert: "alert", + warning: "warning", + inactive: "inactive", + inactiveAlert: "inactive alert" +}; + +export const SEVERITY = { + info: "info", + alert: "error", + warning: "warning" +}; + +export const statusConfig = { + [STATUS.active]: { + title: "Active", + icon: Brightness1 + }, + [STATUS.disabled]: { + title: "Disabled", + icon: StopCircle + }, + [STATUS.alert]: { + title: "Alert", + icon: Brightness1 + }, + [STATUS.warning]: { + title: "Warning", + icon: Brightness1 + }, + [STATUS.inactive]: { + title: "Inactive", + icon: RadioButtonUnchecked + }, + [STATUS.inactiveAlert]: { + title: "Alert", + icon: RadioButtonUnchecked + }, + null: { + title: "Unknown", + icon: HelpOutline + } +}; diff --git a/src/components/IOC/IOCIcons/StatusIcon.js b/src/components/common/Status/StatusIcon.js similarity index 85% rename from src/components/IOC/IOCIcons/StatusIcon.js rename to src/components/common/Status/StatusIcon.js index ddbdd5d3..481d5a57 100644 --- a/src/components/IOC/IOCIcons/StatusIcon.js +++ b/src/components/common/Status/StatusIcon.js @@ -1,9 +1,9 @@ import { object, string } from "prop-types"; -import { STATUS, statusConfig } from "./iocStatusData"; +import { STATUS, statusConfig } from "./StatusData"; import { LabeledIcon } from "@ess-ics/ce-ui-common"; const propTypes = { - ioc: object, + alerts: object, status: string }; @@ -24,9 +24,7 @@ const getLabel = (alerts, status) => { return statusConfig[status].title; }; -export const StatusIcon = ({ ioc, status }) => { - const { alerts = [] } = ioc; - +export const StatusIcon = ({ alerts, status }) => { return ( <LabeledIcon label={getLabel(alerts, status)} diff --git a/src/components/IOC/IOCIcons/IOCStatusPopoverContent.js b/src/components/common/Status/StatusPopoverContent.js similarity index 87% rename from src/components/IOC/IOCIcons/IOCStatusPopoverContent.js rename to src/components/common/Status/StatusPopoverContent.js index 1c03e03e..6dadd92a 100644 --- a/src/components/IOC/IOCIcons/IOCStatusPopoverContent.js +++ b/src/components/common/Status/StatusPopoverContent.js @@ -1,5 +1,5 @@ import { string, arrayOf, object } from "prop-types"; -import { SEVERITY } from "./iocStatusData"; +import { SEVERITY } from "./StatusData"; import { Typography, Stack } from "@mui/material"; import { AlertBanner } from "@ess-ics/ce-ui-common"; @@ -8,7 +8,7 @@ const propsTypes = { alerts: arrayOf(object), object }; -export const IOCStatusPopoverContent = ({ title, alerts }) => { +export const StatusPopoverContent = ({ title, alerts }) => { // Filter out INFO level alerts // And for now filter out links on alerts due to issues with // focus behavior of popovers @@ -45,4 +45,4 @@ export const IOCStatusPopoverContent = ({ title, alerts }) => { ); }; -IOCStatusPopoverContent.propsTypes = propsTypes; +StatusPopoverContent.propsTypes = propsTypes; diff --git a/src/components/common/Status/index.js b/src/components/common/Status/index.js new file mode 100644 index 00000000..d5ab35f0 --- /dev/null +++ b/src/components/common/Status/index.js @@ -0,0 +1,13 @@ +import { StatusBadge } from "./StatusBadge"; +import { StatusIcon } from "./StatusIcon"; +import { StatusPopoverContent } from "./StatusPopoverContent"; +import { statusConfig, STATUS, SEVERITY } from "./StatusData"; + +export { + StatusPopoverContent, + StatusBadge, + StatusIcon, + STATUS, + SEVERITY, + statusConfig +}; -- GitLab