From cf904720885fd81e95b2d0a9d7517dde3edda471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96ZT=C3=9CRK?= <76204082+iamsedatozturk@users.noreply.github.com> Date: Wed, 17 Jun 2026 11:52:42 +0300 Subject: [PATCH] =?UTF-8?q?Devexpress=20Grid=20raporunu=20Filter=20ve=20So?= =?UTF-8?q?rt=20de=C4=9Ferleri=20g=C3=B6nderildi.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/src/views/list/useFilters.tsx | 54 +++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/ui/src/views/list/useFilters.tsx b/ui/src/views/list/useFilters.tsx index ba38595..c90a1ec 100644 --- a/ui/src/views/list/useFilters.tsx +++ b/ui/src/views/list/useFilters.tsx @@ -21,6 +21,7 @@ import { usePWA } from '@/utils/hooks/usePWA' import { ROUTES_ENUM } from '@/routes/route.constant' import { GanttRef } from 'devextreme-react/cjs/gantt' import { useStoreState } from '@/store' +import { MULTIVALUE_DELIMITER } from '@/constants/app.constant' export interface ISelectBoxData { value?: string @@ -156,6 +157,57 @@ const resetGridState = (grid: GridInstance) => { } } +const getReportFilter = (grid: GridInstance) => { + const getCombinedFilter = (grid as any).getCombinedFilter + if (typeof getCombinedFilter === 'function') { + return getCombinedFilter.call(grid, true) + } + + const filterValue = (grid as any).option?.('filterValue') + return filterValue || undefined +} + +const getReportSort = (grid: GridInstance) => { + const state = supportsState(grid) ? grid.state() : undefined + const columns = Array.isArray(state?.columns) + ? state.columns + : typeof (grid as any).getVisibleColumns === 'function' + ? (grid as any).getVisibleColumns() + : [] + + return columns + .filter((column: any) => column?.sortOrder && (column.dataField || column.name)) + .sort((left: any, right: any) => { + const leftIndex = Number.isInteger(left.sortIndex) ? left.sortIndex : Number.MAX_SAFE_INTEGER + const rightIndex = Number.isInteger(right.sortIndex) ? right.sortIndex : Number.MAX_SAFE_INTEGER + return leftIndex - rightIndex + }) + .map((column: any) => `${column.dataField || column.name} ${column.sortOrder === 'desc' ? 'desc' : 'asc'}`) + .join(MULTIVALUE_DELIMITER) +} + +const createDynamicGridReportUrl = (grid: GridInstance | undefined, listFormCode: string) => { + const reportUrl = `/admin/reports/DynamicGrid/view/${encodeURIComponent(listFormCode)}` + if (!grid) { + return reportUrl + } + + const searchParams = new URLSearchParams() + const filter = getReportFilter(grid) + const sort = getReportSort(grid) + + if (filter) { + searchParams.set('filter', JSON.stringify(filter)) + } + + if (sort) { + searchParams.set('sort', sort) + } + + const queryString = searchParams.toString() + return queryString ? `${reportUrl}?${queryString}` : reportUrl +} + const useFilters = ({ gridDto, gridRef, @@ -252,7 +304,7 @@ const useFilters = ({ const menus = [] const openDynamicGridReport = () => { - const reportUrl = `/admin/reports/DynamicGrid/view/${encodeURIComponent(listFormCode)}` + const reportUrl = createDynamicGridReportUrl(gridRef.current?.instance(), listFormCode) window.open(reportUrl, isPwaMode ? '_self' : '_blank') }