github.com/readium/readium-lcp-server@v0.0.0-20240101192032-6e95190e99f1/frontend/manage/app/shared/pipes/sort.pipe.ts (about)

     1  import { Pipe, PipeTransform } from '@angular/core';
     2  
     3  @Pipe({name: 'sortBy'})
     4  export class Sort implements PipeTransform {
     5    transform(value: {}[], filter: string, reverse: boolean): any {
     6      var values: {a:string, b:string};
     7  
     8      var getValue = (a:any, b:any, filter:string):{a:string, b:string} =>
     9      {
    10        var newA:string;
    11        var newB:string;
    12  
    13        var newFilter: string[] = filter.split(".")
    14        for (var i = 0; i <= newFilter.length-1; i++)
    15        {
    16          a = a[newFilter[i]];
    17          b = b[newFilter[i]];
    18        }
    19  
    20        return {
    21          a,
    22          b
    23        }
    24      }
    25  
    26      if(!reverse){
    27        value.sort(function (a:{}, b:{}) {
    28          values = getValue(a,b,filter);
    29          if (values.a == values.b) return 0;
    30          else if (values.a > values.b || values.a == null) return 1;
    31          else if (values.a < values.b || values.b == null) return -1;
    32        });
    33      } else {
    34  
    35        value.sort(function (a:{}, b:{}) {
    36          values = getValue(a,b,filter);
    37          if (values.a == values.b) return 0;
    38          else if (values.a < values.b || values.a == null) return 1;
    39          else  if (values.a > values.b || values.b == null) return -1;
    40        });
    41  
    42      }
    43      return value;
    44  
    45  
    46    }
    47  
    48  
    49  
    50  }