« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies')
-rw-r--r--src/content/dependencies/generateArtistInfoPageTracksChunkedList.js57
1 files changed, 24 insertions, 33 deletions
diff --git a/src/content/dependencies/generateArtistInfoPageTracksChunkedList.js b/src/content/dependencies/generateArtistInfoPageTracksChunkedList.js
index 27d8a56a..0132d7ba 100644
--- a/src/content/dependencies/generateArtistInfoPageTracksChunkedList.js
+++ b/src/content/dependencies/generateArtistInfoPageTracksChunkedList.js
@@ -1,26 +1,10 @@
-import {accumulateSum, stitchArrays, unique} from '../../util/sugar.js';
-import {chunkByProperties, sortAlbumsTracksChronologically} from '../../util/wiki-data.js';
+import {accumulateSum, stitchArrays} from '../../util/sugar.js';
 
-// TODO: This obviously needs to be more generalized.
-function sortContributionEntries(entries, sortFunction) {
-  const things = unique(entries.map(({thing}) => thing));
-  sortFunction(things);
-
-  const outputArrays = [];
-  const thingToOutputArray = new Map();
-
-  for (const thing of things) {
-    const array = [];
-    thingToOutputArray.set(thing, array);
-    outputArrays.push(array);
-  }
-
-  for (const entry of entries) {
-    thingToOutputArray.get(entry.thing).push(entry);
-  }
-
-  entries.splice(0, entries.length, ...outputArrays.flat());
-}
+import {
+  chunkByProperties,
+  sortAlbumsTracksChronologically,
+  sortEntryThingPairs,
+} from '../../util/wiki-data.js';
 
 export default {
   contentDependencies: [
@@ -36,27 +20,34 @@ export default {
   query(artist) {
     const entries = [
       ...artist.tracksAsArtist.map(track => ({
-        track,
-        date: track.date,
         thing: track,
-        album: track.album,
-        contribs: track.artistContribs,
+        entry: {
+          track,
+          album: track.album,
+          date: track.date,
+          contribs: track.artistContribs,
+        },
       })),
 
       ...artist.tracksAsContributor.map(track => ({
-        track,
-        date: track.date,
         thing: track,
-        album: track.album,
-        contribs: track.contributorContribs,
+        entry: {
+          track,
+          date: track.date,
+          album: track.album,
+          contribs: track.contributorContribs,
+        },
       })),
     ];
 
-    sortContributionEntries(entries, sortAlbumsTracksChronologically);
+    sortEntryThingPairs(entries, sortAlbumsTracksChronologically);
 
-    const chunks = chunkByProperties(entries, ['album', 'date']);
+    const chunks =
+      chunkByProperties(
+        entries.map(({entry}) => entry),
+        ['album', 'date']);
 
-    return {entries, chunks};
+    return {chunks};
   },
 
   relations(relation, query, artist) {