From 0b44cbc30a1b9f311f9908db5a82d68f4d93febb Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Wed, 19 Feb 2025 17:14:14 -0400 Subject: content: listTracksByDate: mind order of release --- src/content/dependencies/listTracksByDate.js | 89 +++++++++++++++------------- 1 file changed, 47 insertions(+), 42 deletions(-) diff --git a/src/content/dependencies/listTracksByDate.js b/src/content/dependencies/listTracksByDate.js index b2cba5e6..66ca4af5 100644 --- a/src/content/dependencies/listTracksByDate.js +++ b/src/content/dependencies/listTracksByDate.js @@ -5,49 +5,54 @@ export default { contentDependencies: ['generateListingPage', 'linkAlbum', 'linkTrack'], extraDependencies: ['language', 'wikiData'], - sprawl({trackData}) { - return {trackData}; - }, + sprawl: ({trackData}) => ({trackData}), query({trackData}, spec) { - return { - spec, + const query = {spec}; + + query.tracks = + sortAlbumsTracksChronologically( + trackData.filter(track => track.date)); + + query.chunks = + chunkByProperties(query.tracks, ['album', 'date']); - chunks: - chunkByProperties( - sortAlbumsTracksChronologically( - trackData.filter(track => track.date)), - ['album', 'date']), - }; + return query; }, - relations(relation, query) { - return { - page: relation('generateListingPage', query.spec), + relations: (relation, query) => ({ + page: + relation('generateListingPage', query.spec), - albumLinks: - query.chunks - .map(({album}) => relation('linkAlbum', album)), + albumLinks: + query.chunks + .map(({album}) => relation('linkAlbum', album)), - trackLinks: - query.chunks - .map(({chunk}) => chunk - .map(track => relation('linkTrack', track))), - }; - }, + trackLinks: + query.chunks + .map(({chunk}) => chunk + .map(track => relation('linkTrack', track))), + }), - data(query) { - return { - dates: - query.chunks - .map(({date}) => date), + data: (query) => ({ + dates: + query.chunks + .map(({date}) => date), - secreleases: - query.chunks.map(({chunk}) => - chunk.map(track => - track.mainReleaseTrack !== null)), - }; - }, + rereleases: + query.chunks + .map(({chunk}) => chunk + .map(track => + // Check if the index of this track... + query.tracks.indexOf(track) > + // ...is greater than the *smallest* index + // of any of this track's *other* releases. + // (It won't be greater than its own index, + // so we can use otherReleases here, rather + // than allReleases.) + Math.min(... + track.otherReleases.map(t => query.tracks.indexOf(t))))), + }), generate(data, relations, {language}) { return relations.page.slots({ @@ -65,20 +70,20 @@ export default { chunkRows: stitchArrays({ trackLinks: relations.trackLinks, - secreleases: data.secreleases, - }).map(({trackLinks, secreleases}) => + rereleases: data.rereleases, + }).map(({trackLinks, rereleases}) => stitchArrays({ trackLink: trackLinks, - secrelease: secreleases, - }).map(({trackLink, secrelease}) => - (secrelease + rerelease: rereleases, + }).map(({trackLink, rerelease}) => + (rerelease ? {stringsKey: 'rerelease', track: trackLink} : {track: trackLink}))), chunkRowAttributes: - data.secreleases.map(secreleases => - secreleases.map(secrelease => - (secrelease + data.rereleases.map(rereleases => + rereleases.map(rerelease => + (rerelease ? {class: 'rerelease'} : null))), }); -- cgit 1.3.0-6-gf8a5