« get me outta code hell

content, data: generateArtistInfoPageMusicVideosChunkedList - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/things/MusicVideo.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2026-04-14 20:26:02 -0300
committer(quasar) nebula <qznebula@protonmail.com>2026-04-14 20:26:02 -0300
commit2336e252d25536d3678119ff070189e666b98927 (patch)
tree788b9c689b8c7ac4324af092c73e95f20b5abd6f /src/data/things/MusicVideo.js
parented38f9529084cdd3ff6cdfb56148fd9a99c259b2 (diff)
content, data: generateArtistInfoPageMusicVideosChunkedList
Diffstat (limited to 'src/data/things/MusicVideo.js')
-rw-r--r--src/data/things/MusicVideo.js26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/data/things/MusicVideo.js b/src/data/things/MusicVideo.js
index 8e4e2d6d..77c8c619 100644
--- a/src/data/things/MusicVideo.js
+++ b/src/data/things/MusicVideo.js
@@ -167,6 +167,32 @@ export class MusicVideo extends Thing {
 
     musicVideoContributorContributionsBy:
       soupyReverse.contributionsBy('musicVideoData', 'contributorContribs'),
+
+    musicVideoArtistContributionsToAlbumsBy: {
+      bindTo: 'musicVideoData',
+
+      referencing: musicVideo => musicVideo.artistContribs,
+
+      *referenced(musicVideoContrib) {
+        const musicVideo = musicVideoContrib.thing;
+        const trackOrAlbum = musicVideo.thing;
+        if (trackOrAlbum.isTrack) {
+          const albumArtists =
+            trackOrAlbum.album.artistContribs
+              .map(albumContrib => albumContrib.artist);
+
+          for (const trackContrib of trackOrAlbum.artistContribs) {
+            if (albumArtists.includes(trackContrib.artist)) {
+              yield trackContrib.artist;
+            }
+          }
+        } else {
+          for (const albumContrib of trackOrAlbum.artistContribs) {
+            yield albumContrib.artist;
+          }
+        }
+      },
+    },
   };
 
   get path() {