import React, { useEffect, useState } from 'react'; import { IOTAlertProps } from './interface'; import './style/index.less'; import { condJudgmentForOne } from '../../base/utils'; import AlertIcon from './static/alert_icon.png'; import { array } from 'prop-types'; const prefixCls = 'iot-alert-out'; const IOTAlert: React.FC = ({ message, jugements, isBuild = false, streams, ...rest }) => { const [show, setShow] = useState(false); const [text, setText] = useState(''); useEffect(() => { condJudgment(jugements, streams); }, [streams]); const condJudgment = (jugements: Array, streams: any) => { if (!isBuild || jugements.length === 0) { setText(message); setShow(true); return } if (!jugements || !Array.isArray(jugements)) { setText(message); setShow(true); return } // const jugement = jugements[0]; // const ifCondition = jugement['ifCondition']; // const thenCondition = jugement['thenCondition']; // const flag = judgmentCondition(ifCondition,streams); const trueJugements: any = [] jugements.map(item => { const ifCondition = item['ifCondition']; const flag = judgmentCondition(ifCondition, streams); item.flag = flag if (flag) { trueJugements.push(item) } }) if (trueJugements.length > 0) { setText(trueJugements[0].thenCondition[0]['value']); setShow(true); } else { setShow(false); } }; const judgmentCondition = (ifCondition: Array, streams: any) => { let flag = false; let lastJudgement; for (let j = 0; j < ifCondition.length; j++) { const condition = ifCondition[j]; const ifs = condition['if']; const currentFlag = judgmentBracketCondition(ifs, streams); if (lastJudgement === '||') { flag = flag || currentFlag; } else if (lastJudgement === '&&') { flag = flag && currentFlag; } else { flag = currentFlag; } lastJudgement = condition['judgement']; } return flag; }; const judgmentBracketCondition = (ifs: Array, streams: any) => { let flag = false; let lastJudgement = ''; for (let k = 0; k < ifs.length; k++) { const ifCond = ifs[k]; const currentFlag = condJudgmentForOne(ifCond, streams); if (lastJudgement === '||') { flag = flag || currentFlag; } else if (lastJudgement === '&&') { flag = flag && currentFlag; } else { flag = currentFlag; } lastJudgement = ifCond['judgement']; } return flag; }; return (
{text}
); }; export default IOTAlert;