diff options
Diffstat (limited to 'src/data/composite/things/artwork')
| -rw-r--r-- | src/data/composite/things/artwork/index.js | 2 | ||||
| -rw-r--r-- | src/data/composite/things/artwork/withContainingArtworkList.js | 46 | ||||
| -rw-r--r-- | src/data/composite/things/artwork/withDate.js | 41 |
3 files changed, 47 insertions, 42 deletions
diff --git a/src/data/composite/things/artwork/index.js b/src/data/composite/things/artwork/index.js index b92bff72..2cd3c388 100644 --- a/src/data/composite/things/artwork/index.js +++ b/src/data/composite/things/artwork/index.js @@ -1 +1 @@ -export {default as withDate} from './withDate.js'; +export {default as withContainingArtworkList} from './withContainingArtworkList.js'; diff --git a/src/data/composite/things/artwork/withContainingArtworkList.js b/src/data/composite/things/artwork/withContainingArtworkList.js new file mode 100644 index 00000000..9c928ffd --- /dev/null +++ b/src/data/composite/things/artwork/withContainingArtworkList.js @@ -0,0 +1,46 @@ +// Gets the list of artworks which contains this one, which is functionally +// equivalent to `this.thing[this.thingProperty]`. If the exposed value is not +// a list at all (i.e. the property holds a single artwork), this composition +// outputs null. + +import {input, templateCompositeFrom} from '#composite'; + +import {raiseOutputWithoutDependency} from '#composite/control-flow'; +import {withPropertyFromObject} from '#composite/data'; + +export default templateCompositeFrom({ + annotation: `withContainingArtworkList`, + + outputs: ['#containingArtworkList'], + + steps: () => [ + raiseOutputWithoutDependency({ + dependency: 'thing', + output: input.value({'#containingArtworkList': null}), + }), + + raiseOutputWithoutDependency({ + dependency: 'thingProperty', + output: input.value({'#containingArtworkList': null}), + }), + + withPropertyFromObject({ + object: 'thing', + property: 'thingProperty', + }).outputs({ + '#value': '#containingValue', + }), + + { + dependencies: ['#containingValue'], + compute: (continuation, { + ['#containingValue']: containingValue, + }) => continuation({ + ['#containingArtworkList']: + (Array.isArray(containingValue) + ? containingValue + : null), + }), + }, + ], +}); diff --git a/src/data/composite/things/artwork/withDate.js b/src/data/composite/things/artwork/withDate.js deleted file mode 100644 index 5e05b814..00000000 --- a/src/data/composite/things/artwork/withDate.js +++ /dev/null @@ -1,41 +0,0 @@ -import {input, templateCompositeFrom} from '#composite'; - -import {raiseOutputWithoutDependency} from '#composite/control-flow'; -import {withPropertyFromObject} from '#composite/data'; - -export default templateCompositeFrom({ - annotation: `withDate`, - - inputs: { - from: input({ - defaultDependency: 'date', - acceptsNull: true, - }), - }, - - outputs: ['#date'], - - steps: () => [ - { - dependencies: [input('from')], - compute: (continuation, { - [input('from')]: date, - }) => - (date - ? continuation.raiseOutput({'#date': date}) - : continuation()), - }, - - raiseOutputWithoutDependency({ - dependency: 'dateFromThingProperty', - output: input.value({'#date': null}), - }), - - withPropertyFromObject({ - object: 'thing', - property: 'dateFromThingProperty', - }).outputs({ - ['#value']: '#date', - }), - ], -}) |