From ddc3465fb48c540360fba977a59be9a5a3a49c04 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Tue, 6 Feb 2024 11:20:27 -0400 Subject: content: gAIP{*}ChunkedList: much more aggressive refactor --- .../generateArtistInfoPageTracksChunkedList.js | 103 ++++++++++++--------- 1 file changed, 59 insertions(+), 44 deletions(-) (limited to 'src/content/dependencies/generateArtistInfoPageTracksChunkedList.js') diff --git a/src/content/dependencies/generateArtistInfoPageTracksChunkedList.js b/src/content/dependencies/generateArtistInfoPageTracksChunkedList.js index cd96b376..a8209165 100644 --- a/src/content/dependencies/generateArtistInfoPageTracksChunkedList.js +++ b/src/content/dependencies/generateArtistInfoPageTracksChunkedList.js @@ -19,58 +19,73 @@ export default { extraDependencies: ['html', 'language'], query(artist) { - const processEntries = (things, details) => - things.map(thing => ({ - thing, - entry: details(thing), - })); + const processTrackEntry = ({track, contribs}) => ({ + thing: track, + entry: { + track: track, + album: track.album, + date: track.date, + contribs: contribs, + }, + }); + + const processTrackEntries = ({tracks, contribs}) => + stitchArrays({ + track: tracks, + contribs: contribs, + }).map(processTrackEntry); + + const {tracksAsArtist, tracksAsContributor} = artist; const tracksAsArtistAndContributor = - artist.tracksAsArtist - .filter(track => artist.tracksAsContributor.includes(track)); + tracksAsArtist + .filter(track => tracksAsContributor.includes(track)); const tracksAsArtistOnly = - artist.tracksAsArtist - .filter(track => !artist.tracksAsContributor.includes(track)); + tracksAsArtist + .filter(track => !tracksAsContributor.includes(track)); const tracksAsContributorOnly = - artist.tracksAsContributor - .filter(track => !artist.tracksAsArtist.includes(track)); - - const entriesAsArtistAndContributor = - processEntries( - tracksAsArtistAndContributor, - track => ({ - track, - album: track.album, - date: track.date, - contribs: [...track.artistContribs, ...track.contributorContribs], - })); - - const entriesAsArtistOnly = - processEntries( - tracksAsArtistOnly, - track => ({ - track, - album: track.album, - date: track.date, - contribs: track.artistContribs, - })); - - const entriesAsContributorOnly = - processEntries( - tracksAsContributorOnly, - track => ({ - track, - date: track.date, - album: track.album, - contribs: track.contributorContribs, - })); + tracksAsContributor + .filter(track => !tracksAsArtist.includes(track)); + + const tracksAsArtistAndContributorContribs = + tracksAsArtistAndContributor + .map(track => [ + ...track.artistContribs, + ...track.contributorContribs, + ]); + + const tracksAsArtistOnlyContribs = + tracksAsArtistOnly + .map(track => track.artistContribs); + + const tracksAsContributorOnlyContribs = + tracksAsContributorOnly + .map(track => track.contributorContribs); + + const tracksAsArtistAndContributorEntries = + processTrackEntries({ + tracks: tracksAsArtistAndContributor, + contribs: tracksAsArtistAndContributorContribs, + }); + + const tracksAsArtistOnlyEntries = + processTrackEntries({ + tracks: tracksAsArtistOnly, + contribs: tracksAsArtistOnlyContribs, + }); + + const tracksAsContributorOnlyEntries = + processTrackEntries({ + tracks: tracksAsContributorOnly, + contribs: tracksAsContributorOnlyContribs, + }); const entries = [ - ...entriesAsArtistAndContributor, - ...entriesAsArtistOnly, - ...entriesAsContributorOnly, + ...tracksAsArtistAndContributorEntries, + ...tracksAsArtistOnlyEntries, + ...tracksAsContributorOnlyEntries, ]; sortEntryThingPairs(entries, sortAlbumsTracksChronologically); -- cgit 1.3.0-6-gf8a5