« get me outta code hell

generateListRandomPageLinksGroupSection.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/generateListRandomPageLinksGroupSection.js
blob: d05be8f7e9f6feff99e615ff5e6c7f1370c9ef46 (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
import {sortChronologically} from '#wiki-data';

export default {
  contentDependencies: ['generateListRandomPageLinksAlbumLink', 'linkGroup'],
  extraDependencies: ['html', 'language', 'wikiData'],

  sprawl: ({albumData}) => ({albumData}),

  query: (sprawl, group) => ({
    albums:
      sortChronologically(sprawl.albumData.slice())
        .filter(album => album.groups.includes(group))
        .filter(album => album.tracks.length > 1),
  }),

  relations: (relation, query, sprawl, group) => ({
    groupLink:
      relation('linkGroup', group),

    albumLinks:
      query.albums
        .map(album => relation('generateListRandomPageLinksAlbumLink', album)),
  }),

  generate: (relations, {html, language}) =>
    html.tags([
      html.tag('dt',
        language.$('listingPage.other.randomPages.fromGroup', {
          group: relations.groupLink,

          randomAlbum:
            html.tag('a',
              {href: '#', 'data-random': 'album-in-group-dl'},
              language.$('listingPage.other.randomPages.fromGroup.randomAlbum')),

          randomTrack:
            html.tag('a',
              {href: '#', 'data-random': 'track-in-group-dl'},
              language.$('listingPage.other.randomPages.fromGroup.randomTrack')),
        })),

      html.tag('dd',
        html.tag('ul',
          relations.albumLinks
            .map(albumLink =>
              html.tag('li',
                language.$('listingPage.other.randomPages.album', {
                  album: albumLink,
                }))))),
    ]),
};