From e8964d7a9f9dc787d4d84c0554d22149bb2daa0c Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Mon, 31 Mar 2025 15:04:20 -0300 Subject: data: Artwork, constitutibleArtwork, etc Not used in content yet. --- src/data/things/artwork.js | 97 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/data/things/artwork.js (limited to 'src/data/things/artwork.js') diff --git a/src/data/things/artwork.js b/src/data/things/artwork.js new file mode 100644 index 00000000..86cf6c8a --- /dev/null +++ b/src/data/things/artwork.js @@ -0,0 +1,97 @@ +import {input} from '#composite'; +import Thing from '#thing'; +import {isContributionList, isDate} from '#validators'; +import {parseContributors} from '#yaml'; + +import {withRecontextualizedContributionList, withResolvedContribs} + from '#composite/wiki-data'; +import {referenceList, simpleString, soupyFind, thing} + from '#composite/wiki-properties'; + +import { + exposeDependency, + exposeDependencyOrContinue, + exposeUpdateValueOrContinue, +} from '#composite/control-flow'; + +import {withDate} from '#composite/things/artwork'; + +export class Artwork extends Thing { + static [Thing.referenceType] = 'artwork'; + + static [Thing.getPropertyDescriptors] = ({ + ArtTag, + Contribution, + }) => ({ + // Update & expose + + thing: thing(), + + artTags: referenceList({ + class: input.value(ArtTag), + find: soupyFind.input('artTag'), + }), + + artistContribsFromThingProperty: simpleString(), + artistContribsArtistProperty: simpleString(), + + artistContribs: [ + withDate(), + + withResolvedContribs({ + from: input.updateValue({validate: isContributionList}), + date: '#date', + artistProperty: 'artistContribsArtistProperty', + }), + + exposeDependencyOrContinue({ + dependency: '#resolvedContribs', + mode: input.value('empty'), + }), + + { + dependencies: ['thing', 'artistContribsFromThingProperty'], + compute: (continuation, {thing, artistContribsFromThingProperty}) => + (artistContribsFromThingProperty + ? continuation({ + '#artistContribs': + thing[artistContribsFromThingProperty], + }) + : continuation.exit(null)), + }, + + withRecontextualizedContributionList({ + list: '#artistContribs', + }), + + exposeDependency({ + dependency: '#artistContribs', + }), + ], + + dateFromThingProperty: simpleString(), + + date: [ + withDate({ + from: input.updateValue({validate: isDate}), + }), + + exposeDependency({dependency: '#date'}), + ], + + // Update only + + find: soupyFind(), + }); + + static [Thing.yamlDocumentSpec] = { + fields: { + 'Artists': { + property: 'artistContribs', + transform: parseContributors, + }, + + 'Art Tags': {property: 'artTags'}, + }, + }; +} -- cgit 1.3.0-6-gf8a5