Comments (5)
Hi,
sorry, I missed this on my documentation.
I already exposed vis instance through the prop name vis. you can access all vis methods through this prop
<Graph
graph={this.state.graph}
style={this.state.style}
options={options}
getNetwork={this.getNetwork.bind(this)}
events={this.events}
vis={vis => (this.vis = vis)}
/>
looking forward to more suggestions
from vis-react.
Hi, thank you so much for your quick response.
from vis-react.
Hi there!
I can't really get it, could you please make an example?
Thank you!
from vis-react.
Example Component
import React from 'react';
import Graph from 'vis-react';
let allNodes;
var highlightActive = false;
let options = {
layout: {
randomSeed: 2
},
nodes: {
fixed: {
x: false,
y: false
},
shape: 'dot',
size: 13,
borderWidth: 1.5,
borderWidthSelected: 2,
font: {
size: 15,
align: 'center',
bold: {
color: '#bbbdc0',
size: 15,
vadjust: 0,
mod: 'bold'
}
}
},
edges: {
width: 0.01,
color: {
color: '#D3D3D3',
highlight: '#797979',
hover: '#797979',
opacity: 1.0
},
arrows: {
to: { enabled: true, scaleFactor: 1, type: 'arrow' },
middle: { enabled: false, scaleFactor: 1, type: 'arrow' },
from: { enabled: true, scaleFactor: 1, type: 'arrow' }
},
smooth: {
type: 'continuous',
roundness: 0
}
},
groups: {
},
physics: {
barnesHut: {
gravitationalConstant: -30000,
centralGravity: 1,
springLength: 70,
avoidOverlap: 1
},
stabilization: { iterations: 2500 }
},
interaction: {
hover: true,
hoverConnectedEdges: true,
selectable: false,
selectConnectedEdges: false,
zoomView: false,
dragView: false
}
};
export default class VisReact extends React.Component {
constructor(props) {
super(props);
this.events = {
select: function (event) {
var { nodes, edges } = event;
console.log('Selected nodes:');
console.log(nodes);
console.log('Selected edges:');
console.log(edges);
},
hoverNode: function (event) {
this.neighbourhoodHighlight(event);
},
blurNode: function (event) {
this.neighbourhoodHighlightHide(event);
},
click: function (event) {
this.redirectToLearn(event);
}
};
let jsonData = this.props.initialGraph; // sample data set
let nodes = [];
let edges = [];
if (jsonData && jsonData.length > 0) {
for (let i = 0; i < jsonData[0].relation.root_kt_node.length; i++) {
jsonData[0].relation.root_kt_node[i].color = undefined;
jsonData[0].relation.root_kt_node[i].label = jsonData[0].relation.root_kt_node[i].source;
jsonData[0].relation.root_kt_node[i].id = jsonData[0].relation.root_kt_node[i].from;
jsonData[0].relation.root_kt_node[i].group = jsonData[0].relation.root_kt_node[i].seo_subject_name;
nodes.push(jsonData[0].relation.root_kt_node[i]);
}
for (let j = 0; j < jsonData[0].relation.leading_to_links.length; j++) {
if (
jsonData[0].relation.leading_to_links[j].target.length > 20 &&
jsonData[0].relation.leading_to_links[j].target.indexOf('\n') == -1
) {
jsonData[0].relation.leading_to_links[j].target = jsonData[0].relation.leading_to_links[j].target
.split(' ')
.reduce((a, e, i) => a + e + (i % 20 === 3 ? '\n' : ' '), ' ');
}
jsonData[0].relation.leading_to_links[j].color = undefined;
jsonData[0].relation.leading_to_links[j].label = jsonData[0].relation.leading_to_links[j].target;
jsonData[0].relation.leading_to_links[j].id = jsonData[0].relation.leading_to_links[j].to;
jsonData[0].relation.leading_to_links[j].group =
jsonData[0].relation.leading_to_links[j].seo_subject_name;
nodes.push(jsonData[0].relation.leading_to_links[j]);
}
for (let k = 0; k < jsonData[0].relation.derived_from_links.length; k++) {
if (
jsonData[0].relation.derived_from_links[k].source.length > 20 &&
jsonData[0].relation.derived_from_links[k].source.indexOf('\n') == -1
) {
jsonData[0].relation.derived_from_links[k].source = jsonData[0].relation.derived_from_links[
k
].source
.split(' ')
.reduce((a, e, i) => a + e + (i % 20 === 3 ? '\n' : ' '), ' ');
}
jsonData[0].relation.derived_from_links[k].color = undefined;
jsonData[0].relation.derived_from_links[k].label = jsonData[0].relation.derived_from_links[k].source;
jsonData[0].relation.derived_from_links[k].id = jsonData[0].relation.derived_from_links[k].from;
jsonData[0].relation.derived_from_links[k].group =
jsonData[0].relation.derived_from_links[k].seo_subject_name;
nodes.push(jsonData[0].relation.derived_from_links[k]);
}
for (let i = 0; i < nodes.length; i++) {
if (nodes[i].target !== '' && nodes[i].to !== '') {
let edgeDir = {};
edgeDir.from = nodes[i].from;
edgeDir.to = nodes[i].to;
edgeDir.arrows = 'to';
edges.push(edgeDir);
}
}
}
let newGraph = {};
newGraph.nodes = nodes;
newGraph.edges = edges;
this.state = {
graph: newGraph,
style: { width: '100%', height: '100%' },
network: null
};
this.measure = this.measure.bind(this);
this.events.hoverNode = this.events.hoverNode.bind(this);
this.events.blurNode = this.events.blurNode.bind(this);
this.events.click = this.events.click.bind(this);
this.neighbourhoodHighlight = this.neighbourhoodHighlight.bind(this);
this.redirectToLearn = this.redirectToLearn.bind(this);
this.neighbourhoodHighlightHide = this.neighbourhoodHighlightHide.bind(this);
}
componentDidMount() {
window.addEventListener('resize', this.measure);
}
componentWillUnmount() {
window.removeEventListener('resize', this.measure);
}
measure(data) {
console.log('measure');
this.state.network.redraw();
this.state.network.fit();
}
redirectToLearn(params) {
}
neighbourhoodHighlight(params) {
let allNodes = this.state.graph.nodes;
let Nodes = new this.vis.DataSet(allNodes);
let cloneNodes = Nodes.get({ returnType: 'Object' });
this.state.network.canvas.body.container.style.cursor = 'pointer';
if (params.node !== undefined) {
highlightActive = true;
let i, j;
let selectedNode = params.node;
let degrees = 1;
for (var nodeId in cloneNodes) {
cloneNodes[nodeId].color = 'rgba(200,200,200,0.5)';
if (cloneNodes[nodeId].hiddenLabel === undefined) {
cloneNodes[nodeId].hiddenLabel = cloneNodes[nodeId].label;
cloneNodes[nodeId].label = undefined;
}
}
let connectedNodes = this.state.network.getConnectedNodes(selectedNode);
let allConnectedNodes = [];
// get the second degree nodes
for (i = 1; i < degrees; i++) {
for (j = 0; j < connectedNodes.length; j++) {
allConnectedNodes = allConnectedNodes.concat(
this.state.network.getConnectedNodes(connectedNodes[j])
);
}
}
// all second degree nodes get a different color and their label back
for (i = 0; i < allConnectedNodes.length; i++) {
cloneNodes[allConnectedNodes[i]].color = 'rgba(150,150,150,0.75)';
if (cloneNodes[allConnectedNodes[i]].hiddenLabel !== undefined) {
cloneNodes[allConnectedNodes[i]].label = cloneNodes[allConnectedNodes[i]].hiddenLabel;
cloneNodes[allConnectedNodes[i]].hiddenLabel = undefined;
}
}
// all first degree nodes get their own color and their label back
for (let i = 0; i < connectedNodes.length; i++) {
cloneNodes[connectedNodes[i]].color = undefined;
if (cloneNodes[connectedNodes[i]]['hiddenLabel'] !== undefined) {
cloneNodes[connectedNodes[i]].label = cloneNodes[connectedNodes[i]]['hiddenLabel'];
const fontSize = this.state.network.body.nodes;
fontSize[connectedNodes[i]].options.font.size = 15;
cloneNodes[connectedNodes[i]]['hiddenLabel'] = undefined;
}
}
// the main node gets its own color and its label back.
cloneNodes[selectedNode].color = undefined;
if (cloneNodes[selectedNode]['hiddenLabel'] !== undefined) {
cloneNodes[selectedNode].label = cloneNodes[selectedNode]['hiddenLabel'];
const fontSize = this.state.network.body.nodes;
fontSize[selectedNode].options.font.size = 15;
// this.setState({fontSize})
cloneNodes[selectedNode]['hiddenLabel'] = undefined;
}
} else if (highlightActive === true) {
// reset all nodes
for (let nodeId in cloneNodes) {
cloneNodes[nodeId].color = undefined;
if (cloneNodes[nodeId]['hiddenLabel'] !== undefined) {
cloneNodes[nodeId].label = cloneNodes[nodeId]['hiddenLabel'];
const fontSize = this.state.network.body.nodes;
fontSize[nodeId].options.font.size = 15;
this.setState({ fontSize });
cloneNodes[nodeId]['hiddenLabel'] = undefined;
}
}
highlightActive = false;
}
let updateArray = [];
for (let nodeId in cloneNodes) {
if (cloneNodes.hasOwnProperty(nodeId)) {
updateArray.push(cloneNodes[nodeId]);
}
}
}
neighbourhoodHighlightHide(params) {
let allNodes = this.state.graph.nodes;
let Nodes = new this.vis.DataSet(allNodes);
let allNodess = Nodes.get({ returnType: 'Object' });
this.state.network.canvas.body.container.style.cursor = 'default';
for (var nodeId in allNodess) {
allNodess[nodeId].color = 'rgba(200,200,200,0.5)';
if (allNodess[nodeId].hiddenLabel === undefined) {
allNodess[nodeId].hiddenLabel = allNodess[nodeId].label;
allNodess[nodeId].label = undefined;
}
}
highlightActive = true;
if (highlightActive === true) {
// reset all nodes
for (var nodeIds in allNodess) {
allNodess[nodeIds].color = undefined;
if (allNodess[nodeIds].hiddenLabel !== undefined) {
allNodess[nodeIds].label = allNodess[nodeIds].hiddenLabel;
const fontSize = this.state.network.body.nodes;
fontSize[nodeIds].options.font.size = 15;
this.setState({ fontSize });
allNodess[nodeIds].hiddenLabel = undefined;
}
}
highlightActive = false;
}
var updateArray = [];
for (var nodeIde in allNodess) {
if (allNodess.hasOwnProperty(nodeIde)) {
updateArray.push(allNodess[nodeIde]);
}
}
}
getNetwork(data) {
this.setState({ network: data });
}
render() {
return (
<div className='vis-react'>
<div className='vis-react-container'>
<Graph
graph={this.state.graph}
style={this.state.style}
options={options}
getNetwork={this.getNetwork.bind(this)}
events={this.events}
vis={vis => (this.vis = vis)}
/>
</div>
</div>
);
}
}
from vis-react.
Thank you so much!
I really appreciate it!
from vis-react.
Related Issues (19)
- Lack css in instructions HOT 1
- how can i use vis.js method
- Use visjs-network HOT 1
- Navigation buttons
- Fork/Relationship with react-graph-vis
- Fix ES Lint Unable to resolve path to module error HOT 1
- hoverEdge function not working HOT 3
- Changing `vis` dependency to exact commit rather than master
- Nodes with images fail to load after unmount and remount of Graph React component
- Updating state causes id already exists error HOT 6
- add getEdges HOT 2
- Getting errors in <Graph> component after updating to 0.5.1 HOT 2
- Unknown circles appear upon using <Graph> from `vis-react`
- Impossible to add legend
- How to get 100% height of canvas?
- Upgrade to support React 16 HOT 1
- Add Item is being called twice for when reading nodes/ edges from redux and local storage HOT 1
- how to change tooltip content on node selection
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from vis-react.