diff --git a/docs/quality/uygulama-durumu.md b/docs/quality/uygulama-durumu.md index 27bdc96..9ddc700 100644 --- a/docs/quality/uygulama-durumu.md +++ b/docs/quality/uygulama-durumu.md @@ -2344,3 +2344,9 @@ Doğrulama: `calendarMissingTimeGuard` içinde iki provider seçeneği pasif ve `https://ihaleist.com` salt okunur probe'u 17:18 İstanbul kontrolünde yeniden çalıştırıldı. Ana sayfa ve `/api/health` 200/`ok:true`; `/api/ready` 404 ve home/health yanıtlarında altı zorunlu güvenlik başlığının tamamı eksik. Bu nedenle production kabul durumu değişmedi ve deploy edilmemiş düzeltmeler için kanıt güncellendi. Kanıt [`qa-live-runtime.json`](evidence/qa-live-runtime.json) içinde; ödeme, giriş, veri yazma veya teklif gönderme isteği yapılmadı. + +### 2026-09-06 · Hesap değişiminde not taslağı render güvenliği + +İhale detayındaki özel not taslakları hesap değişiminde artık render sırasında `setState` ile temizlenmiyor; değişim bir effect ile uygulanıyor. Böylece React render uyarısı ve hesap geçişi sırasında eski özel notun kısa süreli görünmesi riski azaltıldı. Mevcut owner/acknowledgement kontrolleri korunuyor. + +Doğrulama: `npm test` 301/301, `npm run build` ve `npm run qa:browser` başarılı; browser QA iki hesaplı analitik/ICS izolasyonunu da geçti. diff --git a/src/components/TenderDetailModal.jsx b/src/components/TenderDetailModal.jsx index d4c8585..e536a28 100644 --- a/src/components/TenderDetailModal.jsx +++ b/src/components/TenderDetailModal.jsx @@ -24,8 +24,10 @@ export const TenderDetailModal = () => { useEffect(()=>{setActiveTab(activeTenderDetail?.preparationTarget ? 'pdf_stamp' : 'details');},[activeTenderDetail?.id,activeTenderDetail?.preparationTarget]); const noteOwner = authUser?.email || ''; const [noteDrafts, setNoteDrafts] = useState(() => ({ owner: noteOwner, drafts: {} })); - // Discard private drafts on account changes, before rendering another account. - if (noteDrafts.owner !== noteOwner) setNoteDrafts({ owner: noteOwner, drafts: {} }); + // Discard private drafts after an account change without updating state during render. + useEffect(() => { + if (noteDrafts.owner !== noteOwner) setNoteDrafts({ owner: noteOwner, drafts: {} }); + }, [noteOwner, noteDrafts.owner]); const noteKey = tenderStateKey(activeTenderDetail); const noteDraft = noteDrafts.owner === noteOwner ? noteDrafts.drafts[noteKey] : undefined; const noteText = noteDraft?.text || '';