« get me outta code hell

data: contributionList, etc: class input - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2026-01-26 12:46:43 -0400
committer(quasar) nebula <qznebula@protonmail.com>2026-01-26 12:46:43 -0400
commitabbf493b43d0939c1dc6d4d91c10d6b90884b84e (patch)
treebb5d5d4ae226706133418e39822a54653c0df711
parentcde3475836ffedcd06cc7bfb8a6dd1a5bd64dfcc (diff)
data: contributionList, etc: class input
-rw-r--r--src/data/composite/wiki-data/withResolvedContribs.js23
-rw-r--r--src/data/composite/wiki-properties/contributionList.js9
2 files changed, 29 insertions, 3 deletions
diff --git a/src/data/composite/wiki-data/withResolvedContribs.js b/src/data/composite/wiki-data/withResolvedContribs.js
index 7729d5b6..0d96f1b7 100644
--- a/src/data/composite/wiki-data/withResolvedContribs.js
+++ b/src/data/composite/wiki-data/withResolvedContribs.js
@@ -7,7 +7,8 @@
 import {input, templateCompositeFrom} from '#composite';
 import {filterMultipleArrays, stitchArrays} from '#sugar';
 import thingConstructors from '#things';
-import {isContributionList, isDate, isStringNonEmpty} from '#validators';
+import {isContributionList, isDate, isStringNonEmpty, isThingClass}
+  from '#validators';
 
 import {raiseOutputWithoutDependency, withAvailabilityFilter}
   from '#composite/control-flow';
@@ -25,6 +26,11 @@ export default templateCompositeFrom({
       acceptsNull: true,
     }),
 
+    class: input({
+      validate: isThingClass,
+      defaultValue: null,
+    }),
+
     date: input({
       validate: isDate,
       acceptsNull: true,
@@ -106,9 +112,21 @@ export default templateCompositeFrom({
     },
 
     {
+      dependencies: [input('class')],
+      compute: (continuation, {
+        [input('class')]: classInput,
+      }) => continuation({
+        ['#contributionConstructor']:
+          classInput ??
+          thingConstructors.Contribution,
+      }),
+    },
+
+    {
       dependencies: [
         '#details',
         '#thingProperty',
+        '#contributionConstructor',
         input('artistProperty'),
         input.myself(),
         '_find',
@@ -117,13 +135,14 @@ export default templateCompositeFrom({
       compute: (continuation, {
         ['#details']: details,
         ['#thingProperty']: thingProperty,
+        ['#contributionConstructor']: contributionConstructor,
         [input('artistProperty')]: artistProperty,
         [input.myself()]: myself,
         ['_find']: find,
       }) => continuation({
         ['#contributions']:
           details.map(details => {
-            const contrib = new thingConstructors.Contribution();
+            const contrib = Reflect.construct(contributionConstructor, []);
 
             Object.assign(contrib, {
               ...details,
diff --git a/src/data/composite/wiki-properties/contributionList.js b/src/data/composite/wiki-properties/contributionList.js
index 04f93b52..76c296a6 100644
--- a/src/data/composite/wiki-properties/contributionList.js
+++ b/src/data/composite/wiki-properties/contributionList.js
@@ -15,7 +15,8 @@
 //
 
 import {input, templateCompositeFrom} from '#composite';
-import {isContributionList, isDate, isStringNonEmpty} from '#validators';
+import {isContributionList, isDate, isStringNonEmpty, isThingClass}
+  from '#validators';
 
 import {exposeConstant, exposeDependencyOrContinue} from '#composite/control-flow';
 import {withResolvedContribs} from '#composite/wiki-data';
@@ -26,6 +27,11 @@ export default templateCompositeFrom({
   compose: false,
 
   inputs: {
+    class: input({
+      defaultValue: null,
+      validate: isThingClass,
+    }),
+
     date: input({
       validate: isDate,
       acceptsNull: true,
@@ -43,6 +49,7 @@ export default templateCompositeFrom({
   steps: () => [
     withResolvedContribs({
       from: input.updateValue(),
+      class: input('class'),
       date: input('date'),
       thingProperty: input.thisProperty(),
       artistProperty: input('artistProperty'),