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.dataFactory = dataFactory;
exports.default = void 0;

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

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

var _reactJobs = require("../SSR/react-jobs");

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

var _router = require("../router");

var _oneState = require("./oneState");

var _deps = require("./deps");

var _jsxFileName = "observable-container/oneConnect.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); }

// @TODO
// import { ContainerBase } from 'modules/chain-able/container-builder'
// class OneConnect extends ContainerBase {}
// -------------------- ONE CONNECT FACTORY ------------
// declare class ProvidedInjectedReactComponent extends Provider, Inject, React.Component { }
// declare function handleStoreAndDataFromApi(store: typeof OmniStoreType, dataFromApi: Serializable): any
// declare function fetchApiDataFunction(routerEntries: typeof RouterEntries): Promise<Serializable>
// @TODO need to pass in unique sometime with chain extension
// if (arguments.length)
function dataFactory(dataToStoreHandler, functionToCallApis, handleProps = _deps.tapProps) {
  const addServerSideRendering = (0, _reactJobs.withJob)({
    work: functionToCallApis,
    shouldWorkAgain: _router.isUniqueRouteChange
  });
  /**
   * @param {React.Component} Target component to decorate
   * @return {React.Component} decorated & injected & observer
   */

  return function (Target) {
    var _class;

    // @NOTE IMPORTANT, MUST MAKE TARGET COMPONENT ITSELF AN OBSERVER
    const ViewComponent = (0, _mobxReact.observer)(Target); // annoying we still need this <<< remove this, is only used in state/user
    // @inject('store')

    let Decorated = (0, _mobxReact.observer)(_class = class Decorated extends _react.default.Component {
      componentWillMount() {
        const _handleProps = handleProps(this.props, false),
              store = _handleProps.store,
              omniStore = _handleProps.omniStore,
              jobResult = _handleProps.jobResult;

        return dataToStoreHandler(store, jobResult);
      }

      componentWillReceiveProps(nextProps) {
        if (nextProps.jobResult.identifier !== this.props.jobResult.identifier) {
          const store = this.props.store || _oneState.omniContainer.store;
          console.dev('Reacted with componentWillRecieveProps');
          return dataToStoreHandler(store, nextProps.jobResult);
        }

        return false;
      }

      componentWillReact() {
        const _handleProps2 = handleProps(this.props, false),
              store = _handleProps2.store,
              jobResult = _handleProps2.jobResult;

        console.dev('Reacted with componentWillReact');
        return dataToStoreHandler(store, jobResult);
      }

      render() {
        return _react.default.createElement(ViewComponent, _extends({}, handleProps(this.props), {
          __source: {
            fileName: _jsxFileName,
            lineNumber: 79
          },
          __self: this
        }));
      }

    }) || _class; // @TODO take this back out again
    // Decorated.prototype.componentWillReceiveProps = componentWillReceiveProps
    // @see examples/end-to-end state example
    // Decorated.displayName = wrapDisplayName(Target, 'OneConnect')


    Decorated.displayName = '1Connect(' + (0, _identifier.toComponentName)(Target) + ')';
    Decorated.originalWrappedComponent = Target;
    return addServerSideRendering(Decorated);
  };
}

var _default = dataFactory;
exports.default = _default;