From 21a5a2f69cba27506252d1947e6eb61699c9b811 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Mon, 14 Oct 2024 16:36:04 -0300 Subject: data: Group.serieses --- src/data/composite/wiki-data/index.js | 1 + .../composite/wiki-data/withResolvedSeriesList.js | 83 ++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 src/data/composite/wiki-data/withResolvedSeriesList.js (limited to 'src/data/composite/wiki-data') diff --git a/src/data/composite/wiki-data/index.js b/src/data/composite/wiki-data/index.js index d9112467..afd8bdd2 100644 --- a/src/data/composite/wiki-data/index.js +++ b/src/data/composite/wiki-data/index.js @@ -17,6 +17,7 @@ export {default as withRedatedContributionList} from './withRedatedContributionL export {default as withResolvedContribs} from './withResolvedContribs.js'; export {default as withResolvedReference} from './withResolvedReference.js'; export {default as withResolvedReferenceList} from './withResolvedReferenceList.js'; +export {default as withResolvedSeriesList} from './withResolvedSeriesList.js'; export {default as withReverseContributionList} from './withReverseContributionList.js'; export {default as withReverseReferenceList} from './withReverseReferenceList.js'; export {default as withReverseSingleReferenceList} from './withReverseSingleReferenceList.js'; diff --git a/src/data/composite/wiki-data/withResolvedSeriesList.js b/src/data/composite/wiki-data/withResolvedSeriesList.js new file mode 100644 index 00000000..97d71f3a --- /dev/null +++ b/src/data/composite/wiki-data/withResolvedSeriesList.js @@ -0,0 +1,83 @@ +import {input, templateCompositeFrom} from '#composite'; +import find from '#find'; +import {stitchArrays} from '#sugar'; +import {isSeriesList} from '#validators'; + +import { + fillMissingListItems, + withFlattenedList, + withUnflattenedList, + withPropertiesFromList, +} from '#composite/data'; + +import withResolvedReferenceList from './withResolvedReferenceList.js'; + +export default templateCompositeFrom({ + annotation: `withResolvedSeriesList`, + + inputs: { + list: input({validate: isSeriesList}), + }, + + outputs: ['#resolvedSeriesList'], + + steps: () => [ + withPropertiesFromList({ + list: input('list'), + prefix: input.value('#serieses'), + properties: input.value([ + 'name', + 'description', + 'albums', + ]), + }), + + fillMissingListItems({ + list: '#serieses.albums', + fill: input.value([]), + }), + + withFlattenedList({ + list: '#serieses.albums', + }), + + withResolvedReferenceList({ + list: '#flattenedList', + data: 'albumData', + find: input.value(find.album), + notFoundMode: input.value('null'), + }), + + withUnflattenedList({ + list: '#resolvedReferenceList', + }).outputs({ + '#unflattenedList': '#serieses.albums', + }), + + fillMissingListItems({ + list: '#serieses.description', + fill: input.value(null), + }), + + { + dependencies: [ + '#serieses.name', + '#serieses.description', + '#serieses.albums', + ], + + compute: (continuation, { + ['#serieses.name']: name, + ['#serieses.description']: description, + ['#serieses.albums']: albums, + }) => continuation({ + ['#resolvedSeriesList']: + stitchArrays({ + name, + description, + albums, + }), + }), + }, + ], +}); -- cgit 1.3.0-6-gf8a5