office-ui-fabric-react
Version:
Reusable React components for building experiences for Office 365.
50 lines (48 loc) • 1.85 kB
JavaScript
var REACT_LIFECYCLE_EXCLUSIONS = [
'setState',
'render',
'componentWillMount',
'componentDidMount',
'componentWillReceiveProps',
'shouldComponentUpdate',
'componentWillUpdate',
'componentDidUpdate',
'componentWillUnmount'
];
/**
* Allows you to hoist methods, except those in an exclusion set from a source object into a destination object.
* @param destination The instance of the object to hoist the methods onto.
* @param source The instance of the object where the methods are hoisted from.
* @param exclusions (Optional) What methods to exclude from being hoisted.
* @returns {string[]} An array of names of methods that were hoisted.
*/
function hoistMethods(destination, source, exclusions) {
if (exclusions === void 0) { exclusions = REACT_LIFECYCLE_EXCLUSIONS; }
var hoisted = [];
var _loop_1 = function(methodName) {
if (typeof source[methodName] === 'function' &&
destination[methodName] === undefined &&
(!exclusions || exclusions.indexOf(methodName) === -1)) {
hoisted.push(methodName);
/* tslint:disable:no-function-expression */
destination[methodName] = function () { source[methodName].apply(source, arguments); };
}
};
for (var methodName in source) {
_loop_1(methodName);
}
return hoisted;
}
exports.hoistMethods = hoistMethods;
/**
* Provides a method for convenience to unhoist hoisted methods.
* @param {any} source The source object upon which methods were hoisted.
* @param {string[]} methodNames An array of method names to unhoist.
*/
function unhoistMethods(source, methodNames) {
methodNames
.forEach(function (methodName) { return delete source[methodName]; });
}
exports.unhoistMethods = unhoistMethods;
//# sourceMappingURL=hoist.js.map
;