« 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/generateTrackInfoPagePreviousProductionLine.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies/generateTrackInfoPagePreviousProductionLine.js')
-rw-r--r--src/content/dependencies/generateTrackInfoPagePreviousProductionLine.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/content/dependencies/generateTrackInfoPagePreviousProductionLine.js b/src/content/dependencies/generateTrackInfoPagePreviousProductionLine.js
new file mode 100644
index 00000000..f7f455c1
--- /dev/null
+++ b/src/content/dependencies/generateTrackInfoPagePreviousProductionLine.js
@@ -0,0 +1,38 @@
+import {stitchArrays} from '#sugar';
+import {getKebabCase} from '#wiki-data';
+
+export default {
+  relations: (relation, track) => ({
+    trackLinks:
+      track.followingProductionTracks
+        .map(track => relation('linkTrack', track)),
+
+    albumLinks:
+      track.followingProductionTracks
+        .map(following =>
+          (following.album !== track.album &&
+           getKebabCase(following.name) === getKebabCase(track.name)
+
+            ? relation('linkAlbum', following.album)
+            : null)),
+  }),
+
+  generate: (relations, {language}) =>
+    language.encapsulate('releaseInfo.previousProduction', capsule =>
+      language.$(capsule, {
+        [language.onlyIfOptions]: ['tracks'],
+
+        tracks:
+          language.formatConjunctionList(
+            stitchArrays({
+              trackLink: relations.trackLinks,
+              albumLink: relations.albumLinks,
+            }).map(({trackLink, albumLink}) =>
+                (albumLink
+                  ? language.$(capsule, 'trackOnAlbum', {
+                      track: trackLink,
+                      album: albumLink,
+                    })
+                  : trackLink))),
+      })),
+};