'use strict'; class App extends React.Component { constructor(props) { super(props); this.state = { loading: true, data: null }; MX.setState = (data, cb) => { this.setState({ ...this.state, data: data }, cb); }; } componentDidMount() { if (!this.props.dataUrl) { setTimeout(function () { $(document).trigger('pageready'); }, 1); return; } let dataUrl = this.props.dataUrl; if (typeof dataUrl === 'function') { dataUrl = dataUrl(); } this.setState({ loading: true, data: null }, (function () { $.get(dataUrl, (function (res) { this.setState({ loading: false, data: __preprocess(res.data) }, function () { $(document).trigger('pageready'); }); }).bind(this)); }).bind(this)); } render() { return this.renderContent(); } renderContent() { if (this.props.dataUrl) { return this.renderNetwork(); } else { return this.hardRender(); } } //---handlers---// renderNetwork() { if (this.state.loading) { return (
); } return this.hardRender(); } } function formatUrl(url) { url = url.split('?'); var params = parseParams(location.search); var urlParams = parseParams(url.slice(1).join('?')); params = mergeParams(urlParams, params); var search = $.param(params); if (!search) { return url[0]; } return url[0] + '?' + search; } function parseParams(search) { var params = {}; search = search.replace(/^\?*/, '').split('&'); search.map(function (item) { item = item.split('='); var name = decodeURIComponent(item[0]); var value = decodeURIComponent(item.slice(1).join('=')); if (params[name]) { if (!$.isArray(params[name])) { params[name] = [params[name]]; } params[name].push(value); } else { params[name] = value; } }); return params; } function mergeParams(obj1, obj2) { var keys = Object.getOwnPropertyNames(obj2); keys.forEach(function (key) { var source = obj2[key]; if (!obj1[key]) { obj1[key] = source; } else { if (!$.isArray(source)) { source = [source]; } if (!$.isArray(obj1[key])) { obj1[key] = [obj1[key]]; } obj1[key] = obj1[key].concat(source); } }); return obj1; }