Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _react = _interopRequireDefault(require("react"));

var _propTypes = _interopRequireDefault(require("prop-types"));

var _invariant = _interopRequireDefault(require("invariant"));

function _interopRequireDefault(obj) {
  return obj && obj.__esModule ? obj : {
    default: obj
  };
}
/**
 * A <Subscriber> pulls the value for a channel off of context.broadcasts
 * and passes it to its children function.
 */


class Subscriber extends _react.default.Component {
  constructor(...args) {
    super(...args);
    this.state = {
      value: undefined
    };
  }

  getBroadcast() {
    const broadcasts = this.context.broadcasts || {};
    const broadcast = broadcasts[this.props.channel];
    (0, _invariant.default)(this.props.quiet || broadcast, '<Subscriber channel="%s"> must be rendered in the context of a <Broadcast channel="%s">', this.props.channel, this.props.channel);
    return broadcast;
  }

  componentWillMount() {
    const broadcast = this.getBroadcast();

    if (broadcast) {
      this.setState({
        value: broadcast.getValue()
      });
    }
  }

  componentDidMount() {
    const broadcast = this.getBroadcast();

    if (broadcast) {
      this.unsubscribe = broadcast.subscribe(value => {
        this.setState({
          value
        });
      });
    }
  }

  componentWillUnmount() {
    if (this.unsubscribe) this.unsubscribe();
  }

  render() {
    const children = this.props.children;
    return children ? children(this.state.value) : null;
  }

}

Subscriber.propTypes = {
  channel: _propTypes.default.string.isRequired,
  children: _propTypes.default.func,
  quiet: _propTypes.default.bool
};
Subscriber.defaultProps = {
  quiet: false
};
Subscriber.contextTypes = {
  broadcasts: _propTypes.default.object
};
var _default = Subscriber;
exports.default = _default;