« get me outta code hell

contracts: highly dysfunctional ContractManager - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateAlbumSidebarGroupBox.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2023-05-07 17:03:00 -0300
committer(quasar) nebula <qznebula@protonmail.com>2023-05-07 17:03:00 -0300
commit63b1b5b6fd14d3bacdcb979298b4fa669de4f20b (patch)
tree224ee910247a3b2ca3336e97c52101daf36866bb /src/content/dependencies/generateAlbumSidebarGroupBox.js
parent4280c6240b88dadc8e5ea187b78c10aca9dfc163 (diff)
contracts: highly dysfunctional ContractManager
Also some setup in generateAlbumTrackList in particular.
None of this works yet! Probably replacing most everything
in ContractManager, just putting this in a commit so it's
logged. (All written a few days ago.)
Diffstat (limited to 'src/content/dependencies/generateAlbumSidebarGroupBox.js')
-rw-r--r--src/content/dependencies/generateAlbumSidebarGroupBox.js68
1 files changed, 38 insertions, 30 deletions
diff --git a/src/content/dependencies/generateAlbumSidebarGroupBox.js b/src/content/dependencies/generateAlbumSidebarGroupBox.js
index 4e46c93..b3ee0ab 100644
--- a/src/content/dependencies/generateAlbumSidebarGroupBox.js
+++ b/src/content/dependencies/generateAlbumSidebarGroupBox.js
@@ -5,45 +5,53 @@ export default {
   extraDependencies: ['html', 'language', 'transformMultiline'],
 
   contracts: {
-    relations(contract, [album, group]) {
-      contract.provide({
-        group, album,
+    relations: {
+      hook(contract, [relation, album, group]) {
+        contract.provide({
+          group, album,
+
+          urls: contract.selectProperty(group, 'urls'),
+          adjacentAlbums: contract.subcontract('adjacentAlbumsInGroup', album, group),
+        });
+      },
 
-        urls: contract.selectProperty(group, 'urls'),
-        adjacentAlbums: contract.subcontract('adjacentAlbumsInGroup', album, group),
-      });
-    },
-  },
+      compute({relation, group, album, urls, adjacentAlbums}) {
+        const relations = {};
 
-  relations(relation, {group, album, urls, adjacentAlbums}) {
-    const relations = {};
+        relations.groupLink =
+          relation('linkGroup', group);
 
-    relations.groupLink =
-      relation('linkGroup', group);
+        relations.externalLinks =
+          urls.map(url =>
+            relation('linkExternal', urls));
 
-    relations.externalLinks =
-      urls.map(url =>
-        relation('linkExternal', urls));
+        const {previousAlbum, nextAlbum} = adjacentAlbums;
 
-    const {previousAlbum, nextAlbum} = adjacentAlbums;
+        if (previousAlbum) {
+          relations.previousAlbumLink =
+            relation('linkAlbum', previousAlbum);
+        }
 
-    if (previousAlbum) {
-      relations.previousAlbumLink =
-        relation('linkAlbum', previousAlbum);
-    }
+        if (nextAlbum) {
+          relations.nextAlbumLink =
+            relation('linkAlbum', nextAlbum);
+        }
 
-    if (nextAlbum) {
-      relations.nextAlbumLink =
-        relation('linkAlbum', nextAlbum);
-    }
+        return relations;
+      },
+    },
 
-    return relations;
-  },
+    data: {
+      hook(contract, [album, group]) {
+        contract.provide({
+          description: contract.selectProperty(group, 'descriptionShort'),
+        });
+      },
 
-  data(album, group) {
-    return {
-      description: group.descriptionShort,
-    };
+      compute({description}) {
+        return {description};
+      },
+    },
   },
 
   generate(data, relations, {html, language, transformMultiline}) {