Grid Extra Filters

This commit is contained in:
Sedat Öztürk 2025-09-19 01:09:58 +03:00
parent b394c8d837
commit 656d162617
6 changed files with 53 additions and 35 deletions

View file

@ -13431,8 +13431,8 @@
{ {
"resourceName": "Platform", "resourceName": "Platform",
"key": "ListForms.ListFormEdit.SelectionMode", "key": "ListForms.ListFormEdit.SelectionMode",
"en": "Auto Expand All", "en": "Selection Mode",
"tr": "Mod" "tr": "Seçim Modu"
}, },
{ {
"resourceName": "Platform", "resourceName": "Platform",

View file

@ -82,7 +82,13 @@ const useListFormCustomDataSource = ({
} }
} }
} }
if (combinedFilter && combinedFilter.length > 0) {
parameters.filter = JSON.stringify(combinedFilter) parameters.filter = JSON.stringify(combinedFilter)
} else {
delete parameters.filter // hiç göndermesin
}
//parameters.filter = JSON.stringify(parameters.filter) //parameters.filter = JSON.stringify(parameters.filter)
const response = await dynamicFetch('list-form-select/select', 'GET', parameters) const response = await dynamicFetch('list-form-select/select', 'GET', parameters)
@ -164,18 +170,25 @@ const useListFormCustomDataSource = ({
group: '', group: '',
}) })
// 1. Default filter'ı al
const defaultFilter = searchParams?.get('filter') const defaultFilter = searchParams?.get('filter')
? JSON.parse(searchParams.get('filter')!) ? JSON.parse(searchParams.get('filter')!)
: null : null
let combinedFilter: any = parameters.filter let combinedFilter: any = parameters.filter
// 2. Eğer hem default hem de grid filter varsa merge et
if (defaultFilter && combinedFilter) { if (defaultFilter && combinedFilter) {
combinedFilter = [defaultFilter, 'and', combinedFilter] combinedFilter = [defaultFilter, 'and', combinedFilter]
} else if (defaultFilter) { } else if (defaultFilter) {
combinedFilter = defaultFilter combinedFilter = defaultFilter
} }
if (combinedFilter && combinedFilter.length > 0) {
parameters.filter = JSON.stringify(combinedFilter) parameters.filter = JSON.stringify(combinedFilter)
} else {
delete parameters.filter // hiç göndermesin
}
try { try {
const response = await dynamicFetch('list-form-select/select', 'GET', parameters) const response = await dynamicFetch('list-form-select/select', 'GET', parameters)
@ -193,28 +206,29 @@ const useListFormCustomDataSource = ({
return null return null
} }
}, },
byKey: async (key) => { // byKey: async (key) => {
const parameters = getLoadOptions( // const parameters = getLoadOptions(
{ key }, // { key },
{ listFormCode, filter: '', createDeleteQuery: '' }, // { listFormCode, filter: '', createDeleteQuery: '' },
)
parameters.filter = JSON.stringify(parameters.filter)
try {
const response = await dynamicFetch('list-form-select/select', 'GET', parameters)
return response.data.data[0]
} catch (error: any) {
// toast.push(
// <Notification type="danger" duration={2000}>
// ByKey error
// {error.toString()}
// </Notification>,
// {
// placement: 'top-end',
// },
// ) // )
return null
} // parameters.filter = JSON.stringify(parameters.filter)
}, // try {
// const response = await dynamicFetch('list-form-select/select', 'GET', parameters)
// return response.data.data[0]
// } catch (error: any) {
// // toast.push(
// // <Notification type="danger" duration={2000}>
// // ByKey error
// // {error.toString()}
// // </Notification>,
// // {
// // placement: 'top-end',
// // },
// // )
// return null
// }
// },
remove: function (key) { remove: function (key) {
if (!gridOptions.deleteServiceAddress) { if (!gridOptions.deleteServiceAddress) {
return return

View file

@ -51,12 +51,13 @@ import { useCallback, useEffect, useRef, useState } from 'react'
import { Helmet } from 'react-helmet' import { Helmet } from 'react-helmet'
import SubForms from '../form/SubForms' import SubForms from '../form/SubForms'
import { RowMode, SimpleItemWithColData } from '../form/types' import { RowMode, SimpleItemWithColData } from '../form/types'
import { GridColumnData, GridExtraFilterState } from './GridColumnData' import { GridColumnData } from './GridColumnData'
import GridFilterDialogs from './GridFilterDialogs' import GridFilterDialogs from './GridFilterDialogs'
import { import {
addCss, addCss,
addJs, addJs,
controlStyleCondition, controlStyleCondition,
GridExtraFilterState,
setFormEditingExtraItemValues, setFormEditingExtraItemValues,
setGridPanelColor, setGridPanelColor,
} from './Utils' } from './Utils'
@ -540,6 +541,8 @@ const Grid = (props: GridProps) => {
} }
useEffect(() => { useEffect(() => {
if (gridDto?.gridOptions.extraFilterDto.length === 0) return
if (gridDto?.gridOptions.extraFilterDto) { if (gridDto?.gridOptions.extraFilterDto) {
setExtraFilters( setExtraFilters(
gridDto.gridOptions.extraFilterDto.map((f) => ({ gridDto.gridOptions.extraFilterDto.map((f) => ({
@ -554,6 +557,7 @@ const Grid = (props: GridProps) => {
useEffect(() => { useEffect(() => {
if (!searchParams) return if (!searchParams) return
if (extraFilters.length === 0) return
// aktif filtreleri al // aktif filtreleri al
const activeFilters = extraFilters.filter((f) => f.value) const activeFilters = extraFilters.filter((f) => f.value)

View file

@ -1,13 +1,6 @@
import { DataGridTypes } from 'devextreme-react/data-grid' import { DataGridTypes } from 'devextreme-react/data-grid'
import { ColumnFormatDto, GridBoxOptionsDto, TagBoxOptionsDto } from '../../proxy/form/models' import { ColumnFormatDto, GridBoxOptionsDto, TagBoxOptionsDto } from '../../proxy/form/models'
export interface GridExtraFilterState {
fieldName: string
operator: string
controlType: string
value: string
}
interface IGridColumnData extends DataGridTypes.Column { interface IGridColumnData extends DataGridTypes.Column {
colData?: ColumnFormatDto colData?: ColumnFormatDto
extras?: { extras?: {

View file

@ -1,5 +1,5 @@
import { GridExtraFilterState } from './GridColumnData'
import { useState } from 'react' import { useState } from 'react'
import { GridExtraFilterState } from './Utils'
export function GridExtraFilterToolbar({ export function GridExtraFilterToolbar({
filters, filters,

View file

@ -2,6 +2,13 @@ import { DataType } from 'devextreme/common'
import { PivotGridDataType } from 'devextreme/ui/pivot_grid/data_source' import { PivotGridDataType } from 'devextreme/ui/pivot_grid/data_source'
import { MULTIVALUE_DELIMITER } from '../../constants/app.constant' import { MULTIVALUE_DELIMITER } from '../../constants/app.constant'
export interface GridExtraFilterState {
fieldName: string
operator: string
controlType: string
value: string
}
// sayfaya dinamik olarak css style ekler // sayfaya dinamik olarak css style ekler
export function addCss(css: string) { export function addCss(css: string) {
if (css.startsWith('http') || css.startsWith('/')) { if (css.startsWith('http') || css.startsWith('/')) {