« get me outta code hell

data: Artwork: withAttachedArtwork & friends - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/composite
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-04-23 14:40:15 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-04-23 14:40:24 -0300
commit0df2ba538cfced993ec6794a589512302a62373d (patch)
tree342d6cce5acd37555940a483b3c1aefb3222394a /src/data/composite
parentca8121c2225fe7dfa97c604ca08ae241e5fe84d7 (diff)
data: Artwork: withAttachedArtwork & friends
Diffstat (limited to 'src/data/composite')
-rw-r--r--src/data/composite/things/artwork/index.js4
-rw-r--r--src/data/composite/things/artwork/withAttachedArtwork.js43
-rw-r--r--src/data/composite/things/artwork/withContribsFromAttachedArtwork.js (renamed from src/data/composite/things/artwork/withContribsFromMainArtwork.js)15
-rw-r--r--src/data/composite/things/artwork/withPropertyFromAttachedArtwork.js65
-rw-r--r--src/data/composite/things/artwork/withPropertyFromMainArtwork.js100
5 files changed, 117 insertions, 110 deletions
diff --git a/src/data/composite/things/artwork/index.js b/src/data/composite/things/artwork/index.js
index 5a592777..f26f7c69 100644
--- a/src/data/composite/things/artwork/index.js
+++ b/src/data/composite/things/artwork/index.js
@@ -1,4 +1,4 @@
 export {default as withContainingArtworkList} from './withContainingArtworkList.js';
-export {default as withContribsFromMainArtwork} from './withContribsFromMainArtwork.js';
+export {default as withContribsFromAttachedArtwork} from './withContribsFromAttachedArtwork.js';
 export {default as withDate} from './withDate.js';
-export {default as withPropertyFromMainArtwork} from './withPropertyFromMainArtwork.js';
+export {default as withPropertyFromAttachedArtwork} from './withPropertyFromAttachedArtwork.js';
diff --git a/src/data/composite/things/artwork/withAttachedArtwork.js b/src/data/composite/things/artwork/withAttachedArtwork.js
new file mode 100644
index 00000000..d7c0d87b
--- /dev/null
+++ b/src/data/composite/things/artwork/withAttachedArtwork.js
@@ -0,0 +1,43 @@
+import {input, templateCompositeFrom} from '#composite';
+
+import {flipFilter, raiseOutputWithoutDependency}
+  from '#composite/control-flow';
+import {withNearbyItemFromList, withPropertyFromList} from '#composite/data';
+
+import withContainingArtworkList from './withContainingArtworkList.js';
+
+export default templateCompositeFrom({
+  annotaion: `withContribsFromMainArtwork`,
+
+  outputs: ['#attachedArtwork'],
+
+  steps: () => [
+    raiseOutputWithoutDependency({
+      dependency: 'attachAbove',
+      mode: input.value('falsy'),
+      output: input.value({'#attachedArtwork': null}),
+    }),
+
+    withContainingArtworkList(),
+
+    withPropertyFromList({
+      list: '#containingArtworkList',
+      property: input.value('attachAbove'),
+    }),
+
+    flipFilter({
+      filter: '#containingArtworkList.attachAbove',
+    }).outputs({
+      '#containingArtworkList.attachAbove': '#filterNotAttached',
+    }),
+
+    withNearbyItemFromList({
+      list: '#containingArtworkList',
+      item: input.myself(),
+      offset: input.value(-1),
+      filter: '#filterNotAttached',
+    }).outputs({
+      '#nearbyItem': '#attachedArtwork',
+    }),
+  ],
+});
diff --git a/src/data/composite/things/artwork/withContribsFromMainArtwork.js b/src/data/composite/things/artwork/withContribsFromAttachedArtwork.js
index 25616ad6..36abb3fe 100644
--- a/src/data/composite/things/artwork/withContribsFromMainArtwork.js
+++ b/src/data/composite/things/artwork/withContribsFromAttachedArtwork.js
@@ -4,26 +4,25 @@ import {raiseOutputWithoutDependency} from '#composite/control-flow';
 import {withPropertyFromObject} from '#composite/data';
 import {withRecontextualizedContributionList} from '#composite/wiki-data';
 
