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