import { Add, ExpandMore } from "@mui/icons-material"; import { Accordion, AccordionDetails, AccordionSummary, Box, Button, Grid2, IconButton, List, ListItem, ListSubheader, Typography } from "@mui/material"; import { Component } from "models"; import { describeMeasurement } from "pbHelpers/MeasurementDescriber"; import { pond, quack } from "protobuf-ts/pond"; import React, { useState } from "react"; import NewObjectInteraction from "./NewObjectInteraction"; import { Option } from "common/SearchSelect"; export interface Alert { conditions: pond.InteractionCondition[]; sourceComponents: Component[]; } interface Props { alerts: Alert[] permissions: pond.Permission[] addNew?: () => void } export default function Alerts(props: Props){ const {alerts, addNew, permissions} = props // const [openNewAlert, setOpenNewAlert] = useState(false) const readableCondition = (condition: pond.InteractionCondition) => { let describer = describeMeasurement(condition.measurementType); let type = describer.label(); let comparison = condition.comparison === quack.RelationalOperator.RELATIONAL_OPERATOR_EQUAL_TO ? "Exactly" : condition.comparison === quack.RelationalOperator.RELATIONAL_OPERATOR_GREATER_THAN ? "Above" : "Below"; let value = describer.toDisplay(condition.value); return ( {type + " " + comparison + " " + value + describer.GetUnit()} ); }; const alertAccordion = (alert: Alert) => { return ( }> {alert.conditions.map((condition, i) => ( {readableCondition(condition)} ))} Reporting Components {alert.sourceComponents.map((comp, i) => ( {comp.name()} ))} ); }; return ( Alerts {addNew && } {alerts.map((alert, i) => ( {alertAccordion(alert)} ))} ); }