-import withPropertyFromMainArtwork from './withPropertyFromMainArtwork.js';
+import withPropertyFromAttachedArtwork from './withPropertyFromAttachedArtwork.js';
 
 export default templateCompositeFrom({
-  annotaion: `withContribsFromMainArtwork`,
+  annotaion: `withContribsFromAttachedArtwork`,
 
-  outputs: ['#mainArtwork.artistContribs'],
+  outputs: ['#attachedArtwork.artistContribs'],
 
   steps: () => [
-    withPropertyFromMainArtwork({
+    withPropertyFromAttachedArtwork({
       property: input.value('artistContribs'),
-      onlyIfAttached: input.value(true),
     }),
 
     raiseOutputWithoutDependency({
-      dependency: '#mainArtwork.artistContribs',
-      output: input.value({'#mainArtwork.artistContribs': null}),
+      dependency: '#attachedArtwork.artistContribs',
+      output: input.value({'#attachedArtwork.artistContribs': null}),
     }),
 
     withRecontextualizedContributionList({
-      list: '#mainArtwork.artistContribs',
+      list: '#attachedArtwork.artistContribs',
     }),
   ],
 });
diff --git a/src/data/composite/things/artwork/withPropertyFromAttachedArtwork.js b/src/data/composite/things/artwork/withPropertyFromAttachedArtwork.js
new file mode 100644
index 00000000..a2f954b9
--- /dev/null
+++ b/src/data/composite/things/artwork/withPropertyFromAttachedArtwork.js
@@ -0,0 +1,65 @@
+import {input, templateCompositeFrom} from '#composite';
+
+import {withResultOfAvailabilityCheck} from '#composite/control-flow';
+import {withPropertyFromObject} from '#composite/data';
+
+import withAttachedArtwork from './withAttachedArtwork.js';
+
+function getOutputName({
+  [input.staticValue('property')]: property,
+}) {
+  if (property) {
+    return `#attachedArtwork.${property}`;
+  } else {
+    return '#value';
+  }
+}
+
+export default templateCompositeFrom({
+  annotation: `withPropertyFromAttachedArtwork`,
+
+  inputs: {
+    property: input({type: 'string'}),
+  },
+
+  outputs: inputs => [getOutputName(inputs)],
+
+  steps: () => [
+    {
+      dependencies: [input.staticValue('property')],
+      compute: (continuation, inputs) =>
+        continuation({'#output': getOutputName(inputs)}),
+    },
+
+    withAttachedArtwork(),
+
+    withResultOfAvailabilityCheck({
+      from: '#attachedArtwork',
+    }),
+
+    {
+      dependencies: ['#availability', '#output'],
+      compute: (continuation, {
+        ['#availability']: availability,
+        ['#output']: output,
+      }) =>
+        (availability
+          ? continuation()
+          : continuation.raiseOutput({[output]: null})),
+    },
+
+    withPropertyFromObject({
+      object: '#attachedArtwork',
+      property: input('property'),
+    }),
+
+    {
+      dependencies: ['#value', '#output'],
+      compute: (continuation, {
+        ['#value']: value,
+        ['#output']: output,
+      }) =>
+        continuation.raiseOutput({[output]: value}),
+    },
+  ],
+});
diff --git a/src/data/composite/things/artwork/withPropertyFromMainArtwork.js b/src/data/composite/things/artwork/withPropertyFromMainArtwork.js
deleted file mode 100644
index a0233119..00000000
--- a/src/data/composite/things/artwork/withPropertyFromMainArtwork.js
+++ /dev/null
@@ -1,100 +0,0 @@
-import {input, templateCompositeFrom} from '#composite';
-
-import {withResultOfAvailabilityCheck} from '#composite/control-flow';
-import {withPropertyFromObject} from '#composite/data';
-
-import withContainingArtworkList from './withContainingArtworkList.js';
-
-function getOutputName({
-  [input.staticValue('property')]: property,
-}) {
-  if (property) {
-    return `#mainArtwork.${property}`;
-  } else {
-    return '#value';
-  }
-}
-
-export default templateCompositeFrom({
-  annotation: `withPropertyFromMainArtwork`,
-
-  inputs: {
-    property: input({type: 'string'}),
-    onlyIfAttached: input({type: 'boolean', defaultValue: false}),
-  },
-
-  outputs: inputs => [getOutputName(inputs)],
-
-  steps: () => [
-    {
-      dependencies: [input.staticValue('property')],
-      compute: (continuation, inputs) =>
-        continuation({'#output': getOutputName(inputs)}),
-    },
-
-    {
-      dependencies: [input('onlyIfAttached'), 'attachAbove', '#output'],
-      compute: (continuation, {
-        [input('onlyIfAttached')]: onlyIfAttached,
-        ['attachAbove']: attachAbove,
-        ['#output']: output,
-      }) =>
-        (onlyIfAttached && attachAbove
-          ? continuation()
-       : onlyIfAttached
-          ? continuation.raiseOutput({[output]: null})
-          : continuation()),
-    },
-
-    withContainingArtworkList(),
-
-    withResultOfAvailabilityCheck({
-      from: '#containingArtworkList',
-    }),
-
-    {
-      dependencies: ['#availability', '#output'],
-      compute: (continuation, {
-        ['#availability']: availability,
-        ['#output']: output,
-      }) =>
-        (availability
-          ? continuation()
-          : continuation.raiseOutput({[output]: null})),
-    },
-
-    {
-      dependencies: ['#containingArtworkList'],
-      compute: (continuation, {
-        ['#containingArtworkList']: list,
-      }) =>
-        continuation({'#mainArtwork': list[0]}),
-    },
-
-    {
-      dependencies: [input.myself(), '#mainArtwork', '#output'],
-      compute: (continuation, {
-        [input.myself()]: myself,
-        ['#mainArtwork']: mainArtwork,
-        ['#output']: output,
-      }) =>
-        (myself === mainArtwork
-          ? continuation.raiseOutput({[output]: null})
-          : continuation()),
-    },
-
-    withPropertyFromObject({
-      object: '#mainArtwork',
-      property: input('property'),
-    }),
-
-    {
-      dependencies: ['#value', '#output'],
-      compute: (continuation, {
-        ['#value']: value,
-        ['#output']: output,
-      }) =>
-        continuation.raiseOutput({[output]: value}),
-    },
-  ],
-});