« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data
diff options
context:
space:
mode:
Diffstat (limited to 'src/data')
-rw-r--r--src/data/composite/things/contribution/inheritFromContributionPresets.js6
-rw-r--r--src/data/things/artist.js23
-rw-r--r--src/data/things/contribution.js8
-rw-r--r--src/data/things/track.js21
4 files changed, 40 insertions, 18 deletions
diff --git a/src/data/composite/things/contribution/inheritFromContributionPresets.js b/src/data/composite/things/contribution/inheritFromContributionPresets.js
index 17387404..1cefae1b 100644
--- a/src/data/composite/things/contribution/inheritFromContributionPresets.js
+++ b/src/data/composite/things/contribution/inheritFromContributionPresets.js
@@ -41,10 +41,8 @@ export default templateCompositeFrom({
       compute: (continuation, {
         ['#values']: values,
         ['#index']: index,
-      }) => continuation({
-        ['#value']:
-          values[index],
-      }),
+      }) =>
+        continuation.exit(values[index]),
     },
   ],
 });
diff --git a/src/data/things/artist.js b/src/data/things/artist.js
index a2ed0b74..01eb2172 100644
--- a/src/data/things/artist.js
+++ b/src/data/things/artist.js
@@ -43,7 +43,7 @@ export class Artist extends Thing {
     'avatarArtwork', // from inline fields
   ];
 
-  static [Thing.getPropertyDescriptors] = () => ({
+  static [Thing.getPropertyDescriptors] = ({Contribution}) => ({
     // Update & expose
 
     name: name(V('Unnamed Artist')),
@@ -78,6 +78,27 @@ export class Artist extends Thing {
 
     isArtist: exposeConstant(V(true)),
 
+    mockSimpleContribution: {
+      flags: {expose: true},
+      expose: {
+        dependencies: ['directory', '_find'],
+        compute: ({directory, _find: find}) =>
+          Object.assign(new Contribution, {
+            artist: 'artist:' + directory,
+
+            // These nulls have no effect, they're only included
+            // here for clarity.
+            date: null,
+            thing: null,
+            annotation: null,
+            artistProperty: null,
+            thingProperty: null,
+
+            find,
+          }),
+      },
+    },
+
     trackArtistContributions: reverseReferenceList({
       reverse: soupyReverse.input('trackArtistContributionsBy'),
     }),
diff --git a/src/data/things/contribution.js b/src/data/things/contribution.js
index 393a60b4..778bc566 100644
--- a/src/data/things/contribution.js
+++ b/src/data/things/contribution.js
@@ -62,12 +62,12 @@ export class Contribution extends Thing {
     },
 
     countInContributionTotals: [
-      inheritFromContributionPresets(),
-
       exposeUpdateValueOrContinue({
         validate: input.value(isBoolean),
       }),
 
+      inheritFromContributionPresets(),
+
       {
         dependencies: ['thing', input.myself()],
         compute: (continuation, {
@@ -85,12 +85,12 @@ export class Contribution extends Thing {
     ],
 
     countInDurationTotals: [
-      inheritFromContributionPresets(),
-
       exposeUpdateValueOrContinue({
         validate: input.value(isBoolean),
       }),
 
+      inheritFromContributionPresets(),
+
       withPropertyFromObject('thing', V('duration')),
       exitWithoutDependency('#thing.duration', {
         value: input.value(false),
diff --git a/src/data/things/track.js b/src/data/things/track.js
index f77cfa41..3c4b5409 100644
--- a/src/data/things/track.js
+++ b/src/data/things/track.js
@@ -289,12 +289,20 @@ export class Track extends Thing {
     ],
 
     contributorContribs: [
-      inheritContributionListFromMainRelease(),
-
-      contributionList({
+      withResolvedContribs({
+        from: input.updateValue({validate: isContributionList}),
         date: 'date',
-        artistProperty: input.value('trackContributorContributions'),
+        thingProperty: input.thisProperty(),
+        artistProperty: input.value('trackArtistContributions'),
+      }).outputs({
+        '#resolvedContribs': '#contributorContribs',
       }),
+
+      exposeDependencyOrContinue('#contributorContribs', V('empty')),
+
+      inheritContributionListFromMainRelease(),
+
+      exposeConstant(V([])),
     ],
 
     // > Update & expose - General configuration
@@ -1047,11 +1055,6 @@ export class Track extends Thing {
         'Sampled Tracks',
       ]},
 
-      {message: `Secondary releases inherit contributors from the main one`, fields: [
-        'Main Release',
-        'Contributors',
-      ]},
-
       {
         message: ({'Has Cover Art': hasCoverArt}) =>
           (hasCoverArt