fix: "Tümünü Seç" tüm alt kategorileri seçmeli, sadece filtrelenenleri değil

Ne yaptık:
- "Tümünü Seç" artık arama filtresi aktifken bile tüm alt kategorileri seçiyor
- Tüm alt kategoriler seçiliyse subcategory_ids gönderilmiyor (backend zaten tümünü tarıyor)
- URL uzunluk limitine takılma riski ortadan kalktı
- Label'a seçili/toplam sayacı eklendi (ör: 45/105)

Neden yaptık:
- Kozmetik gibi 105 alt kategorili ana kategoride "Tümünü Seç" sadece
  filtrelenmiş kategorileri seçiyordu, bu yüzden raporda 1 kategori (~100 ürün)
  taranıyordu. Şimdi 105 kategori (~10.500 ürün) taranacak.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
furkanyigit34
2026-03-27 15:25:03 +03:00
parent a9170bda83
commit b5d18f1d15

View File

@@ -148,7 +148,10 @@ function ReportGeneration() {
category_id: selectedCategory.id
}
if (selectedSubCategories.length > 0) {
// Tüm alt kategoriler seçiliyse subcategory_ids gönderme — backend zaten tümünü tarar
const allSelected = selectedSubCategories.length > 0 &&
selectedSubCategories.length === subCategories.length
if (selectedSubCategories.length > 0 && !allSelected) {
requestBody.subcategory_ids = selectedSubCategories.map(cat => cat.id)
}
@@ -426,27 +429,28 @@ function ReportGeneration() {
onClick={() => {
if (generating) return
const allIds = new Set(selectedSubCategories.map(c => c.id))
const allSelected = filteredSubCategories.every(c => allIds.has(c.id))
const allSelected = subCategories.every(c => allIds.has(c.id))
if (allSelected) {
const filterIds = new Set(filteredSubCategories.map(c => c.id))
setSelectedSubCategories(prev => prev.filter(c => !filterIds.has(c.id)))
setSelectedSubCategories([])
} else {
const newOnes = filteredSubCategories.filter(c => !allIds.has(c.id))
const newOnes = subCategories.filter(c => !allIds.has(c.id))
setSelectedSubCategories(prev => [...prev, ...newOnes])
}
}}
className={`flex items-center px-5 py-2.5 border-b border-slate-100 cursor-pointer hover:bg-slate-50 transition-colors ${generating ? 'opacity-50 cursor-not-allowed' : ''}`}
>
<div className={`w-[18px] h-[18px] rounded border-2 flex items-center justify-center mr-3 shrink-0 transition-colors ${
filteredSubCategories.length > 0 && filteredSubCategories.every(c => selectedSubCategories.some(s => s.id === c.id))
subCategories.length > 0 && subCategories.every(c => selectedSubCategories.some(s => s.id === c.id))
? 'bg-orange-500 border-orange-500'
: 'border-slate-300'
}`}>
{filteredSubCategories.length > 0 && filteredSubCategories.every(c => selectedSubCategories.some(s => s.id === c.id)) && (
{subCategories.length > 0 && subCategories.every(c => selectedSubCategories.some(s => s.id === c.id)) && (
<Check className="w-3 h-3 text-white" strokeWidth={3} />
)}
</div>
<span className="text-xs font-semibold text-slate-400 uppercase tracking-wider">Tümünü seç</span>
<span className="text-xs font-semibold text-slate-400 uppercase tracking-wider">
Tümünü seç ({selectedSubCategories.length}/{subCategories.length})
</span>
</div>
{filteredSubCategories.length > 0 ? (