diff options
Diffstat (limited to 'src/data/composite/things')
-rw-r--r-- | src/data/composite/things/artwork/index.js | 5 | ||||
-rw-r--r-- | src/data/composite/things/artwork/withAttachedArtwork.js | 43 | ||||
-rw-r--r-- | src/data/composite/things/artwork/withContribsFromAttachedArtwork.js (renamed from src/data/composite/things/artwork/withContribsFromMainArtwork.js) | 15 | ||||
-rw-r--r-- | src/data/composite/things/artwork/withPropertyFromAttachedArtwork.js | 65 | ||||
-rw-r--r-- | src/data/composite/things/artwork/withPropertyFromMainArtwork.js | 100 |
5 files changed, 118 insertions, 110 deletions
diff --git a/src/data/composite/things/artwork/index.js b/src/data/composite/things/artwork/index.js index 5a592777..3693c10f 100644 --- a/src/data/composite/things/artwork/index.js +++ b/src/data/composite/things/artwork/index.js @@ -1,4 +1,5 @@ +export {default as withAttachedArtwork} from './withAttachedArtwork.js'; export {default as withContainingArtworkList} from './withContainingArtworkList.js'; -export {default as withContribsFromMainArtwork} from './withContribsFromMainArtwork.js'; +export {default as withContribsFromAttachedArtwork} from './withContribsFromAttachedArtwork.js'; export {default as withDate} from './withDate.js'; -export {default as withPropertyFromMainArtwork} from './withPropertyFromMainArtwork.js'; +export {default as withPropertyFromAttachedArtwork} from './withPropertyFromAttachedArtwork.js'; diff --git a/src/data/composite/things/artwork/withAttachedArtwork.js b/src/data/composite/things/artwork/withAttachedArtwork.js new file mode 100644 index 00000000..d7c0d87b --- /dev/null +++ b/src/data/composite/things/artwork/withAttachedArtwork.js @@ -0,0 +1,43 @@ +import {input, templateCompositeFrom} from '#composite'; + +import {flipFilter, raiseOutputWithoutDependency} + from '#composite/control-flow'; +import {withNearbyItemFromList, withPropertyFromList} from '#composite/data'; + +import withContainingArtworkList from './withContainingArtworkList.js'; + +export default templateCompositeFrom({ + annotaion: `withContribsFromMainArtwork`, + + outputs: ['#attachedArtwork'], + + steps: () => [ + raiseOutputWithoutDependency({ + dependency: 'attachAbove', + mode: input.value('falsy'), + output: input.value({'#attachedArtwork': null}), + }), + + withContainingArtworkList(), + + withPropertyFromList({ + list: '#containingArtworkList', + property: input.value('attachAbove'), + }), + + flipFilter({ + filter: '#containingArtworkList.attachAbove', + }).outputs({ + '#containingArtworkList.attachAbove': '#filterNotAttached', + }), + + withNearbyItemFromList({ + list: '#containingArtworkList', + item: input.myself(), + offset: input.value(-1), + filter: '#filterNotAttached', + }).outputs({ + '#nearbyItem': '#attachedArtwork', + }), + ], +}); diff --git a/src/data/composite/things/artwork/withContribsFromMainArtwork.js b/src/data/composite/things/artwork/withContribsFromAttachedArtwork.js index 25616ad6..36abb3fe 100644 --- a/src/data/composite/things/artwork/withContribsFromMainArtwork.js +++ b/src/data/composite/things/artwork/withContribsFromAttachedArtwork.js @@ -4,26 +4,25 @@ import {raiseOutputWithoutDependency} from '#composite/control-flow'; import {withPropertyFromObject} from '#composite/data'; import {withRecontextualizedContributionList} from '#composite/wiki-data'; -import withPropertyFromMainArtwork from './withPropertyFromMainArtwork.js'; +import withPropertyFromAttachedArtwork from './withPropertyFromAttachedArtwork.js'; export default templateCompositeFrom({ - annotaion: `withContribsFromMainArtwork`, + annotaion: `withContribsFromAttachedArtwork`, - outputs: ['#mainArtwork.artistContribs'], + outputs: ['#attachedArtwork.artistContribs'], steps: () => [ - withPropertyFromMainArtwork({ + withPropertyFromAttachedArtwork({ property: input.value('artistContribs'), - onlyIfAttached: input.value(true), }), raiseOutputWithoutDependency({ - dependency: '#mainArtwork.artistContribs', - output: input.value({'#mainArtwork.artistContribs': null}), + dependency: '#attachedArtwork.artistContribs', + output: input.value({'#attachedArtwork.artistContribs': null}), }), withRecontextualizedContributionList({ - list: '#mainArtwork.artistContribs', + list: '#attachedArtwork.artistContribs', }), ], }); diff --git a/src/data/composite/things/artwork/withPropertyFromAttachedArtwork.js b/src/data/composite/things/artwork/withPropertyFromAttachedArtwork.js new file mode 100644 index 00000000..a2f954b9 --- /dev/null +++ b/src/data/composite/things/artwork/withPropertyFromAttachedArtwork.js @@ -0,0 +1,65 @@ +import {input, templateCompositeFrom} from '#composite'; + +import {withResultOfAvailabilityCheck} from '#composite/control-flow'; +import {withPropertyFromObject} from '#composite/data'; + +import withAttachedArtwork from './withAttachedArtwork.js'; + +function getOutputName({ + [input.staticValue('property')]: property, +}) { + if (property) { + return `#attachedArtwork.${property}`; + } else { + return '#value'; + } +} + +export default templateCompositeFrom({ + annotation: `withPropertyFromAttachedArtwork`, + + inputs: { + property: input({type: 'string'}), + }, + + outputs: inputs => [getOutputName(inputs)], + + steps: () => [ + { + dependencies: [input.staticValue('property')], + compute: (continuation, inputs) => + continuation({'#output': getOutputName(inputs)}), + }, + + withAttachedArtwork(), + + withResultOfAvailabilityCheck({ + from: '#attachedArtwork', + }), + + { + dependencies: ['#availability', '#output'], + compute: (continuation, { + ['#availability']: availability, + ['#output']: output, + }) => + (availability + ? continuation() + : continuation.raiseOutput({[output]: null})), + }, + + withPropertyFromObject({ + object: '#attachedArtwork', + property: input('property'), + }), + + { + dependencies: ['#value', '#output'], + compute: (continuation, { + ['#value']: value, + ['#output']: output, + }) => + continuation.raiseOutput({[output]: value}), + }, + ], +}); diff --git a/src/data/composite/things/artwork/withPropertyFromMainArtwork.js b/src/data/composite/things/artwork/withPropertyFromMainArtwork.js deleted file mode 100644 index a0233119..00000000 --- a/src/data/composite/things/artwork/withPropertyFromMainArtwork.js +++ /dev/null @@ -1,100 +0,0 @@ -import {input, templateCompositeFrom} from '#composite'; - -import {withResultOfAvailabilityCheck} from '#composite/control-flow'; -import {withPropertyFromObject} from '#composite/data'; - -import withContainingArtworkList from './withContainingArtworkList.js'; - -function getOutputName({ - [input.staticValue('property')]: property, -}) { - if (property) { - return `#mainArtwork.${property}`; - } else { - return '#value'; - } -} - -export default templateCompositeFrom({ - annotation: `withPropertyFromMainArtwork`, - - inputs: { - property: input({type: 'string'}), - onlyIfAttached: input({type: 'boolean', defaultValue: false}), - }, - - outputs: inputs => [getOutputName(inputs)], - - steps: () => [ - { - dependencies: [input.staticValue('property')], - compute: (continuation, inputs) => - continuation({'#output': getOutputName(inputs)}), - }, - - { - dependencies: [input('onlyIfAttached'), 'attachAbove', '#output'], - compute: (continuation, { - [input('onlyIfAttached')]: onlyIfAttached, - ['attachAbove']: attachAbove, - ['#output']: output, - }) => - (onlyIfAttached && attachAbove - ? continuation() - : onlyIfAttached - ? continuation.raiseOutput({[output]: null}) - : continuation()), - }, - - withContainingArtworkList(), - - withResultOfAvailabilityCheck({ - from: '#containingArtworkList', - }), - - { - dependencies: ['#availability', '#output'], - compute: (continuation, { - ['#availability']: availability, - ['#output']: output, - }) => - (availability - ? continuation() - : continuation.raiseOutput({[output]: null})), - }, - - { - dependencies: ['#containingArtworkList'], - compute: (continuation, { - ['#containingArtworkList']: list, - }) => - continuation({'#mainArtwork': list[0]}), - }, - - { - dependencies: [input.myself(), '#mainArtwork', '#output'], - compute: (continuation, { - [input.myself()]: myself, - ['#mainArtwork']: mainArtwork, - ['#output']: output, - }) => - (myself === mainArtwork - ? continuation.raiseOutput({[output]: null}) - : continuation()), - }, - - withPropertyFromObject({ - object: '#mainArtwork', - property: input('property'), - }), - - { - dependencies: ['#value', '#output'], - compute: (continuation, { - ['#value']: value, - ['#output']: output, - }) => - continuation.raiseOutput({[output]: value}), - }, - ], -}); |