React + TypeScript'te Chromecast MAC ve State Alanlarını Ekleme
TV izleme arayüzünde Chromecast cihazlarının iki kritik bilgisi eksikti: MAC adresi (ağ tanısı için) ve cihazın şu anki durumu (çevrimdışı sorunlarını çözmek için). Backend API bu verileri zaten döndürüyordu, ancak React türü tanımlarında bu alanlar eksik olduğu için tabloda boş sütunlar görünüyordu.
Sorunun kaynağı basitti: `TvDeviceRow` türü `chromecastMac`, `chromecastState` ve `stateModified` alanlarını içermiyordu. TypeScript uyarıları yok sayıldığında bile UI render edilmiyordu. Çözüm için model tanımını genişletmek gerekiyordu.
İlk adım model dosyasında türü güncelleme. Eğer TypeScript strict modda çalışıyorsa, yeni alanları interface'e eklemelisin:
1interface TvDeviceRow {2id: string;3name: string;4chromecastMac?: string;5chromecastState?: 'online' | 'offline' | 'unknown';6stateModified?: string; // ISO 8601 tarih7}Sonra inventory tablosunun sütun tanımlarına bu alanları ekle. Eğer Material-UI DataGrid kullanıyorsan:
1const columns: GridColDef[] = [2{ field: 'name', headerName: 'Cihaz Adı', width: 200 },3{ field: 'chromecastMac', headerName: 'MAC Adresi', width: 150 },4{5field: 'chromecastState',6headerName: 'Durum',7width: 100,8renderCell: (params) => (9<span style={{ color: params.value === 'online'? 'green': 'red' }}>10{params.value || 'Bilinmiyor'}11</span>12),13},14];Device detail sayfasında bu alanları göstermek için benzer şekilde bileşeni güncelle. Global search overlay'inde de aynı türü kullanarak arama sonuçlarında bu bilgileri filtreleyebilirsin.
Bir ek sorun: veri akışında store şekli tutarsızsa (örneğin API'den gelen veri, Redux/Zustand store'da farklı yapıda saklanıyorsa), bu yeni alanlar hiçbir zaman UI'ye ulaşmaz. Veri normalleştirme işlemini kontrol et; transform fonksiyonları bu alanları kopyalıyor mu?
MAC adresi ve durum bilgisini bir kez ekledikten sonra, ağ sorunlarını teşhis etmek ve cihaz durumunu izlemek çok daha kolay hale gelir. TypeScript'in katı tip kontrolü sayesinde bu tür eksiklikleri geliştirme aşamasında yakalayabilirsin.
0 yorum