From fdd8f355bfe0992fc340f800297df524276b1946 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Mon, 18 Sep 2023 16:05:05 -0300 Subject: data: Track.alwaysReferencedByDirectory flag & field --- src/data/things/track.js | 35 +++++++++++++++++++++++++++++++++++ src/data/yaml.js | 2 ++ 2 files changed, 37 insertions(+) (limited to 'src/data') diff --git a/src/data/things/track.js b/src/data/things/track.js index e176acb4..14510d96 100644 --- a/src/data/things/track.js +++ b/src/data/things/track.js @@ -36,6 +36,41 @@ export class Track extends Thing { urls: Thing.common.urls(), dateFirstReleased: Thing.common.simpleDate(), + // Controls how find.track works - it'll never be matched by a reference + // just to the track's name, which means you don't have to always reference + // some *other* (much more commonly referenced) track by directory instead + // of more naturally by name. + alwaysReferenceByDirectory: { + flags: {update: true, expose: true}, + + // Deliberately defaults to null - this will fall back to false in most + // cases. + update: {validate: isBoolean, default: null}, + + expose: { + dependencies: ['name', 'originalReleaseTrackByRef', 'trackData'], + + transform(value, { + name, + originalReleaseTrackByRef, + trackData, + [Track.instance]: thisTrack, + }) { + if (value !== null) return value; + + const original = + find.track( + originalReleaseTrackByRef, + trackData.filter(track => track !== thisTrack), + {quiet: true}); + + if (!original) return false; + + return name === original.name; + } + }, + }, + artistContribsByRef: Thing.common.contribsByRef(), contributorContribsByRef: Thing.common.contribsByRef(), coverArtistContribsByRef: Thing.common.contribsByRef(), diff --git a/src/data/yaml.js b/src/data/yaml.js index 35943199..07e0a3d2 100644 --- a/src/data/yaml.js +++ b/src/data/yaml.js @@ -338,6 +338,8 @@ export const processTrackDocument = makeProcessDocument(T.Track, { coverArtFileExtension: 'Cover Art File Extension', hasCoverArt: 'Has Cover Art', + alwaysReferenceByDirectory: 'Always Reference By Directory', + lyrics: 'Lyrics', commentary: 'Commentary', additionalFiles: 'Additional Files', -- cgit 1.3.0-6-gf8a5