« get me outta code hell

data, content: stub multiple artworks - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/composite/wiki-properties/constitutibleArtworkList.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-04-02 15:10:58 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-04-10 16:02:38 -0300
commit58fba5a7a859c5398e0e58f31d7e8e5a649db63b (patch)
tree39f4ac7ed8292d2af453263f63ecdfaf93cba42d /src/data/composite/wiki-properties/constitutibleArtworkList.js
parent4030a62fc518627071dc792e2754d9d99fa46546 (diff)
data, content: stub multiple artworks
Only for tracks as of this commit, most anything else is in a
severely broken state aye
Diffstat (limited to 'src/data/composite/wiki-properties/constitutibleArtworkList.js')
-rw-r--r--src/data/composite/wiki-properties/constitutibleArtworkList.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/data/composite/wiki-properties/constitutibleArtworkList.js b/src/data/composite/wiki-properties/constitutibleArtworkList.js
new file mode 100644
index 00000000..01429f03
--- /dev/null
+++ b/src/data/composite/wiki-properties/constitutibleArtworkList.js
@@ -0,0 +1,70 @@
+import {input, templateCompositeFrom} from '#composite';
+import {isContributionList, isDate, validateWikiData} from '#validators';
+
+import {exitWithoutDependency, exposeUpdateValueOrContinue}
+  from '#composite/control-flow';
+import {withConstitutedArtwork} from '#composite/wiki-data';
+
+export default templateCompositeFrom({
+  annotation: `constitutibleArtwork`,
+
+  compose: false,
+
+  inputs: {
+    contribs: input.staticDependency({
+      validate: isContributionList,
+      acceptsNull: true,
+    }),
+
+    date: input.staticDependency({
+      validate: isDate,
+      acceptsNull: true,
+    }),
+
+    artistProperty: input.staticValue({
+      type: 'string',
+    }),
+  },
+
+  steps: () => [
+    exposeUpdateValueOrContinue({
+      validate: input.value(
+        validateWikiData({
+          referenceType: 'artwork',
+        })),
+    }),
+
+    exitWithoutDependency({
+      dependency: input('contribs'),
+      value: input.value([]),
+    }),
+
+    {
+      dependencies: [
+        input.staticDependency('contribs'),
+        input.staticDependency('date'),
+      ],
+
+      compute: (continuation, {
+        [input.staticDependency('contribs')]: contribsProperty,
+        [input.staticDependency('date')]: dateProperty,
+      }) => continuation({
+        ['#contribsProperty']: contribsProperty,
+        ['#dateProperty']: dateProperty,
+      })
+    },
+
+    withConstitutedArtwork({
+      contribsProperty: '#contribsProperty',
+      artistProperty: input('artistProperty'),
+      dateProperty: '#dateProperty',
+    }),
+
+    {
+      dependencies: ['#constitutedArtwork'],
+      compute: ({
+        ['#constitutedArtwork']: constitutedArtwork,
+      }) => [constitutedArtwork],
+    },
+  ],
+});