UNPKG

@mason-api/javascript-sdk

Version:

Mason component rendering library

43 lines (39 loc) 944 B
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; }, {}); }