« get me outta code hell

Merge branch 'shared-additional-names' into preview - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/composite/things/track/trackAdditionalNameList.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2023-12-03 17:50:39 -0400
committer(quasar) nebula <qznebula@protonmail.com>2023-12-03 17:50:39 -0400
commit2d054508f58147f5968a10f39c2f87ba62dd91f7 (patch)
tree2f808645119b9062a4e0ea1a3a9e8256f84af7e8 /src/data/composite/things/track/trackAdditionalNameList.js
parent7ad62ef4a6908a550d5b48ae93877446088d4d82 (diff)
parentc336352a915245e28e08498de61808c96daa3dcf (diff)
Merge branch 'shared-additional-names' into preview
Diffstat (limited to 'src/data/composite/things/track/trackAdditionalNameList.js')
-rw-r--r--src/data/composite/things/track/trackAdditionalNameList.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/data/composite/things/track/trackAdditionalNameList.js b/src/data/composite/things/track/trackAdditionalNameList.js
new file mode 100644
index 00000000..65a2263d
--- /dev/null
+++ b/src/data/composite/things/track/trackAdditionalNameList.js
@@ -0,0 +1,38 @@
+// Compiles additional names from various sources.
+
+import {input, templateCompositeFrom} from '#composite';
+import {isAdditionalNameList} from '#validators';
+
+import withInferredAdditionalNames from './withInferredAdditionalNames.js';
+import withSharedAdditionalNames from './withSharedAdditionalNames.js';
+
+export default templateCompositeFrom({
+  annotation: `trackAdditionalNameList`,
+
+  compose: false,
+
+  update: {validate: isAdditionalNameList},
+
+  steps: () => [
+    withInferredAdditionalNames(),
+    withSharedAdditionalNames(),
+
+    {
+      dependencies: [
+        '#inferredAdditionalNames',
+        '#sharedAdditionalNames',
+        input.updateValue(),
+      ],
+
+      compute: ({
+        ['#inferredAdditionalNames']: inferredAdditionalNames,
+        ['#sharedAdditionalNames']: sharedAdditionalNames,
+        [input.updateValue()]: providedAdditionalNames,
+      }) => [
+        ...providedAdditionalNames ?? [],
+        ...sharedAdditionalNames,
+        ...inferredAdditionalNames,
+      ],
+    },
+  ],
+});