« get me outta code hell

trackAdditionalNameList.js « track « 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/track/trackAdditionalNameList.js
blob: 65a2263dc65058262c41d815a75061ce10421bb5 (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
// Compiles additional names from various sources.

import {input, templateCompositeFrom} from '#composite';
import {isAdditionalNameList} from '#validators';

import withInferredAdditionalNames from './withInferredAdditionalNames.js';
import withSharedAdditionalNames from './withSharedAdditionalNames.js';

export default templateCompositeFrom({
  annotation: `trackAdditionalNameList`,

  compose: false,

  update: {validate: isAdditionalNameList},

  steps: () => [
    withInferredAdditionalNames(),
    withSharedAdditionalNames(),

    {
      dependencies: [
        '#inferredAdditionalNames',
        '#sharedAdditionalNames',
        input.updateValue(),
      ],

      compute: ({
        ['#inferredAdditionalNames']: inferredAdditionalNames,
        ['#sharedAdditionalNames']: sharedAdditionalNames,
        [input.updateValue()]: providedAdditionalNames,
      }) => [
        ...providedAdditionalNames ?? [],
        ...sharedAdditionalNames,
        ...inferredAdditionalNames,
      ],
    },
  ],
});