« get me outta code hell

content: gAIP{*}ChunkedList: much more aggressive refactor - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateArtistInfoPageTracksChunkedList.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2024-02-06 11:20:27 -0400
committer(quasar) nebula <qznebula@protonmail.com>2024-02-06 11:20:27 -0400
commitddc3465fb48c540360fba977a59be9a5a3a49c04 (patch)
treea11efa0a103a1ae4bfdc0107813f8ea427a884aa /src/content/dependencies/generateArtistInfoPageTracksChunkedList.js
parentbb3fbea9b650d79c4ca797524818ea7893c74570 (diff)
content: gAIP{*}ChunkedList: much more aggressive refactor
Diffstat (limited to 'src/content/dependencies/generateArtistInfoPageTracksChunkedList.js')
-rw-r--r--src/content/dependencies/generateArtistInfoPageTracksChunkedList.js103
1 files changed, 59 insertions, 44 deletions
diff --git a/src/content/dependencies/generateArtistInfoPageTracksChunkedList.js b/src/content/dependencies/generateArtistInfoPageTracksChunkedList.js
index cd96b37..a820916 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);