From defbf93165d7720250d5268e844b419fc98cf028 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 Sep 2025 17:13:48 +0300 Subject: [PATCH] =?UTF-8?q?Grid=20=C3=BCzerinden=20extra=20filter=20=C3=B6?= =?UTF-8?q?zelli=C4=9Fi=20eklendi.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GridOptionsDto/ExtraFilterDto.cs | 16 + .../GridOptionsDto/ExtraFilterEditDto.cs | 6 + .../GridOptionsDto/GridOptionsDto.cs | 14 + .../GridOptionsDto/GridOptionsEditDto.cs | 14 + .../ListForms/ListFormAutoMapperProfile.cs | 3 + .../ListForms/ListFormSelectAppService.cs | 1 - .../Kurs.Platform.Domain/Entities/ListForm.cs | 3 + .../Queries/ExtraFilter.cs | 26 + ....cs => 20250917121912_Initial.Designer.cs} | 5 +- ...5_Initial.cs => 20250917121912_Initial.cs} | 1 + .../PlatformDbContextModelSnapshot.cs | 3 + ui/dev-dist/sw.js | 2 +- ui/src/proxy/form/models.ts | 15 + ui/src/shared/useListFormCustomDataSource.ts | 35 +- ui/src/views/forum/Forum.tsx | 2 +- ui/src/views/list/Grid.tsx | 637 ++++++++++-------- ui/src/views/list/GridColumnData.ts | 6 + ui/src/views/list/GridExtraFilterToolbar.tsx | 42 ++ ui/src/views/list/useToolbar.tsx | 5 + 19 files changed, 564 insertions(+), 272 deletions(-) create mode 100644 api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/ExtraFilterDto.cs create mode 100644 api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/ExtraFilterEditDto.cs create mode 100644 api/src/Kurs.Platform.Domain/Queries/ExtraFilter.cs rename api/src/Kurs.Platform.EntityFrameworkCore/Migrations/{20250911192105_Initial.Designer.cs => 20250917121912_Initial.Designer.cs} (99%) rename api/src/Kurs.Platform.EntityFrameworkCore/Migrations/{20250911192105_Initial.cs => 20250917121912_Initial.cs} (99%) create mode 100644 ui/src/views/list/GridExtraFilterToolbar.tsx diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/ExtraFilterDto.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/ExtraFilterDto.cs new file mode 100644 index 00000000..20ef3cd8 --- /dev/null +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/ExtraFilterDto.cs @@ -0,0 +1,16 @@ +namespace Kurs.Platform.ListForms; + +public class ExtraFilterDto +{ + public string FieldName { get; set; } + public string Caption { get; set; } + public string Operator { get; set; } + public string DefaultValue { get; set; } + public ExtraFilterItemsDto[] Items { get; set; } +} + +public class ExtraFilterItemsDto +{ + public string Value { get; set; } + public string Text { get; set; } +} diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/ExtraFilterEditDto.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/ExtraFilterEditDto.cs new file mode 100644 index 00000000..4fc23b0a --- /dev/null +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/ExtraFilterEditDto.cs @@ -0,0 +1,6 @@ +namespace Kurs.Platform.ListForms; + +public class ExtraFilterEditDto : ExtraFilterDto +{ + public string SqlQuery { get; set; } +} diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsDto.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsDto.cs index 0a76e049..1e56f397 100644 --- a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsDto.cs @@ -291,4 +291,18 @@ public class GridOptionsDto : AuditedEntityDto } set { SubFormsJson = JsonSerializer.Serialize(value); } } + + [JsonIgnore] + public string ExtraFilterJson { get; set; } // Cagrilacak Extra Filters + public ExtraFilterDto[] ExtraFilterDto + { + get + { + if (!string.IsNullOrEmpty(ExtraFilterJson)) + return JsonSerializer.Deserialize(ExtraFilterJson); + + return []; + } + set { ExtraFilterJson = JsonSerializer.Serialize(value); } + } } diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsEditDto.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsEditDto.cs index 4324821c..aafcab5d 100644 --- a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsEditDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsEditDto.cs @@ -91,6 +91,7 @@ public class GridOptionsEditDto : GridOptionsDto set { FormFieldsDefaultValueJson = JsonSerializer.Serialize(value); } } + //bu sadece ListFormSelectAppService/GetSelectAsync icerisinde kullanilir [JsonIgnore] public string WidgetsJson { get; set; } // Cagrilacak Widgetlar public List WidgetsDto @@ -104,4 +105,17 @@ public class GridOptionsEditDto : GridOptionsDto } set { WidgetsJson = JsonSerializer.Serialize(value); } } + + [JsonIgnore] + public List ExtraFilterEditDto + { + get + { + if (!string.IsNullOrEmpty(ExtraFilterJson)) + return JsonSerializer.Deserialize>(ExtraFilterJson); + + return []; + } + set { ExtraFilterJson = JsonSerializer.Serialize(value); } + } } diff --git a/api/src/Kurs.Platform.Application/ListForms/ListFormAutoMapperProfile.cs b/api/src/Kurs.Platform.Application/ListForms/ListFormAutoMapperProfile.cs index 44c77394..db8b83a9 100644 --- a/api/src/Kurs.Platform.Application/ListForms/ListFormAutoMapperProfile.cs +++ b/api/src/Kurs.Platform.Application/ListForms/ListFormAutoMapperProfile.cs @@ -25,6 +25,9 @@ public class ListFormAutoMapperProfile : Profile CreateMap().ReverseMap(); CreateMap().ReverseMap(); CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); CreateMap(); CreateMap(); diff --git a/api/src/Kurs.Platform.Application/ListForms/ListFormSelectAppService.cs b/api/src/Kurs.Platform.Application/ListForms/ListFormSelectAppService.cs index b78a6fcb..71a3a3c2 100644 --- a/api/src/Kurs.Platform.Application/ListForms/ListFormSelectAppService.cs +++ b/api/src/Kurs.Platform.Application/ListForms/ListFormSelectAppService.cs @@ -291,7 +291,6 @@ public class ListFormSelectAppService : PlatformAppService, IListFormSelectAppSe }; var queryParameters = httpContextAccessor.HttpContext.Request.Query.ToDictionary(x => x.Key, x => x.Value); - var defaultFields = await defaultValueManager.GenerateDefaultValuesAsync(listForm, Enums.OperationEnum.Select, queryParameters: queryParameters); foreach (var field in defaultFields) diff --git a/api/src/Kurs.Platform.Domain/Entities/ListForm.cs b/api/src/Kurs.Platform.Domain/Entities/ListForm.cs index 2cc8f040..bbc2acdc 100644 --- a/api/src/Kurs.Platform.Domain/Entities/ListForm.cs +++ b/api/src/Kurs.Platform.Domain/Entities/ListForm.cs @@ -118,4 +118,7 @@ public class ListForm : FullAuditedEntity /// bu listform'un üstünde yer alan widgetların listesidir public string WidgetsJson { get; set; } + + /// bu listform'un üstünde yer alan widgetların listesidir + public string ExtraFilterJson { get; set; } } diff --git a/api/src/Kurs.Platform.Domain/Queries/ExtraFilter.cs b/api/src/Kurs.Platform.Domain/Queries/ExtraFilter.cs new file mode 100644 index 00000000..9dfcc871 --- /dev/null +++ b/api/src/Kurs.Platform.Domain/Queries/ExtraFilter.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using Volo.Abp.Domain.Values; + +namespace Kurs.Platform.Queries; + +public class ExtraFilter : ValueObject +{ + public string FieldName { get; set; } + public string Caption { get; set; } + public string Operator { get; set; } + public ExtraFilterItems[] Items { get; set; } + + protected override IEnumerable GetAtomicValues() + { + yield return FieldName; + yield return Caption; + yield return Operator; + yield return Items; + } +} + +public class ExtraFilterItems +{ + public string Value { get; set; } + public string Text { get; set; } +} diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250911192105_Initial.Designer.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250917121912_Initial.Designer.cs similarity index 99% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250911192105_Initial.Designer.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250917121912_Initial.Designer.cs index 4bd1020d..152656c2 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250911192105_Initial.Designer.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250917121912_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Kurs.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20250911192105_Initial")] + [Migration("20250917121912_Initial")] partial class Initial { /// @@ -2806,6 +2806,9 @@ namespace Kurs.Platform.Migrations b.Property("EditingOptionJson") .HasColumnType("nvarchar(max)"); + b.Property("ExtraFilterJson") + .HasColumnType("nvarchar(max)"); + b.Property("FilterPanelJson") .HasColumnType("nvarchar(max)"); diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250911192105_Initial.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250917121912_Initial.cs similarity index 99% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250911192105_Initial.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250917121912_Initial.cs index 1709422f..e31f0a05 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250911192105_Initial.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250917121912_Initial.cs @@ -1240,6 +1240,7 @@ namespace Kurs.Platform.Migrations IsSubForm = table.Column(type: "bit", nullable: false), SubFormsJson = table.Column(type: "nvarchar(max)", nullable: true), WidgetsJson = table.Column(type: "nvarchar(max)", nullable: true), + ExtraFilterJson = table.Column(type: "nvarchar(max)", nullable: true), CreationTime = table.Column(type: "datetime2", nullable: false), CreatorId = table.Column(type: "uniqueidentifier", nullable: true), LastModificationTime = table.Column(type: "datetime2", nullable: true), diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index 82c12e1e..cba25593 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -2803,6 +2803,9 @@ namespace Kurs.Platform.Migrations b.Property("EditingOptionJson") .HasColumnType("nvarchar(max)"); + b.Property("ExtraFilterJson") + .HasColumnType("nvarchar(max)"); + b.Property("FilterPanelJson") .HasColumnType("nvarchar(max)"); diff --git a/ui/dev-dist/sw.js b/ui/dev-dist/sw.js index 3c7e9b2c..c428ae47 100644 --- a/ui/dev-dist/sw.js +++ b/ui/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-a959eb95'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "/index.html", - "revision": "0.h99odp2o5hg" + "revision": "0.0c8gpen89r8" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("/index.html"), { diff --git a/ui/src/proxy/form/models.ts b/ui/src/proxy/form/models.ts index b1d92726..fb52ec98 100644 --- a/ui/src/proxy/form/models.ts +++ b/ui/src/proxy/form/models.ts @@ -478,6 +478,8 @@ export interface GridOptionsDto extends AuditedEntityDto { isSubForm: boolean subFormsJson?: string subFormsDto: SubFormDto[] + extraFilterJson?: string + extraFilterDto: ExtraFilterDto[] } export interface GridOptionsEditDto extends GridOptionsDto, Record { @@ -722,3 +724,16 @@ export interface WidgetEditDto { subTitle: string onClick: string } + +export interface ExtraFilterDto { + fieldName: string + caption: string + operator: string + defaultValue?: string + items: ExtraFilterItemsDto[] +} + +export interface ExtraFilterItemsDto { + value: string + text: string +} diff --git a/ui/src/shared/useListFormCustomDataSource.ts b/ui/src/shared/useListFormCustomDataSource.ts index 711af741..89e6fda5 100644 --- a/ui/src/shared/useListFormCustomDataSource.ts +++ b/ui/src/shared/useListFormCustomDataSource.ts @@ -31,11 +31,24 @@ const useListFormCustomDataSource = ({ load: async (loadOptions) => { const parameters = getLoadOptions(loadOptions, { listFormCode, - filter: searchParams?.get('filter'), + filter: '', createDeleteQuery: searchParams?.get('createDeleteQuery'), group: '', }) + // 1. Default filter'ı al + const defaultFilter = searchParams?.get('filter') + ? JSON.parse(searchParams.get('filter')!) + : null + + let combinedFilter: any = parameters.filter + + // 2. Eğer hem default hem de grid filter varsa merge et + if (defaultFilter && combinedFilter) { + combinedFilter = [defaultFilter, 'and', combinedFilter] + } else if (defaultFilter) { + combinedFilter = defaultFilter + } //editing asamasinda her bir field de yapilan degisiklik load istegi olarak buraya dusuyor. //TODO: bu bug halen devam ediyor!! //Bunu engellemek icin eklendi. @@ -69,7 +82,8 @@ const useListFormCustomDataSource = ({ } } } - parameters.filter = JSON.stringify(parameters.filter) + parameters.filter = JSON.stringify(combinedFilter) + //parameters.filter = JSON.stringify(parameters.filter) const response = await dynamicFetch('list-form-select/select', 'GET', parameters) if (setWidgetGroups) setWidgetGroups(response.data.widgets ?? []) @@ -145,11 +159,24 @@ const useListFormCustomDataSource = ({ totalCount: async (loadOptions) => { const parameters = getLoadOptions(loadOptions, { listFormCode, - filter: searchParams?.get('filter'), + filter: '', createDeleteQuery: searchParams?.get('createDeleteQuery'), group: '', }) - parameters.filter = JSON.stringify(parameters.filter) + + const defaultFilter = searchParams?.get('filter') + ? JSON.parse(searchParams.get('filter')!) + : null + + let combinedFilter: any = parameters.filter + if (defaultFilter && combinedFilter) { + combinedFilter = [defaultFilter, 'and', combinedFilter] + } else if (defaultFilter) { + combinedFilter = defaultFilter + } + + parameters.filter = JSON.stringify(combinedFilter) + try { const response = await dynamicFetch('list-form-select/select', 'GET', parameters) return response.data.totalCount diff --git a/ui/src/views/forum/Forum.tsx b/ui/src/views/forum/Forum.tsx index 5c35d6b8..9bcf608d 100644 --- a/ui/src/views/forum/Forum.tsx +++ b/ui/src/views/forum/Forum.tsx @@ -10,7 +10,7 @@ import { useLocalization } from '@/utils/hooks/useLocalization' export function Forum() { const { translate } = useLocalization() - const { user, tenant } = useStoreState((state) => state.auth) + const { user } = useStoreState((state) => state.auth) const { categories, topics, diff --git a/ui/src/views/list/Grid.tsx b/ui/src/views/list/Grid.tsx index 72159273..73d05fe3 100644 --- a/ui/src/views/list/Grid.tsx +++ b/ui/src/views/list/Grid.tsx @@ -51,7 +51,7 @@ import { useCallback, useEffect, useRef, useState } from 'react' import { Helmet } from 'react-helmet' import SubForms from '../form/SubForms' import { RowMode, SimpleItemWithColData } from '../form/types' -import { GridColumnData } from './GridColumnData' +import { GridColumnData, GridExtraFilterState } from './GridColumnData' import GridFilterDialogs from './GridFilterDialogs' import { addCss, @@ -66,6 +66,7 @@ import { useFilters } from './useFilters' import { useToolbar } from './useToolbar' import { ImportDashboard } from '@/components/importManager/ImportDashboard' import WidgetGroup from '@/components/ui/Widget/WidgetGroup' +import { GridExtraFilterToolbar } from './GridExtraFilterToolbar' interface GridProps { listFormCode: string @@ -91,6 +92,7 @@ const Grid = (props: GridProps) => { const [formData, setFormData] = useState() const [mode, setMode] = useState('view') const [widgetGroups, setWidgetGroups] = useState([]) + const [extraFilters, setExtraFilters] = useState([]) const preloadExportLibs = () => { import('exceljs') @@ -107,6 +109,8 @@ const Grid = (props: GridProps) => { getSelectedRowsData, refreshData, getFilter, + extraFilters, + setExtraFilters, }) const { filterToolbarData, ...filterData } = useFilters({ @@ -401,6 +405,22 @@ const Grid = (props: GridProps) => { const cols = getBandedColumns() setColumnData(cols) + // Filters'i AND ile birleştir + let filterArray: any[] = [] + extraFilters.forEach((f) => { + if (f.value) { + if (filterArray.length > 0) { + filterArray.push('and') + } + filterArray.push([f.fieldName, f.operator, f.value]) + } + }) + + const params = new URLSearchParams() + if (filterArray.length > 0) { + params.set('filter', JSON.stringify(filterArray)) + } + // Set data source const dataSource: CustomStore = createSelectDataSource( gridDto.gridOptions, @@ -507,10 +527,81 @@ const Grid = (props: GridProps) => { } } + useEffect(() => { + if (gridDto?.gridOptions.extraFilterDto) { + setExtraFilters( + gridDto.gridOptions.extraFilterDto.map((f) => ({ + fieldName: f.fieldName, + operator: f.operator, + value: f.defaultValue ?? '', + })), + ) + } + }, [gridDto]) + + useEffect(() => { + if (!searchParams) return + + // aktif filtreleri al + const activeFilters = extraFilters.filter((f) => f.value) + + let filter: any = null + if (activeFilters.length === 1) { + // tek filtre -> düz array + const f = activeFilters[0] + filter = [f.fieldName, f.operator, f.value] + } else if (activeFilters.length > 1) { + // birden fazla filtre -> and ile bağla + filter = activeFilters.reduce((acc, f, idx) => { + if (idx === 0) return [f.fieldName, f.operator, f.value] + return [acc, 'and', [f.fieldName, f.operator, f.value]] + }, null as any) + } + + if (filter) { + searchParams.set('filter', JSON.stringify(filter)) + } else { + searchParams.delete('filter') + } + + gridRef.current?.instance.refresh() + }, [extraFilters, searchParams]) + return ( <> + {/* {gridDto?.gridOptions.extraFilterDto && ( +
+ {gridDto?.gridOptions.extraFilterDto?.map((fs) => { + const current = extraFilters.find((f) => f.fieldName === fs.fieldName) + + return ( +
+ + +
+ ) + })} +
+ )} */} + {!isSubForm && ( { > )} {gridDto && columnData && ( -
- { - setMode('view') - }} - onSaved={() => { - setMode('view') - }} - onRowInserted={() => { - props.refreshData?.() - }} - onRowUpdated={() => { - props.refreshData?.() - }} - onRowRemoved={() => { - props.refreshData?.() - }} - > - - +
+ { + setMode('view') }} - form={{ - items: - gridDto.gridOptions.editingFormDto?.length > 0 - ? gridDto.gridOptions.editingFormDto - ?.sort((a: any, b: any) => { - return a.order >= b.order ? 1 : -1 - }) - .map((e: any) => { - return { - itemType: e.itemType, - colCount: e.colCount, - colSpan: e.colSpan, - caption: e.caption, - items: e.items - ?.sort((a: any, b: any) => { - return a.order >= b.order ? 1 : -1 - }) - .map((i: EditingFormItemDto) => { - let editorOptions = {} - try { - editorOptions = i.editorOptions && JSON.parse(i.editorOptions) + onSaved={() => { + setMode('view') + }} + onRowInserted={() => { + props.refreshData?.() + }} + onRowUpdated={() => { + props.refreshData?.() + }} + onRowRemoved={() => { + props.refreshData?.() + }} + > + + 0 + ? gridDto.gridOptions.editingFormDto + ?.sort((a: any, b: any) => { + return a.order >= b.order ? 1 : -1 + }) + .map((e: any) => { + return { + itemType: e.itemType, + colCount: e.colCount, + colSpan: e.colSpan, + caption: e.caption, + items: e.items + ?.sort((a: any, b: any) => { + return a.order >= b.order ? 1 : -1 + }) + .map((i: EditingFormItemDto) => { + let editorOptions = {} + try { + editorOptions = i.editorOptions && JSON.parse(i.editorOptions) - // Eğer default value varsa, bu editörü readonly yapıyoruz - if (searchParams?.has(i.dataField)) { + // Eğer default value varsa, bu editörü readonly yapıyoruz + if (searchParams?.has(i.dataField)) { + editorOptions = { + ...editorOptions, + readOnly: true, + } + } + } catch {} + const fieldName = i.dataField.split(':')[0] + const listFormField = gridDto.columnFormats.find( + (x: any) => x.fieldName === fieldName, + ) + if (listFormField?.sourceDbType === DbTypeEnum.Date) { editorOptions = { + ...{ + type: 'date', + dateSerializationFormat: 'yyyy-MM-dd', + displayFormat: 'shortDate', + }, ...editorOptions, + } + } else if ( + listFormField?.sourceDbType === DbTypeEnum.DateTime || + listFormField?.sourceDbType === DbTypeEnum.DateTime2 || + listFormField?.sourceDbType === DbTypeEnum.DateTimeOffset + ) { + editorOptions = { + ...{ + type: 'datetime', + dateSerializationFormat: 'yyyy-MM-ddTHH:mm:ssxxx', + displayFormat: 'shortDateShortTime', + }, + ...editorOptions, + } + } + const item: SimpleItemWithColData = { + canRead: listFormField?.canRead ?? false, + canUpdate: listFormField?.canUpdate ?? false, + canCreate: listFormField?.canCreate ?? false, + canExport: listFormField?.canExport ?? false, + dataField: i.dataField, + name: i.dataField, + editorType2: i.editorType2, + editorType: + i.editorType2 == PlatformEditorTypes.dxGridBox + ? 'dxDropDownBox' + : i.editorType2, + colSpan: i.colSpan, + isRequired: i.isRequired, + editorOptions, + } + if (i.dataField.indexOf(':') >= 0) { + item.label = { text: captionize(i.dataField.split(':')[1]) } + } + if ( + (mode == 'edit' && !item.canUpdate) || + (mode == 'new' && !item.canCreate) + ) { + item.editorOptions = { + ...item.editorOptions, readOnly: true, } } - } catch {} - const fieldName = i.dataField.split(':')[0] - const listFormField = gridDto.columnFormats.find( - (x: any) => x.fieldName === fieldName, - ) - if (listFormField?.sourceDbType === DbTypeEnum.Date) { - editorOptions = { - ...{ - type: 'date', - dateSerializationFormat: 'yyyy-MM-dd', - displayFormat: 'shortDate', - }, - ...editorOptions, - } - } else if ( - listFormField?.sourceDbType === DbTypeEnum.DateTime || - listFormField?.sourceDbType === DbTypeEnum.DateTime2 || - listFormField?.sourceDbType === DbTypeEnum.DateTimeOffset - ) { - editorOptions = { - ...{ - type: 'datetime', - dateSerializationFormat: 'yyyy-MM-ddTHH:mm:ssxxx', - displayFormat: 'shortDateShortTime', - }, - ...editorOptions, - } - } - const item: SimpleItemWithColData = { - canRead: listFormField?.canRead ?? false, - canUpdate: listFormField?.canUpdate ?? false, - canCreate: listFormField?.canCreate ?? false, - canExport: listFormField?.canExport ?? false, - dataField: i.dataField, - name: i.dataField, - editorType2: i.editorType2, - editorType: - i.editorType2 == PlatformEditorTypes.dxGridBox - ? 'dxDropDownBox' - : i.editorType2, - colSpan: i.colSpan, - isRequired: i.isRequired, - editorOptions, - } - if (i.dataField.indexOf(':') >= 0) { - item.label = { text: captionize(i.dataField.split(':')[1]) } - } - if ( - (mode == 'edit' && !item.canUpdate) || - (mode == 'new' && !item.canCreate) - ) { - item.editorOptions = { - ...item.editorOptions, - readOnly: true, - } - } - return item - }) - .filter((a: any) => { - // return a.canRead - if (mode === 'view') { - return a.canRead - } else if (mode === 'new') { - return a.canCreate || a.canRead - } else if (mode === 'edit') { - return a.canUpdate || a.canRead - } else { - return false - } - }), - } as GroupItem - }) - : undefined, - }} - > -