« get me outta code hell

content, data: generateWikiHomepageAlbum{Carousel,Grid}Row - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-02-11 11:12:07 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-02-12 07:43:59 -0400
commitc45d45759395725128c030ac387bb20b80aada1e (patch)
treedd71e8354268ca5c48101b0b225144db982cc5cb /src/data
parent19d9c3a3d16ed08b2d0c9e09259ffb79a27cd3e9 (diff)
content, data: generateWikiHomepageAlbum{Carousel,Grid}Row
Diffstat (limited to 'src/data')
-rw-r--r--src/data/checks.js7
-rw-r--r--src/data/things/homepage-layout.js46
2 files changed, 37 insertions, 16 deletions
diff --git a/src/data/checks.js b/src/data/checks.js
index e8a83c61..58f9daee 100644
--- a/src/data/checks.js
+++ b/src/data/checks.js
@@ -197,7 +197,12 @@ export function filterReferenceErrors(wikiData, {
     }],
 
     ['homepageLayout.sections.rows', {
-      _include: row => row.type === 'albums',
+      _include: row => row.type === 'album carousel',
+      albums: 'album',
+    }],
+
+    ['homepageLayout.sections.rows', {
+      _include: row => row.type === 'album grid',
       sourceGroup: '_homepageSourceGroup',
       sourceAlbums: 'album',
     }],
diff --git a/src/data/things/homepage-layout.js b/src/data/things/homepage-layout.js
index fa352ae7..45059370 100644
--- a/src/data/things/homepage-layout.js
+++ b/src/data/things/homepage-layout.js
@@ -82,8 +82,10 @@ export class HomepageLayout extends Thing {
         switch (document['Row']) {
           case 'actions':
             return HomepageLayoutActionsRow;
-          case 'albums':
-            return HomepageLayoutAlbumsRow;
+          case 'album carousel':
+            return HomepageLayoutAlbumCarouselRow;
+          case 'album grid':
+            return HomepageLayoutAlbumGridRow;
           default:
             throw new TypeError(`Unrecognized row type ${document['Row']}`);
         }
@@ -240,26 +242,41 @@ export class HomepageLayoutActionsRow extends HomepageLayoutRow {
   });
 }
 
-export class HomepageLayoutAlbumsRow extends HomepageLayoutRow {
-  static [Thing.friendlyName] = `Homepage Albums Row`;
+export class HomepageLayoutAlbumCarouselRow extends HomepageLayoutRow {
+  static [Thing.friendlyName] = `Homepage Album Carousel Row`;
 
   static [Thing.getPropertyDescriptors] = (opts, {Album, Group} = opts) => ({
     ...HomepageLayoutRow[Thing.getPropertyDescriptors](opts),
 
     // Update & expose
 
-    displayStyle: {
-      flags: {update: true, expose: true},
+    albums: referenceList({
+      class: input.value(Album),
+      find: soupyFind.input('album'),
+    }),
 
-      update: {
-        validate: is('grid', 'carousel'),
-      },
+    // Expose only
 
-      expose: {
-        transform: (displayStyle) =>
-          displayStyle ?? 'grid',
-      },
+    type: {
+      flags: {expose: true},
+      expose: {compute: () => 'album carousel'},
     },
+  });
+
+  static [Thing.yamlDocumentSpec] = Thing.extendDocumentSpec(HomepageLayoutRow, {
+    fields: {
+      'Albums': {property: 'albums'},
+    },
+  });
+}
+
+export class HomepageLayoutAlbumGridRow extends HomepageLayoutRow {
+  static [Thing.friendlyName] = `Homepage Album Grid Row`;
+
+  static [Thing.getPropertyDescriptors] = (opts, {Album, Group} = opts) => ({
+    ...HomepageLayoutRow[Thing.getPropertyDescriptors](opts),
+
+    // Update & expose
 
     sourceGroup: [
       {
@@ -302,13 +319,12 @@ export class HomepageLayoutAlbumsRow extends HomepageLayoutRow {
 
     type: {
       flags: {expose: true},
-      expose: {compute: () => 'albums'},
+      expose: {compute: () => 'album grid'},
     },
   });
 
   static [Thing.yamlDocumentSpec] = Thing.extendDocumentSpec(HomepageLayoutRow, {
     fields: {
-      'Display Style': {property: 'displayStyle'},
       'Group': {property: 'sourceGroup'},
       'Count': {property: 'countAlbumsFromGroup'},
       'Albums': {property: 'sourceAlbums'},