diff --git a/frontend/src/components/PhaseProgress/index.jsx b/frontend/src/components/PhaseProgress/index.jsx
index 0d41b2337..da6d0c73d 100644
--- a/frontend/src/components/PhaseProgress/index.jsx
+++ b/frontend/src/components/PhaseProgress/index.jsx
@@ -1,4 +1,4 @@
-import React, { useState, useContext } from 'react';
+import React, { useEffect, useState, useContext } from 'react';
import Button from '@material-ui/core/Button';
import Box from '@material-ui/core/Box';
import Dialog from '@material-ui/core/Dialog';
@@ -29,6 +29,8 @@ import ReleaseContext from '../../utils/ReleaseContext';
import { phasePrettyName } from '../text';
import MouseOverPopover from '../Shared/MouseOverPopover';
+const POLL_INTERVAL = 60000; // 60 seconds
+
const useStyles = makeStyles(theme => ({
label: {
lineHeight: '0.5',
@@ -58,6 +60,14 @@ export default function PhaseProgress({ release, readOnly, xpi }) {
'/tasks/groups'
);
const loading = schedulePhaseState.loading || phaseSignOffState.loading;
+
+ useEffect(() => {
+ const interval = setInterval(() => {
+ fetchReleases(productBranches);
+ }, POLL_INTERVAL);
+ return () => clearInterval(interval);
+ }, [fetchReleases, productBranches]);
+
const handleClickOpen = phase => {
setPhase(phase);
setOpen(true);
@@ -130,7 +140,7 @@ export default function PhaseProgress({ release, readOnly, xpi }) {
: { classes: { completed: classes.completed } }
}>
- {prettyName} task
+ {prettyName} task group
{phase.signoffs && phase.signoffs.length > 0 && (
p.tcStatus).find(st => st === 'running') &&
(idx === 0 || // The first phase can be scheduled anytime
allowPhaseSkipping || // Can schedule anything
- phases[idx - 1].tcStatus === 'completed' || // previsous phase is done
+ phases[idx - 1].tcStatus === 'completed' || // previous phase is done
// Special case for Firefox RC.
// push_firefox can be scheduled even if ship_firefox_rc (the previous
// phase) is not ready. We still need to be sure that