merge-props
Version:
Merges className, style, and DOM event handlers for React elements
61 lines • 1.91 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
function pushProp(target, key, value) {
if (key === 'className') {
target.className = [target.className, value].join(' ').trim();
}
else if (key === 'style') {
target.style = __assign(__assign({}, target.style), value);
}
else if (typeof value === 'function') {
var oldFn_1 = target[key];
target[key] = oldFn_1 ? function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
oldFn_1.apply(void 0, args);
value.apply(void 0, args);
} : value;
}
else if (
// skip merging undefined values
value === undefined ||
// skip if both value are the same primitive value
(typeof value !== 'object' && value === target[key])) {
return;
}
else if (!(key in target)) {
target[key] = value;
}
else {
throw new Error("Didn\u2019t know how to merge prop '".concat(key, "'. ") +
"Only 'className', 'style', and event handlers are supported");
}
}
module.exports = function mergeProps() {
var props = [];
for (var _i = 0; _i < arguments.length; _i++) {
props[_i] = arguments[_i];
}
if (props.length === 1) {
return props[0];
}
return props.reduce(function (merged, ps) {
for (var key in ps) {
pushProp(merged, key, ps[key]);
}
return merged;
}, {});
};
//# sourceMappingURL=index.js.map