« get me outta code hell

generateAlbumChronologyLinks.js « dependencies « content « src - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateAlbumChronologyLinks.js
blob: 3dd7a18e12886b11e225d5600d036f9dca76b92c (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
import {sortAlbumsTracksChronologically} from '#sort';

import getChronologyRelations from '../util/getChronologyRelations.js';

export default {
  contentDependencies: [
    'generateChronologyLinks',
    'linkAlbum',
    'linkArtist',
    'linkTrack',
  ],

  relations: (relation, album) => ({
    chronologyLinks:
      relation('generateChronologyLinks'),

    coverArtistChronologyContributions:
      getChronologyRelations(album, {
        contributions: album.coverArtistContribs ?? [],

        linkArtist: artist => relation('linkArtist', artist),

        linkThing: trackOrAlbum =>
          (trackOrAlbum.album
            ? relation('linkTrack', trackOrAlbum)
            : relation('linkAlbum', trackOrAlbum)),

        getThings(artist) {
          const getDate = thing => thing.coverArtDate ?? thing.date;

          const things =
            ([
              artist.albumCoverArtistContributions,
              artist.trackCoverArtistContributions,
            ]).flat()
              .map(({thing}) => thing)
              .filter(getDate);

          return sortAlbumsTracksChronologically(things, {getDate});
        },
      }),
  }),

  generate: (relations) =>
    relations.chronologyLinks.slots({
      chronologyInfoSets: [
        {
          headingString: 'misc.chronology.heading.coverArt',
          contributions: relations.coverArtistChronologyContributions,
        },
      ],
    }),
}