From a5a31d5bf669fcb579d07c069a97f8945b743407 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Wed, 6 Mar 2024 13:41:38 -0400 Subject: data: withRecontextualizedContributionList --- .../withRecontextualizedContributionList.js | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/data/composite/wiki-data/withRecontextualizedContributionList.js (limited to 'src/data/composite/wiki-data/withRecontextualizedContributionList.js') diff --git a/src/data/composite/wiki-data/withRecontextualizedContributionList.js b/src/data/composite/wiki-data/withRecontextualizedContributionList.js new file mode 100644 index 00000000..418b346f --- /dev/null +++ b/src/data/composite/wiki-data/withRecontextualizedContributionList.js @@ -0,0 +1,77 @@ +// Clones all the contributions in a list, with thing and thingProperty both +// updated to match the current thing. Overwrite the provided dependency. +// Doesn't do anything if the provided dependency is null. + +import CacheableObject from '#cacheable-object'; +import {input, templateCompositeFrom} from '#composite'; + +import {raiseOutputWithoutDependency} from '#composite/control-flow'; +import {withMappedList} from '#composite/data'; + +export default templateCompositeFrom({ + annotation: `withRecontextualizedContributionList`, + + inputs: { + list: input.staticDependency({ + type: 'array', + acceptsNull: true, + }), + }, + + outputs: ({ + [input.staticDependency('list')]: list, + }) => [list], + + steps: () => [ + raiseOutputWithoutDependency({ + dependency: input('list'), + }), + + { + dependencies: [input.myself(), input.thisProperty()], + + compute: (continuation, { + [input.myself()]: myself, + [input.thisProperty()]: thisProperty, + }) => continuation({ + ['#assignment']: { + thing: myself, + thingProperty: thisProperty, + }, + }), + }, + + { + dependencies: ['#assignment'], + + compute: (continuation, { + ['#assignment']: assignment, + }) => continuation({ + ['#map']: + contrib => + Object.assign( + CacheableObject.clone(contrib), + assignment), + }), + }, + + withMappedList({ + list: input('list'), + map: '#map', + }).outputs({ + '#mappedList': '#newContributions', + }), + + { + dependencies: [input.staticDependency('list'), '#newContributions'], + + compute: (continuation, { + [input.staticDependency('list')]: listDependency, + ['#newContributions']: newContributions, + }) => continuation({ + [listDependency]: + newContributions, + }), + }, + ], +}); -- cgit 1.3.0-6-gf8a5