1
0
mirror of https://github.com/Pomax/BezierInfo-2.git synced 2025-08-14 04:34:21 +02:00
Files
BezierInfo-2/components/decorators/keyhandling-decorator.jsx
Mike Kamermans 25a18d8891 Use Preact, rather than React (#91)
* moving to Preact to shave off 100+kb

* preact'ed
2017-04-02 14:32:06 -07:00

45 lines
1.1 KiB
JavaScript

var React = require("react");
var noop = require("../../lib/noop");
module.exports = function(Component) {
var options = Component.keyHandlingOptions,
propName = options.propName || "",
values = options.values || {},
controller = options.controller || noop,
defaultProps = Component.defaultProps,
getDefaultProps = Component.getDefaultProps,
ref = "wrappedComponent";
return React.createClass({
values: values,
defaultProps: defaultProps,
getDefaultProps: getDefaultProps,
onKeyDown: function(event, api) {
var v = this.values[event.keyCode];
if(v) {
event.preventDefault();
if (typeof v === "function") {
v(api);
} else {
api[propName] += v;
controller(api);
}
}
},
getComponent: function() {
var wrappedComponent = this.refs[ref];
if (wrappedComponent.getComponent) {
return wrappedComponent.getComponent();
}
return wrappedComponent;
},
render: function() {
return <Component {...this.props} onKeyDown={this.onKeyDown} ref={ref} />;
}
});
};