react-sigma
Version:
Lightweight but powerful library for drawing network graphs built on top of SigmaJS
91 lines (67 loc) • 2.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
require("../sigma/main.js");
require("../sigma/parsers.json.js");
var _tools = require("./tools");
var _propTypes = _interopRequireDefault(require("prop-types"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
// TODO: make a superclass for loaders??
/**
LoadJSON component, interface for parsers.json sigma plugin. Can be used within Sigma component.
Can be composed with other plugins: on load it mounts all child components (e.g. other sigma plugins).
Child's componentWillMount should be used to enable plugins on loaded graph.
@param {string} path path to the JSON file
@param {Function} onGraphLoaded Optional callback for graph update
[see sigma plugin page for more details](https://github.com/jacomyal/sigma.js/tree/master/plugins/sigma.neo4j.cypher)
**/
class LoadJSON extends _react.default.Component {
constructor(props) {
super(props);
_defineProperty(this, "onLoad", () => {
if (this.props.sigma) this.props.sigma.refresh();
this.setState({
loaded: true
});
if (this.props.onGraphLoaded) return this.props.onGraphLoaded();
});
this.state = {
loaded: false
};
}
componentDidMount() {
this._load(this.props.path);
}
componentDidUpdate(props) {
// reload only if path changes
if (this.props.path !== props.path) {
this.setState({
loaded: false
});
this._load(props.path);
}
}
render() {
if (!this.state.loaded) return null;
return /*#__PURE__*/_react.default.createElement("div", null, (0, _tools.embedProps)(this.props.children, {
sigma: this.props.sigma
}));
}
_load(url) {
sigma.parsers.json(this.props.path, this.props.sigma, this.onLoad);
}
}
_defineProperty(LoadJSON, "propTypes", {
path: _propTypes.default.string.isRequired,
onGraphLoaded: _propTypes.default.func,
children: _propTypes.default.any,
sigma: function () {
return (typeof Sigma === "function" ? _propTypes.default.instanceOf(Sigma) : _propTypes.default.any).apply(this, arguments);
}
});
var _default = LoadJSON;
exports.default = _default;