avoid render state updates on account switch
This commit is contained in:
@@ -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.
|
`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ı.
|
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.
|
||||||
|
|||||||
@@ -24,8 +24,10 @@ export const TenderDetailModal = () => {
|
|||||||
useEffect(()=>{setActiveTab(activeTenderDetail?.preparationTarget ? 'pdf_stamp' : 'details');},[activeTenderDetail?.id,activeTenderDetail?.preparationTarget]);
|
useEffect(()=>{setActiveTab(activeTenderDetail?.preparationTarget ? 'pdf_stamp' : 'details');},[activeTenderDetail?.id,activeTenderDetail?.preparationTarget]);
|
||||||
const noteOwner = authUser?.email || '';
|
const noteOwner = authUser?.email || '';
|
||||||
const [noteDrafts, setNoteDrafts] = useState(() => ({ owner: noteOwner, drafts: {} }));
|
const [noteDrafts, setNoteDrafts] = useState(() => ({ owner: noteOwner, drafts: {} }));
|
||||||
// Discard private drafts on account changes, before rendering another account.
|
// Discard private drafts after an account change without updating state during render.
|
||||||
if (noteDrafts.owner !== noteOwner) setNoteDrafts({ owner: noteOwner, drafts: {} });
|
useEffect(() => {
|
||||||
|
if (noteDrafts.owner !== noteOwner) setNoteDrafts({ owner: noteOwner, drafts: {} });
|
||||||
|
}, [noteOwner, noteDrafts.owner]);
|
||||||
const noteKey = tenderStateKey(activeTenderDetail);
|
const noteKey = tenderStateKey(activeTenderDetail);
|
||||||
const noteDraft = noteDrafts.owner === noteOwner ? noteDrafts.drafts[noteKey] : undefined;
|
const noteDraft = noteDrafts.owner === noteOwner ? noteDrafts.drafts[noteKey] : undefined;
|
||||||
const noteText = noteDraft?.text || '';
|
const noteText = noteDraft?.text || '';
|
||||||
|
|||||||
Reference in New Issue
Block a user