« get me outta code hell

data: Contribution: chop withMatchingContributionPresets - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/things
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-11-27 17:43:01 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-11-27 17:43:01 -0400
commit458e7bc34fb5c313f45bb3be00877fed0c276678 (patch)
tree600cea11a7db0a010c21384a16c84281c7145bff /src/data/things
parentd08cb46607d19326cb4021a26fc9c8a20a6ae6d7 (diff)
data: Contribution: chop withMatchingContributionPresets
Diffstat (limited to 'src/data/things')
-rw-r--r--src/data/things/contribution.js62
1 files changed, 52 insertions, 10 deletions
diff --git a/src/data/things/contribution.js b/src/data/things/contribution.js
index 2f6e66d1..41b57b7b 100644
--- a/src/data/things/contribution.js
+++ b/src/data/things/contribution.js
@@ -30,7 +30,6 @@ import {
   inheritFromContributionPresets,
   withContainingReverseContributionList,
   withContributionContext,
-  withMatchingContributionPresets,
 } from '#composite/things/contribution';
 
 export class Contribution extends Thing {
@@ -64,9 +63,7 @@ export class Contribution extends Thing {
     },
 
     countInContributionTotals: [
-      inheritFromContributionPresets({
-        property: input.thisProperty(),
-      }),
+      inheritFromContributionPresets(),
 
       exposeUpdateValueOrContinue({
         validate: input.value(isBoolean),
@@ -91,9 +88,7 @@ export class Contribution extends Thing {
     ],
 
     countInDurationTotals: [
-      inheritFromContributionPresets({
-        property: input.thisProperty(),
-      }),
+      inheritFromContributionPresets(),
 
       exposeUpdateValueOrContinue({
         validate: input.value(isBoolean),
@@ -160,11 +155,58 @@ export class Contribution extends Thing {
     ],
 
     matchingPresets: [
-      withMatchingContributionPresets(),
+      withPropertyFromObject({
+        object: 'thing',
+        property: input.value('wikiInfo'),
+        internal: input.value(true),
+      }),
 
-      exposeDependency({
-        dependency: '#matchingContributionPresets',
+      exitWithoutDependency({
+        dependency: '#thing.wikiInfo',
+        value: input.value([]),
+      }),
+
+      withPropertyFromObject({
+        object: '#thing.wikiInfo',
+        property: input.value('contributionPresets'),
+      }).outputs({
+        '#thing.wikiInfo.contributionPresets': '#contributionPresets',
+      }),
+
+      exitWithoutDependency({
+        dependency: '#contributionPresets',
+        mode: input.value('empty'),
+        value: input.value([]),
       }),
+
+      withContributionContext(),
+
+      {
+        dependencies: [
+          '#contributionPresets',
+          '#contributionTarget',
+          '#contributionProperty',
+          'annotation',
+        ],
+
+        compute: (continuation, {
+          ['#contributionPresets']: presets,
+          ['#contributionTarget']: target,
+          ['#contributionProperty']: property,
+          ['annotation']: annotation,
+        }) => continuation({
+          ['#matchingContributionPresets']:
+            presets
+              .filter(preset =>
+                preset.context[0] === target &&
+                preset.context.slice(1).includes(property) &&
+                // For now, only match if the annotation is a complete match.
+                // Partial matches (e.g. because the contribution includes "two"
+                // annotations, separated by commas) don't count.
+                preset.annotation === annotation),
+        })
+      },
+
     ],
 
     // All the contributions from the list which includes this contribution.