What I want to do is to sort the data already grouped in alphabetical order or custom order. I used the sortField
attribute which specify the groupheader order but I need to order the data inside the group too.
I have the same issues. I have added customized sort to solve this issues
To add a customized sort
<p-column field="color" header="color" sortable="custom" (sortFunction)="sortByColor($event)"></p-column>
In the typescript create a customSort
sortByColor(e) {
this.cars.sort(function (a, b) {
let aGroup = a.name.toLowerCase();
let bGroup = b.name.toLowerCase();
if (aGroup > bGroup) return 1;
if (aGroup < bGroup) return -1;
let aSort = a.color.toLowerCase();
let bSort = b.color.toLowerCase();
if (aSort > bSort) return 1;
if (aSort < bSort) return -1;
return 0
});
}
For those who have the problem with TurboTable <p-table>
, here is the solution:
<p-table sortField="name" sortMode="single" (onSort)="onSort($event)" (sortFunction)="customSort($event)" [customSort]="true">
OnSort()
implementation:
onSort() {
// function to properly work with turbotable and rowgroup, see: https://www.primefaces.org/primeng/#/table/rowgroup
this.updateRowGroupMetaData();
}
customSort()
implementation:
customSort(e) {
this.budgets.sort((a, b) => {
const aGroup = a.name.toLowerCase();
const bGroup = b.name.toLowerCase();
if (aGroup > bGroup) { return 1; }
if (aGroup < bGroup) { return -1; }
const aSort = a.color;
const bSort = b.color;
if (aSort > bSort) { return 1; }
if (aSort < bSort) { return -1; }
return 0;
});
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With