@@ -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