UNPKG

react-sigma

Version:

Lightweight but powerful library for drawing network graphs built on top of SigmaJS

91 lines (67 loc) 2.53 kB
"use strict"; 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;