« 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/name.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/data/composite/wiki-properties/name.js')
-rw-r--r--src/data/composite/wiki-properties/name.js28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/data/composite/wiki-properties/name.js b/src/data/composite/wiki-properties/name.js
index 5146488b..e4a28860 100644
--- a/src/data/composite/wiki-properties/name.js
+++ b/src/data/composite/wiki-properties/name.js
@@ -1,11 +1,27 @@
 // A wiki data object's name! Its directory (i.e. unique identifier) will be
 // computed based on this value if not otherwise specified.
 
+import {input, templateCompositeFrom} from '#composite';
 import {isName} from '#validators';
 
-export default function(defaultName) {
-  return {
-    flags: {update: true, expose: true},
-    update: {validate: isName, default: defaultName},
-  };
-}
+export default templateCompositeFrom({
+  annotation: 'name',
+
+  compose: false,
+
+  inputs: {
+    default: input({type: 'string'}),
+  },
+
+  update: {
+    validate: isName,
+  },
+
+  steps: () => [
+    {
+      dependencies: [input('default')],
+      transform: (value, {[input('default')]: defaultValue}) =>
+        value ?? defaultValue,
+    },
+  ],
+});
\ No newline at end of file