UNPKG

apeman-react-mixins

Version:
170 lines (134 loc) 12.3 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /** * Mixin to handle stack */ 'use strict'; var INSETS_STATE_KEY = '_apStackInsets'; /** @lends ApStackMixin */ var ApStackMixin = { // -------------------- // Custom // -------------------- $apStackMixed: true, /** * Get insets of the stack. * @returns {object} */ getStackInsets: function getStackInsets() { var s = this; return s.state[INSETS_STATE_KEY] || {}; }, /** * Set insets of the stack. * @param {object} nextInsets - Insets to set. */ setStackInsets: function setStackInsets(nextInsets) { var s = this; var insets = s.getStackInsets(); s.setState(_defineProperty({}, INSETS_STATE_KEY, Object.assign(insets, nextInsets))); }, /** * Bind stacker events. * @param {Stacker} stacker - A stacker instance. */ bindStacker: function bindStacker(stacker) { var s = this; s._addStackerListener(stacker, 'push', s.stackedViewDidPush); s._addStackerListener(stacker, 'pop', s.stackedViewDidPop); }, /** * Unbind stacker events. * @param {Stacker} stacker - A stacker instance. */ unbindStacker: function unbindStacker(stacker) { var s = this; s._removeStackerListener(stacker, 'push', s.stackedViewDidPush); s._removeStackerListener(stacker, 'pop', s.stackedViewDidPop); }, /** * Get width of scrollable content in the top view. * @returns {number|null} */ getStackedScrollWidth: function getStackedScrollWidth() { var s = this; var stacker = s.props.stacker; var topView = stacker && stacker.topView(); if (!topView) { return null; } var wrapElm = document && document.getElementById('view-wrap-' + topView.id); if (!wrapElm) { return null; } var bodyElm = wrapElm.querySelector('.ap-view-body'); if (!bodyElm) { return null; } return bodyElm.scrollWidth || null; }, // -------------------- // Specs // -------------------- statics: {}, propTypes: { stacker: _react.PropTypes.object.isRequired, stackInsets: _react.PropTypes.object }, getInitialState: function getInitialState() { return _defineProperty({}, INSETS_STATE_KEY, {}); }, // -------------------- // Lifecycle // -------------------- componentWillMount: function componentWillMount() { var s = this; var props = s.props; s.bindStacker(props.stacker); }, componentDidMount: function componentDidMount() { var s = this; var props = s.props; if (props.stackInsets) { s.setStackInsets(props.stackInsets); } }, componentWillReceiveProps: function componentWillReceiveProps(nextProps) { var s = this; var props = s.props; if (nextProps.stackInsets) { s.setStackInsets(nextProps.stackInsets); } if (nextProps.stacker) { s.unbindStacker(props.stacker); s.bindStacker(nextProps.stacker); } }, componentWillUnmount: function componentWillUnmount() { var s = this; var props = s.props; s.unbindStacker(props.stacker); }, // ------------------ // Private // ------------------ _addStackerListener: function _addStackerListener(stacker, event, listner) { var s = this; if (listner && stacker) { stacker.addListener(event, listner); } }, _removeStackerListener: function _removeStackerListener(stacker, event, listner) { var s = this; if (listner && stacker) { stacker.removeListener(event, listner); } } }; exports.default = Object.freeze(ApStackMixin); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX3N0YWNrX21peGluLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFJQTs7Ozs7Ozs7OztBQUNBOztBQUVBLElBQU0sbUJBQW1CLGdCQUF6Qjs7O0FBR0EsSUFBTSxlQUFlOzs7OztBQUtuQixpQkFBZSxJQUxJOzs7Ozs7QUFXbkIsZ0JBWG1CLDRCQVdEO0FBQ2hCLFFBQU0sSUFBSSxJQUFWO0FBQ0EsV0FBTyxFQUFFLEtBQUYsQ0FBUyxnQkFBVCxLQUErQixFQUF0QztBQUNELEdBZGtCOzs7Ozs7QUFtQm5CLGdCQW5CbUIsMEJBbUJILFVBbkJHLEVBbUJTO0FBQzFCLFFBQU0sSUFBSSxJQUFWO0FBQ0EsUUFBSSxTQUFTLEVBQUUsY0FBRixFQUFiO0FBQ0EsTUFBRSxRQUFGLHFCQUNHLGdCQURILEVBQ3NCLE9BQU8sTUFBUCxDQUFjLE1BQWQsRUFBc0IsVUFBdEIsQ0FEdEI7QUFHRCxHQXpCa0I7Ozs7Ozs7QUErQm5CLGFBL0JtQix1QkErQk4sT0EvQk0sRUErQkc7QUFDcEIsUUFBTSxJQUFJLElBQVY7QUFDQSxNQUFFLG1CQUFGLENBQXNCLE9BQXRCLEVBQStCLE1BQS9CLEVBQXVDLEVBQUUsa0JBQXpDO0FBQ0EsTUFBRSxtQkFBRixDQUFzQixPQUF0QixFQUErQixLQUEvQixFQUFzQyxFQUFFLGlCQUF4QztBQUNELEdBbkNrQjs7Ozs7OztBQXlDbkIsZUF6Q21CLHlCQXlDSixPQXpDSSxFQXlDSztBQUN0QixRQUFNLElBQUksSUFBVjtBQUNBLE1BQUUsc0JBQUYsQ0FBeUIsT0FBekIsRUFBa0MsTUFBbEMsRUFBMEMsRUFBRSxrQkFBNUM7QUFDQSxNQUFFLHNCQUFGLENBQXlCLE9BQXpCLEVBQWtDLEtBQWxDLEVBQXlDLEVBQUUsaUJBQTNDO0FBQ0QsR0E3Q2tCOzs7Ozs7O0FBbURuQix1QkFuRG1CLG1DQW1ETTtBQUN2QixRQUFNLElBQUksSUFBVjtBQUR1QixRQUVqQixPQUZpQixHQUVMLEVBQUUsS0FGRyxDQUVqQixPQUZpQjs7QUFHdkIsUUFBSSxVQUFVLFdBQVcsUUFBUSxPQUFSLEVBQXpCO0FBQ0EsUUFBSSxDQUFDLE9BQUwsRUFBYztBQUNaLGFBQU8sSUFBUDtBQUNEO0FBQ0QsUUFBSSxVQUFVLFlBQVksU0FBUyxjQUFULGdCQUFxQyxRQUFRLEVBQTdDLENBQTFCO0FBQ0EsUUFBSSxDQUFDLE9BQUwsRUFBYztBQUNaLGFBQU8sSUFBUDtBQUNEO0FBQ0QsUUFBSSxVQUFVLFFBQVEsYUFBUixDQUFzQixlQUF0QixDQUFkO0FBQ0EsUUFBSSxDQUFDLE9BQUwsRUFBYztBQUNaLGFBQU8sSUFBUDtBQUNEO0FBQ0QsV0FBTyxRQUFRLFdBQVIsSUFBdUIsSUFBOUI7QUFDRCxHQW5Fa0I7Ozs7Ozs7QUF5RW5CLFdBQVMsRUF6RVU7O0FBMkVuQixhQUFXO0FBQ1QsYUFBUyxpQkFBTSxNQUFOLENBQWEsVUFEYjtBQUVULGlCQUFhLGlCQUFNO0FBRlYsR0EzRVE7O0FBZ0ZuQixpQkFoRm1CLDZCQWdGQTtBQUNqQiwrQkFDRyxnQkFESCxFQUNzQixFQUR0QjtBQUdELEdBcEZrQjs7Ozs7OztBQTBGbkIsb0JBMUZtQixnQ0EwRkc7QUFDcEIsUUFBTSxJQUFJLElBQVY7QUFEb0IsUUFFZCxLQUZjLEdBRUosQ0FGSSxDQUVkLEtBRmM7OztBQUlwQixNQUFFLFdBQUYsQ0FBYyxNQUFNLE9BQXBCO0FBQ0QsR0EvRmtCO0FBaUduQixtQkFqR21CLCtCQWlHRTtBQUNuQixRQUFNLElBQUksSUFBVjtBQURtQixRQUViLEtBRmEsR0FFSCxDQUZHLENBRWIsS0FGYTs7QUFHbkIsUUFBSSxNQUFNLFdBQVYsRUFBdUI7QUFDckIsUUFBRSxjQUFGLENBQWlCLE1BQU0sV0FBdkI7QUFDRDtBQUNGLEdBdkdrQjtBQXlHbkIsMkJBekdtQixxQ0F5R1EsU0F6R1IsRUF5R21CO0FBQ3BDLFFBQU0sSUFBSSxJQUFWO0FBRG9DLFFBRTlCLEtBRjhCLEdBRXBCLENBRm9CLENBRTlCLEtBRjhCOzs7QUFJcEMsUUFBSSxVQUFVLFdBQWQsRUFBMkI7QUFDekIsUUFBRSxjQUFGLENBQWlCLFVBQVUsV0FBM0I7QUFDRDtBQUNELFFBQUksVUFBVSxPQUFkLEVBQXVCO0FBQ3JCLFFBQUUsYUFBRixDQUFnQixNQUFNLE9BQXRCO0FBQ0EsUUFBRSxXQUFGLENBQWMsVUFBVSxPQUF4QjtBQUNEO0FBQ0YsR0FwSGtCO0FBc0huQixzQkF0SG1CLGtDQXNISztBQUN0QixRQUFNLElBQUksSUFBVjtBQURzQixRQUVoQixLQUZnQixHQUVOLENBRk0sQ0FFaEIsS0FGZ0I7O0FBR3RCLE1BQUUsYUFBRixDQUFnQixNQUFNLE9BQXRCO0FBQ0QsR0ExSGtCOzs7Ozs7O0FBZ0luQixxQkFoSW1CLCtCQWdJRSxPQWhJRixFQWdJVyxLQWhJWCxFQWdJa0IsT0FoSWxCLEVBZ0kyQjtBQUM1QyxRQUFNLElBQUksSUFBVjtBQUNBLFFBQUksV0FBVyxPQUFmLEVBQXdCO0FBQ3RCLGNBQVEsV0FBUixDQUFvQixLQUFwQixFQUEyQixPQUEzQjtBQUNEO0FBQ0YsR0FySWtCO0FBdUluQix3QkF2SW1CLGtDQXVJSyxPQXZJTCxFQXVJYyxLQXZJZCxFQXVJcUIsT0F2SXJCLEVBdUk4QjtBQUMvQyxRQUFNLElBQUksSUFBVjtBQUNBLFFBQUksV0FBVyxPQUFmLEVBQXdCO0FBQ3RCLGNBQVEsY0FBUixDQUF1QixLQUF2QixFQUE4QixPQUE5QjtBQUNEO0FBQ0Y7QUE1SWtCLENBQXJCOztrQkFnSmUsT0FBTyxNQUFQLENBQWMsWUFBZCxDIiwiZmlsZSI6ImFwX3N0YWNrX21peGluLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9va3VuaXNoaW5pc2hpL1Byb2plY3RzL2FwZW1hbi1wcm9qZWN0cy9hcGVtYW4tcmVhY3QtbWl4aW5zL2xpYiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWl4aW4gdG8gaGFuZGxlIHN0YWNrXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7UHJvcFR5cGVzIGFzIHR5cGVzfSBmcm9tICdyZWFjdCdcbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBJTlNFVFNfU1RBVEVfS0VZID0gJ19hcFN0YWNrSW5zZXRzJ1xuXG4vKiogQGxlbmRzIEFwU3RhY2tNaXhpbiAqL1xuY29uc3QgQXBTdGFja01peGluID0ge1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEN1c3RvbVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAkYXBTdGFja01peGVkOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBHZXQgaW5zZXRzIG9mIHRoZSBzdGFjay5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGdldFN0YWNrSW5zZXRzICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIHJldHVybiBzLnN0YXRlWyBJTlNFVFNfU1RBVEVfS0VZIF0gfHwge31cbiAgfSxcbiAgLyoqXG4gICAqIFNldCBpbnNldHMgb2YgdGhlIHN0YWNrLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dEluc2V0cyAtIEluc2V0cyB0byBzZXQuXG4gICAqL1xuICBzZXRTdGFja0luc2V0cyAobmV4dEluc2V0cykge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IGluc2V0cyA9IHMuZ2V0U3RhY2tJbnNldHMoKVxuICAgIHMuc2V0U3RhdGUoe1xuICAgICAgW0lOU0VUU19TVEFURV9LRVldOiBPYmplY3QuYXNzaWduKGluc2V0cywgbmV4dEluc2V0cylcbiAgICB9KVxuICB9LFxuXG4gIC8qKlxuICAgKiBCaW5kIHN0YWNrZXIgZXZlbnRzLlxuICAgKiBAcGFyYW0ge1N0YWNrZXJ9IHN0YWNrZXIgLSBBIHN0YWNrZXIgaW5zdGFuY2UuXG4gICAqL1xuICBiaW5kU3RhY2tlciAoc3RhY2tlcikge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgcy5fYWRkU3RhY2tlckxpc3RlbmVyKHN0YWNrZXIsICdwdXNoJywgcy5zdGFja2VkVmlld0RpZFB1c2gpXG4gICAgcy5fYWRkU3RhY2tlckxpc3RlbmVyKHN0YWNrZXIsICdwb3AnLCBzLnN0YWNrZWRWaWV3RGlkUG9wKVxuICB9LFxuXG4gIC8qKlxuICAgKiBVbmJpbmQgc3RhY2tlciBldmVudHMuXG4gICAqIEBwYXJhbSB7U3RhY2tlcn0gc3RhY2tlciAtIEEgc3RhY2tlciBpbnN0YW5jZS5cbiAgICovXG4gIHVuYmluZFN0YWNrZXIgKHN0YWNrZXIpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIHMuX3JlbW92ZVN0YWNrZXJMaXN0ZW5lcihzdGFja2VyLCAncHVzaCcsIHMuc3RhY2tlZFZpZXdEaWRQdXNoKVxuICAgIHMuX3JlbW92ZVN0YWNrZXJMaXN0ZW5lcihzdGFja2VyLCAncG9wJywgcy5zdGFja2VkVmlld0RpZFBvcClcbiAgfSxcblxuICAvKipcbiAgICogR2V0IHdpZHRoIG9mIHNjcm9sbGFibGUgY29udGVudCBpbiB0aGUgdG9wIHZpZXcuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH1cbiAgICovXG4gIGdldFN0YWNrZWRTY3JvbGxXaWR0aCAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBzdGFja2VyIH0gPSBzLnByb3BzXG4gICAgbGV0IHRvcFZpZXcgPSBzdGFja2VyICYmIHN0YWNrZXIudG9wVmlldygpXG4gICAgaWYgKCF0b3BWaWV3KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBsZXQgd3JhcEVsbSA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGB2aWV3LXdyYXAtJHt0b3BWaWV3LmlkfWApXG4gICAgaWYgKCF3cmFwRWxtKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBsZXQgYm9keUVsbSA9IHdyYXBFbG0ucXVlcnlTZWxlY3RvcignLmFwLXZpZXctYm9keScpXG4gICAgaWYgKCFib2R5RWxtKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gYm9keUVsbS5zY3JvbGxXaWR0aCB8fCBudWxsXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gU3BlY3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBzdGF0aWNzOiB7fSxcblxuICBwcm9wVHlwZXM6IHtcbiAgICBzdGFja2VyOiB0eXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBzdGFja0luc2V0czogdHlwZXMub2JqZWN0XG4gIH0sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW0lOU0VUU19TVEFURV9LRVldOiB7fVxuICAgIH1cbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBMaWZlY3ljbGVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBjb21wb25lbnRXaWxsTW91bnQgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IHsgcHJvcHMgfSA9IHNcblxuICAgIHMuYmluZFN0YWNrZXIocHJvcHMuc3RhY2tlcilcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuICAgIGlmIChwcm9wcy5zdGFja0luc2V0cykge1xuICAgICAgcy5zZXRTdGFja0luc2V0cyhwcm9wcy5zdGFja0luc2V0cylcbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAobmV4dFByb3BzKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuXG4gICAgaWYgKG5leHRQcm9wcy5zdGFja0luc2V0cykge1xuICAgICAgcy5zZXRTdGFja0luc2V0cyhuZXh0UHJvcHMuc3RhY2tJbnNldHMpXG4gICAgfVxuICAgIGlmIChuZXh0UHJvcHMuc3RhY2tlcikge1xuICAgICAgcy51bmJpbmRTdGFja2VyKHByb3BzLnN0YWNrZXIpXG4gICAgICBzLmJpbmRTdGFja2VyKG5leHRQcm9wcy5zdGFja2VyKVxuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRXaWxsVW5tb3VudCAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuICAgIHMudW5iaW5kU3RhY2tlcihwcm9wcy5zdGFja2VyKVxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQcml2YXRlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIF9hZGRTdGFja2VyTGlzdGVuZXIgKHN0YWNrZXIsIGV2ZW50LCBsaXN0bmVyKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBpZiAobGlzdG5lciAmJiBzdGFja2VyKSB7XG4gICAgICBzdGFja2VyLmFkZExpc3RlbmVyKGV2ZW50LCBsaXN0bmVyKVxuICAgIH1cbiAgfSxcblxuICBfcmVtb3ZlU3RhY2tlckxpc3RlbmVyIChzdGFja2VyLCBldmVudCwgbGlzdG5lcikge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgaWYgKGxpc3RuZXIgJiYgc3RhY2tlcikge1xuICAgICAgc3RhY2tlci5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdG5lcilcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuZnJlZXplKEFwU3RhY2tNaXhpbilcbiJdfQ==