apeman-react-mixins
Version:
React mixin set of apeman.
248 lines (208 loc) • 17.3 kB
JavaScript
/**
* Mixin for page components
* @module ApPageMixin
*
*/
;
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