@@ -12,13 +12,25 @@ type PlaylistTrack = SpotifyApi.PlaylistTrackObject
1212
1313type CompareFunction = ( trackA : PlaylistTrack , trackB : PlaylistTrack ) => number
1414
15+ function createStringCompare (
16+ getter : ( track : PlaylistTrack ) => string ,
17+ ) : CompareFunction {
18+ return ( trackA , trackB ) => compareStrings ( getter ( trackA ) , getter ( trackB ) )
19+ }
20+
21+ function createNumberCompare (
22+ getter : ( track : PlaylistTrack ) => number ,
23+ ) : CompareFunction {
24+ return ( trackA , trackB ) => getter ( trackA ) - getter ( trackB )
25+ }
26+
1527const rulesCompareFunctions : Record < SortKey , CompareFunction > = {
16- artist : compareArtists ,
17- title : compareTitles ,
18- album : compareAlbums ,
19- release_date : compareReleaseDates ,
20- disc_number : compareDiscNumbers ,
21- track_number : compareTrackNumbers ,
28+ artist : createStringCompare ( getArtistName ) ,
29+ title : createStringCompare ( getTrackTitle ) ,
30+ album : createStringCompare ( getAlbumName ) ,
31+ release_date : createStringCompare ( getReleaseDate ) ,
32+ disc_number : createNumberCompare ( getDiscNumber ) ,
33+ track_number : createNumberCompare ( getTrackNumber ) ,
2234}
2335
2436export function sortTracks (
@@ -49,43 +61,6 @@ export function sortTracks(
4961 return isArrayChanged
5062}
5163
52- function compareAlbums ( trackA : PlaylistTrack , trackB : PlaylistTrack ) : number {
53- return compareStrings ( getAlbumName ( trackA ) , getAlbumName ( trackB ) )
54- }
55-
56- function compareArtists ( trackA : PlaylistTrack , trackB : PlaylistTrack ) : number {
57- return compareStrings ( getArtistName ( trackA ) , getArtistName ( trackB ) )
58- }
59-
60- function compareReleaseDates (
61- trackA : PlaylistTrack ,
62- trackB : PlaylistTrack ,
63- ) : number {
64- return compareStrings ( getReleaseDate ( trackA ) , getReleaseDate ( trackB ) )
65- }
66-
67- function compareTitles ( trackA : PlaylistTrack , trackB : PlaylistTrack ) : number {
68- return compareStrings ( getTrackTitle ( trackA ) , getTrackTitle ( trackB ) )
69- }
70-
71- function compareDiscNumbers (
72- trackA : PlaylistTrack ,
73- trackB : PlaylistTrack ,
74- ) : number {
75- const discA = getDiscNumber ( trackA )
76- const discB = getDiscNumber ( trackB )
77- return discA - discB
78- }
79-
80- function compareTrackNumbers (
81- trackA : PlaylistTrack ,
82- trackB : PlaylistTrack ,
83- ) : number {
84- const trackNumA = getTrackNumber ( trackA )
85- const trackNumB = getTrackNumber ( trackB )
86- return trackNumA - trackNumB
87- }
88-
8964function compareStrings ( str1 : string , str2 : string ) : number {
9065 if ( ! str1 ) {
9166 return - 1
0 commit comments