diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2023-09-18 16:05:05 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2023-09-18 17:57:30 -0300 |
commit | fdd8f355bfe0992fc340f800297df524276b1946 (patch) | |
tree | fa7444538d49edd1a4ac124a06c02c1102e71e6a /src/data/things | |
parent | f3a855d772d51749c6f9d50632dc74792f902b29 (diff) |
data: Track.alwaysReferencedByDirectory flag & field
Diffstat (limited to 'src/data/things')
-rw-r--r-- | src/data/things/track.js | 35 |
1 files changed, 35 insertions, 0 deletions
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(), |