From 04c351c2a88e04586310e88b827643c2419dd595 Mon Sep 17 00:00:00 2001
From: esikkala <esko.ikkala@aalto.fi>
Date: Fri, 3 Jan 2020 15:43:27 +0200
Subject: [PATCH] Test manuscript -> author network

---
 .../components/facet_results/Network.js       | 54 ++++++++++++++++---
 src/client/reducers/mmm/manuscripts.js        |  7 ++-
 src/server/sparql/NetworkApi.js               | 27 +++++-----
 src/server/sparql/SparqlQueriesManuscripts.js |  3 +-
 4 files changed, 67 insertions(+), 24 deletions(-)

diff --git a/src/client/components/facet_results/Network.js b/src/client/components/facet_results/Network.js
index 61ca5fd5..00608b27 100644
--- a/src/client/components/facet_results/Network.js
+++ b/src/client/components/facet_results/Network.js
@@ -16,6 +16,25 @@ const styles = theme => ({
   }
 });
 
+const layout = {
+  name: 'cose',
+  idealEdgeLength: 100,
+  nodeOverlap: 20,
+  refresh: 20,
+  fit: true,
+  padding: 30,
+  randomize: false,
+  componentSpacing: 100,
+  nodeRepulsion: 400000,
+  edgeElasticity: 100,
+  nestingFactor: 5,
+  gravity: 80,
+  numIter: 1000,
+  initialTemp: 200,
+  coolingFactor: 0.95,
+  minTemp: 1.0
+};
+
 class Network extends React.Component {
   constructor(props) {
     super(props);
@@ -23,20 +42,39 @@ class Network extends React.Component {
   }
 
   componentDidMount = () => {
-
     this.props.fetchResults({
       resultClass: this.props.resultClass,
       facetClass: this.props.facetClass,
     });
-
     this.cy = cytoscape({
-      container: this.cyRef.current
+      container: this.cyRef.current,
+      layout: { name: 'circle'},
+      style: [ // the stylesheet for the graph
+        {
+          selector: 'node',
+          style: {
+            'background-color': '#666',
+            'label': 'data(prefLabel)'
+          }
+        },
+        {
+          selector: 'edge',
+          style: {
+            'width': 3,
+            'line-color': '#ccc',
+            'target-arrow-color': '#ccc',
+            'target-arrow-shape': 'triangle'
+          }
+        }
+      ]
     });
-    this.cy.add([
-      { group: 'nodes', data: { id: 'n0' }, position: { x: 100, y: 100 } },
-      { group: 'nodes', data: { id: 'n1' }, position: { x: 200, y: 200 } },
-      { group: 'edges', data: { id: 'e0', source: 'n0', target: 'n1' } }
-    ]);
+  }
+
+  componentDidUpdate = () => {
+    if (this.props.results !== null) {
+      this.cy.add(this.props.results.elements);
+      this.cy.layout(layout).run();
+    }
   }
 
   render = () => {
diff --git a/src/client/reducers/mmm/manuscripts.js b/src/client/reducers/mmm/manuscripts.js
index 3d79097c..82fa843b 100644
--- a/src/client/reducers/mmm/manuscripts.js
+++ b/src/client/reducers/mmm/manuscripts.js
@@ -281,8 +281,13 @@ export const INITIAL_STATE = {
   ],
 };
 
+const resultClasses = new Set([
+  'manuscripts',
+  'manuscriptsNetwork'
+]);
+
 const manuscripts = (state = INITIAL_STATE, action) => {
-  if (action.resultClass === 'manuscripts') {
+  if (resultClasses.has(action.resultClass)) {
     switch (action.type) {
       case FETCH_RESULTS:
       case FETCH_PAGINATED_RESULTS:
diff --git a/src/server/sparql/NetworkApi.js b/src/server/sparql/NetworkApi.js
index f4638feb..eea2aacf 100644
--- a/src/server/sparql/NetworkApi.js
+++ b/src/server/sparql/NetworkApi.js
@@ -6,23 +6,24 @@ export const runNetworkQuery = async({
   links,
   nodes
 }) => {
-  const headers = {
-    'Content-Type': 'application/x-www-form-urlencoded',
-  };
-  const params = JSON.stringify({
+  const payload = {
     endpoint,
     prefixes,
+    links,
     nodes,
-    links
-  });
+    limit: 500
+  };
+  const url = 'http://127.0.0.1:5000/query';
+  const config = {
+    headers: {
+      'Content-Type': 'application/json'
+    }
+  };
   try {
-    const response = await axios({
-      method: 'post',
-      headers: headers,
-      url: 'http://127.0.0.1:5000/query',
-      data: params,
-    });
-    return response.data;
+    const response = await axios.post(url, payload, config);
+    return {
+      data: response.data
+    };
   } catch(error) {
     if (error.response) {
     // The request was made and the server responded with a status code
diff --git a/src/server/sparql/SparqlQueriesManuscripts.js b/src/server/sparql/SparqlQueriesManuscripts.js
index d04deff9..2b5d1e7c 100644
--- a/src/server/sparql/SparqlQueriesManuscripts.js
+++ b/src/server/sparql/SparqlQueriesManuscripts.js
@@ -428,9 +428,8 @@ export const networkLinksQuery = `
   SELECT DISTINCT ?source ?target
   WHERE {
     <FILTER>
-    ?source mmm-schema:manuscript_author ?target .
+    ?target mmm-schema:manuscript_author ?source .
   }
-  LIMIT 100
 `;
 
 export const networkNodesQuery = `
-- 
GitLab