diff options
| author | (quasar) nebula <qznebula@protonmail.com> | 2026-05-19 21:52:18 -0300 |
|---|---|---|
| committer | (quasar) nebula <qznebula@protonmail.com> | 2026-05-19 21:52:18 -0300 |
| commit | e56b564efe888e028e4b01891d9074e8532360d2 (patch) | |
| tree | 4525dd2a274f8320d94be5cfbf1b1ad8586420d2 /src/content/dependencies/generateArtistInfoPageSheetMusicFilesChunkedList.js | |
| parent | e518aba281c2deca085bcb1245f8da5448f28981 (diff) | |
data, content: additional file artists preview
Diffstat (limited to 'src/content/dependencies/generateArtistInfoPageSheetMusicFilesChunkedList.js')
| -rw-r--r-- | src/content/dependencies/generateArtistInfoPageSheetMusicFilesChunkedList.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/content/dependencies/generateArtistInfoPageSheetMusicFilesChunkedList.js b/src/content/dependencies/generateArtistInfoPageSheetMusicFilesChunkedList.js new file mode 100644 index 00000000..63a6b23a --- /dev/null +++ b/src/content/dependencies/generateArtistInfoPageSheetMusicFilesChunkedList.js @@ -0,0 +1,69 @@ +import {chunkByConditions, stitchArrays} from '#sugar'; +import {sortAlbumsTracksChronologically, sortContributionsChronologically} + from '#sort'; + +export default { + query(artist) { + const query = {}; + + const allContributions = [ + ...artist.sheetMusicFileArtistContributions, + ]; + + const getAdditionalFile = contrib => + contrib.thing; + + const getAlbumOrTrack = contrib => + getAdditionalFile(contrib).thing; + + sortContributionsChronologically( + allContributions, + sortAlbumsTracksChronologically, + {getThing: getAlbumOrTrack}); + + const getAlbum = contrib => + (getAlbumOrTrack(contrib).isTrack + ? getAlbumOrTrack(contrib).album + : getAlbumOrTrack(contrib)); + + query.contribs = + chunkByConditions(allContributions, [ + (a, b) => getAlbum(a) !== getAlbum(b), + ]).map(contribs => + chunkByConditions(contribs, [ + (a, b) => getAdditionalFile(a) !== getAdditionalFile(b), + ])); + + query.albums = + query.contribs + .map(contribs => contribs[0][0]) + .map(contrib => getAlbum(contrib)); + + return query; + }, + + relations: (relation, query, artist) => ({ + template: + relation('generateArtistInfoPageChunkedList'), + + chunks: + stitchArrays({ + album: query.albums, + contribs: query.contribs, + }).map(({album, contribs}) => + relation('generateArtistInfoPageAdditionalFilesChunk', + artist, + album, + contribs)), + }), + + generate: (relations) => + relations.template.slots({ + chunks: + relations.chunks.map(chunk => + chunk.slots({ + string: 'sheetMusicFile', + disableStandaloneWithFiles: true, + })), + }), +}; |