diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index e5c2536..c0607b3 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -10481,6 +10481,8 @@ function AccountSettingsPage({ onSearchPreferencesSaved }: { onSearchPreferences const [otpInfo, setOtpInfo] = useState(''); const [otpBusy, setOtpBusy] = useState(false); const [otpCooldown, setOtpCooldown] = useState(0); + // Serwer odmowil kolejnego kodu - komunikat z odliczanym czasem zamiast stalej liczby sekund. + const [otpCooldownRejected, setOtpCooldownRejected] = useState(false); // --- Preferencje wyszukiwania --- const [searchPrefs, setSearchPrefs] = useState({ @@ -10864,6 +10866,7 @@ function AccountSettingsPage({ onSearchPreferencesSaved }: { onSearchPreferences setOtpBusy(true); setOtpError(''); setOtpInfo(''); + setOtpCooldownRejected(false); try { await resendPhoneOtp(user.email); setOtpInfo(`Wysłaliśmy kod SMS na numer ${user.phone ?? ''}.`); @@ -10871,7 +10874,14 @@ function AccountSettingsPage({ onSearchPreferencesSaved }: { onSearchPreferences setIsOtpOpen(true); } catch (error) { const message = error instanceof Error ? error.message : 'Nie udało się wysłać kodu SMS.'; - if (isOtpOpen) { + // Za wczesnie na kolejny kod - poprzedni nadal jest wazny, wiec okno otwieramy + // i odliczamy czas podany przez serwer ("Kolejny możesz zamówić za N s"). + const secondsLeft = Number(/za (\d+) s/.exec(message)?.[1]); + if ((error as { status?: number }).status === 429 && secondsLeft > 0) { + setOtpCooldown(secondsLeft); + setOtpCooldownRejected(true); + setIsOtpOpen(true); + } else if (isOtpOpen) { // Okno juz otwarte (ponowna wysylka) - blad pokazujemy w nim. setOtpError(message); } else { @@ -11873,6 +11883,9 @@ function AccountSettingsPage({ onSearchPreferencesSaved }: { onSearchPreferences autoFocus /> {otpError &&
{otpError}
} + {otpCooldownRejected && otpCooldown > 0 && ( +Kod został już wysłany. Kolejny możesz zamówić za {otpCooldown} s
+ )} {otpInfo && !otpError &&{otpInfo}
}