« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/things/artwork.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/data/things/artwork.js')
-rw-r--r--src/data/things/artwork.js30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/data/things/artwork.js b/src/data/things/artwork.js
index 9e4a1d7c..fabbf625 100644
--- a/src/data/things/artwork.js
+++ b/src/data/things/artwork.js
@@ -18,8 +18,6 @@ import {
 } from '#validators';
 
 import {withPropertyFromObject} from '#composite/data';
-import {contentString, directory, simpleString, soupyFind, thing, wikiData}
-  from '#composite/wiki-properties';
 
 import {
   exitWithoutDependency,
@@ -36,6 +34,17 @@ import {
   withResolvedReferenceList,
 } from '#composite/wiki-data';
 
+import {
+  contentString,
+  directory,
+  reverseReferenceList,
+  simpleString,
+  soupyFind,
+  soupyReverse,
+  thing,
+  wikiData,
+} from '#composite/wiki-properties';
+
 import {withDate} from '#composite/things/artwork';
 
 export class Artwork extends Thing {
@@ -222,11 +231,18 @@ export class Artwork extends Thing {
     // Update only
 
     find: soupyFind(),
+    reverse: soupyReverse(),
 
     // used for referencedArtworks (mixedFind)
     artworkData: wikiData({
       class: input.value(Artwork),
     }),
+
+    // Expose only
+
+    referencedByArtworks: reverseReferenceList({
+      reverse: soupyReverse.input('artworksWhichReference'),
+    }),
   });
 
   static [Thing.yamlDocumentSpec] = {
@@ -256,6 +272,16 @@ export class Artwork extends Thing {
     },
   };
 
+  static [Thing.reverseSpecs] = {
+    artworksWhichReference: {
+      bindTo: 'artworkData',
+
+      referencing: artwork => [artwork],
+      referenced: artwork =>
+        artwork.referencedArtworks.map(ref => ref.artwork),
+    },
+  };
+
   get path() {
     if (!this.thing) return null;
     if (!this.thing.getOwnArtworkPath) return null;