@6thquake/react-material
Version:
React components that implement Google's Material Design.
46 lines (37 loc) • 1.34 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
import React, { Component } from 'react';
import PropTypes from 'prop-types';
function withForm(WrappedComponent, OriginComponent) {
class FormComponent extends Component {
constructor(...args) {
super(...args);
this.isForm = () => !!this.context.formsy;
}
render() {
const _this$props = this.props,
{
forwardedRef
} = _this$props,
rest = _objectWithoutPropertiesLoose(_this$props, ["forwardedRef"]);
const isForm = this.isForm();
if (isForm) {
return React.createElement(WrappedComponent, _extends({}, rest, {
ref: forwardedRef
}));
}
return React.createElement(OriginComponent, _extends({}, rest, {
ref: forwardedRef
}));
}
}
const name = OriginComponent.displayName || OriginComponent.name || (typeof OriginComponent === 'string' ? OriginComponent : 'Component');
FormComponent.displayName = `formHOC-${name}`;
FormComponent.contextTypes = {
formsy: PropTypes.object
};
return React.forwardRef((props, ref) => React.createElement(FormComponent, _extends({}, props, {
forwardedRef: ref
})));
}
export default withForm;