From f3c0efe101a38dee7920c5e4115a773ec98d1882 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Tue, 2 Apr 2024 12:05:54 -0300 Subject: content: generate{Album,}AdditionalFiles* cleanup --- .../generateAlbumAdditionalFilesList.js | 88 +++++++++++++++------- 1 file changed, 62 insertions(+), 26 deletions(-) (limited to 'src/content/dependencies/generateAlbumAdditionalFilesList.js') diff --git a/src/content/dependencies/generateAlbumAdditionalFilesList.js b/src/content/dependencies/generateAlbumAdditionalFilesList.js index 06694c95..3ab0e27a 100644 --- a/src/content/dependencies/generateAlbumAdditionalFilesList.js +++ b/src/content/dependencies/generateAlbumAdditionalFilesList.js @@ -1,30 +1,48 @@ +import {stitchArrays} from '#sugar'; + export default { contentDependencies: [ 'generateAdditionalFilesList', + 'generateAdditionalFilesListChunk', + 'generateAdditionalFilesListChunkItem', 'linkAlbumAdditionalFile', ], extraDependencies: ['getSizeOfAdditionalFile', 'html', 'urls'], + relations: (relation, album, additionalFiles) => ({ + list: + relation('generateAdditionalFilesList', additionalFiles), + + chunks: + additionalFiles + .map(() => relation('generateAdditionalFilesListChunk')), + + chunkItems: + additionalFiles + .map(({files}) => files + .map(() => relation('generateAdditionalFilesListChunkItem'))), + + chunkItemFileLinks: + additionalFiles + .map(({files}) => files + .map(file => relation('linkAlbumAdditionalFile', album, file))), + }), + data: (album, additionalFiles) => ({ albumDirectory: album.directory, - fileLocations: - additionalFiles.flatMap(({files}) => files), - }), + chunkTitles: + additionalFiles + .map(({title}) => title), - relations: (relation, album, additionalFiles) => ({ - additionalFilesList: - relation('generateAdditionalFilesList', additionalFiles), + chunkDescriptions: + additionalFiles + .map(({description}) => description), - additionalFileLinks: - Object.fromEntries( - additionalFiles - .flatMap(({files}) => files) - .map(file => [ - file, - relation('linkAlbumAdditionalFile', album, file), - ])), + chunkItemLocations: + additionalFiles + .map(({files}) => files), }), slots: { @@ -32,17 +50,35 @@ export default { }, generate: (data, relations, slots, {getSizeOfAdditionalFile, urls}) => - relations.additionalFilesList.slots({ - fileLinks: relations.additionalFileLinks, - fileSizes: - Object.fromEntries(data.fileLocations.map(file => [ - file, - (slots.showFileSizes - ? getSizeOfAdditionalFile( - urls - .from('media.root') - .to('media.albumAdditionalFile', data.albumDirectory, file)) - : 0), - ])), + relations.list.slots({ + chunks: + stitchArrays({ + chunk: relations.chunks, + title: data.chunkTitles, + description: data.chunkDescriptions, + }).map(({chunk, title, description}) => + chunk.slots({title, description})), + + chunkItems: + stitchArrays({ + items: relations.chunkItems, + fileLinks: relations.chunkItemFileLinks, + locations: data.chunkItemLocations, + }).map(({items, fileLinks, locations}) => + stitchArrays({ + item: items, + fileLink: fileLinks, + location: locations, + }).map(({item, fileLink, location}) => + item.slots({ + fileLink: fileLink, + fileSize: + (slots.showFileSizes + ? getSizeOfAdditionalFile( + urls + .from('media.root') + .to('media.albumAdditionalFile', data.albumDirectory, location)) + : 0), + }))), }), }; -- cgit 1.3.0-6-gf8a5