Files

60 lines
1.5 KiB
JavaScript

// taken from https://reacttraining.com/react-router/web/guides/code-splitting
import React from 'react';
import Path from 'path';
import load from "little-loader";
export class Bundle extends React.Component {
state = { mod: null };
componentDidMount() {
this.load(this.props)
}
componentWillReceiveProps(nextProps) {
if(nextProps.load !== this.props.load){ this.load(nextProps) }
}
load(props) {
this.setState({
mod: null
});
Promise.all(
[props.loader].concat(
(props.overrides || []).map((src) => loadAsPromise(src))
)
).then((m) => {
const _mod = m[0];
this.setState({
mod: function(mod){
if(mod['default']){
return mod.default;
}else if(mod['__esModule'] === true){
return mod[props.symbol] ? mod[props.symbol] : null;
}else{
return mod;
}
}(_mod)
});
}).catch((err) => {
console.warn(err)
});
}
render() {
return this.state.mod ? this.props.children(this.state.mod) : null
}
}
function loadAsPromise(src){
return new Promise((done, error) => {
load(src, function(err){
if(err){
error(err);
return;
}
done();
})
});
}