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>;
}
}