# HG changeset patch # User François FERRY <francois.ferry@logilab.fr> # Date 1614091367 -3600 # Tue Feb 23 15:42:47 2021 +0100 # Node ID 1e7db076f47c67a3419447e79fa87289a27c1d9b # Parent cf2cc4c855f94cf386c76051de0836568aaf988c feat: allow to have a list of targets as subject or object of relation. diff --git a/packages/demo/src/schema.ts b/packages/demo/src/schema.ts --- a/packages/demo/src/schema.ts +++ b/packages/demo/src/schema.ts @@ -29,13 +29,13 @@ }, { is_in: { - subject: "Museum", - object: "City", + subject: ["Museum"], + object: ["City"], cardinality: "1*", }, director: { - subject: "Museum", - object: "Person", + subject: ["Museum"], + object: ["Person"], cardinality: "**", }, } diff --git a/packages/ra-cubicweb/src/Schema.ts b/packages/ra-cubicweb/src/Schema.ts --- a/packages/ra-cubicweb/src/Schema.ts +++ b/packages/ra-cubicweb/src/Schema.ts @@ -15,8 +15,8 @@ string, { cardinality: CardinalityPair; - subject: keyof E; - object: keyof E; + subject: Array<keyof E>; + object: Array<keyof E>; } >; diff --git a/packages/ra-cubicweb/src/index.ts b/packages/ra-cubicweb/src/index.ts --- a/packages/ra-cubicweb/src/index.ts +++ b/packages/ra-cubicweb/src/index.ts @@ -91,15 +91,12 @@ const subjectRelations = Object.fromEntries( Object.entries(schema.relationships).filter( ([_relationName, definition]: [string, S["relationships"][string]]) => - definition.subject === resource + definition.subject.includes(resource) ) ); for (const relationName in subjectRelations) { - const definition: S["relationships"][string] = - subjectRelations[relationName]; - const result = await rqlClient.queryRows( - `Any TARGET Where TARGET is ${definition.object},X ${relationName} TARGET, X eid ${params.id}` + `Any TARGET Where X ${relationName} TARGET, X eid ${params.id}` ); if (result.length !== 0) { entity[relationName] = result.map((row) => row[0]);