diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-03-31 15:04:20 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-04-10 16:02:35 -0300 |
commit | e8964d7a9f9dc787d4d84c0554d22149bb2daa0c (patch) | |
tree | 460944e7a5417ee8a998e37d7cbd05364398fd4f /src/data/things/artwork.js | |
parent | 964273f8cb26c6d9df8ec827126167dc5b58ae27 (diff) |
data: Artwork, constitutibleArtwork, etc
Not used in content yet.
Diffstat (limited to 'src/data/things/artwork.js')
-rw-r--r-- | src/data/things/artwork.js | 97 |
1 files changed, 97 insertions, 0 deletions
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'}, + }, + }; +} |