« get me outta code hell

artistTotalDuration.js « artist « things « composite « data « src - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/composite/things/artist/artistTotalDuration.js
blob: 54204918235ea12b667cb623fa004f0ae8ed8a85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import {input, templateCompositeFrom} from '#composite';

import {exposeDependency} from '#composite/control-flow';
import {withFilteredList, withPropertyFromList} from '#composite/data';
import {withContributionListSums, withReverseContributionList}
  from '#composite/wiki-data';

export default templateCompositeFrom({
  annotation: `artistTotalDuration`,

  compose: false,

  steps: () => [
    withReverseContributionList({
      data: 'trackData',
      list: input.value('artistContribs'),
      mode: input.value('contributions'),
    }).outputs({
      '#reverseContributionList': '#contributionsAsArtist',
    }),

    withReverseContributionList({
      data: 'trackData',
      list: input.value('contributorContribs'),
      mode: input.value('contributions'),
    }).outputs({
      '#reverseContributionList': '#contributionsAsContributor',
    }),

    {
      dependencies: [
        '#contributionsAsArtist',
        '#contributionsAsContributor',
      ],

      compute: (continuation, {
        ['#contributionsAsArtist']: artistContribs,
        ['#contributionsAsContributor']: contributorContribs,
      }) => continuation({
        ['#allContributions']: [
          ...artistContribs,
          ...contributorContribs,
        ],
      }),
    },

    withPropertyFromList({
      list: '#allContributions',
      property: input.value('thing'),
    }),

    withPropertyFromList({
      list: '#allContributions.thing',
      property: input.value('isOriginalRelease'),
    }),

    withFilteredList({
      list: '#allContributions',
      filter: '#allContributions.thing.isOriginalRelease',
    }).outputs({
      '#filteredList': '#originalContributions',
    }),

    withContributionListSums({
      list: '#originalContributions',
    }),

    exposeDependency({
      dependency: '#contributionListDuration',
    }),
  ],
});