diff options
Diffstat (limited to 'src/data/composite/things/track/withAlbum.js')
-rw-r--r-- | src/data/composite/things/track/withAlbum.js | 62 |
1 files changed, 6 insertions, 56 deletions
diff --git a/src/data/composite/things/track/withAlbum.js b/src/data/composite/things/track/withAlbum.js index cbd16dc..143e097 100644 --- a/src/data/composite/things/track/withAlbum.js +++ b/src/data/composite/things/track/withAlbum.js @@ -1,60 +1,27 @@ // Gets the track's album. This will early exit if albumData is missing. -// By default, if there's no album whose list of tracks includes this track, -// the output dependency will be null; set {notFoundMode: 'exit'} to early -// exit instead. +// If there's no album whose list of tracks includes this track, the output +// dependency will be null. // // This step models with Flash.withFlashAct. import {input, templateCompositeFrom} from '#composite'; import {is} from '#validators'; -import {exitWithoutDependency, withResultOfAvailabilityCheck} +import {exitWithoutDependency, raiseOutputWithoutDependency} from '#composite/control-flow'; import {withPropertyFromList} from '#composite/data'; export default templateCompositeFrom({ annotation: `withAlbum`, - inputs: { - notFoundMode: input({ - validate: is('exit', 'null'), - defaultValue: 'null', - }), - }, - outputs: ['#album'], steps: () => [ - // null albumData is always an early exit. - exitWithoutDependency({ dependency: 'albumData', mode: input.value('null'), }), - // empty albumData conditionally exits early or outputs null. - - withResultOfAvailabilityCheck({ - from: 'albumData', - mode: input.value('empty'), - }).outputs({ - '#availability': '#albumDataAvailability', - }), - - { - dependencies: [input('notFoundMode'), '#albumDataAvailability'], - compute(continuation, { - [input('notFoundMode')]: notFoundMode, - ['#albumDataAvailability']: albumDataIsAvailable, - }) { - if (albumDataIsAvailable) return continuation(); - switch (notFoundMode) { - case 'exit': return continuation.exit(null); - case 'null': return continuation.raiseOutput({'#album': null}); - } - }, - }, - withPropertyFromList({ list: 'albumData', property: input.value('tracks'), @@ -71,30 +38,13 @@ export default templateCompositeFrom({ }), }, - // album not found conditionally exits or outputs null. - - withResultOfAvailabilityCheck({ - from: '#albumIndex', + raiseOutputWithoutDependency({ + dependency: '#albumIndex', mode: input.value('index'), - }).outputs({ - '#availability': '#albumAvailability', + output: input.value({'#album': null}), }), { - dependencies: [input('notFoundMode'), '#albumAvailability'], - compute(continuation, { - [input('notFoundMode')]: notFoundMode, - ['#albumAvailability']: albumIsAvailable, - }) { - if (albumIsAvailable) return continuation(); - switch (notFoundMode) { - case 'exit': return continuation.exit(null); - case 'null': return continuation.raiseOutput({'#album': null}); - } - }, - }, - - { dependencies: ['albumData', '#albumIndex'], compute: (continuation, { ['albumData']: albumData, |