« 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/things
diff options
context:
space:
mode:
Diffstat (limited to 'src/data/things')
-rw-r--r--src/data/things/MusicVideo.js38
1 files changed, 23 insertions, 15 deletions
diff --git a/src/data/things/MusicVideo.js b/src/data/things/MusicVideo.js
index 5016b9c3..b3dd31e6 100644
--- a/src/data/things/MusicVideo.js
+++ b/src/data/things/MusicVideo.js
@@ -12,7 +12,8 @@ import {
   exposeConstant,
   exposeDependency,
   exposeUpdateValueOrContinue,
-  withResultOfAvailabilityCheck,
+  exposeWhetherDependencyAvailable,
+  exitWithoutDependency,
 } from '#composite/control-flow';
 
 import {
@@ -34,21 +35,31 @@ export class MusicVideo extends Thing {
 
     thing: thing(),
 
-    label: {
+    title: {
       flags: {update: true, expose: true},
       update: {validate: isStringNonEmpty},
-      expose: {transform: value => value ?? 'Music video'},
     },
 
-    labelStyle: {
-      flags: {update: true, expose: true},
-      update: {
-        validate:
-          is('label', 'title'),
+    label: [
+      exposeUpdateValueOrContinue({
+        validate: input.value(isStringNonEmpty),
+      }),
+
+      exitWithoutDependency('title', V('Music video')),
+      exposeConstant(V(null)),
+    ],
+
+    unqualifiedDirectory: [
+      {
+        dependencies: ['title', 'label'],
+        compute: (continuation, {title, label}) =>
+          continuation({
+            '#name': label ?? title,
+          }),
       },
-    },
 
-    unqualifiedDirectory: directory({name: 'label'}),
+      directory({name: '#name'}),
+    ],
 
     date: [
       exposeUpdateValueOrContinue({
@@ -82,16 +93,13 @@ export class MusicVideo extends Thing {
 
     isMusicVideo: exposeConstant(V(true)),
 
-    dateIsSpecified: [
-      withResultOfAvailabilityCheck('_date'),
-      exposeDependency('#availability'),
-    ],
+    dateIsSpecified: exposeWhetherDependencyAvailable('_date'),
   });
 
   static [Thing.yamlDocumentSpec] = {
     fields: {
+      'Title': {property: 'title'},
       'Label': {property: 'label'},
-      'Label Style': {property: 'labelStyle'},
       'Directory': {property: 'unqualifiedDirectory'},
       'Date': {property: 'date', transform: parseDate},
       'URL': {property: 'url'},