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);
     
  }
based on function sorting use below code


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

Popular posts from this blog

Your app currently targets API level 27 and must target at least API level 28 to ensure it is built on the latest APIs optimized for security and performance. Change your app's target API level to at least 28

ionic project creation

change root user in ubuntu