validate exchange calculator amounts

This commit is contained in:
2026-09-06 18:11:42 +03:00
parent 9b41ace2c7
commit 3f30e64004
2 changed files with 19 additions and 3 deletions
+6
View File
@@ -1988,3 +1988,9 @@ Doğrulama: 287 test geçti, üretim derlemesi başarılı.
İhale dokümanı paneli artık PDF metin ayrıştırıcısını yalnızca kullanıcı PDF okuma/kalem çıkarma istediğinde yüklüyor; ilk uygulama açılışındaki JavaScript yükü azaltıldı. Üretim derlemesindeki büyük üçüncü taraf chunk uyarıları (PDF/ExcelJS) devam ediyor ve sonraki performans çalışmasının girdisi olarak kaydedildi. İhale dokümanı paneli artık PDF metin ayrıştırıcısını yalnızca kullanıcı PDF okuma/kalem çıkarma istediğinde yüklüyor; ilk uygulama açılışındaki JavaScript yükü azaltıldı. Üretim derlemesindeki büyük üçüncü taraf chunk uyarıları (PDF/ExcelJS) devam ediyor ve sonraki performans çalışmasının girdisi olarak kaydedildi.
Doğrulama: 287 test geçti, üretim derlemesi başarılı. Doğrulama: 287 test geçti, üretim derlemesi başarılı.
### 2026-09-06 · Kur hesaplayıcı giriş sınırı
Kur farkı hesaplayıcısı artık negatif, sonsuz veya güvenli sınır dışı teklif tutarlarını kabul etmiyor; hatalı girişte açık uyarı gösterip USD/EUR dönüşüm sonucunu üretmiyor.
Doğrulama: 287 test geçti, üretim derlemesi başarılı.
+13 -3
View File
@@ -33,6 +33,7 @@ export const TenderDetailModal = () => {
// Kur Farkı Calculator State // Kur Farkı Calculator State
const [bidAmount, setBidAmount] = useState(15000); const [bidAmount, setBidAmount] = useState(15000);
const [bidAmountError, setBidAmountError] = useState(null);
const [fx, setFx] = useState(null); const [fx, setFx] = useState(null);
const [fxError, setFxError] = useState(null); const [fxError, setFxError] = useState(null);
useEffect(() => { useEffect(() => {
@@ -48,6 +49,7 @@ export const TenderDetailModal = () => {
const usdRate = fx?.rates?.USD; const usdRate = fx?.rates?.USD;
const eurRate = fx?.rates?.EUR; const eurRate = fx?.rates?.EUR;
const fxIsStale = Boolean(fx?.refreshError); const fxIsStale = Boolean(fx?.refreshError);
const bidAmountValid = Number.isFinite(bidAmount) && bidAmount >= 0 && bidAmount <= 1e12;
if (!activeTenderDetail) return null; if (!activeTenderDetail) return null;
// Havuzdaki güncel kayıt: takip/görev değişince düğme etiketleri de değişsin. // Havuzdaki güncel kayıt: takip/görev değişince düğme etiketleri de değişsin.
@@ -374,19 +376,27 @@ export const TenderDetailModal = () => {
<input <input
type="number" type="number"
value={bidAmount} value={bidAmount}
onChange={(e) => setBidAmount(Number(e.target.value))} min="0"
max="1000000000000"
step="0.01"
onChange={(e) => {
const value = Number(e.target.value);
setBidAmount(value);
setBidAmountError(Number.isFinite(value) && value >= 0 && value <= 1e12 ? null : 'Tutar 0 ile 1.000.000.000.000 TL arasında olmalıdır.');
}}
className="w-full bg-white/10 border border-white/20 rounded-lg px-3 py-1.5 text-xs text-white" className="w-full bg-white/10 border border-white/20 rounded-lg px-3 py-1.5 text-xs text-white"
/> />
{bidAmountError && <p role="alert" className="text-xs text-amber-200">{bidAmountError}</p>}
</div> </div>
<div className="bg-blue-950/80 p-3 rounded-lg border border-blue-800 text-xs space-y-1"> <div className="bg-blue-950/80 p-3 rounded-lg border border-blue-800 text-xs space-y-1">
<div className="flex justify-between text-slate-300"> <div className="flex justify-between text-slate-300">
<span>Dolar Karşılığı:</span> <span>Dolar Karşılığı:</span>
<span className="font-bold text-white">{usdRate ? '$' + (bidAmount / usdRate).toFixed(2) : 'Kur bekleniyor'}</span> <span className="font-bold text-white">{!usdRate ? 'Kur bekleniyor' : bidAmountValid ? '$' + (bidAmount / usdRate).toFixed(2) : 'Geçerli tutar gerekli'}</span>
</div> </div>
<div className="flex justify-between text-slate-300"> <div className="flex justify-between text-slate-300">
<span>Euro Karşılığı:</span> <span>Euro Karşılığı:</span>
<span className="font-bold text-white">{eurRate ? '€' + (bidAmount / eurRate).toFixed(2) : 'Kur bekleniyor'}</span> <span className="font-bold text-white">{!eurRate ? 'Kur bekleniyor' : bidAmountValid ? '€' + (bidAmount / eurRate).toFixed(2) : 'Geçerli tutar gerekli'}</span>
</div> </div>
</div> </div>
</div> </div>