@@ -4,7 +4,7 @@ import { useMemo, useRef, useState, useEffect } from 'react';
4
4
import { parentsUntil , ValueType , FilterBarMode , CheckboxSelectionType , SelectionType , CommandModel , FailureEventArgs , ContextMenuClickEventArgs , getObject } from '@syncfusion/ej2-react-grids' ;
5
5
import { TreeGridComponent , FilterType , LoadingIndicatorModel , AggregateTemplateContext , RowPosition , AggregatesDirective , AggregateDirective , AggregateColumnsDirective , AggregateColumnDirective , ColumnModel , FilterHierarchyMode , SelectionSettingsModel , ContextMenuItem , ToolbarItems , FilterSettingsModel , EditMode , TreeGridColumn , RowDD , Aggregate , Resize , Toolbar , ColumnChooser , CommandColumn , Edit , ContextMenu , ColumnMenu , VirtualScroll , Page , PdfExport , ExcelExport , Freeze , ColumnsDirective , ColumnDirective , Filter , Sort , Reorder , Inject , ITreeData } from '@syncfusion/ej2-react-treegrid' ;
6
6
import { projectDetails } from './datasource' ;
7
- import { ButtonComponent , CheckBoxComponent , ChipListComponent , ChipsDirective , ChipDirective } from '@syncfusion/ej2-react-buttons' ;
7
+ import { ButtonComponent , CheckBoxComponent , ChipListComponent , ChipsDirective , ChipDirective , ChangeEventArgs } from '@syncfusion/ej2-react-buttons' ;
8
8
import { AppBarComponent , MenuComponent , SidebarComponent } from '@syncfusion/ej2-react-navigations' ;
9
9
import { AutoComplete , FieldSettingsModel } from '@syncfusion/ej2-react-dropdowns' ;
10
10
import { isNullOrUndefined , DateFormatOptions , createElement , closest } from '@syncfusion/ej2-base' ;
@@ -43,7 +43,7 @@ export const App = () => {
43
43
let selectionType : string = "Multiple" ;
44
44
let selectNewRowPosition : string = "Top" ;
45
45
let selectEditMode : string = "Row" ;
46
- const dateRules : object = { date : [ 'M/d/yyyy' , 'Please enter a valid date' ] } ;
46
+ const dateRules : object = { date : [ 'M/d/yyyy' , 'Please enter a valid date' ] , required : true } ;
47
47
let dateParams : any = { params : { format : 'M/d/yyyy' } } ;
48
48
let showEditLabel : boolean = false ;
49
49
const durationIDRules : object = { required : true , number : true } ;
@@ -84,6 +84,10 @@ export const App = () => {
84
84
let menuObj : MenuComponent ;
85
85
const taskIDRules = { required : true } ;
86
86
const taskNameRules = { required : true } ;
87
+ let dateFormat = {
88
+ format : "dd/MM/yyyy" ,
89
+ type : "date"
90
+ } ;
87
91
const costRules = { required : true , number : true } ;
88
92
let menuRef ! : MenuComponent ;
89
93
let menuMobileRef ! : MenuComponent ;
@@ -430,6 +434,7 @@ export const App = () => {
430
434
filterBarTypeOptions : [
431
435
{ value : "CheckBox" , text : "CheckBox" } ,
432
436
{ value : "Excel" , text : "Excel" } ,
437
+ { value : "Menu" , text : "Menu" } ,
433
438
{ value : "FilterBar" , text : "FilterBar" }
434
439
] ,
435
440
filterHierarchyOptions : [
@@ -927,6 +932,19 @@ export const App = () => {
927
932
startWalkthrough ( ) ;
928
933
} ,
929
934
935
+ onDataBound : ( ) => {
936
+ if ( treegridInst ) {
937
+ if ( treegridInst . filterSettings . type === "FilterBar" ) {
938
+ document . querySelectorAll ( '.e-filterbar th[e-mappinguid="grid-column10005"], .e-filterbar th[e-mappinguid="grid-column10004"], .e-filterbar th[e-mappinguid="grid-column10012"], .e-filterbar th[e-mappinguid="grid-column10008"], .e-filterbar th[e-mappinguid="grid-column10007"]' ) . forEach ( cell => {
939
+ var val : any = ( cell as any ) . querySelector ( 'div.e-fltrinputdiv' ) ;
940
+ if ( ! isNullOrUndefined ( val ) ) {
941
+ val . style . display = "none" ;
942
+ }
943
+ } ) ;
944
+ }
945
+ }
946
+ } ,
947
+
930
948
exportComplete :( args : any ) => {
931
949
treegridInst . showColumns ( [ 'Priority' ] ) ;
932
950
} ,
@@ -989,7 +1007,7 @@ export const App = () => {
989
1007
textboxInstance . value = "" ;
990
1008
dialogInstance ! . hide ( ) ;
991
1009
} else if ( args . target . textContent === "Search" ) {
992
- if ( selectedField && selectedOperator && selectedHierarchy ) {
1010
+ if ( selectedField && selectedOperator && selectedHierarchy && ! isNullOrUndefined ( searchText ) ) {
993
1011
treegridInst . searchSettings = {
994
1012
fields : [ selectedField ] ,
995
1013
operator : selectedOperator ,
@@ -1351,20 +1369,40 @@ export const App = () => {
1351
1369
}
1352
1370
} ,
1353
1371
1354
- singleColumnSettingsDateFormat : ( ( args : any ) => {
1372
+ singleColumnSettingsDateFormat : ( ( args : any ) => {
1355
1373
let columns = treegridInst . getColumns ( ) ;
1356
1374
for ( let i = 0 ; i < columns . length ; i ++ ) {
1357
1375
if ( columns [ i ] . field === 'EndDate' ) {
1376
+ const aggregate = treegridInst . aggregates [ 0 ] ;
1377
+ if ( aggregate && aggregate . columns ) {
1378
+ const endDateAggregate = aggregate . columns . find ( col => col . field === 'EndDate' ) ;
1379
+ if ( endDateAggregate ) {
1380
+ endDateAggregate . format = { format : args . event . currentTarget . innerText , type : 'date' } ;
1381
+ }
1382
+ }
1358
1383
if ( typeof treegridInst . getColumns ( ) [ i ] . format === 'string' || ! treegridInst . getColumns ( ) [ i ] . format ) {
1359
1384
treegridInst . getColumns ( ) [ i ] . format = { format : '' , type : 'date' } ;
1360
- }
1385
+ }
1361
1386
( treegridInst . getColumns ( ) [ i ] . format as DateFormatOptions ) . format = args . event . currentTarget . innerText ;
1362
1387
( treegridInst . getColumns ( ) [ i ] . format as DateFormatOptions ) . type = 'date' ;
1363
- treegridInst . refreshColumns ( ) ;
1388
+ treegridInst . columns = columns ;
1364
1389
}
1365
1390
}
1366
1391
} ) ,
1367
1392
1393
+
1394
+ singleColumnSettingsFreeze : ( ( args : any , data ?: any ) => {
1395
+ if ( treegridInst ) {
1396
+ let columns = treegridInst . getColumns ( ) ;
1397
+ columns . forEach ( ( col ) => {
1398
+ if ( col . field === "EndDate" ) {
1399
+ col . freeze = data . properties . text ;
1400
+ treegridInst . columns = columns ;
1401
+ }
1402
+ } ) ;
1403
+ }
1404
+ } ) ,
1405
+
1368
1406
handleFilterTypeChange : ( value : any , dropRef : any ) => {
1369
1407
const barstatusElement = document . getElementById ( "barstatus" ) ;
1370
1408
const filterbarmodeElement = document . getElementById ( "filterbarmode" ) ;
@@ -1481,12 +1519,25 @@ export const App = () => {
1481
1519
text : 'Column Date' ,
1482
1520
iconCss : 'e-icons e-settings icon' ,
1483
1521
items : [
1522
+ {
1523
+ text : 'Format' ,
1524
+ items : [
1484
1525
{ text : 'yMMM' , id :'yMMM' , method : menuItemMethods . singleColumnSettingsDateFormat , checkbox : false } ,
1485
1526
{ text : 'dd/MM/yyyy' , id : 'dd/MM/yyyy' , method : menuItemMethods . singleColumnSettingsDateFormat , checkbox : true } ,
1486
1527
{ text : 'dd.MM.yyyy' , id : 'dd.MM.yyyy' , method : menuItemMethods . singleColumnSettingsDateFormat , checkbox : false } ,
1487
1528
{ text : 'dd/MM/yyyy hh:mm a' , id : 'dd/MM/yyyy hh:mm a' , method : menuItemMethods . singleColumnSettingsDateFormat , checkbox : false } ,
1488
1529
{ text : 'MM/dd/yyyy hh:mm:ss a' , id : 'MM/dd/yyyy hh:mm:ss a' , method : menuItemMethods . singleColumnSettingsDateFormat , checkbox : false } ,
1489
1530
]
1531
+ } , {
1532
+ text : 'Freeze' ,
1533
+ items : [
1534
+ { text : 'Left' , id : 'Freeze Left' , method : menuItemMethods . singleColumnSettingsFreeze , checkbox : true } ,
1535
+ { text : 'Right' , id : 'Freeze Right' , method : menuItemMethods . singleColumnSettingsFreeze , checkbox : false } ,
1536
+ { text : 'Fixed' , id : 'Freeze Fixed' , method : menuItemMethods . singleColumnSettingsFreeze , checkbox : false } ,
1537
+ { text : 'None' , id : 'Freeze None' , method : menuItemMethods . singleColumnSettingsFreeze , checkbox : false } ,
1538
+ ]
1539
+ }
1540
+ ] ,
1490
1541
} ,
1491
1542
] ,
1492
1543
} ;
@@ -1510,6 +1561,7 @@ export const App = () => {
1510
1561
items : [
1511
1562
{ id : 'selection' , label : 'Allow Selection' , defaultChecked : true } ,
1512
1563
{ id : 'textwrap' , label : 'Allow Text Wrap' , defaultChecked : false } ,
1564
+ { id : 'paging' , label : 'Allow Paging' , defaultChecked : true } ,
1513
1565
{ id : 'showcolumnmenu' , label : 'Show Column Menu' , defaultChecked : false } ,
1514
1566
{ id : 'general_treegrid' , type : 'Separator' }
1515
1567
]
@@ -2042,6 +2094,8 @@ export const App = () => {
2042
2094
}
2043
2095
else if ( selectedListItemRef . current === "Tree Grid Settings" ) {
2044
2096
treegridInst . allowTextWrap = prev . textwrap ;
2097
+ treegridInst . allowPaging = prev . paging ;
2098
+ treegridInst . enableVirtualization = ! prev . paging ;
2045
2099
treegridInst . showColumnMenu = prev . showcolumnmenu ;
2046
2100
treegridInst . enableAltRow = prev . altrow ;
2047
2101
if ( treegridInst . enableAltRow ) {
@@ -2284,7 +2338,6 @@ export const App = () => {
2284
2338
allowSorting : false ,
2285
2339
headerTemplate : treegridCommonTemplates . durationTemplate ,
2286
2340
validationRules : durationIDRules ,
2287
- filterTemplate : treegridFilterTemplates . filterTemplate ,
2288
2341
editType : "numericedit" ,
2289
2342
minWidth : 50 ,
2290
2343
maxWidth : 200
@@ -2330,19 +2383,20 @@ export const App = () => {
2330
2383
actionBegin = { handleTreeGridEvent . actionBegin }
2331
2384
toolbarClick = { handleTreeGridEvent . toolbarClick }
2332
2385
created = { handleTreeGridEvent . onTreeGridCreated }
2386
+ dataBound = { handleTreeGridEvent . onDataBound }
2333
2387
excelExportComplete = { handleTreeGridEvent . exportComplete }
2334
2388
>
2335
2389
< ColumnsDirective >
2336
2390
< ColumnDirective type = 'checkbox' width = { 40 } allowEditing = { false } minWidth = { 35 } maxWidth = { 80 } />
2337
2391
< ColumnDirective field = "TaskID" headerTextAlign = 'Center' validationRules = { taskIDRules } disableHtmlEncode = { false } isPrimaryKey = { true } minWidth = { 135 } width = { 145 } maxWidth = { 165 } filterBarTemplate = { treegridFilterTemplates . taskIDFilter } headerText = "Task ID" template = { customComponentTemplates . taskTemplate } />
2338
2392
< ColumnDirective field = "TaskName" headerTextAlign = "Center" validationRules = { taskNameRules } allowFiltering = { true } filterBarTemplate = { treegridFilterTemplates . taskNameFilter } allowSorting = { false } showColumnMenu = { false } headerTemplate = { treegridCommonTemplates . taskNameSettings } width = { 200 } minWidth = { 190 } maxWidth = { 220 } />
2339
2393
< ColumnDirective headerText = 'Project Details' textAlign = 'Center' headerTextAlign = "Center" columns = { treegridProperties . projectColumns } />
2340
- < ColumnDirective field = "Progress" validationRules = { costRules } allowSorting = { false } headerTextAlign = "Center" showColumnMenu = { false } headerTemplate = { treegridCommonTemplates . progressSettings } headerText = "Progress (%)" template = { treegridCommonTemplates . progressTemplate } width = { 170 } minWidth = { 160 } maxWidth = { 200 } filterTemplate = { treegridFilterTemplates . filterTemplate } />
2341
- < ColumnDirective field = "Priority" headerTextAlign = "Center" minWidth = { 120 } maxWidth = { 270 } width = { 190 } textAlign = "Center" filterTemplate = { treegridFilterTemplates . filterTemplate } editType = 'dropdownedit' template = { treegridCommonTemplates . priorityTemplate } />
2394
+ < ColumnDirective field = "Progress" validationRules = { costRules } allowSorting = { false } headerTextAlign = "Center" showColumnMenu = { false } headerTemplate = { treegridCommonTemplates . progressSettings } headerText = "Progress (%)" template = { treegridCommonTemplates . progressTemplate } width = { 170 } minWidth = { 160 } maxWidth = { 200 } />
2395
+ < ColumnDirective field = "Priority" headerTextAlign = "Center" minWidth = { 120 } maxWidth = { 270 } width = { 190 } textAlign = "Center" editType = 'dropdownedit' template = { treegridCommonTemplates . priorityTemplate } />
2342
2396
< ColumnDirective field = "EstimatedCost" validationRules = { costRules } format = "C0" allowSorting = { false } type = 'number' textAlign = 'Right' headerTextAlign = "Center" showColumnMenu = { false } headerTemplate = { treegridCommonTemplates . estimatedCostSettings } width = { 150 } minWidth = { 60 } maxWidth = { 250 } filterBarTemplate = { treegridFilterTemplates . templateOptionsCostTextBox } />
2343
2397
< ColumnDirective field = "ActualCost" validationRules = { costRules } allowSorting = { false } format = "C0" type = 'number' textAlign = 'Right' headerTextAlign = "Center" showColumnMenu = { false } headerTemplate = { treegridCommonTemplates . actualCostSettings } width = { 150 } minWidth = { 60 } maxWidth = { 250 } filterBarTemplate = { treegridFilterTemplates . templateOptionsCostTextBox } />
2344
2398
< ColumnDirective field = "CostDifference" validationRules = { costRules } headerTextAlign = "Center" headerText = 'Cost Comparison' width = { 180 } minWidth = { 155 } maxWidth = { 250 } template = { treegridCommonTemplates . costComparisonTemplate } > </ ColumnDirective >
2345
- < ColumnDirective headerText = 'Command' filterTemplate = { treegridFilterTemplates . filterTemplate } freeze = "Right" headerTextAlign = "Center" textAlign = 'Center' width = { 120 } minWidth = { 110 } maxWidth = { 250 } commands = { treegridProperties . commands } />
2399
+ < ColumnDirective headerText = 'Command' freeze = "Right" headerTextAlign = "Center" textAlign = 'Center' width = { 120 } minWidth = { 110 } maxWidth = { 250 } commands = { treegridProperties . commands } />
2346
2400
</ ColumnsDirective >
2347
2401
< AggregatesDirective >
2348
2402
< AggregateDirective showChildSummary = { false } >
0 commit comments