« get me outta code hell

linkOtherReleaseOnArtistInfoPage.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/linkOtherReleaseOnArtistInfoPage.js
blob: ec856631f537bb3e883b787f71ad2931000c88d8 (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
import {sortAlbumsTracksChronologically, sortContributionsChronologically}
  from '#sort';
import {chunkArtistTrackContributions} from '#wiki-data';

export default {
  contentDependencies: ['generateColorStyleAttribute'],
  extraDependencies: ['html', 'language'],

  query(track, artist) {
    const relevantInfoPageChunkingContributions =
      track.allReleases
        .flatMap(release => [
          ...release.artistContribs,
          ...release.contributorContribs,
        ])
        .filter(c => c.artist === artist);

    sortContributionsChronologically(
      relevantInfoPageChunkingContributions,
      sortAlbumsTracksChronologically);

    const contributionChunks =
      chunkArtistTrackContributions(relevantInfoPageChunkingContributions);

    const trackChunks =
      contributionChunks
        .map(chunksInAlbum => chunksInAlbum
          .map(chunksInTrack => chunksInTrack[0].thing));

    const trackChunksForThisAlbum =
      trackChunks
        .filter(tracks => tracks[0].album === track.album);

    const containingChunkIndex =
      trackChunksForThisAlbum
        .findIndex(tracks => tracks.includes(track));

    return {containingChunkIndex};
  },

  relations: (relation, _query, track, _artist) => ({
    colorStyle:
      relation('generateColorStyleAttribute', track.album.color),
  }),

  data: (query, track, _artist) => ({
    albumName:
      track.album.name,

    albumDirectory:
      track.album.directory,

    containingChunkIndex:
      query.containingChunkIndex,
  }),

  generate: (data, relations, {html, language}) =>
    html.tag('a',
      {href: `#tracks-${data.albumDirectory}-${data.containingChunkIndex}`},
      relations.colorStyle.slot('context', 'primary-only'),
      language.sanitize(data.albumName)),
};