« 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/generateAlbumAdditionalFilesList.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies/generateAlbumAdditionalFilesList.js')
-rw-r--r--src/content/dependencies/generateAlbumAdditionalFilesList.js88
1 files changed, 62 insertions, 26 deletions
diff --git a/src/content/dependencies/generateAlbumAdditionalFilesList.js b/src/content/dependencies/generateAlbumAdditionalFilesList.js
index 06694c9..3ab0e27 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),
+                }))),
     }),
 };