From 9da5f9946bf9b3c2b56acec5e2618c3ddcb1cc1e Mon Sep 17 00:00:00 2001 From: burakovec Date: Tue, 9 Dec 2025 16:12:49 +0300 Subject: [PATCH] Refactor filter handling in DashPiyangoListe and ListTableContent components. Updated tableData type to an array and improved query parameter construction for filters, including error handling during navigation. Enhanced filter value retrieval logic to ensure proper text assignment based on available data. --- src/components/DashPiyangoListe.vue | 42 +++++++++++++----- src/components/global/ListTableContent.vue | 50 ++++++++++++++-------- 2 files changed, 64 insertions(+), 28 deletions(-) diff --git a/src/components/DashPiyangoListe.vue b/src/components/DashPiyangoListe.vue index bfea13d..75e662c 100644 --- a/src/components/DashPiyangoListe.vue +++ b/src/components/DashPiyangoListe.vue @@ -67,7 +67,7 @@ const router = useRouter() const props = defineProps<{ - tableData: Record + tableData: Record[] lineFunction?: Function title?: string listText?: string @@ -97,16 +97,36 @@ } const goToListWithFilter = () => { - const query: Record = {} - - // Filtre parametrelerini query'ye ekle - if (props.filterParams) { - Object.assign(query, props.filterParams) + try { + const query: Record = {} + + // Filtre parametrelerini query'ye ekle (Filters[...] formatına dönüştür) + if (props.filterParams && typeof props.filterParams === 'object') { + Object.keys(props.filterParams).forEach((key) => { + const value = props.filterParams![key] + if (value !== undefined && value !== null && value !== '') { + // Değer zaten operatör içeriyorsa olduğu gibi kullan, yoksa '=' ekle + let filterValue = String(value) + // Eğer değer zaten operatör içermiyorsa '=' ekle + if (!filterValue.match(/^[<>=]/)) { + filterValue = '=' + filterValue + } + // Query parametresine string olarak ekle (Vue Router array'leri yanlış serialize ediyor) + query[`Filters[${key}]`] = filterValue + } + }) + } + + router.push({ + path: '/piyangolar/piyango-listesi', + query: query + }) + } catch (error) { + console.error('goToListWithFilter hatası:', error) + // Hata durumunda filtre olmadan yönlendir + router.push({ + path: '/piyangolar/piyango-listesi' + }) } - - router.push({ - path: '/piyangolar/piyango-listesi', - query: query - }) } diff --git a/src/components/global/ListTableContent.vue b/src/components/global/ListTableContent.vue index 03f099b..f36fe8a 100644 --- a/src/components/global/ListTableContent.vue +++ b/src/components/global/ListTableContent.vue @@ -473,16 +473,23 @@ 1 ) if (filter.type === 'select') { - const forText = props.tableHeader[ - filter.hIndex - ].filter!.data.find( - (o: Record) => - String( - o[props.tableHeader[filter.hIndex].filter!.listVal] - ) === String(filter.values[ind].val) - ) - filter.values[ind].text = - forText[props.tableHeader[filter.hIndex].filter!.listText] + const filterData = props.tableHeader[filter.hIndex].filter!.data + if (filterData && Array.isArray(filterData)) { + const forText = filterData.find( + (o: Record) => + String( + o[props.tableHeader[filter.hIndex].filter!.listVal] + ) === String(filter.values[ind].val) + ) + if (forText) { + filter.values[ind].text = + forText[props.tableHeader[filter.hIndex].filter!.listText] + } else { + filter.values[ind].text = filter.values[ind].val + } + } else { + filter.values[ind].text = filter.values[ind].val + } } }) } else { @@ -490,13 +497,22 @@ filter.values[0].val = (route.query[key] as string).slice(1) if (filter.type === 'select') { - const forText = props.tableHeader[filter.hIndex].filter!.data.find( - (o: Record) => - String(o[props.tableHeader[filter.hIndex].filter!.listVal]) === - String(filter.values[0].val) - ) - filter.values[0].text = - forText[props.tableHeader[filter.hIndex].filter!.listText] + const filterData = props.tableHeader[filter.hIndex].filter!.data + if (filterData && Array.isArray(filterData)) { + const forText = filterData.find( + (o: Record) => + String(o[props.tableHeader[filter.hIndex].filter!.listVal]) === + String(filter.values[0].val) + ) + if (forText) { + filter.values[0].text = + forText[props.tableHeader[filter.hIndex].filter!.listText] + } else { + filter.values[0].text = filter.values[0].val + } + } else { + filter.values[0].text = filter.values[0].val + } } } filter.filter = true