@lyra/vision
Version:
React-based data management tool for Lyra projects
59 lines (42 loc) • 1.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _request = require('../util/request');
var _request2 = _interopRequireDefault(_request);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// Yeah, inheritance and all that. Deal with it.
class LoadingContainer extends _react2.default.PureComponent {
constructor() {
super();
if (!this.getSubscriptions) {
throw new Error(`${this.constructor.name} extended LoadingContainer but did not define a getSubscriptions() method`);
}
this.subscriptions = [];
this.state = {};
}
componentDidMount() {
const subs = this.getSubscriptions();
const stateKeys = this.stateKeys = Object.keys(subs);
this.subscriptions = stateKeys.reduce((target, key) => {
target.push((0, _request2.default)(this, subs[key], key));
return target;
}, []);
}
hasAllData() {
return this.stateKeys && this.stateKeys.every(key => this.state[key] !== undefined);
}
componentWillUnmount() {
while (this.subscriptions.length) {
this.subscriptions.pop().unsubscribe();
}
}
}
LoadingContainer.contextTypes = {
client: _propTypes2.default.shape({ fetch: _propTypes2.default.func }).isRequired
};
exports.default = LoadingContainer;