« 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/generateNearbyTrackList.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies/generateNearbyTrackList.js')
-rw-r--r--src/content/dependencies/generateNearbyTrackList.js44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/content/dependencies/generateNearbyTrackList.js b/src/content/dependencies/generateNearbyTrackList.js
new file mode 100644
index 00000000..56ab2df5
--- /dev/null
+++ b/src/content/dependencies/generateNearbyTrackList.js
@@ -0,0 +1,44 @@
+export default {
+  query: (tracks, contextTrack, _contextContributions) => ({
+    presentedTracks:
+      (contextTrack
+        ? tracks.map(track =>
+            track.otherReleases.find(({album}) => album === contextTrack.album) ??
+            track)
+        : tracks),
+  }),
+
+  relations: (relation, query, _tracks, _contextTrack, contextContributions) => ({
+    items:
+      query.presentedTracks
+        .map(track => relation('generateTrackListItem', track, contextContributions)),
+  }),
+
+  slots: {
+    showArtists: {
+      validate: v => v.is(true, false, 'auto'),
+      default: 'auto',
+    },
+
+    showDuration: {
+      type: 'boolean',
+      default: false,
+    },
+
+    colorMode: {
+      validate: v => v.is('none', 'track', 'line'),
+      default: 'track',
+    },
+  },
+
+  generate: (relations, slots, {html}) =>
+    html.tag('ul',
+      {[html.onlyIfContent]: true},
+
+      relations.items.map(item =>
+        item.slots({
+          showArtists: slots.showArtists,
+          showDuration: slots.showDuration,
+          colorMode: slots.colorMode,
+        }))),
+};