Sort by Disc Number + improve sort-by pipe algo
This commit is contained in:
@@ -4,4 +4,5 @@ export class Song {
|
||||
'Play Count': number;
|
||||
Album: string;
|
||||
'Track Number': number; // TODO Default property
|
||||
'Disc Number': number;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr *ngFor="let song of songs | sortBy : 'Year':'Album':'Track Number'">
|
||||
<tr *ngFor="let song of songs | sortBy : 'Year':'Album':'Disc Number':'Track Number'">
|
||||
<td>{{song['Track Number'] ? (("0" + song['Track Number']).slice(-2)) : "--"}}</td>
|
||||
<td>{{song.Name}}</td>
|
||||
<td>
|
||||
|
||||
@@ -49,7 +49,7 @@ export class SongTableComponent {
|
||||
}
|
||||
|
||||
sort(): void {
|
||||
this.songs = new SortByPipe().transform(this.songs, 'Year', 'Album', 'Track Number', 'Play Count');
|
||||
this.songs = new SortByPipe().transform(this.songs, 'Year', 'Album', 'Disc Number', 'Track Number', 'Play Count');
|
||||
this.sortable = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,9 +5,25 @@ import { Pipe, PipeTransform } from '@angular/core';
|
||||
})
|
||||
export class SortByPipe implements PipeTransform {
|
||||
|
||||
/**
|
||||
* Sort an array by multiple elements.
|
||||
*
|
||||
* Example to sort an array respectively by Year, Album, Disc Number, etc.
|
||||
* Typescript usage:
|
||||
* <pre>
|
||||
* new SortByPipe().transform(this.songs, 'Year', 'Album', 'Disc Number', 'Track Number', 'Play Count');
|
||||
* </pre>
|
||||
* In HTML usage:
|
||||
* <pre>
|
||||
* <tr *ngFor="let song of songs | sortBy : 'Year':'Album':'Disc Number':'Track Number'">
|
||||
* </pre>
|
||||
*
|
||||
* @param array array to sort
|
||||
* @param args elements used to sort in oder
|
||||
*/
|
||||
transform(array: Array<any>, ...args: any[]): Array<any> {
|
||||
array.sort((a: any, b: any) => {
|
||||
for (let i = 0; i < array.length; i++) {
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
const arg = args[i];
|
||||
|
||||
if (a[arg] === undefined && b[arg] !== undefined) { return -1; }
|
||||
|
||||
Reference in New Issue
Block a user