diff options
Diffstat (limited to 'src/content/dependencies/generateGroupGalleryPageAlbumGrid.js')
-rw-r--r-- | src/content/dependencies/generateGroupGalleryPageAlbumGrid.js | 74 |
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, })), }; |