@@ -4,7 +4,7 @@ import { useMemo, useRef, useState, useEffect } from 'react';
44import { parentsUntil , ValueType , FilterBarMode , CheckboxSelectionType , SelectionType , CommandModel , FailureEventArgs , ContextMenuClickEventArgs , getObject } from '@syncfusion/ej2-react-grids' ;
55import { 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' ;
66import { 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' ;
88import { AppBarComponent , MenuComponent , SidebarComponent } from '@syncfusion/ej2-react-navigations' ;
99import { AutoComplete , FieldSettingsModel } from '@syncfusion/ej2-react-dropdowns' ;
1010import { isNullOrUndefined , DateFormatOptions , createElement , closest } from '@syncfusion/ej2-base' ;
@@ -43,7 +43,7 @@ export const App = () => {
4343 let selectionType : string = "Multiple" ;
4444 let selectNewRowPosition : string = "Top" ;
4545 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 } ;
4747 let dateParams : any = { params : { format : 'M/d/yyyy' } } ;
4848 let showEditLabel : boolean = false ;
4949 const durationIDRules : object = { required : true , number : true } ;
@@ -84,6 +84,10 @@ export const App = () => {
8484 let menuObj : MenuComponent ;
8585 const taskIDRules = { required : true } ;
8686 const taskNameRules = { required : true } ;
87+ let dateFormat = {
88+ format : "dd/MM/yyyy" ,
89+ type : "date"
90+ } ;
8791 const costRules = { required : true , number : true } ;
8892 let menuRef ! : MenuComponent ;
8993 let menuMobileRef ! : MenuComponent ;
@@ -430,6 +434,7 @@ export const App = () => {
430434 filterBarTypeOptions : [
431435 { value : "CheckBox" , text : "CheckBox" } ,
432436 { value : "Excel" , text : "Excel" } ,
437+ { value : "Menu" , text : "Menu" } ,
433438 { value : "FilterBar" , text : "FilterBar" }
434439 ] ,
435440 filterHierarchyOptions : [
@@ -927,6 +932,19 @@ export const App = () => {
927932 startWalkthrough ( ) ;
928933 } ,
929934
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+
930948 exportComplete :( args : any ) => {
931949 treegridInst . showColumns ( [ 'Priority' ] ) ;
932950 } ,
@@ -989,7 +1007,7 @@ export const App = () => {
9891007 textboxInstance . value = "" ;
9901008 dialogInstance ! . hide ( ) ;
9911009 } else if ( args . target . textContent === "Search" ) {
992- if ( selectedField && selectedOperator && selectedHierarchy ) {
1010+ if ( selectedField && selectedOperator && selectedHierarchy && ! isNullOrUndefined ( searchText ) ) {
9931011 treegridInst . searchSettings = {
9941012 fields : [ selectedField ] ,
9951013 operator : selectedOperator ,
@@ -1351,20 +1369,40 @@ export const App = () => {
13511369 }
13521370 } ,
13531371
1354- singleColumnSettingsDateFormat : ( ( args : any ) => {
1372+ singleColumnSettingsDateFormat : ( ( args : any ) => {
13551373 let columns = treegridInst . getColumns ( ) ;
13561374 for ( let i = 0 ; i < columns . length ; i ++ ) {
13571375 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+ }
13581383 if ( typeof treegridInst . getColumns ( ) [ i ] . format === 'string' || ! treegridInst . getColumns ( ) [ i ] . format ) {
13591384 treegridInst . getColumns ( ) [ i ] . format = { format : '' , type : 'date' } ;
1360- }
1385+ }
13611386 ( treegridInst . getColumns ( ) [ i ] . format as DateFormatOptions ) . format = args . event . currentTarget . innerText ;
13621387 ( treegridInst . getColumns ( ) [ i ] . format as DateFormatOptions ) . type = 'date' ;
1363- treegridInst . refreshColumns ( ) ;
1388+ treegridInst . columns = columns ;
13641389 }
13651390 }
13661391 } ) ,
13671392
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+
13681406 handleFilterTypeChange : ( value : any , dropRef : any ) => {
13691407 const barstatusElement = document . getElementById ( "barstatus" ) ;
13701408 const filterbarmodeElement = document . getElementById ( "filterbarmode" ) ;
@@ -1481,12 +1519,25 @@ export const App = () => {
14811519 text : 'Column Date' ,
14821520 iconCss : 'e-icons e-settings icon' ,
14831521 items : [
1522+ {
1523+ text : 'Format' ,
1524+ items : [
14841525 { text : 'yMMM' , id :'yMMM' , method : menuItemMethods . singleColumnSettingsDateFormat , checkbox : false } ,
14851526 { text : 'dd/MM/yyyy' , id : 'dd/MM/yyyy' , method : menuItemMethods . singleColumnSettingsDateFormat , checkbox : true } ,
14861527 { text : 'dd.MM.yyyy' , id : 'dd.MM.yyyy' , method : menuItemMethods . singleColumnSettingsDateFormat , checkbox : false } ,
14871528 { text : 'dd/MM/yyyy hh:mm a' , id : 'dd/MM/yyyy hh:mm a' , method : menuItemMethods . singleColumnSettingsDateFormat , checkbox : false } ,
14881529 { text : 'MM/dd/yyyy hh:mm:ss a' , id : 'MM/dd/yyyy hh:mm:ss a' , method : menuItemMethods . singleColumnSettingsDateFormat , checkbox : false } ,
14891530 ]
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+ ] ,
14901541 } ,
14911542 ] ,
14921543 } ;
@@ -1510,6 +1561,7 @@ export const App = () => {
15101561 items : [
15111562 { id : 'selection' , label : 'Allow Selection' , defaultChecked : true } ,
15121563 { id : 'textwrap' , label : 'Allow Text Wrap' , defaultChecked : false } ,
1564+ { id : 'paging' , label : 'Allow Paging' , defaultChecked : true } ,
15131565 { id : 'showcolumnmenu' , label : 'Show Column Menu' , defaultChecked : false } ,
15141566 { id : 'general_treegrid' , type : 'Separator' }
15151567 ]
@@ -2042,6 +2094,8 @@ export const App = () => {
20422094 }
20432095 else if ( selectedListItemRef . current === "Tree Grid Settings" ) {
20442096 treegridInst . allowTextWrap = prev . textwrap ;
2097+ treegridInst . allowPaging = prev . paging ;
2098+ treegridInst . enableVirtualization = ! prev . paging ;
20452099 treegridInst . showColumnMenu = prev . showcolumnmenu ;
20462100 treegridInst . enableAltRow = prev . altrow ;
20472101 if ( treegridInst . enableAltRow ) {
@@ -2284,7 +2338,6 @@ export const App = () => {
22842338 allowSorting : false ,
22852339 headerTemplate : treegridCommonTemplates . durationTemplate ,
22862340 validationRules : durationIDRules ,
2287- filterTemplate : treegridFilterTemplates . filterTemplate ,
22882341 editType : "numericedit" ,
22892342 minWidth : 50 ,
22902343 maxWidth : 200
@@ -2330,19 +2383,20 @@ export const App = () => {
23302383 actionBegin = { handleTreeGridEvent . actionBegin }
23312384 toolbarClick = { handleTreeGridEvent . toolbarClick }
23322385 created = { handleTreeGridEvent . onTreeGridCreated }
2386+ dataBound = { handleTreeGridEvent . onDataBound }
23332387 excelExportComplete = { handleTreeGridEvent . exportComplete }
23342388 >
23352389 < ColumnsDirective >
23362390 < ColumnDirective type = 'checkbox' width = { 40 } allowEditing = { false } minWidth = { 35 } maxWidth = { 80 } />
23372391 < 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 } />
23382392 < 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 } />
23392393 < 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 } />
23422396 < 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 } />
23432397 < 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 } />
23442398 < 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 } />
23462400 </ ColumnsDirective >
23472401 < AggregatesDirective >
23482402 < AggregateDirective showChildSummary = { false } >
0 commit comments