« get me outta code hell

data: factor out withHasAnnotationPart - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/composite/things/content/withHasAnnotationPart.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-05-06 13:36:41 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-05-06 13:36:53 -0300
commitaf1db3b02a4e5791aeb46c1f253989a3b10815ac (patch)
tree71cb2f96e7edde3f3a4357669283b1872ae0f1ba /src/data/composite/things/content/withHasAnnotationPart.js
parent95cc0b6e8c9374e351ae8e985b03887c7155b138 (diff)
data: factor out withHasAnnotationPart
Diffstat (limited to 'src/data/composite/things/content/withHasAnnotationPart.js')
-rw-r--r--src/data/composite/things/content/withHasAnnotationPart.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/data/composite/things/content/withHasAnnotationPart.js b/src/data/composite/things/content/withHasAnnotationPart.js
new file mode 100644
index 00000000..4af554f3
--- /dev/null
+++ b/src/data/composite/things/content/withHasAnnotationPart.js
@@ -0,0 +1,43 @@
+import {input, templateCompositeFrom} from '#composite';
+
+import {raiseOutputWithoutDependency} from '#composite/control-flow';
+
+import withAnnotationParts from './withAnnotationParts.js';
+
+export default templateCompositeFrom({
+  annotation: `withHasAnnotationPart`,
+
+  inputs: {
+    part: input({type: 'string'}),
+  },
+
+  outputs: ['#hasAnnotationPart'],
+
+  steps: () => [
+    withAnnotationParts({
+      mode: input.value('strings'),
+    }),
+
+    raiseOutputWithoutDependency({
+      dependency: '#annotationParts',
+      output: input.value({'#hasAnnotationPart': false}),
+    }),
+
+    {
+      dependencies: [
+        input('part'),
+        '#annotationParts',
+      ],
+
+      compute: (continuation, {
+        [input('part')]: search,
+        ['#annotationParts']: parts,
+      }) => continuation({
+        ['#hasAnnotationPart']:
+          parts.some(part =>
+            part.toLowerCase() ===
+            search.toLowerCase()),
+      }),
+    },
+  ],
+});