From ee7ee78c5dd6f44cb01efd1b15488340759029db Mon Sep 17 00:00:00 2001 From: HotelSync Date: Fri, 27 Mar 2026 11:28:25 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20pair=20code=20modal=20=E2=80=94=20auto-r?= =?UTF-8?q?egenerate=20on=20expiry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- src/pages/EquipmentPage.tsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/pages/EquipmentPage.tsx b/src/pages/EquipmentPage.tsx index ac15d5b..57b882d 100644 --- a/src/pages/EquipmentPage.tsx +++ b/src/pages/EquipmentPage.tsx @@ -68,23 +68,31 @@ function PairCodeModal({ const [copied, setCopied] = useState(false) const [timeLeft, setTimeLeft] = useState(600) - useEffect(() => { + const fetchCode = useCallback(() => { + setLoading(true) api.workstations.pairCode(slug, workstation.id).then(r => { setCode(r.code) setExpiresAt(r.expiresAt) + setTimeLeft(600) setLoading(false) }) }, [slug, workstation.id]) + useEffect(() => { fetchCode() }, [fetchCode]) + useEffect(() => { if (!expiresAt) return const tick = setInterval(() => { const left = Math.max(0, Math.floor((new Date(expiresAt).getTime() - Date.now()) / 1000)) setTimeLeft(left) - if (left === 0) clearInterval(tick) + if (left === 0) { + clearInterval(tick) + // Автоматически получаем новый код + fetchCode() + } }, 1000) return () => clearInterval(tick) - }, [expiresAt]) + }, [expiresAt, fetchCode]) const copy = () => { if (!code) return