From 53a2ce6fdc368c0330998ff65fb6816f6cde95e5 Mon Sep 17 00:00:00 2001 From: Nijat Ahmadov Date: Mon, 12 Feb 2018 16:20:46 +0400 Subject: [PATCH] Added component prop --- examples/origin/SomeComponent.js | 25 +++++++++++++++++++++++++ lib/origin.js | 19 ++++++++++--------- src/origin.js | 22 ++++++++++------------ 3 files changed, 45 insertions(+), 21 deletions(-) create mode 100644 examples/origin/SomeComponent.js diff --git a/examples/origin/SomeComponent.js b/examples/origin/SomeComponent.js new file mode 100644 index 0000000..9a0a6fb --- /dev/null +++ b/examples/origin/SomeComponent.js @@ -0,0 +1,25 @@ +import React, { Component, PropTypes } from 'react'; +import { connect } from 'react-redux'; + + +class SomeComponent extends Component { + constructor(props) { + super(props); + this.onClick = this.onClick.bind(this); + } + + onClick() { + console.log("__onClick__"); + } + + render() { + console.log("this.props: ", this.props); + return ( + + {this.props.children} + + ); + } +} + +export default SomeComponent; diff --git a/lib/origin.js b/lib/origin.js index 385a93d..1fce900 100644 --- a/lib/origin.js +++ b/lib/origin.js @@ -68,7 +68,7 @@ var Origin = function (_Component) { value: function render() { var _this2 = this; - var props = (0, _blacklist2.default)(this.props, 'name', 'content', 'place', 'tag', 'delay', 'delayOn', 'dispatch', 'onTimeout', 'onHover', 'onLeave'); + var props = (0, _blacklist2.default)(this.props, 'name', 'content', 'place', 'tagName', 'delay', 'delayOn', 'dispatch', 'onTimeout', 'onHover', 'onLeave'); if (!props.onMouseEnter) { props.onMouseEnter = function (e) { @@ -88,22 +88,22 @@ var Origin = function (_Component) { }; } - var WrappedComponent = this.props.tag; + var WrappedComponent = this.props.component; if (typeof WrappedComponent == 'function') { return _react2.default.createElement( WrappedComponent, - _extends({}, props, { ref: 'wrapper' }), + { onMouseEnter: props.onMouseEnter, onMouseLeave: props.onMouseLeave, ref: 'wrapper' }, props.children ); } - return _react2.default.createElement(this.props.tag, _extends({}, props, { ref: 'wrapper' + return _react2.default.createElement(this.props.tagName, _extends({}, props, { ref: 'wrapper' })); } }], [{ key: 'wrapBy', - value: function wrapBy(tag) { + value: function wrapBy(tagName) { var CustomOrigin = function (_Origin) { _inherits(CustomOrigin, _Origin); @@ -116,13 +116,13 @@ var Origin = function (_Component) { _createClass(CustomOrigin, null, [{ key: 'displayName', get: function get() { - return Origin.displayName + '.' + tag; + return Origin.displayName + '.' + tagName; } }, { key: 'defaultProps', get: function get() { return _extends({}, Origin.defaultProps, { - tag: tag + tagName: tagName }); } }]); @@ -144,7 +144,8 @@ var Origin = function (_Component) { name: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.arrayOf(_propTypes2.default.string)]), content: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.object, _propTypes2.default.arrayOf(_propTypes2.default.object)]), place: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.arrayOf(_propTypes2.default.string)]), - tag: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), + tagName: _propTypes2.default.string, + component: _propTypes2.default.func, delay: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.number, _propTypes2.default.string]), delayOn: _propTypes2.default.oneOf(['show', 'hide', 'both']), onTimeout: _propTypes2.default.func, @@ -159,7 +160,7 @@ var Origin = function (_Component) { get: function get() { return { delayOn: 'hide', - tag: 'span' + tagName: 'span' }; } }]); diff --git a/src/origin.js b/src/origin.js index 824e357..4358ec0 100644 --- a/src/origin.js +++ b/src/origin.js @@ -24,10 +24,8 @@ class Origin extends Component { PropTypes.string, PropTypes.arrayOf(PropTypes.string) ]), - tag: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.func - ]), + tagName: PropTypes.string, + component: PropTypes.func, delay: PropTypes.oneOfType([ PropTypes.bool, PropTypes.number, @@ -45,20 +43,20 @@ class Origin extends Component { static get defaultProps() { return { delayOn: 'hide', - tag: 'span', + tagName: 'span', }; } - static wrapBy(tag) { + static wrapBy(tagName) { class CustomOrigin extends Origin { static get displayName() { - return `${Origin.displayName}.${tag}`; + return `${Origin.displayName}.${tagName}`; } static get defaultProps() { return { ...Origin.defaultProps, - tag, + tagName, }; } } @@ -83,7 +81,7 @@ class Origin extends Component { } render() { - const props = blacklist(this.props, 'name', 'content', 'place', 'tag', 'delay', 'delayOn', 'dispatch', 'onTimeout', 'onHover', 'onLeave'); + const props = blacklist(this.props, 'name', 'content', 'place', 'tagName', 'delay', 'delayOn', 'dispatch', 'onTimeout', 'onHover', 'onLeave'); if (!props.onMouseEnter) { props.onMouseEnter = e => { @@ -107,15 +105,15 @@ class Origin extends Component { }; } - const WrappedComponent = this.props.tag; + const WrappedComponent = this.props.component; if (typeof WrappedComponent == 'function') { - return + return {props.children} } - return React.createElement(this.props.tag, { + return React.createElement(this.props.tagName, { ...props, ref: 'wrapper' }); }