« 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/generateGroupGalleryPageAlbumGrid.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies/generateGroupGalleryPageAlbumGrid.js')
-rw-r--r--src/content/dependencies/generateGroupGalleryPageAlbumGrid.js74
1 files changed, 57 insertions, 17 deletions
diff --git a/src/content/dependencies/generateGroupGalleryPageAlbumGrid.js b/src/content/dependencies/generateGroupGalleryPageAlbumGrid.js
index 7d9aa2d2..7b90fd68 100644
--- a/src/content/dependencies/generateGroupGalleryPageAlbumGrid.js
+++ b/src/content/dependencies/generateGroupGalleryPageAlbumGrid.js
@@ -2,34 +2,60 @@ import {stitchArrays} from '#sugar';
 import {getTotalDuration} from '#wiki-data';
 
 export default {
-  contentDependencies: ['generateCoverGrid', 'image', 'linkAlbum'],
-  extraDependencies: ['language'],
+  contentDependencies: [
+    'generateCoverGrid',
+    'generateGroupGalleryPageAlbumGridTab',
+    'image',
+    'linkAlbum',
+  ],
 
-  relations: (relation, albums, _group) => ({
+  extraDependencies: ['language', 'wikiData'],
+
+  query: (albums, _group) => ({
+    artworks:
+      albums.map(album =>
+        (album.hasCoverArt
+          ? album.coverArtworks[0]
+          : null)),
+  }),
+
+  relations: (relation, query, albums, group) => ({
     coverGrid:
       relation('generateCoverGrid'),
 
     links:
-      albums.map(album =>
-        relation('linkAlbum', album)),
+      albums
+        .map(album => relation('linkAlbum', album)),
 
     images:
-      albums.map(album =>
-        (album.hasCoverArt
-          ? relation('image', album.coverArtworks[0])
-          : relation('image')))
+      query.artworks
+        .map(artwork => relation('image', artwork)),
+
+    tabs:
+      albums
+        .map(album =>
+          relation('generateGroupGalleryPageAlbumGridTab', album, group)),
   }),
 
-  data: (albums, group) => ({
+  data: (query, albums, group) => ({
     names:
       albums.map(album => album.name),
 
-    durations:
-      albums.map(album => getTotalDuration(album.tracks)),
+    styles:
+      albums.map(album => album.style),
 
     tracks:
       albums.map(album => album.tracks.length),
 
+    allWarnings:
+      query.artworks.flatMap(artwork => artwork?.contentWarnings),
+
+    durations:
+      albums.map(album =>
+        (album.hideDuration
+          ? null
+          : getTotalDuration(album.tracks))),
+
     notFromThisGroup:
       albums.map(album => !album.groups.includes(group)),
   }),
@@ -53,14 +79,28 @@ export default {
                   }),
               })),
 
+        itemAttributes:
+          data.styles.map(style => ({'data-style': style})),
+
+        tab: relations.tabs,
+
         info:
           stitchArrays({
+            style: data.styles,
             tracks: data.tracks,
             duration: data.durations,
-          }).map(({tracks, duration}) =>
-              language.$(capsule, 'details.albumLength', {
-                tracks: language.countTracks(tracks, {unit: true}),
-                time: language.formatDuration(duration),
-              })),
+          }).map(({style, tracks, duration}) =>
+              (style === 'single' && duration
+                ? language.$(capsule, 'details.albumLength.single', {
+                    time: language.formatDuration(duration),
+                  })
+             : duration
+                ? language.$(capsule, 'details.albumLength', {
+                    tracks: language.countTracks(tracks, {unit: true}),
+                    time: language.formatDuration(duration),
+                  })
+                : null)),
+
+        revealAllWarnings: data.allWarnings,
       })),
 };