import React, { useEffect, useState } from "react"; import moment from "moment"; import CircularProgress from "@mui/material/CircularProgress"; import Typography from "@mui/material/Typography"; import Button from "@mui/material/Button"; import Box from "@mui/material/Box"; const happyGreen = "#64dd17"; const happyGrey = "#e0e0e0"; export default function PipelineTriggerWidget(props) { const { trigger, close } = props; const [time, setTime] = useState(Date.now()); const [hovering, setHovering] = useState(false); const hoverStop = () => setHovering(false); const hoverStart = () => setHovering(true); useEffect(() => { const interval = setInterval(() => setTime(Date.now()), 200); return () => clearInterval(interval); }, []); function runNow() { close(); if (!trigger.launchTrigger) return; trigger.launchTrigger(); } function triggerMomentRemaining() { if (!trigger || !trigger.triggerAt) return null; const now = moment(); const diff = moment(trigger.triggerAt.diff(now)).valueOf(); const timeString = new Date(diff).toISOString().substring(11, 19); return timeString; // .split(":").filter((s) => s != "00").join(":"); } const normalizeValue = () => { const { triggerQueued: start, triggerAt: end } = trigger; const total = end - start; // TODO The below line causes issues because close is called during a render. // This causes MASSIVE issues, and needs to be resolved //if (((trigger.triggerAt - Date.now()) / total) * 100 > 100) return close(); return ((total - (trigger.triggerAt - Date.now())) / total) * 100; }; return ( {!hovering && triggerMomentRemaining()} {hovering && ( {triggerMomentRemaining()} )} ); }