UNPKG

apeman-react-mixins

Version:
248 lines (208 loc) 17.3 kB
/** * Mixin for page components * @module ApPageMixin * */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _assert = require('assert'); var _assert2 = _interopRequireDefault(_assert); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @lends ApPageMixin */ var ApPageMixin = { // -------------------- // Custom // -------------------- $apPageMixed: true, /** * Register page view resolver. * @param {object} resolver - A resolver instance */ registerPageViewResolver: function registerPageViewResolver(resolver) { var s = this; s._pageViewResolver = resolver; }, /** * Register page stack. * @param {string} name - Name of stack * @param {object} stacker - A stacker instance */ registerPageViewStacker: function registerPageViewStacker(name, stacker) { var s = this; s._pageStacks = s._pageStacks || {}; var resolver = s._pageViewResolver; if (!resolver) { throw new Error('Resolver not found call `.registerPageViewResolver()` before this.'); } stacker.stackName = name; stacker.addListener('push', s.pageStackViewDidPush); stacker.addListener('pop', s.pageStackViewDidPop); s._pageStacks[name] = stacker; }, /** * De register page stack * @param name */ deregisterPageStack: function deregisterPageStack(name) { var s = this; var stacker = s._pageStacks[name]; stacker.removeListener('push', s.pageStackViewDidPush); stacker.removeListener('pop', s.pageStackViewDidPop); delete s._pageStacks[name]; }, /** * Get page main stack. * @param {string} name - Name of stack * @returns {ApViewStack.Stacker} */ getPageStack: function getPageStack(name) { var s = this; var stack = s._pageStacks[name]; if (!stack) { throw new Error('Stack not found. Call `.registerPageStack()` on componentWillMount.'); } return stack; }, /** * Create page url from stacker * @param {object} stacker - View stacker. * @returns {string} - Page url */ pageURLWithStacker: function pageURLWithStacker(stacker) { var s = this; return '/' + s.pageName + '/' + stacker.stackName + '/' + stacker.toURL(); }, /** * Reset page stacks. */ resetPageStacks: function resetPageStacks() { var s = this; var stacks = s._pageStacks || {}; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = Object.keys(stacks)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var name = _step.value; var stack = stacks[name]; stack.reset(); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } }, /** * Restore page url * @param {string} url */ restorePageURL: function restorePageURL(url) { var s = this; if (!url) { return; } var names = url.replace(/^\//, '').split(/\//g); if (names[0] === s.pageName) { names.shift(); } if (names.length === 0) { s.resetPageStacks(); return; } var stackName = names.shift(), stackerURL = names.join('/'); if (!stackName) { return; } try { var stacker = s.getPageStack(stackName); stacker.fromURL(stackerURL); stacker.reload(); } catch (e) { console.warn('[' + s.pageName + '] Failed to restore url: ' + url); } }, /** * Get layout for page. * @returns {object} */ getPageLayouts: function getPageLayouts() { var s = this; return s._pageLayouts || {}; }, /** * Update page layout. * @param {string} name - Name of layout. * @param {object} layout - Layout data. */ updatePageLayout: function updatePageLayout(name, layout) { var s = this; var _pageLayouts = Object.assign({}, s.getPageLayouts()); _pageLayouts[name] = Object.assign({}, _pageLayouts[name] || {}, layout); s._pageLayouts = _pageLayouts; s.layout(true); }, // -------------------- // Specs // -------------------- getInitialState: function getInitialState() { return {}; }, // -------------------- // Lifecycle // -------------------- componentWillMount: function componentWillMount() { var s = this; s.pageName = s.pageName || s.getPageName && s.getPageName(); _assert2.default.ok(s.$apLocaleMixed, "ApLocaleMixin is required."); _assert2.default.ok(s.pageName, 'pageName is required.'); }, componentWillUnmount: function componentWillUnmount() { var s = this; // Cleanup stacks. var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = Object.keys(s._pageStacks || {})[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var name = _step2.value; s.deregisterPageStack(name); } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } }, // ------------------ // Private // ------------------ _pageLayouts: null, _pageStacks: null, _pageViewResolver: null }; exports.default = Object.freeze(ApPageMixin); //# sourceMappingURL=data:application/json;base64,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SmQsd0JBN0pjLGtDQTZKVTtBQUNwQixZQUFNLElBQUksSUFBVjs7O0FBRG9CO0FBQUE7QUFBQTs7QUFBQTtBQUlwQixrQ0FBaUIsT0FBTyxJQUFQLENBQVksRUFBRSxXQUFGLElBQWlCLEVBQTdCLENBQWpCLG1JQUFtRDtBQUFBLG9CQUExQyxJQUEwQzs7QUFDL0Msa0JBQUUsbUJBQUYsQ0FBc0IsSUFBdEI7QUFDSDtBQU5tQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT3ZCLEtBcEthOzs7Ozs7O0FBMEtkLGtCQUFjLElBMUtBO0FBMktkLGlCQUFhLElBM0tDO0FBNEtkLHVCQUFtQjs7QUE1S0wsQ0FBbEI7O2tCQWdMZSxPQUFPLE1BQVAsQ0FBYyxXQUFkLEMiLCJmaWxlIjoiYXBfcGFnZV9taXhpbi5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvb2t1bmlzaGluaXNoaS9Qcm9qZWN0cy9hcGVtYW4tcHJvamVjdHMvYXBlbWFuLXJlYWN0LW1peGlucy9saWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1peGluIGZvciBwYWdlIGNvbXBvbmVudHNcbiAqIEBtb2R1bGUgQXBQYWdlTWl4aW5cbiAqXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCdcblxuLyoqIEBsZW5kcyBBcFBhZ2VNaXhpbiAqL1xubGV0IEFwUGFnZU1peGluID0ge1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBDdXN0b21cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICRhcFBhZ2VNaXhlZDogdHJ1ZSxcblxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgcGFnZSB2aWV3IHJlc29sdmVyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSByZXNvbHZlciAtIEEgcmVzb2x2ZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICByZWdpc3RlclBhZ2VWaWV3UmVzb2x2ZXIocmVzb2x2ZXIpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXNcbiAgICAgICAgcy5fcGFnZVZpZXdSZXNvbHZlciA9IHJlc29sdmVyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBwYWdlIHN0YWNrLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiBzdGFja1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBzdGFja2VyIC0gQSBzdGFja2VyIGluc3RhbmNlXG4gICAgICovXG4gICAgcmVnaXN0ZXJQYWdlVmlld1N0YWNrZXIobmFtZSwgc3RhY2tlcikge1xuICAgICAgICBjb25zdCBzID0gdGhpc1xuICAgICAgICBzLl9wYWdlU3RhY2tzID0gcy5fcGFnZVN0YWNrcyB8fCB7fVxuICAgICAgICBsZXQgcmVzb2x2ZXIgPSBzLl9wYWdlVmlld1Jlc29sdmVyO1xuICAgICAgICBpZiAoIXJlc29sdmVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc29sdmVyIG5vdCBmb3VuZCBjYWxsIGAucmVnaXN0ZXJQYWdlVmlld1Jlc29sdmVyKClgIGJlZm9yZSB0aGlzLicpXG4gICAgICAgIH1cbiAgICAgICAgc3RhY2tlci5zdGFja05hbWUgPSBuYW1lO1xuICAgICAgICBzdGFja2VyLmFkZExpc3RlbmVyKCdwdXNoJywgcy5wYWdlU3RhY2tWaWV3RGlkUHVzaClcbiAgICAgICAgc3RhY2tlci5hZGRMaXN0ZW5lcigncG9wJywgcy5wYWdlU3RhY2tWaWV3RGlkUG9wKVxuICAgICAgICBzLl9wYWdlU3RhY2tzW25hbWVdID0gc3RhY2tlcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGUgcmVnaXN0ZXIgcGFnZSBzdGFja1xuICAgICAqIEBwYXJhbSBuYW1lXG4gICAgICovXG4gICAgZGVyZWdpc3RlclBhZ2VTdGFjayhuYW1lKSB7XG4gICAgICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgICAgIGxldCBzdGFja2VyID0gcy5fcGFnZVN0YWNrc1tuYW1lXTtcbiAgICAgICAgc3RhY2tlci5yZW1vdmVMaXN0ZW5lcigncHVzaCcsIHMucGFnZVN0YWNrVmlld0RpZFB1c2gpXG4gICAgICAgIHN0YWNrZXIucmVtb3ZlTGlzdGVuZXIoJ3BvcCcsIHMucGFnZVN0YWNrVmlld0RpZFBvcClcbiAgICAgICAgZGVsZXRlIHMuX3BhZ2VTdGFja3NbbmFtZV07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBwYWdlIG1haW4gc3RhY2suXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHN0YWNrXG4gICAgICogQHJldHVybnMge0FwVmlld1N0YWNrLlN0YWNrZXJ9XG4gICAgICovXG4gICAgZ2V0UGFnZVN0YWNrKG5hbWUpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXNcbiAgICAgICAgbGV0IHN0YWNrID0gcy5fcGFnZVN0YWNrc1tuYW1lXTtcbiAgICAgICAgaWYgKCFzdGFjaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGFjayBub3QgZm91bmQuIENhbGwgYC5yZWdpc3RlclBhZ2VTdGFjaygpYCBvbiBjb21wb25lbnRXaWxsTW91bnQuJylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBwYWdlIHVybCBmcm9tIHN0YWNrZXJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gc3RhY2tlciAtIFZpZXcgc3RhY2tlci5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFBhZ2UgdXJsXG4gICAgICovXG4gICAgcGFnZVVSTFdpdGhTdGFja2VyKHN0YWNrZXIpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXNcbiAgICAgICAgcmV0dXJuIGAvJHtzLnBhZ2VOYW1lfS8ke3N0YWNrZXIuc3RhY2tOYW1lfS8ke3N0YWNrZXIudG9VUkwoKX1gO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXNldCBwYWdlIHN0YWNrcy5cbiAgICAgKi9cbiAgICByZXNldFBhZ2VTdGFja3MoKSB7XG4gICAgICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgICAgIGxldCBzdGFja3MgPSBzLl9wYWdlU3RhY2tzIHx8IHt9XG4gICAgICAgIGZvciAobGV0IG5hbWUgb2YgT2JqZWN0LmtleXMoc3RhY2tzKSkge1xuICAgICAgICAgICAgbGV0IHN0YWNrID0gc3RhY2tzW25hbWVdO1xuICAgICAgICAgICAgc3RhY2sucmVzZXQoKVxuICAgICAgICB9XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogUmVzdG9yZSBwYWdlIHVybFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKi9cbiAgICByZXN0b3JlUGFnZVVSTCh1cmwpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXNcbiAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmFtZXMgPSB1cmwucmVwbGFjZSgvXlxcLy8sICcnKS5zcGxpdCgvXFwvL2cpXG4gICAgICAgIGlmIChuYW1lc1swXSA9PT0gcy5wYWdlTmFtZSkge1xuICAgICAgICAgICAgbmFtZXMuc2hpZnQoKVxuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHMucmVzZXRQYWdlU3RhY2tzKClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RhY2tOYW1lID0gbmFtZXMuc2hpZnQoKSxcbiAgICAgICAgICAgIHN0YWNrZXJVUkwgPSBuYW1lcy5qb2luKCcvJylcbiAgICAgICAgaWYgKCFzdGFja05hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHN0YWNrZXIgPSBzLmdldFBhZ2VTdGFjayhzdGFja05hbWUpXG4gICAgICAgICAgICBzdGFja2VyLmZyb21VUkwoc3RhY2tlclVSTClcbiAgICAgICAgICAgIHN0YWNrZXIucmVsb2FkKClcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbJHtzLnBhZ2VOYW1lfV0gRmFpbGVkIHRvIHJlc3RvcmUgdXJsOiAke3VybH1gKVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBsYXlvdXQgZm9yIHBhZ2UuXG4gICAgICogQHJldHVybnMge29iamVjdH1cbiAgICAgKi9cbiAgICBnZXRQYWdlTGF5b3V0cygpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHMuX3BhZ2VMYXlvdXRzIHx8IHt9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBwYWdlIGxheW91dC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgbGF5b3V0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBsYXlvdXQgLSBMYXlvdXQgZGF0YS5cbiAgICAgKi9cbiAgICB1cGRhdGVQYWdlTGF5b3V0KG5hbWUsIGxheW91dCkge1xuICAgICAgICBjb25zdCBzID0gdGhpc1xuICAgICAgICBsZXQgX3BhZ2VMYXlvdXRzID0gT2JqZWN0LmFzc2lnbih7fSwgcy5nZXRQYWdlTGF5b3V0cygpKVxuICAgICAgICBfcGFnZUxheW91dHNbbmFtZV0gPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sIF9wYWdlTGF5b3V0c1tuYW1lXSB8fCB7fSwgbGF5b3V0XG4gICAgICAgIClcbiAgICAgICAgcy5fcGFnZUxheW91dHMgPSBfcGFnZUxheW91dHM7XG4gICAgICAgIHMubGF5b3V0KHRydWUpXG4gICAgfSxcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU3BlY3NcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGdldEluaXRpYWxTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgfSxcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTGlmZWN5Y2xlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb21wb25lbnRXaWxsTW91bnQgKCkge1xuICAgICAgICBjb25zdCBzID0gdGhpc1xuXG4gICAgICAgIHMucGFnZU5hbWUgPSBzLnBhZ2VOYW1lIHx8IChzLmdldFBhZ2VOYW1lICYmIHMuZ2V0UGFnZU5hbWUoKSlcbiAgICAgICAgYXNzZXJ0Lm9rKHMuJGFwTG9jYWxlTWl4ZWQsIFwiQXBMb2NhbGVNaXhpbiBpcyByZXF1aXJlZC5cIilcbiAgICAgICAgYXNzZXJ0Lm9rKHMucGFnZU5hbWUsICdwYWdlTmFtZSBpcyByZXF1aXJlZC4nKVxuXG4gICAgfSxcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCAoKSB7XG4gICAgICAgIGNvbnN0IHMgPSB0aGlzXG5cbiAgICAgICAgLy8gQ2xlYW51cCBzdGFja3MuXG4gICAgICAgIGZvciAobGV0IG5hbWUgb2YgT2JqZWN0LmtleXMocy5fcGFnZVN0YWNrcyB8fCB7fSkpIHtcbiAgICAgICAgICAgIHMuZGVyZWdpc3RlclBhZ2VTdGFjayhuYW1lKVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFByaXZhdGVcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIF9wYWdlTGF5b3V0czogbnVsbCxcbiAgICBfcGFnZVN0YWNrczogbnVsbCxcbiAgICBfcGFnZVZpZXdSZXNvbHZlcjogbnVsbFxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5mcmVlemUoQXBQYWdlTWl4aW4pIl19