« get me outta code hell

content: gGPAlbumGridTab: query.mode - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateGroupGalleryPageAlbumGridTab.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-07-25 04:51:39 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-07-25 04:51:39 -0300
commit56a4dd53cd13a53a85a740cdeb4acdcb1b68c258 (patch)
tree752d12263ef5d30dd290b3c2eb63c9ca6b58efa1 /src/content/dependencies/generateGroupGalleryPageAlbumGridTab.js
parent39dfd7bb398adf3c6e4aee6a5bc56fff2098a24c (diff)
content: gGPAlbumGridTab: query.mode
Diffstat (limited to 'src/content/dependencies/generateGroupGalleryPageAlbumGridTab.js')
-rw-r--r--src/content/dependencies/generateGroupGalleryPageAlbumGridTab.js64
1 files changed, 39 insertions, 25 deletions
diff --git a/src/content/dependencies/generateGroupGalleryPageAlbumGridTab.js b/src/content/dependencies/generateGroupGalleryPageAlbumGridTab.js
index 597c5227..018911dd 100644
--- a/src/content/dependencies/generateGroupGalleryPageAlbumGridTab.js
+++ b/src/content/dependencies/generateGroupGalleryPageAlbumGridTab.js
@@ -5,50 +5,64 @@ export default {
   extraDependencies: ['language'],
 
   query(album, group) {
-    const query = {};
-
-    const contextGroup = group;
-
-    const candidateGroups =
-      album.groups
-        .filter(group => !group.excludeFromGalleryTabs)
-        .filter(group => group.category !== contextGroup.category);
-
-    query.notedGroup = candidateGroups.at(0) ?? null;
-
-    if (
-      album.artistContribs.length === 1 &&
-      !empty(group.closelyLinkedArtists) &&
-      (album.artistContribs[0].artist.name ===
-       group.closelyLinkedArtists[0].artist.name)
-    ) {
-      query.notedArtistContribs = [];
-    } else {
-      query.notedArtistContribs = album.artistContribs;
+    if (album.groups.length > 1) {
+      const contextGroup = group;
+
+      const candidateGroups =
+        album.groups
+          .filter(group => !group.excludeFromGalleryTabs)
+          .filter(group => group.category !== contextGroup.category);
+
+      if (!empty(candidateGroups)) {
+        return {
+          mode: 'group',
+          notedGroup: candidateGroups.at(0),
+        };
+      }
     }
 
-    return query;
+    if (!empty(album.artistContribs)) {
+      if (
+        album.artistContribs.length === 1 &&
+        !empty(group.closelyLinkedArtists) &&
+        (album.artistContribs[0].artist.name ===
+         group.closelyLinkedArtists[0].artist.name)
+      ) {
+        return {mode: null};
+      }
+
+      return {
+        mode: 'artists',
+        notedArtistContribs: album.artistContribs,
+      };
+    }
+
+    return {mode: null};;
   },
 
   relations: (relation, query, _album, _group) => ({
     artistCredit:
-      relation('generateArtistCredit', query.notedArtistContribs, []),
+      (query.mode === 'artists'
+        ? relation('generateArtistCredit', query.notedArtistContribs, [])
+        : null),
   }),
 
   data: (query, _album, _group) => ({
+    mode: query.mode,
+
     groupName:
-      (query.notedGroup
+      (query.mode === 'group'
         ? query.notedGroup.name
         : null),
   }),
 
   generate: (data, relations, {language}) =>
     language.encapsulate('misc.coverGrid.tab', capsule =>
-      (data.groupName
+      (data.mode === 'group'
         ? language.$(capsule, 'group', {
             group: data.groupName,
           })
-     : relations.artistCredit
+     : data.mode === 'artists'
         ? relations.artistCredit.slots({
             normalStringKey:
               capsule + '.artists',