« 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/generateCommentaryIndexPage.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies/generateCommentaryIndexPage.js')
-rw-r--r--src/content/dependencies/generateCommentaryIndexPage.js87
1 files changed, 43 insertions, 44 deletions
diff --git a/src/content/dependencies/generateCommentaryIndexPage.js b/src/content/dependencies/generateCommentaryIndexPage.js
index d68ba42e..ced5dddd 100644
--- a/src/content/dependencies/generateCommentaryIndexPage.js
+++ b/src/content/dependencies/generateCommentaryIndexPage.js
@@ -1,13 +1,16 @@
 import {sortChronologically} from '#sort';
-import {accumulateSum, filterMultipleArrays, stitchArrays} from '#sugar';
 
-export default {
-  contentDependencies: ['generatePageLayout', 'linkAlbumCommentary'],
-  extraDependencies: ['html', 'language', 'wikiData'],
+import {
+  accumulateSum,
+  empty,
+  filterMultipleArrays,
+  stitchArrays,
+  transposeArrays,
+} from '#sugar';
 
-  sprawl({albumData}) {
-    return {albumData};
-  },
+export default {
+  sprawl: ({albumData}) =>
+    ({albumData}),
 
   query(sprawl) {
     const query = {};
@@ -15,50 +18,45 @@ export default {
     query.albums =
       sortChronologically(sprawl.albumData.slice());
 
-    const entries =
+    query.entries =
       query.albums.map(album =>
         [album, ...album.tracks]
-          .filter(({commentary}) => commentary)
           .flatMap(({commentary}) => commentary));
 
-    query.wordCounts =
-      entries.map(entries =>
-        accumulateSum(
-          entries,
-          entry => entry.body.split(' ').length));
-
-    query.entryCounts =
-      entries.map(entries => entries.length);
-
-    filterMultipleArrays(query.albums, query.wordCounts, query.entryCounts,
-      (album, wordCount, entryCount) => entryCount >= 1);
+    filterMultipleArrays(query.albums, query.entries,
+      (_album, entries) => !empty(entries));
 
     return query;
   },
 
-  relations(relation, query) {
-    return {
-      layout:
-        relation('generatePageLayout'),
+  relations: (relation, query) => ({
+    layout:
+      relation('generatePageLayout'),
 
-      albumLinks:
-        query.albums
-          .map(album => relation('linkAlbumCommentary', album)),
-    };
-  },
+    albumLinks:
+      query.albums
+        .map(album => relation('linkAlbumCommentary', album)),
 
-  data(query) {
-    return {
-      wordCounts: query.wordCounts,
-      entryCounts: query.entryCounts,
+    albumTotals:
+      query.entries
+        .map(entries => relation('getContentEntryTotals', entries)),
+  }),
 
-      totalWordCount: accumulateSum(query.wordCounts),
-      totalEntryCount: accumulateSum(query.entryCounts),
-    };
-  },
+  generate(relations, {html, language}) {
+    const [wordCounts, entryCounts] =
+      transposeArrays(
+        relations.albumTotals.map(totals => [
+          totals.wordCount,
+          totals.entryCount,
+        ]));
+
+    const totalWordCount =
+      accumulateSum(wordCounts);
 
-  generate: (data, relations, {html, language}) =>
-    language.encapsulate('commentaryIndex', pageCapsule =>
+    const totalEntryCount =
+      accumulateSum(entryCounts);
+
+    return language.encapsulate('commentaryIndex', pageCapsule =>
       relations.layout.slots({
         title: language.$(pageCapsule, 'title'),
 
@@ -69,11 +67,11 @@ export default {
           html.tag('p', language.$(pageCapsule, 'infoLine', {
             words:
               html.tag('b',
-                language.formatWordCount(data.totalWordCount, {unit: true})),
+                language.formatWordCount(totalWordCount, {unit: true})),
 
             entries:
               html.tag('b',
-                  language.countCommentaryEntries(data.totalEntryCount, {unit: true})),
+                language.countCommentaryEntries(totalEntryCount, {unit: true})),
           })),
 
           language.encapsulate(pageCapsule, 'albumList', listCapsule => [
@@ -83,8 +81,8 @@ export default {
             html.tag('ul',
               stitchArrays({
                 albumLink: relations.albumLinks,
-                wordCount: data.wordCounts,
-                entryCount: data.entryCounts,
+                wordCount: wordCounts,
+                entryCount: entryCounts,
               }).map(({albumLink, wordCount, entryCount}) =>
                 html.tag('li',
                   language.$(listCapsule, 'item', {
@@ -100,5 +98,6 @@ export default {
           {auto: 'home'},
           {auto: 'current'},
         ],
-      })),
+      }));
+  },
 };