# Dashboard Geliştirme Rehberi Dashboard frontend geliştirme için kritik dokümantasyon. ## Tab Yapısı (7 Tab) | Tab ID | Tab Adı | Veri Kaynağı | |--------|---------|--------------| | overview | Genel Bakış | `kpis`, `charts.top_*` | | brand | Marka | `charts.top_brands` | | category | Kategori | `charts.top_categories` | | origin | Menşei | `charts.origin_countries` | | barcode | Barkod | `charts.barcode_*` | | keyword | Keyword Aracı | `/keyword-analysis` endpoint | | product-finder | Ürün Bulma | `/product-finder` endpoint | ## Veri Akışı ``` Backend API → dashboardData → { kpis, charts, all_products } ``` ## KRİTİK: Veri Kullanım Kuralları ### Öncelik Sırası 1. **İlk**: `dashboardData.kpis` - KPI kartları için 2. **İkinci**: `dashboardData.charts.*` - Liste ve grafikler için 3. **Son Çare**: `dashboardData.all_products` - Sadece özel analiz için ### DOĞRU Kullanım ```jsx // KPI'lar const kpis = dashboardData?.kpis || {}; // Top listeler const topBrands = dashboardData?.charts?.top_brands || []; const topProducts = dashboardData?.charts?.top_products || []; const topCategories = dashboardData?.charts?.top_categories || []; ``` ### YANLIŞ Kullanım ```jsx // all_products'tan hesaplama YAPMA! const topProducts = useMemo(() => { const products = dashboardData?.all_products || []; return products .filter(p => p.orders > 0) .sort((a, b) => b.orders - a.orders) .slice(0, 10); }, [dashboardData]); // Bu veri zaten charts.top_products'ta HAZIR! ``` ## API Response Yapısı ```json { "kpis": { "total_products": 19043, "total_orders": 145680, "total_views": 2456789, "average_price": 249.99, "unique_brands": 234 }, "charts": { "top_products": [...], "top_brands": [...], "top_categories": [...], "origin_countries": [...], "price_distribution": [...], "rating_distribution": [...] }, "all_products": [...] } ``` ## Yeni Tab Ekleme Rehberi ### Adım 1: Tab Config'e Ekle `src/constants/tabGroups.js`: ```javascript tabs: [ // ... mevcut tablar { id: 'new-tab', name: 'Yeni Tab' } ] ``` ### Adım 2: Component Oluştur `src/components/dashboard-tabs/NewTab.jsx`: ```jsx const NewTab = ({ dashboardData }) => { console.log('📊 NewTab Data:', dashboardData); const kpis = dashboardData?.kpis || {}; const chartData = dashboardData?.charts?.relevant_chart || []; return (
{/* KPI Kartları */}

KPI Başlığı

{kpis.metric_name?.toLocaleString('tr-TR') || 0}

{/* Chart/Liste */}
{chartData.map(item => (
{/* Item içeriği */}
))}
); }; export default NewTab; ``` ### Adım 3: ReportDashboard.jsx'te Import ```jsx import NewTab from './dashboard-tabs/NewTab'; // Render bloğunda {activeTab === 'new-tab' && } ``` ### Adım 4: Console Log ile Doğrula ```jsx console.log('🎯 Tab Data:', dashboardData); console.log('📊 Chart Data:', chartData); console.log('✅ Items:', items.length); ``` ## Field Name Mapping Pattern Backend ve frontend arasında alan adı uyumsuzluğu olabilir. Çözüm: ```jsx // Backend: { name: 'Türkiye', productCount: 1234 } // Component: { country: ..., count: ... } bekliyor const transformed = sourceData.map(item => ({ country: item.name, // Beklenen alana map'le name: item.name, // Orijinali koru count: item.productCount, // Beklenen alana map'le productCount: item.productCount // Orijinali koru })); ``` Detaylı örnek: [bug-fixes/ORIGINTAB_BUG_FIX.md](./bug-fixes/ORIGINTAB_BUG_FIX.md) ## Yaygın Hatalar ### 1. Veri Yok / Boş Gösterim **Sebep**: Yanlış property adı kullanımı ```jsx // YANLIŞ const products = dashboardData?.products || []; // DOĞRU const products = dashboardData?.charts?.top_products || []; ``` ### 2. "bilinmiyor" Gösteriyor **Sebep**: `all_products`'tan hesaplama yapılıyor ```jsx // YANLIŞ const categories = products.map(p => p.category); // DOĞRU const categories = dashboardData?.charts?.top_categories || []; ``` ### 3. Alan Adı Uyumsuzluğu **Sebep**: Backend ve component farklı field adları bekliyor **Çözüm**: Mapping layer pattern kullan (yukarıya bak) ## Debugging Her tab'a console.log ekle: ```jsx useEffect(() => { console.log('📊 Tab loaded with data:', { kpis: dashboardData?.kpis, charts: Object.keys(dashboardData?.charts || {}), productCount: dashboardData?.all_products?.length }); }, [dashboardData]); ``` ## Referans Dosyalar | Dosya | Satırlar | İçerik | |-------|----------|--------| | `ReportDashboard.jsx` | - | Ana dashboard component | | `tabGroups.js` | - | Tab yapılandırması | | `backend/main.py` | ~2710-2950 | `get_dashboard_data` fonksiyonu | ## Performans İpuçları 1. **Gereksiz hesaplama yapma** - Backend'in hazır verilerini kullan 2. **useMemo kullan** - Sadece `all_products`'tan özel analiz yaparken 3. **Console log'ları kaldır** - Production'da --- **Son Güncelleme**: Ocak 2025