harden analytics target form controls
This commit is contained in:
@@ -2176,3 +2176,9 @@ Doğrulama: browser QA başarılı; 293 otomatik test ve üretim derlemesi başa
|
|||||||
Son giriş zaman damgası, oturum ziyaret damgası ve belge son kullanma uyarısı anahtarları ortak `hesapAnahtari` yardımcısını kullanıyor. E-posta boşlukları/büyük harfleri normalize ediliyor ve özel karakterler kodlanıyor; hesap kapsamlı istemci kayıtları artık tutarlı anahtar üretir.
|
Son giriş zaman damgası, oturum ziyaret damgası ve belge son kullanma uyarısı anahtarları ortak `hesapAnahtari` yardımcısını kullanıyor. E-posta boşlukları/büyük harfleri normalize ediliyor ve özel karakterler kodlanıyor; hesap kapsamlı istemci kayıtları artık tutarlı anahtar üretir.
|
||||||
|
|
||||||
Doğrulama: 293 otomatik test ve üretim derlemesi başarılı. Gerçek iki hesaplı tarayıcı kabulü açık.
|
Doğrulama: 293 otomatik test ve üretim derlemesi başarılı. Gerçek iki hesaplı tarayıcı kabulü açık.
|
||||||
|
|
||||||
|
### 2026-09-06 · Analitik hedef formu güvenli gönderim ve sınırları
|
||||||
|
|
||||||
|
Analitik ciro hedefi düzenleme düğmeleri açık `type="button"` kullanıyor; hedef alanı negatif değerleri kabul etmiyor ve ondalık adımı tanımlı. Panel bir form içine alınsa bile hedef düzenleme işlemi istemeden form göndermez.
|
||||||
|
|
||||||
|
Doğrulama: 293 otomatik test ve üretim derlemesi başarılı. Gerçek tarayıcıda form kapsayıcısı ve mobil klavye kabulü ayrıca yapılmalı.
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ export const AnalyticsDashboard = () => {
|
|||||||
<span className="text-blue-200 uppercase tracking-wider flex items-center gap-1">
|
<span className="text-blue-200 uppercase tracking-wider flex items-center gap-1">
|
||||||
<Target className="w-3.5 h-3.5 text-amber-300" /> Ciro Hedefi
|
<Target className="w-3.5 h-3.5 text-amber-300" /> Ciro Hedefi
|
||||||
</span>
|
</span>
|
||||||
<button onClick={() => setEditing((e) => !e)} className="text-blue-200 hover:text-white" title="Hedefi düzenle">
|
<button type="button" onClick={() => setEditing((e) => !e)} className="text-blue-200 hover:text-white" title="Hedefi düzenle">
|
||||||
{hedef > 0 ? <span className="text-amber-300 font-black">%{hedefYuzde}</span> : <Pencil className="w-3.5 h-3.5" />}
|
{hedef > 0 ? <span className="text-amber-300 font-black">%{hedefYuzde}</span> : <Pencil className="w-3.5 h-3.5" />}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -101,11 +101,13 @@ export const AnalyticsDashboard = () => {
|
|||||||
<input
|
<input
|
||||||
type="number"
|
type="number"
|
||||||
value={hedef || ''}
|
value={hedef || ''}
|
||||||
onChange={(e) => setHedef(Number(e.target.value) || 0)}
|
min="0"
|
||||||
|
step="0.01"
|
||||||
|
onChange={(e) => setHedef(Math.max(0, Number(e.target.value) || 0))}
|
||||||
placeholder="Hedef bedel (₺)"
|
placeholder="Hedef bedel (₺)"
|
||||||
className="w-full bg-blue-950/60 border border-blue-700 rounded-lg px-2 py-1.5 text-xs text-white placeholder:text-blue-300"
|
className="w-full bg-blue-950/60 border border-blue-700 rounded-lg px-2 py-1.5 text-xs text-white placeholder:text-blue-300"
|
||||||
/>
|
/>
|
||||||
<button onClick={() => setEditing(false)} className="bg-amber-400 text-blue-950 font-black text-xs px-2.5 py-1.5 rounded-lg">Kaydet</button>
|
<button type="button" onClick={() => setEditing(false)} className="bg-amber-400 text-blue-950 font-black text-xs px-2.5 py-1.5 rounded-lg">Kaydet</button>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
|
|||||||
Reference in New Issue
Block a user