@@ -332,59 +332,53 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy, AfterView
332332 }
333333
334334 public populateColumnData ( ) {
335- if ( this . grid . loadExcelStyleUniqueValuesOnDemand ) {
336- this . loadValuesOnDemand ( ) ;
335+ if ( this . grid . uniqueColumnValuesStrategy ) {
336+ this . renderColumnValuesRemotely ( ) ;
337337 } else {
338- this . loadValuesFromGridData ( ) ;
338+ this . renderColumnValuesFromData ( ) ;
339339 }
340340 }
341341
342- private loadValuesOnDemand ( ) {
342+ private renderColumnValuesRemotely ( ) {
343343 this . excelStyleSearch . isLoading = true ;
344- this . grid . loadExcelStyleUniqueValuesOnDemand ( this . column , ( columnUniqueValues : any [ ] ) => {
345- if ( this . column . dataType === DataType . Date ) {
346- this . uniqueValues = Array . from ( new Set ( columnUniqueValues . map ( val => val ? val . toDateString ( ) : val ) ) ) ;
347- this . generateFilterValues ( true ) ;
348- } else {
349- this . uniqueValues = Array . from ( new Set ( columnUniqueValues ) ) ;
350- this . generateFilterValues ( ) ;
351- }
352- this . generateListData ( ) ;
344+ const expressionsTree : FilteringExpressionsTree = this . getColumnFilterExpressionsTree ( ) ;
345+
346+ this . grid . uniqueColumnValuesStrategy ( this . column , expressionsTree , ( colVals : any [ ] ) => {
347+ const columnValues = ( this . column . dataType === DataType . Date ) ?
348+ colVals . map ( val => val ? val . toDateString ( ) : val ) : colVals ;
349+
350+ this . renderValues ( columnValues ) ;
353351 this . excelStyleSearch . isLoading = false ;
354352 } ) ;
355353 }
356354
357- public loadValuesFromGridData ( ) {
355+ public renderColumnValuesFromData ( ) {
358356 let data = this . column . gridAPI . get_all_data ( this . grid . id ) ;
359- const gridExpressionsTree : IFilteringExpressionsTree = this . grid . filteringExpressionsTree ;
360- const expressionsTree = new FilteringExpressionsTree ( gridExpressionsTree . operator , gridExpressionsTree . fieldName ) ;
361-
362- for ( const operand of gridExpressionsTree . filteringOperands ) {
363- if ( operand instanceof FilteringExpressionsTree ) {
364- const columnExprTree = operand as FilteringExpressionsTree ;
365- if ( columnExprTree . fieldName === this . column . field ) {
366- break ;
367- }
368- }
369- expressionsTree . filteringOperands . push ( operand ) ;
370- }
357+ const expressionsTree = this . getColumnFilterExpressionsTree ( ) ;
371358
372359 if ( expressionsTree . filteringOperands . length ) {
373360 const state = { expressionsTree : expressionsTree } ;
374361 data = DataUtil . filter ( cloneArray ( data ) , state ) ;
375362 }
376363
377- if ( this . column . dataType === DataType . Date ) {
378- this . uniqueValues = Array . from ( new Set ( data . map ( record =>
379- record [ this . column . field ] ? record [ this . column . field ] . toDateString ( ) : record [ this . column . field ] ) ) ) ;
380- this . generateFilterValues ( true ) ;
381- } else {
382- this . uniqueValues = Array . from ( new Set ( data . map ( record => record [ this . column . field ] ) ) ) ;
383- this . generateFilterValues ( ) ;
384- }
364+ const columnField = this . column . field ;
365+ const columnValues = ( this . column . dataType === DataType . Date ) ?
366+ data . map ( record => record [ columnField ] ? record [ columnField ] . toDateString ( ) : record [ columnField ] ) :
367+ data . map ( record => record [ columnField ] ) ;
368+
369+ this . renderValues ( columnValues ) ;
370+ }
371+
372+ private renderValues ( columnValues : any [ ] ) {
373+ this . generateUniqueValues ( columnValues ) ;
374+ this . generateFilterValues ( this . column . dataType === DataType . Date ) ;
385375 this . generateListData ( ) ;
386376 }
387377
378+ private generateUniqueValues ( columnValues : any [ ] ) {
379+ this . uniqueValues = Array . from ( new Set ( columnValues ) ) ;
380+ }
381+
388382 private generateFilterValues ( isDateColumn : boolean = false ) {
389383 if ( isDateColumn ) {
390384 this . filterValues = new Set < any > ( this . expressionsList . reduce ( ( arr , e ) => {
@@ -430,71 +424,22 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy, AfterView
430424 this . cdr . detectChanges ( ) ;
431425 }
432426
427+ private getColumnFilterExpressionsTree ( ) {
428+ const gridExpressionsTree : IFilteringExpressionsTree = this . grid . filteringExpressionsTree ;
429+ const expressionsTree = new FilteringExpressionsTree ( gridExpressionsTree . operator , gridExpressionsTree . fieldName ) ;
433430
431+ for ( const operand of gridExpressionsTree . filteringOperands ) {
432+ if ( operand instanceof FilteringExpressionsTree ) {
433+ const columnExprTree = operand as FilteringExpressionsTree ;
434+ if ( columnExprTree . fieldName === this . column . field ) {
435+ break ;
436+ }
437+ }
438+ expressionsTree . filteringOperands . push ( operand ) ;
439+ }
434440
435- // public populateColumnData() {
436- // let data = this.column.gridAPI.get_all_data(this.grid.id);
437- // const gridExpressionsTree: IFilteringExpressionsTree = this.grid.filteringExpressionsTree;
438- // const expressionsTree = new FilteringExpressionsTree(gridExpressionsTree.operator, gridExpressionsTree.fieldName);
439-
440- // for (const operand of gridExpressionsTree.filteringOperands) {
441- // if (operand instanceof FilteringExpressionsTree) {
442- // const columnExprTree = operand as FilteringExpressionsTree;
443- // if (columnExprTree.fieldName === this.column.field) {
444- // break;
445- // }
446- // }
447- // expressionsTree.filteringOperands.push(operand);
448- // }
449-
450- // if (expressionsTree.filteringOperands.length) {
451- // const state = { expressionsTree: expressionsTree };
452- // data = DataUtil.filter(cloneArray(data), state);
453- // }
454-
455- // if (this.column.dataType === DataType.Date) {
456- // this.uniqueValues = Array.from(new Set(data.map(record =>
457- // record[this.column.field] ? record[this.column.field].toDateString() : record[this.column.field])));
458- // this.filterValues = new Set<any>(this.expressionsList.reduce((arr, e) => {
459- // if (e.expression.condition.name === 'in') {
460- // return [ ...arr, ...Array.from((e.expression.searchVal as Set<any>).values()).map(v =>
461- // new Date(v).toDateString()) ];
462- // }
463- // return [ ...arr, ...[e.expression.searchVal ? e.expression.searchVal.toDateString() : e.expression.searchVal] ];
464- // }, []));
465- // } else {
466- // this.uniqueValues = Array.from(new Set(data.map(record => record[this.column.field])));
467- // this.filterValues = new Set<any>(this.expressionsList.reduce((arr, e) => {
468- // if (e.expression.condition.name === 'in') {
469- // return [ ...arr, ...Array.from((e.expression.searchVal as Set<any>).values()) ];
470- // }
471- // return [ ...arr, ...[e.expression.searchVal] ];
472- // }, []));
473- // }
474- // this.listData = new Array<FilterListItem>();
475-
476- // const shouldUpdateSelection = this.areExpressionsSelectable() && this.areExpressionsValuesInTheList();
477-
478- // if (this.column.dataType === DataType.Boolean) {
479- // this.addBooleanItems();
480- // } else {
481- // this.addItems(shouldUpdateSelection);
482- // }
483-
484- // this.listData.sort((a, b) => this.sortData(a, b));
485-
486- // if (this.column.dataType === DataType.Date) {
487- // this.uniqueValues = this.uniqueValues.map(value => new Date(value));
488- // }
489-
490- // if (this.containsNullOrEmpty) {
491- // this.addBlanksItem(shouldUpdateSelection);
492- // }
493-
494- // this.addSelectAllItem();
495-
496- // this.cdr.detectChanges();
497- // }
441+ return expressionsTree ;
442+ }
498443
499444 private addBooleanItems ( ) {
500445 this . selectAllSelected = true ;
0 commit comments