« get me outta code hell

data: Album.nameDetailForTracks - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2026-05-26 17:51:44 -0300
committer(quasar) nebula <qznebula@protonmail.com>2026-05-26 17:51:44 -0300
commit3b4fb2fbd12348ee0f98dc18c8f456a72c7876f6 (patch)
tree575bf2541d41bb01f27f22b190998f8c0cfbeb95
parentfba9084fc2e6650bf448656744595b6b349b2168 (diff)
data: Album.nameDetailForTracks
-rw-r--r--src/data/things/Track.js8
-rw-r--r--src/data/things/album/Album.js28
2 files changed, 31 insertions, 5 deletions
diff --git a/src/data/things/Track.js b/src/data/things/Track.js
index 8cee520d..ae527be6 100644
--- a/src/data/things/Track.js
+++ b/src/data/things/Track.js
@@ -795,16 +795,16 @@ export class Track extends Thing {
     ],
 
     nameDetailAcrossWiki: [
-      withPropertyFromObject('album', V('name')),
+      withPropertyFromObject('album', V('nameDetailForTracks')),
 
       {
-        dependencies: ['_nameDetail', '#album.name'],
+        dependencies: ['_nameDetail', '#album.nameDetailForTracks'],
         compute: ({
           ['_nameDetail']: nameDetail,
-          ['#album.name']: albumName,
+          ['#album.nameDetailForTracks']: nameDetailFromAlbum,
         }) =>
           (nameDetail === 'album'
-            ? albumName
+            ? nameDetailFromAlbum
             : nameDetail),
       },
     ],
diff --git a/src/data/things/album/Album.js b/src/data/things/album/Album.js
index cac435ed..44eb1181 100644
--- a/src/data/things/album/Album.js
+++ b/src/data/things/album/Album.js
@@ -1,6 +1,7 @@
 import {input, V} from '#composite';
 import {empty} from '#sugar';
 import Thing from '#thing';
+import {getKebabCase} from '#wiki-data';
 
 import {
   is,
@@ -10,6 +11,7 @@ import {
   isExcludingURLsReason,
   isDirectory,
   isNumber,
+  isString,
 } from '#validators';
 
 import {
@@ -102,14 +104,37 @@ export class Album extends Thing {
     name: name(V('Unnamed Album')),
     nameDetail: simpleString(),
 
+    nameDetailForTracks: {
+      flags: {update: true, expose: true},
+
+      update: {validate: isString},
+
+      expose: {
+        dependencies: ['name', 'nameDetail'],
+        transform: (value, {name, nameDetail}) =>
+          (value
+            ? value
+         : nameDetail
+            ? `${name}, ${nameDetail}`
+            : name),
+      },
+    },
+
     directory: directory(),
 
+    // note: this is currently strictly "directory suffix for tracks"
     directorySuffix: [
       exposeUpdateValueOrContinue({
         validate: input.value(isDirectory),
       }),
 
-      exposeDependency('directory'),
+      {
+        dependencies: ['directory', 'name', 'nameDetailForTracks'],
+        compute: ({directory, name, nameDetailForTracks}) =>
+          (nameDetailForTracks === name
+            ? directory
+            : getKebabCase(nameDetailForTracks)),
+      },
     ],
 
     alwaysReferenceByDirectory: flag(V(false)),
@@ -612,6 +637,7 @@ export class Album extends Thing {
 
       'Album': {property: 'name'},
       'Name Detail': {property: 'nameDetail'},
+      'Name Detail For Tracks': {property: 'nameDetailForTracks'},
 
       'Directory': {property: 'directory'},
       'Directory Suffix': {property: 'directorySuffix'},