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    
@skava/modules / ___dist / observable-utils / deps / injectContext.js
Size: Mime:
"use strict";

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

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

var _exotic = require("../../exotic");

var _mobxReact = require("xmobx/mobx-react");

var _types = require("../../view-container/types");

var _decorateComponentStatics = _interopRequireDefault(require("./decorateComponentStatics"));

var _jsxFileName = "observable-utils/deps/injectContext.js";

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }

/**
 * @description pass through children
 * @see https://github.com/facebook/react/blob/313611572b6567d229367ed20ff63d1bca8610bb/packages/react-dom/src/__tests__/renderSubtreeIntoContainer-test.js
 */
function renderChildrenOrTarget(Target = undefined) {
  if (Target === undefined) {
    return _react.default.Children.only(this.props.children);
  } else {
    return _react.default.createElement(Target, _extends({}, this.props, {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 16
      },
      __self: this
    }));
  }
}
/**
 * @see  https://github.com/facebook/react/blob/08ff3d749d353a5ef5daf9fea78c456c5ebd048e/packages/react/src/__tests__/ReactContextValidator-test.js#L37
 *
 * @TODO injectAndProvider
 * @see https://github.com/mobxjs/mobx-react/blob/master/src/observer.js#L306
 * @see https://github.com/facebook/react/blob/83a536e62264b7baf0bb5d83835821e6f4c45006/src/renderers/shared/fiber/ReactFiberContext.js
 * @see https://medium.com/@mweststrate/how-to-safely-use-react-context-b7e343eff076
 * @see https://reactjs.org/docs/context.html#passing-info-automatically-through-a-tree
 * @see https://reactjs.org/docs/context.html#referencing-context-in-lifecycle-methods
 * @see https://hackernoon.com/react-redux-example-tutorial-context-why-explicitly-implicitly-e7350eecffc5
 * @see http://reactkungfu.com/2016/01/react-context-feature-in-practice/
 *
 * @param {Function} getContext
 * @param {React.Component} Target
 */


function injectContext(getContext = _exotic.NO_OP, Target = undefined) {
  const staticContext = getContext(Target, this);
  const contextKeys = Object.keys(staticContext);
  const childContextTypes = {};
  contextKeys.forEach(key => {
    childContextTypes[key] = _types.objectOrObservableObject;
  }); // console.log('inject_context', childContextTypes)
  // @observer

  let ContextInjector = class ContextInjector extends _react.default.Component {
    constructor(...args) {
      var _temp;

      return _temp = super(...args), this.getChildContext = () => {
        // console.log('get_child_context', this)
        return getContext.apply(this, arguments);
      }, _temp;
    }

    render() {
      const children = renderChildrenOrTarget.call(this, Target); // return children

      return _react.default.createElement(_mobxReact.Provider, _extends({}, this.getChildContext(), {
        __source: {
          fileName: _jsxFileName,
          lineNumber: 64
        },
        __self: this
      }), children);
    }

  };
  ContextInjector.childContextTypes = childContextTypes;
  (0, _decorateComponentStatics.default)(ContextInjector, Target); // @TODO auto hoist & observe

  return ContextInjector;
}

var _default = injectContext;
exports.default = _default;