Logré agregar solo un filtro personalizado en mi tabla.
Vista:
<th colspan="2"> <p-columnFilter field="campaigns" [showMenu]="false" [matchMode]="'customFilter1'"> <ng-template pTemplate="filter" let-value let-filter="filterCallback"> <p-dropdown [options]="mainFilterListOfCountries" [resetFilterOnHide]="true" [(ngModel)]="selectedCountryToFilter" (onChange)="filter($event.value)"> //More code </p-dropdown> </ng-template> </p-columnFilter> </th> <th colspan="2" > <p-columnFilter field="affiliateTypes" [showMenu]="false" [matchMode]="'customFilter2'"> <ng-template pTemplate="filter" let-value let-filter="filterCallback"> <p-selectButton [options]="activeOrAllAffiliatesMainFilterOptions" [(ngModel)]="selectedStatus" (onChange)="filter($event.value)" optionLabel="label"> </p-selectButton> </ng-template> </p-columnFilter> </th>Componente:
ngOnInit(): void { this.filterService.register('customFilter1', (value, filter): boolean => { if (filter.option === "all") { return true; } if (value && value.length) { return true; } else { return false; } });}Necesito agregar algunos filtros personalizados más.
Tal vez algo como esto (?):
Componente:
ngOnInit(): void { this.filterService.register([customFilter1 , customFilter2 ,....], (value, filter): boolean => { if(customFilter1){ if (filter.option === "all") { return true; } if (value && value.length) { return true; } else { return false; } } else if(customFilter2){ if (value && value.length) { return true; } else { return false; } } });}
Supongo que el problema es que no puedes registrarte varias veces en el mismo servicio en el mismo componente...
Quiero decir que probablemente haya una manera, simplemente no es que yo sepa...
Esto es antiguo pero... Tal vez sea obvio o no entiendo tu problema, pero ¿por qué no los registras a ambos como
ngOnInit(): void { this.filterService.register('customFilter1', (value, filter): boolean => { //customFilter1 stuff }); this.filterService.register('customFilter2', (value, filter): boolean => { //customFilter2 stuff }); }Porque esencialmente está colocando 2 devoluciones de llamada en un mapa por nombre de clave (el bit customFilter1/2 como clave). El valor que se envía se configura a partir del marcado de la tabla y la columna que seleccionó para aplicar el filtro.