sorting in angular 14
based on pipe sorting
import { Pipe, PipeTransform } from '@angular/core';
export type SortOrder = 'asc' | 'desc';
@Pipe({
name: 'tableSorting'
})
export class TableSortingPipe implements PipeTransform {
public sortByTab: any;
transform(value: any[], sortOrder: SortOrder | string = 'asc', sortKey?: any): any {
let sortArrayData = value;
this.sortByTab = (a: any, b: any) => {
const isNumber = (v: any) => Number(v).toString() === v;
const aPart = a[sortKey].toString().match(/\d+|\D+/g);
const bPart = b[sortKey].toString().match(/\d+|\D+/g);
let i = 0;
const len = Math.min(aPart.length, bPart.length);
while (i < len && aPart[i] === bPart[i]) {
i++;
}
if (i === len) {
return sortOrder === 'asc'
? bPart.length - aPart.length
: aPart.length - bPart.length;
}
if (isNumber(aPart[i]) && isNumber(bPart[i])) {
return sortOrder === 'asc'
? bPart[i] - aPart[i]
: aPart[i] - bPart[i];
}
return sortOrder === 'asc'
? bPart[i].localeCompare(aPart[i])
: aPart[i].localeCompare(bPart[i]);
};
sortArrayData.sort(this.sortByTab);
return sortArrayData;
}
}
private getKeyByValue(object: any, value: any) {
return Object.keys(object).find((key) => object[key] === value);
}
public sortElement(event: any, column: string){
const requestheaders = {
job: 'Job#',
jobOwner:"Job Owner",
case:"Case",
specimen:"Specimen",
slideId:"Slide Id",
algorithmName:"Algorithm Name",
algorithmVersion:"Algorithm Version",
vendor:"Vendor",
regularityStatus:"Regulatory Status",
testType:"Test Type",
startDateTime:"Start Date Time",
completion:"Completion"
};
this.objkey = this.getKeyByValue(requestheaders, column);
this.inProgressData=this.sorting.transform
(this.inProgressData,event.detail,this.objkey);
}
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class TableSortingService {
public isAscending: any;
public objkey: any;
public sortByTab: any;
constructor() { }
public getKeyByValue(object: any, value: any) {
console.log(object, value);
return Object.keys(object).find((key) => object[key] === value);
}
public sortElement(event: any, column: string, headers: any, array: any) {
let sortArrayData = array;
this.isAscending = event.detail;
this.objkey = this.getKeyByValue(headers, column);
this.sortByTab = (a: any, b: any) => {
const isNumber = (v: any) => Number(v).toString() === v;
// eslint-disable-next-line require-unicode-regexp
const aPart = a[this.objkey].toString().match(/\d+|\D+/g);
// eslint-disable-next-line require-unicode-regexp
const bPart = b[this.objkey].toString().match(/\d+|\D+/g);
let i = 0;
const len = Math.min(aPart.length, bPart.length);
while (i < len && aPart[i] === bPart[i]) {
i++;
}
if (i === len) {
return this.isAscending === 'asc'
? bPart.length - aPart.length
: aPart.length - bPart.length;
}
if (isNumber(aPart[i]) && isNumber(bPart[i])) {
return this.isAscending === 'asc'
? bPart[i] - aPart[i]
: aPart[i] - bPart[i];
}
return this.isAscending === 'asc'
? bPart[i].localeCompare(aPart[i])
: aPart[i].localeCompare(bPart[i]);
};
sortArrayData.sort(this.sortByTab);
return sortArrayData;
}
}
Comments
Post a Comment