@mason-api/javascript-sdk
Version:
Mason component rendering library
43 lines (39 loc) • 944 B
JavaScript
import _ from 'lodash';
import update from 'immutability-helper';
export default getContext => (node, config, configSubpath) => {
const { eventHandlers } = getContext();
return update(node, {
p: {
$merge: eventHandlersForNode(node, _.get(eventHandlers, config.componentId, {})),
},
});
}
const eventName = (nodeName, type) => _.camelCase(`on ${nodeName} ${type}`);
const eventTypes = [
'blur',
'change',
'click',
'dblClick',
'focus',
'keyDown',
'keyUp',
'mouseDown',
'mouseEnter',
'mouseLeave',
'mouseMove',
'mouseOut',
'mouseOver',
'mouseUp',
];
function eventHandlersForNode(node, eventHandlers) {
return _.reduce(eventTypes, (result, type) => {
const n = eventName(node.name, type);
if (_.has(eventHandlers, n) && _.isFunction(eventHandlers[n])) {
return {
...result,
[_.toLower(`on${type}`)]: eventHandlers[n],
};
}
return result;
}, {});
}