diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-05-18 11:07:05 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-05-18 11:25:02 -0300 |
commit | 3a80e0ced52fa58ec617092a6abeb5959b523592 (patch) | |
tree | 6317e9254bf4626a6911146e3d491c0dd6ad6233 /src/data/things/group.js | |
parent | 58b4970585bccdd77cfe3d3ec68d92a7cd56f5e2 (diff) |
data: Series
Diffstat (limited to 'src/data/things/group.js')
-rw-r--r-- | src/data/things/group.js | 56 |
1 files changed, 51 insertions, 5 deletions
diff --git a/src/data/things/group.js b/src/data/things/group.js index b40d15b4..294c02c6 100644 --- a/src/data/things/group.js +++ b/src/data/things/group.js @@ -2,6 +2,7 @@ export const GROUP_DATA_FILE = 'groups.yaml'; import {input} from '#composite'; import Thing from '#thing'; +import {is} from '#validators'; import {parseAnnotatedReferences, parseSerieses} from '#yaml'; import { @@ -11,8 +12,9 @@ import { directory, name, referenceList, - seriesList, soupyFind, + thing, + thingList, urls, wikiData, } from '#composite/wiki-properties'; @@ -20,7 +22,7 @@ import { export class Group extends Thing { static [Thing.referenceType] = 'group'; - static [Thing.getPropertyDescriptors] = ({Album, Artist}) => ({ + static [Thing.getPropertyDescriptors] = ({Album, Artist, Series}) => ({ // Update & expose name: name('Unnamed Group'), @@ -43,8 +45,8 @@ export class Group extends Thing { find: soupyFind.input('album'), }), - serieses: seriesList({ - group: input.myself(), + serieses: thingList({ + class: input.value(Series), }), // Update only @@ -192,8 +194,9 @@ export class Group extends Thing { const groupData = results.filter(x => x instanceof Group); const groupCategoryData = results.filter(x => x instanceof GroupCategory); + const seriesData = groupData.flatMap(group => group.serieses); - return {groupData, groupCategoryData}; + return {groupData, groupCategoryData, seriesData}; }, // Groups aren't sorted at all, always preserving the order in the data @@ -240,3 +243,46 @@ export class GroupCategory extends Thing { }, }; } + +export class Series extends Thing { + static [Thing.getPropertyDescriptors] = ({Album, Group}) => ({ + // Update & expose + + name: name('Unnamed Series'), + + showAlbumArtists: { + flags: {update: true, expose: true}, + update: { + validate: + is('all', 'differing', 'none'), + }, + }, + + description: contentString(), + + group: thing({ + class: input.value(Group), + }), + + albums: referenceList({ + class: input.value(Album), + find: soupyFind.input('album'), + }), + + // Update only + + find: soupyFind(), + }); + + static [Thing.yamlDocumentSpec] = { + fields: { + 'Name': {property: 'name'}, + + 'Description': {property: 'description'}, + + 'Show Album Artists': {property: 'showAlbumArtists'}, + + 'Albums': {property: 'albums'}, + }, + }; +} |