@gravity-ui/uikit
Version:
Gravity UI base styling and components
34 lines (33 loc) • 1.21 kB
JavaScript
export function mergeProps(...propsList) {
const eventMap = new Map();
return propsList.reduce((acc, props) => {
Object.entries(props).forEach(([key, value]) => {
if (key.startsWith('on') &&
key.charCodeAt(2) >= /* A */ 65 &&
key.charCodeAt(2) <= /* Z */ 90) {
if (!eventMap.has(key)) {
eventMap.set(key, []);
}
if (typeof value === 'function') {
eventMap.get(key)?.push(value);
acc[key] = (...args) => {
return eventMap
.get(key)
?.map((fn) => fn(...args))
.find((v) => v !== undefined);
};
}
}
else if ((key === 'className' || key.endsWith('ClassName')) &&
typeof acc[key] === 'string' &&
typeof value === 'string') {
acc[key] = `${acc[key]} ${value}`;
}
else {
acc[key] = value;
}
});
return acc;
}, {});
}
//# sourceMappingURL=mergeProps.js.map