function PollStatus()

in dialogflow-cx/vpc-sc-demo/frontend/src/StatusPollToggle.js [151:263]


function PollStatus(props) {
  const completed = useRef(false);

  function onSuccess() {
    completed.current = true;
  }
  function queryFunction() {
    return axios
      .get(props.endpoint, {
        params: {
          project_id: props.dataModel.projectData.project_id.current,
          bucket: getBucket(props.dataModel),
          region: props.dataModel.projectData.region.current,
          webhook_name: props.dataModel.projectData.webhook_name.current,
          access_policy_title:
            props.dataModel.projectData.accessPolicyTitle.current,
        },
      })
      .then(res => res.data);
  }

  const enabled =
    props.state.isUpdating.current ||
    props.dataModel.projectData.project_id.current === '' ||
    props.dataModel.projectData.project_id.current === null ||
    typeof props.dataModel.validProjectId.current !== 'boolean' ||
    props.dataModel.validProjectId.current === false ||
    props.dataModel.loggedIn.current === false ||
    props.dataModel.terraformLocked.current
      ? false
      : true;
  const {data} = useQuery(props.endpoint, queryFunction, {
    refetchInterval: 10000,
    onSuccess: onSuccess,
    retry: false,
    enabled: enabled,
  });

  useEffect(() => {
    if (data && completed.current) {
      completed.current = false;
      props.state.status.set(data.status);
      if (data.status === 'BLOCKED') {
        props.state.blocked.set(true);
        if (
          data.reason === 'POLICY_NOT_FOUND' ||
          data.reason === 'NO_ACCESS_POLICY'
        ) {
          props.state.status.set(false);
        } else if (
          (data.reason === 'TOKEN_EXPIRED') &
          props.dataModel.loggedIn.current &
          !props.dataModel.sessionExpiredModalOpen.current
        ) {
          handleTokenExpired(props.dataModel);
        }
      } else {
        props.state.blocked.set(false);
      }
    }
  });

  if (props.dataModel.terraformLocked.current) {
    return (
      <Typography variant="body2" align="right" style={{color: 'red'}}>
        {'Blocked: TERRAFORM_UPDATING'}
      </Typography>
    );
  } else if (props.state.isUpdating.current) {
    let remainingTimeBlocker = 0;
    if (props.blocked_by) {
      remainingTimeBlocker = Math.max(
        0,
        props.blocked_by_timeout -
          1 -
          props.blocked_by.timeSinceSliderClick.current
      );
    }
    const remainingTime = Math.max(
      Math.max(0, props.timeout - 1 - props.state.timeSinceSliderClick.current),
      remainingTimeBlocker
    );
    if (remainingTime > 0) {
      // console.log(props.blocked_by_timeout, props.timeout)
      let startTime;
      if (remainingTimeBlocker > 0) {
        startTime = Math.max(props.blocked_by_timeout - 1, props.timeout - 1);
      } else {
        startTime = props.timeout - 1;
      }
      // console.log('remainingTime', remainingTime, startTime, remainingTime/startTime, 100.0*(remainingTime/startTime))
      return (
        <CircularProgress
          size={20}
          variant={'determinate'}
          value={100.0 * (remainingTime / startTime)}
        />
      );
    }
    return <CircularProgress size={20} />;
  } else if (props.state.blocked.current && data.status === 'BLOCKED') {
    return (
      <Typography variant="body2" align="right" style={{color: 'red'}}>
        {`Blocked: ${data.reason}`}
      </Typography>
    );
  } else if (!props.dataModel.loggedIn.current) {
    return <div style={{color: 'red'}}>{'Blocked: LOGIN_REQUIRED'}</div>;
  } else {
    // console.log(props.state.blocked.current)
    return <div>{props.state.status.current ? 'True' : 'False'}</div>;
  }
}