UNPKG

apeman-react-mixins

Version:
132 lines (102 loc) 8.43 kB
/** * Mixin to handle resize. * @mixin ApLayoutMixin */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.ApLayoutEvent = undefined; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _deepEqual = require('deep-equal'); var _deepEqual2 = _interopRequireDefault(_deepEqual); var _defaults = require('defaults'); var _defaults2 = _interopRequireDefault(_defaults); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var LAYOUT_INTERVAL = 80; var ApLayoutEvent = exports.ApLayoutEvent = function ApLayoutEvent(values) { _classCallCheck(this, ApLayoutEvent); var s = this; Object.assign(s, values); }; /** @lends ApLayoutMixin */ var ApLayoutMixin = { // -------------------- // Custom // -------------------- $apLayoutMixed: true, /** * Reserve layout. */ layout: function layout(immidate) { var s = this; var props = s.props; clearTimeout(s._layoutTimer); s._layoutTimer = setTimeout(function () { if (!s.isMounted()) { return; } var layouts = s.calcLayouts && s.calcLayouts(); var changed = !(0, _deepEqual2.default)(s.layouts, layouts); if (changed) { s.componentWillLayout(layouts); s.layouts = layouts; s.forceUpdate(); if (props.onLayout) { var event = new ApLayoutEvent({ layouts: layouts }); props.onLayout(event); } s.componentDidLayout(layouts); } }, immidate ? 0 : LAYOUT_INTERVAL); }, // -------------------- // Specs // -------------------- propTypes: { onLayout: _react.PropTypes.func }, // -------------------- // Lifecycle // -------------------- componentWillMount: function componentWillMount() { var s = this; if (s.getInitialLayouts) { s.layouts = s.getInitialLayouts(); } var noop = function noop() { return undefined; }; (0, _defaults2.default)(s, { componentWillLayout: noop, componentDidLayout: noop }); }, componentDidMount: function componentDidMount() { var s = this; if (!s.calcLayouts) { console.warn('[ApLayoutMixin] Should implement .calcLayouts()'); } window.addEventListener('resize', s.layout); s.layout(true); }, componentWillReceiveProps: function componentWillReceiveProps(nextProps) { var s = this; s.layout(); }, componentWillUnmount: function componentWillUnmount() { var s = this; clearTimeout(s._layoutTimer); window.removeEventListener('resize', s.layout); delete s._layoutTimer; }, // -------------------- // Private // -------------------- layouts: null, _layoutTimer: null }; exports.default = Object.freeze(ApLayoutMixin); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX2xheW91dF9taXhpbi5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQTs7Ozs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7QUFFQSxJQUFNLGtCQUFrQixFQUF4Qjs7SUFFYSxhLFdBQUEsYSxHQUNYLHVCQUFhLE1BQWIsRUFBcUI7QUFBQTs7QUFDbkIsTUFBTSxJQUFJLElBQVY7QUFDQSxTQUFPLE1BQVAsQ0FBYyxDQUFkLEVBQWlCLE1BQWpCO0FBQ0QsQzs7Ozs7QUFJSCxJQUFNLGdCQUFnQjs7Ozs7QUFLcEIsa0JBQWdCLElBTEk7Ozs7O0FBVXBCLFFBVm9CLGtCQVVaLFFBVlksRUFVRjtBQUNoQixRQUFNLElBQUksSUFBVjtBQURnQixRQUVWLEtBRlUsR0FFQSxDQUZBLENBRVYsS0FGVTs7QUFHaEIsaUJBQWEsRUFBRSxZQUFmO0FBQ0EsTUFBRSxZQUFGLEdBQWlCLFdBQVcsWUFBTTtBQUNoQyxVQUFJLENBQUMsRUFBRSxTQUFGLEVBQUwsRUFBb0I7QUFDbEI7QUFDRDtBQUNELFVBQUksVUFBVSxFQUFFLFdBQUYsSUFBaUIsRUFBRSxXQUFGLEVBQS9CO0FBQ0EsVUFBSSxVQUFVLENBQUMseUJBQVUsRUFBRSxPQUFaLEVBQXFCLE9BQXJCLENBQWY7QUFDQSxVQUFJLE9BQUosRUFBYTtBQUNYLFVBQUUsbUJBQUYsQ0FBc0IsT0FBdEI7QUFDQSxVQUFFLE9BQUYsR0FBWSxPQUFaO0FBQ0EsVUFBRSxXQUFGO0FBQ0EsWUFBSSxNQUFNLFFBQVYsRUFBb0I7QUFDbEIsY0FBSSxRQUFRLElBQUksYUFBSixDQUFrQixFQUFFLGdCQUFGLEVBQWxCLENBQVo7QUFDQSxnQkFBTSxRQUFOLENBQWUsS0FBZjtBQUNEO0FBQ0QsVUFBRSxrQkFBRixDQUFxQixPQUFyQjtBQUNEO0FBQ0YsS0FoQmdCLEVBZ0JkLFdBQVcsQ0FBWCxHQUFlLGVBaEJELENBQWpCO0FBaUJELEdBL0JtQjs7Ozs7OztBQXFDcEIsYUFBVztBQUNULGNBQVUsaUJBQU07QUFEUCxHQXJDUzs7Ozs7O0FBNkNwQixvQkE3Q29CLGdDQTZDRTtBQUNwQixRQUFNLElBQUksSUFBVjtBQUNBLFFBQUksRUFBRSxpQkFBTixFQUF5QjtBQUN2QixRQUFFLE9BQUYsR0FBWSxFQUFFLGlCQUFGLEVBQVo7QUFDRDtBQUNELFFBQUksT0FBTyxTQUFQLElBQU87QUFBQSxhQUFNLFNBQU47QUFBQSxLQUFYOztBQUVBLDRCQUFTLENBQVQsRUFBWTtBQUNWLDJCQUFxQixJQURYO0FBRVYsMEJBQW9CO0FBRlYsS0FBWjtBQUlELEdBeERtQjtBQXlEcEIsbUJBekRvQiwrQkF5REM7QUFDbkIsUUFBTSxJQUFJLElBQVY7QUFDQSxRQUFJLENBQUMsRUFBRSxXQUFQLEVBQW9CO0FBQ2xCLGNBQVEsSUFBUixDQUFhLGlEQUFiO0FBQ0Q7QUFDRCxXQUFPLGdCQUFQLENBQXdCLFFBQXhCLEVBQWtDLEVBQUUsTUFBcEM7QUFDQSxNQUFFLE1BQUYsQ0FBUyxJQUFUO0FBQ0QsR0FoRW1CO0FBa0VwQiwyQkFsRW9CLHFDQWtFTyxTQWxFUCxFQWtFa0I7QUFDcEMsUUFBTSxJQUFJLElBQVY7QUFDQSxNQUFFLE1BQUY7QUFDRCxHQXJFbUI7QUF1RXBCLHNCQXZFb0Isa0NBdUVJO0FBQ3RCLFFBQU0sSUFBSSxJQUFWO0FBQ0EsaUJBQWEsRUFBRSxZQUFmO0FBQ0EsV0FBTyxtQkFBUCxDQUEyQixRQUEzQixFQUFxQyxFQUFFLE1BQXZDO0FBQ0EsV0FBTyxFQUFFLFlBQVQ7QUFDRCxHQTVFbUI7Ozs7Ozs7QUFrRnBCLFdBQVMsSUFsRlc7QUFtRnBCLGdCQUFjOztBQW5GTSxDQUF0Qjs7a0JBdUZlLE9BQU8sTUFBUCxDQUFjLGFBQWQsQyIsImZpbGUiOiJhcF9sYXlvdXRfbWl4aW4uanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL29rdW5pc2hpbmlzaGkvUHJvamVjdHMvYXBlbWFuLXByb2plY3RzL2FwZW1hbi1yZWFjdC1taXhpbnMvbGliIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNaXhpbiB0byBoYW5kbGUgcmVzaXplLlxuICogQG1peGluIEFwTGF5b3V0TWl4aW5cbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuaW1wb3J0IFJlYWN0LCB7UHJvcFR5cGVzIGFzIHR5cGVzfSBmcm9tICdyZWFjdCdcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCBkZWZhdWx0cyBmcm9tICdkZWZhdWx0cydcblxuY29uc3QgTEFZT1VUX0lOVEVSVkFMID0gODBcblxuZXhwb3J0IGNsYXNzIEFwTGF5b3V0RXZlbnQge1xuICBjb25zdHJ1Y3RvciAodmFsdWVzKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBPYmplY3QuYXNzaWduKHMsIHZhbHVlcylcbiAgfVxufVxuXG4vKiogQGxlbmRzIEFwTGF5b3V0TWl4aW4gKi9cbmNvbnN0IEFwTGF5b3V0TWl4aW4gPSB7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQ3VzdG9tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICRhcExheW91dE1peGVkOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBSZXNlcnZlIGxheW91dC5cbiAgICovXG4gIGxheW91dCAoaW1taWRhdGUpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG4gICAgY2xlYXJUaW1lb3V0KHMuX2xheW91dFRpbWVyKVxuICAgIHMuX2xheW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXMuaXNNb3VudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBsZXQgbGF5b3V0cyA9IHMuY2FsY0xheW91dHMgJiYgcy5jYWxjTGF5b3V0cygpXG4gICAgICBsZXQgY2hhbmdlZCA9ICFkZWVwRXF1YWwocy5sYXlvdXRzLCBsYXlvdXRzKVxuICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgcy5jb21wb25lbnRXaWxsTGF5b3V0KGxheW91dHMpXG4gICAgICAgIHMubGF5b3V0cyA9IGxheW91dHNcbiAgICAgICAgcy5mb3JjZVVwZGF0ZSgpXG4gICAgICAgIGlmIChwcm9wcy5vbkxheW91dCkge1xuICAgICAgICAgIGxldCBldmVudCA9IG5ldyBBcExheW91dEV2ZW50KHsgbGF5b3V0cyB9KVxuICAgICAgICAgIHByb3BzLm9uTGF5b3V0KGV2ZW50KVxuICAgICAgICB9XG4gICAgICAgIHMuY29tcG9uZW50RGlkTGF5b3V0KGxheW91dHMpXG4gICAgICB9XG4gICAgfSwgaW1taWRhdGUgPyAwIDogTEFZT1VUX0lOVEVSVkFMKVxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFNwZWNzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJvcFR5cGVzOiB7XG4gICAgb25MYXlvdXQ6IHR5cGVzLmZ1bmNcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBMaWZlY3ljbGVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBjb21wb25lbnRXaWxsTW91bnQgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgaWYgKHMuZ2V0SW5pdGlhbExheW91dHMpIHtcbiAgICAgIHMubGF5b3V0cyA9IHMuZ2V0SW5pdGlhbExheW91dHMoKVxuICAgIH1cbiAgICBsZXQgbm9vcCA9ICgpID0+IHVuZGVmaW5lZFxuXG4gICAgZGVmYXVsdHMocywge1xuICAgICAgY29tcG9uZW50V2lsbExheW91dDogbm9vcCxcbiAgICAgIGNvbXBvbmVudERpZExheW91dDogbm9vcFxuICAgIH0pXG4gIH0sXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGlmICghcy5jYWxjTGF5b3V0cykge1xuICAgICAgY29uc29sZS53YXJuKCdbQXBMYXlvdXRNaXhpbl0gU2hvdWxkIGltcGxlbWVudCAuY2FsY0xheW91dHMoKScpXG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzLmxheW91dClcbiAgICBzLmxheW91dCh0cnVlKVxuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG5leHRQcm9wcykge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgcy5sYXlvdXQoKVxuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGNsZWFyVGltZW91dChzLl9sYXlvdXRUaW1lcilcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcy5sYXlvdXQpXG4gICAgZGVsZXRlIHMuX2xheW91dFRpbWVyXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUHJpdmF0ZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGxheW91dHM6IG51bGwsXG4gIF9sYXlvdXRUaW1lcjogbnVsbFxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5mcmVlemUoQXBMYXlvdXRNaXhpbilcbiJdfQ==