frontend/app/deploymentstatusicon.tsx (47 lines of code) (raw):

import React from "react"; import { Block, Check, Warning, WarningOutlined } from "@material-ui/icons"; import { makeStyles, Tooltip } from "@material-ui/core"; interface DeploymentStatusIconProps { availableReplicas: number; notAvailableReplicas: number; } const useStyles = makeStyles((theme) => ({ error: { color: theme.palette.error.dark, }, warning: { color: theme.palette.warning.dark, }, ok: { color: theme.palette.success.dark, }, })); const DeploymentStatusIcon: React.FC<DeploymentStatusIconProps> = (props) => { const classes = useStyles(); if (props.availableReplicas == 0 && props.notAvailableReplicas == 0) { return ( <Tooltip title="This deployment is currently disabled"> <Block /> </Tooltip> ); } else if (props.availableReplicas > 0 && props.notAvailableReplicas == 0) { return ( <Tooltip title="This deployment is running fine"> <Check className={classes.ok} /> </Tooltip> ); } else if (props.availableReplicas > 0 && props.notAvailableReplicas > 0) { return ( <Tooltip title="This deployment is degraded. It might be in the process of rolling out, or there might be a partial failure."> <WarningOutlined className={classes.warning} /> </Tooltip> ); } else { return ( <Tooltip title="This deployment has failed and is not currently running"> <Warning className={classes.error} /> </Tooltip> ); } }; export default DeploymentStatusIcon;