fix: double-click guard on link, wall-clock timer, blur cleanup

- Add linkingProvider state to prevent double-click on Link button
- Use wall-clock based countdown timer to prevent drift
- Clean up onBlur setTimeout ref on unmount
This commit is contained in:
Fringg
2026-03-04 16:05:24 +03:00
parent fba4481799
commit 8ad0500cc8
2 changed files with 31 additions and 14 deletions

View File

@@ -357,22 +357,26 @@ export default function MergeAccounts() {
// If both have subs — null until user picks
}, [data, selectedUserId]);
// Countdown timer
// Countdown timer (wall-clock based to avoid drift)
useEffect(() => {
if (!data) return;
setExpiresIn(data.expires_in_seconds);
const startTime = Date.now();
const totalSeconds = data.expires_in_seconds;
const interval = setInterval(() => {
setExpiresIn((prev) => {
if (prev <= 1) {
clearInterval(interval);
setIsExpired(true);
return 0;
}
return prev - 1;
});
}, 1000);
const tick = () => {
const elapsed = Math.floor((Date.now() - startTime) / 1000);
const remaining = totalSeconds - elapsed;
if (remaining <= 0) {
setExpiresIn(0);
setIsExpired(true);
clearInterval(interval);
} else {
setExpiresIn(remaining);
}
};
tick();
const interval = setInterval(tick, 1000);
return () => clearInterval(interval);
}, [data]);