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 / state-tree / connectToDataFactory.js
Size: Mime:
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
Object.defineProperty(exports, "injectAndObserve", {
  enumerable: true,
  get: function get() {
    return _injectAndObserve.injectAndObserve;
  }
});
exports.default = exports.connectToData = exports.connectToDataFactory = void 0;

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

var _exotic = require("exotic");

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

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

var _identifier = require("../identifier");

var _injectAndObserve = require("./injectAndObserve");

var _jsxFileName = "state-tree/connectToDataFactory.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); }

function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }

/**
 * @NOTE could connect to data without datas
 * @param {*} datas
 * @param {Class.extends.React.Component} Component
 * @return {Wrapped.Class.extends.React.Component} auto-updating component
 */
const connectToDataFactory = (datas, name = 'datas') => Component => {
  const named = {
    [name]: datas // @NOTE IMPORTANT

  };
  const ConnectedComponent = (0, _mobxReact.observer)(Component); // @TODO could use class here instead

  function DataWrap(props) {
    const wrappedComponentRef = props.wrappedComponentRef,
          remainingProps = _objectWithoutProperties(props, ["wrappedComponentRef"]);

    if ((0, _exotic.isFunction)(datas.handleProps)) {
      datas.handleProps(props);
    }

    return _react.default.createElement(ConnectedComponent, _extends({}, remainingProps, {
      ref: wrappedComponentRef,
      data: datas
    }, named, datas, {
      __source: {
        fileName: _jsxFileName,
        lineNumber: 54
      },
      __self: this
    }));
  } // DataWrap.prototype.componentWillReact = function() {
  //   console.debug('reaction: ', this)
  // }


  DataWrap.displayName = (0, _identifier.toComponentName)(Component) + `@connectedToData`;
  DataWrap.WrappedComponent = Component; // why do we want a ref to this again?

  DataWrap.propTypes = {
    wrappedComponentRef: _propTypes.default.func // const provide = children =>
    //   <Provider {...named}>
    //     {children}
    //   </Provider>
    // let connected = DataWrap
    // connected = inject(datas)(DataWrap)
    // connected = observer(DataWrap)
    // return provide(connected)
    //
    // return observer(hoistStatics(DataWrap, Component))

  };
  return (0, _mobxReact.observer)(DataWrap);
};

exports.connectToData = exports.connectToDataFactory = connectToDataFactory;
var _default = connectToDataFactory;
exports.default = _default;