diff options
-rw-r--r-- | src/data/things/thing.js | 26 | ||||
-rw-r--r-- | src/data/things/track.js | 2 |
2 files changed, 23 insertions, 5 deletions
diff --git a/src/data/things/thing.js b/src/data/things/thing.js index 5ab15c0e..9c59436e 100644 --- a/src/data/things/thing.js +++ b/src/data/things/thing.js @@ -262,26 +262,42 @@ export default class Thing extends CacheableObject { // Dynamically inherit a contribution list from some other object, if it // hasn't been overridden on this object. This is handy for solo albums // where all tracks have the same artist, for example. - // - // Note: The arguments of this function aren't currently final! The final - // format will look more like (contribsByRef, parentContribsByRef), e.g. - // ('artistContribsByRef', '@album/artistContribsByRef'). dynamicInheritContribs: ( + // If this property is explicitly false, the contribution list returned + // will always be empty. + nullerProperty, + + // Property holding contributions on the current object. contribsByRefProperty, + + // Property holding corresponding "default" contributions on the parent + // object, which will fallen back to if the object doesn't have its own + // contribs. parentContribsByRefProperty, + + // Data array to search in and "find" function to locate parent object + // (which will be passed the child object and the wiki data array). thingDataProperty, findFn ) => ({ flags: {expose: true}, expose: { - dependencies: [contribsByRefProperty, thingDataProperty, 'artistData'], + dependencies: [ + contribsByRefProperty, + thingDataProperty, + nullerProperty, + 'artistData', + ].filter(Boolean), + compute({ [Thing.instance]: thing, + [nullerProperty]: nuller, [contribsByRefProperty]: contribsByRef, [thingDataProperty]: thingData, artistData, }) { if (!artistData) return []; + if (nuller === false) return []; const refs = contribsByRef ?? findFn(thing, thingData, {mode: 'quiet'})?.[parentContribsByRefProperty]; diff --git a/src/data/things/track.js b/src/data/things/track.js index 1c2013a2..00585c1e 100644 --- a/src/data/things/track.js +++ b/src/data/things/track.js @@ -245,6 +245,7 @@ export class Track extends Thing { }, artistContribs: Thing.common.dynamicInheritContribs( + null, 'artistContribsByRef', 'artistContribsByRef', 'albumData', @@ -254,6 +255,7 @@ export class Track extends Thing { contributorContribs: Thing.common.dynamicContribs('contributorContribsByRef'), coverArtistContribs: Thing.common.dynamicInheritContribs( + 'hasCoverArt', 'coverArtistContribsByRef', 'trackCoverArtistContribsByRef', 'albumData', |