fix: validate calendar dates on tender cards
This commit is contained in:
@@ -1309,6 +1309,11 @@ Taslak türü seçicisine erişilebilir ad eklendi. Üretim derlemesi geçti. Ö
|
|||||||
- Bilinen tarihlerin mevcut gün/ay sunumu korunuyor. Böylece liste kartı, takvim ve detaydaki doğrulama gerektiren kayıtlarla çelişmiyor.
|
- Bilinen tarihlerin mevcut gün/ay sunumu korunuyor. Böylece liste kartı, takvim ve detaydaki doğrulama gerektiren kayıtlarla çelişmiyor.
|
||||||
- 280 test ve build başarılı. Eksik tarih kartının gerçek tarayıcı kabulü henüz eklenmedi; genel plan açık.
|
- 280 test ve build başarılı. Eksik tarih kartının gerçek tarayıcı kabulü henüz eklenmedi; genel plan açık.
|
||||||
|
|
||||||
|
### 2026-09-06 — İhale kartında imkânsız gün kontrolü
|
||||||
|
|
||||||
|
- Karttaki tarih regex ile eşleşse bile gün/ay/yıl bileşenleri artık JavaScript takviminde ayrıca doğrulanıyor. 31 Şubat gibi imkânsız tarihlerin gün veya ay olarak gösterilmesi engellendi; doğrulama etiketi kullanılıyor.
|
||||||
|
- Bilinen ve geçerli tarihler aynı görünümü koruyor. 281 test ve build başarılı. Kart bileşeni için ayrı geçersiz tarih tarayıcı kabulü henüz eklenmedi; genel plan açık.
|
||||||
|
|
||||||
### 2026-09-06 — Analitik geçersiz tarih kontrolü
|
### 2026-09-06 — Analitik geçersiz tarih kontrolü
|
||||||
|
|
||||||
- Analitik `parseDateTR`, JavaScript tarih yuvarlamasıyla 31 Şubat gibi imkânsız günleri geçerli tarihe dönüştürmüyordu; artık gün/ay/yıl bileşenlerini doğrulayıp geçersiz girdide `null` döndürüyor. Geçersiz tarihler yanlış hafta sonu veya kısa süre riskine dönüşmüyor.
|
- Analitik `parseDateTR`, JavaScript tarih yuvarlamasıyla 31 Şubat gibi imkânsız günleri geçerli tarihe dönüştürmüyordu; artık gün/ay/yıl bileşenlerini doğrulayıp geçersiz girdide `null` döndürüyor. Geçersiz tarihler yanlış hafta sonu veya kısa süre riskine dönüşmüyor.
|
||||||
|
|||||||
@@ -8,7 +8,11 @@ export const TenderCard = ({ tender }) => {
|
|||||||
const eslesenKalemler = (kalemEslesen && tender.ikn && kalemEslesen.get(tender.ikn)) || null;
|
const eslesenKalemler = (kalemEslesen && tender.ikn && kalemEslesen.get(tender.ikn)) || null;
|
||||||
const isFavKurum = favoriteKurumlar?.includes((tender.kurum || '').trim());
|
const isFavKurum = favoriteKurumlar?.includes((tender.kurum || '').trim());
|
||||||
|
|
||||||
const dateMatch = /^(\d{2})\.(\d{2})\.(\d{4})(?:\s|$)/.exec(String(tender.tarih || '').trim());
|
const parsedDateMatch = /^(\d{2})\.(\d{2})\.(\d{4})(?:\s|$)/.exec(String(tender.tarih || '').trim());
|
||||||
|
const dateMatch = parsedDateMatch && (() => {
|
||||||
|
const date = new Date(Number(parsedDateMatch[3]), Number(parsedDateMatch[2]) - 1, Number(parsedDateMatch[1]));
|
||||||
|
return date.getFullYear() === Number(parsedDateMatch[3]) && date.getMonth() === Number(parsedDateMatch[2]) - 1 && date.getDate() === Number(parsedDateMatch[1]) ? parsedDateMatch : null;
|
||||||
|
})();
|
||||||
const day = dateMatch?.[1] || '—';
|
const day = dateMatch?.[1] || '—';
|
||||||
const monthYearFormatted = dateMatch ? `${dateMatch[2]}.${dateMatch[3]}` : 'Tarih doğrulanmalı';
|
const monthYearFormatted = dateMatch ? `${dateMatch[2]}.${dateMatch[3]}` : 'Tarih doğrulanmalı';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user