From 96cc42f3f9f719bebee05505e4935d11b277803d Mon Sep 17 00:00:00 2001
From: Johanna Szepanski <johanna.szepanski@softhouse.se>
Date: Tue, 18 Jun 2024 15:49:39 +0200
Subject: [PATCH] separate only warning messages from error with triangle icon

---
 src/components/IOC/IOCIcons/IOCIcons.js       | 23 +++++------
 src/components/IOC/IOCIcons/IOCStatusBadge.js | 40 +++++++++++++++++++
 src/components/IOC/IOCIcons/StatusIcon.js     |  2 +-
 src/components/IOC/IOCIcons/iocStatusData.js  | 19 +++++++--
 4 files changed, 66 insertions(+), 18 deletions(-)
 create mode 100644 src/components/IOC/IOCIcons/IOCStatusBadge.js

diff --git a/src/components/IOC/IOCIcons/IOCIcons.js b/src/components/IOC/IOCIcons/IOCIcons.js
index 0546740f..5e0d2105 100644
--- a/src/components/IOC/IOCIcons/IOCIcons.js
+++ b/src/components/IOC/IOCIcons/IOCIcons.js
@@ -2,15 +2,20 @@ import React from "react";
 import LabeledIcon from "../../common/LabeledIcon/LabeledIcon";
 import Popover from "../../common/Popover";
 import { STATUS, statusConfig, getIocStatus } from "./iocStatusData";
-import { useTheme, Badge } from "@mui/material";
+import { useTheme } from "@mui/material";
 import { PlayCircleFilled, PauseCircleFilled } from "@mui/icons-material";
 import { StatusIcon } from "./StatusIcon";
 import { IOCStatusPopoverContent } from "./IOCStatusPopoverContent";
+import { IOCStatusBadge } from "./IOCStatusBadge";
 
 export function IOCStatusIcon({ ioc }) {
   const theme = useTheme();
   let { alerts = [], id } = ioc;
   const iocStatus = getIocStatus(ioc);
+  const displayBadge =
+    iocStatus === STATUS.alert ||
+    iocStatus === STATUS.warning ||
+    iocStatus === STATUS.inactiveAlert;
 
   return (
     <Popover
@@ -28,23 +33,13 @@ export function IOCStatusIcon({ ioc }) {
           onMouseLeave={handlePopoverClose}
           style={{ color: theme.palette.status.icons }}
         >
-          {iocStatus === STATUS.alert || iocStatus === STATUS.inactiveAlert ? (
-            <Badge
-              badgeContent={"!"}
-              color="error"
-              sx={{
-                "& .MuiBadge-badge": {
-                  minWidth: "17px",
-                  height: "17px",
-                  fontSize: "0.7rem"
-                }
-              }}
-            >
+          {displayBadge ? (
+            <IOCStatusBadge status={iocStatus}>
               <StatusIcon
                 ioc={ioc}
                 status={iocStatus}
               />
-            </Badge>
+            </IOCStatusBadge>
           ) : (
             <StatusIcon
               ioc={ioc}
diff --git a/src/components/IOC/IOCIcons/IOCStatusBadge.js b/src/components/IOC/IOCIcons/IOCStatusBadge.js
new file mode 100644
index 00000000..9d999887
--- /dev/null
+++ b/src/components/IOC/IOCIcons/IOCStatusBadge.js
@@ -0,0 +1,40 @@
+import React from "react";
+import { string, object, arrayOf, oneOfType, node } from "prop-types";
+import { STATUS } from "./iocStatusData";
+import { Stack } from "@mui/material";
+import WarningAmberIcon from "@mui/icons-material/WarningAmber";
+import ErrorOutlineIcon from "@mui/icons-material/ErrorOutline";
+
+const propTypes = {
+  status: string,
+  theme: object,
+  children: oneOfType([arrayOf(node), node])
+};
+
+const commonStyles = {
+  position: "absolute",
+  top: "-10px",
+  left: "14px",
+  fontSize: "20px"
+};
+
+export const IOCStatusBadge = ({ status, theme, children }) => (
+  <Stack sx={{ position: "relative" }}>
+    {children}
+    {status === STATUS.warning ? (
+      <WarningAmberIcon
+        sx={{ fill: theme.palette.warning.main, ...commonStyles }}
+      />
+    ) : (
+      <>
+        {status === STATUS.alert || status === STATUS.inactiveAlert ? (
+          <ErrorOutlineIcon
+            sx={{ fill: theme.palette.error.main, ...commonStyles }}
+          />
+        ) : null}
+      </>
+    )}
+  </Stack>
+);
+
+IOCStatusBadge.propTypes = propTypes;
diff --git a/src/components/IOC/IOCIcons/StatusIcon.js b/src/components/IOC/IOCIcons/StatusIcon.js
index 8b746151..aed88304 100644
--- a/src/components/IOC/IOCIcons/StatusIcon.js
+++ b/src/components/IOC/IOCIcons/StatusIcon.js
@@ -20,7 +20,7 @@ const getLabel = (alerts, status) => {
     const hasErrors = Boolean(errors.length);
     return `${statusConfig[status].title} ${
       hasWarnings ? warnings.length + " warnings" : ""
-    }${hasErrors ? errors.length + " errors" : ""}`;
+    }${hasErrors ? errors.length + " errors" : ""} !`;
   }
   return statusConfig[status].title;
 };
diff --git a/src/components/IOC/IOCIcons/iocStatusData.js b/src/components/IOC/IOCIcons/iocStatusData.js
index b690fd77..9878337b 100644
--- a/src/components/IOC/IOCIcons/iocStatusData.js
+++ b/src/components/IOC/IOCIcons/iocStatusData.js
@@ -15,7 +15,9 @@ export const STATUS = {
 };
 
 export const SEVERITY = {
-  info: "info"
+  info: "info",
+  alert: "error",
+  warning: "warning"
 };
 
 export const statusConfig = {
@@ -31,6 +33,10 @@ export const statusConfig = {
     title: "Alert",
     icon: Brightness1
   },
+  [STATUS.warning]: {
+    title: "Warning",
+    icon: Brightness1
+  },
   [STATUS.inactive]: {
     title: "Inactive",
     icon: RadioButtonUnchecked
@@ -64,10 +70,17 @@ export const getIocStatus = (ioc) => {
   } else if (
     active !== undefined &&
     alertSeverity !== undefined &&
-    alertSeverity !== SEVERITY.info
+    alertSeverity === SEVERITY.alert
   ) {
-    // warning/error
+    // 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)
-- 
GitLab