« get me outta code hell

content: generateTrackChronologyLinks - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateTrackChronologyLinks.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2024-04-23 14:02:19 -0300
committer(quasar) nebula <qznebula@protonmail.com>2024-05-30 20:48:16 -0300
commitfcfe91f9b032740f44de16b41e4a35a90dbbfa78 (patch)
treef9b50530c3b5a50cebc1c26b090d233be4dfbc9b /src/content/dependencies/generateTrackChronologyLinks.js
parent887a00f2d7a855348889226e0bc00d989ade1f3a (diff)
content: generateTrackChronologyLinks
Just extracts logic from generateTrackInfoPage, for now.
Diffstat (limited to 'src/content/dependencies/generateTrackChronologyLinks.js')
-rw-r--r--src/content/dependencies/generateTrackChronologyLinks.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/content/dependencies/generateTrackChronologyLinks.js b/src/content/dependencies/generateTrackChronologyLinks.js
new file mode 100644
index 00000000..814e9a6a
--- /dev/null
+++ b/src/content/dependencies/generateTrackChronologyLinks.js
@@ -0,0 +1,75 @@
+import {sortAlbumsTracksChronologically} from '#sort';
+
+import getChronologyRelations from '../util/getChronologyRelations.js';
+
+export default {
+  contentDependencies: [
+    'generateChronologyLinks',
+    'linkArtist',
+    'linkTrack',
+  ],
+
+  relations: (relation, track) => ({
+    chronologyLinks:
+      relation('generateChronologyLinks'),
+
+    artistChronologyContributions:
+      getChronologyRelations(track, {
+        contributions: [
+          ...track.artistContribs ?? [],
+          ...track.contributorContribs ?? [],
+        ],
+
+        linkArtist: artist => relation('linkArtist', artist),
+        linkThing: track => relation('linkTrack', track),
+
+        getThings(artist) {
+          const getDate = thing => thing.date;
+
+          const things = [
+            ...artist.tracksAsArtist,
+            ...artist.tracksAsContributor,
+          ].filter(getDate);
+
+          return sortAlbumsTracksChronologically(things, {getDate});
+        },
+      }),
+
+    coverArtistChronologyContributions:
+      getChronologyRelations(track, {
+        contributions: track.coverArtistContribs ?? [],
+
+        linkArtist: artist => relation('linkArtist', artist),
+
+        linkThing: trackOrAlbum =>
+          (trackOrAlbum.album
+            ? relation('linkTrack', trackOrAlbum)
+            : relation('linkAlbum', trackOrAlbum)),
+
+        getThings(artist) {
+          const getDate = thing => thing.coverArtDate ?? thing.date;
+
+          const things = [
+            ...artist.albumsAsCoverArtist,
+            ...artist.tracksAsCoverArtist,
+          ].filter(getDate);
+
+          return sortAlbumsTracksChronologically(things, {getDate});
+        },
+      }),
+  }),
+
+  generate: (relations) =>
+    relations.chronologyLinks.slots({
+      chronologyInfoSets: [
+        {
+          headingString: 'misc.chronology.heading.track',
+          contributions: relations.artistChronologyContributions,
+        },
+        {
+          headingString: 'misc.chronology.heading.coverArt',
+          contributions: relations.coverArtistChronologyContributions,
+        },
+      ],
+    }),
+};