pooling fix
This commit is contained in:
@@ -27,6 +27,31 @@ const Mission = () => {
|
|||||||
const pollingRef = useRef<number | null>(null);
|
const pollingRef = useRef<number | null>(null);
|
||||||
const submissions = useAppSelector((state) => state.submin.submitsById[missionIdNumber] || []);
|
const submissions = useAppSelector((state) => state.submin.submitsById[missionIdNumber] || []);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const startPolling = () => {
|
||||||
|
if (pollingRef.current)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pollingRef.current = setInterval(async () => {
|
||||||
|
dispatch(fetchMySubmitsByMission(missionIdNumber));
|
||||||
|
|
||||||
|
const hasWaiting = submissions.some(
|
||||||
|
(s: any) => s.solution.status == "Waiting" || s.solution.testerState === "Waiting"
|
||||||
|
);
|
||||||
|
if (!hasWaiting) {
|
||||||
|
// Всё проверено — стоп
|
||||||
|
if (pollingRef.current) {
|
||||||
|
clearInterval(pollingRef.current);
|
||||||
|
pollingRef.current = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 5000); // 10 секунд
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dispatch(fetchMissionById(missionIdNumber));
|
dispatch(fetchMissionById(missionIdNumber));
|
||||||
dispatch(fetchMySubmitsByMission(missionIdNumber));
|
dispatch(fetchMySubmitsByMission(missionIdNumber));
|
||||||
@@ -59,8 +84,6 @@ const Mission = () => {
|
|||||||
return <div>Загрузка...</div>;
|
return <div>Загрузка...</div>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
interface StatementData {
|
interface StatementData {
|
||||||
id: number;
|
id: number;
|
||||||
legend?: string;
|
legend?: string;
|
||||||
@@ -116,28 +139,6 @@ const Mission = () => {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
const startPolling = () => {
|
|
||||||
if (pollingRef.current)
|
|
||||||
return;
|
|
||||||
|
|
||||||
pollingRef.current = setInterval(async () => {
|
|
||||||
dispatch(fetchMySubmitsByMission(missionIdNumber));
|
|
||||||
|
|
||||||
const hasWaiting = submissions.some(
|
|
||||||
(s: any) => s.solution.status == "Waiting" || s.solution.testerState === "Waiting"
|
|
||||||
);
|
|
||||||
if (!hasWaiting) {
|
|
||||||
// Всё проверено — стоп
|
|
||||||
if (pollingRef.current) {
|
|
||||||
clearInterval(pollingRef.current);
|
|
||||||
pollingRef.current = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 5000); // 10 секунд
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
||||||
<div className="h-screen grid grid-rows-[60px,1fr]">
|
<div className="h-screen grid grid-rows-[60px,1fr]">
|
||||||
|
|||||||
Reference in New Issue
Block a user