From 62e08a1e06953449cb2e26c2311646d1dc010cfd Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Mon, 2 Oct 2023 19:05:11 -0300 Subject: data: add various art tag properties --- src/data/composite/things/art-tag/index.js | 1 + .../things/art-tag/withAllDescendantTags.js | 44 ++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/data/composite/things/art-tag/index.js create mode 100644 src/data/composite/things/art-tag/withAllDescendantTags.js (limited to 'src/data/composite/things') diff --git a/src/data/composite/things/art-tag/index.js b/src/data/composite/things/art-tag/index.js new file mode 100644 index 00000000..aedc3a0c --- /dev/null +++ b/src/data/composite/things/art-tag/index.js @@ -0,0 +1 @@ +export {default as withAllDescendantTags} from './withAllDescendantTags.js'; diff --git a/src/data/composite/things/art-tag/withAllDescendantTags.js b/src/data/composite/things/art-tag/withAllDescendantTags.js new file mode 100644 index 00000000..945e9f37 --- /dev/null +++ b/src/data/composite/things/art-tag/withAllDescendantTags.js @@ -0,0 +1,44 @@ +// Gets all the tags which descend from this one - that means its own direct +// descendants, but also all the direct and indirect desceands of each of those! +// The results aren't specially sorted, but they won't contain any duplicates +// (for example if two descendant tags both route deeper to end up including +// some of the same tags). + +import {input, templateCompositeFrom} from '#composite'; +import {unique} from '#sugar'; + +import {raiseOutputWithoutDependency} from '#composite/control-flow'; +import {withResolvedReferenceList} from '#composite/wiki-data'; +import {soupyFind} from '#composite/wiki-properties'; + +export default templateCompositeFrom({ + annotation: `withAllDescendantTags`, + + outputs: ['#allDescendantTags'], + + steps: () => [ + raiseOutputWithoutDependency({ + dependency: 'directDescendantTags', + mode: input.value('empty'), + output: input.value({'#allDescendantTags': []}) + }), + + withResolvedReferenceList({ + list: 'directDescendantTags', + find: soupyFind.input('artTag'), + }), + + { + dependencies: ['#resolvedReferenceList'], + compute: (continuation, { + ['#resolvedReferenceList']: directDescendantTags, + }) => continuation({ + ['#allDescendantTags']: + unique([ + ...directDescendantTags, + ...directDescendantTags.flatMap(tag => tag.allDescendantTags), + ]), + }), + }, + ], +}) -- cgit 1.3.0-6-gf8a5