« 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/composite/wiki-properties/hasArtwork.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/data/composite/wiki-properties/hasArtwork.js')
-rw-r--r--src/data/composite/wiki-properties/hasArtwork.js95
1 files changed, 40 insertions, 55 deletions
diff --git a/src/data/composite/wiki-properties/hasArtwork.js b/src/data/composite/wiki-properties/hasArtwork.js
index e403a7e2..398766c1 100644
--- a/src/data/composite/wiki-properties/hasArtwork.js
+++ b/src/data/composite/wiki-properties/hasArtwork.js
@@ -1,14 +1,7 @@
 import {input, templateCompositeFrom, V} from '#composite';
-import {isContributionList, isThing, strictArrayOf} from '#validators';
-
-import {fillMissingListItems, withFlattenedList, withPropertyFromList}
-  from '#composite/data';
-
-import {
-  exitWithoutDependency,
-  exposeWhetherDependencyAvailable,
-  withResultOfAvailabilityCheck,
-} from '#composite/control-flow';
+import {empty} from '#sugar';
+import {isBoolean, isContributionList, isThing, strictArrayOf}
+  from '#validators';
 
 export default templateCompositeFrom({
   annotation: 'hasArtwork',
@@ -30,61 +23,53 @@ export default templateCompositeFrom({
     }),
   },
 
+  update: {
+    validate: isBoolean,
+  },
+
   compose: false,
 
   steps: () => [
-    withResultOfAvailabilityCheck({
-      from: input('contribs'),
-      mode: input.value('empty'),
-    }),
-
     {
-      dependencies: ['#availability'],
-      compute: (continuation, {
-        ['#availability']: availability,
-      }) =>
-        (availability
-          ? true
-          : continuation()),
+      transform(value, continuation) {
+        if (value === true) {
+          return true;
+        }
+
+        if (value === false) {
+          return false;
+        }
+
+        return continuation();
+      },
     },
 
     {
-      dependencies: [input('artwork'), input('artworks')],
-      compute: (continuation, {
+      dependencies: [
+        input('contribs'),
+        input('artwork'),
+        input('artworks'),
+      ],
+
+      compute({
+        [input('contribs')]: contribs,
         [input('artwork')]: artwork,
         [input('artworks')]: artworks,
-      }) =>
-        continuation({
-          ['#artworks']:
-            (artwork && artworks
-              ? [artwork, ...artworks]
-           : artwork
-              ? [artwork]
-           : artworks
-              ? artworks
-              : []),
-        }),
-    },
-
-    exitWithoutDependency('#artworks', {
-      value: input.value(false),
-      mode: input.value('empty'),
-    }),
+      }) {
+        if (!empty(contribs)) {
+          return true;
+        }
 
-    withPropertyFromList('#artworks', {
-      property: input.value('artistContribs'),
-      internal: input.value(true),
-    }),
-
-    // Since we're getting the update value for each artwork's artistContribs,
-    // it may not be set at all, and in that case won't be exposing as [].
-    fillMissingListItems('#artworks.artistContribs', V([])),
+        if (artwork) {
+          return true;
+        }
 
-    withFlattenedList('#artworks.artistContribs'),
+        if (!empty(artworks)) {
+          return true;
+        }
 
-    exposeWhetherDependencyAvailable({
-      dependency: '#flattenedList',
-      mode: input.value('empty'),
-    }),
+        return false;
+      },
+    },
   ],
-});
\ No newline at end of file
+});