UNPKG

@lyra/vision

Version:

React-based data management tool for Lyra projects

59 lines (42 loc) 1.5 kB
'use strict'; 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;