@@ -389,7 +389,9 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
389389 eventOff: props.eventOff || null,
390390 currentEvent: null, // Current mouse event
391391 currentTarget: null, // Current target of mouse event
392- ariaProps: (0, _aria.parseAria)(props) // aria- and role attributes
392+ ariaProps: (0, _aria.parseAria)(props), // aria- and role attributes
393+ isEmptyTip: false,
394+ disable: false
393395 };
394396
395397 _this.bind(['showTooltip', 'updateTooltip', 'hideTooltip', 'globalRebuild', 'globalShow', 'globalHide', 'onWindowResize']);
@@ -559,9 +561,6 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
559561 value: function showTooltip(e, isGlobalCall) {
560562 var _this5 = this;
561563
562- var disabled = e.currentTarget.getAttribute('data-tip-disable') ? e.currentTarget.getAttribute('data-tip-disable') === 'true' : this.props.disable || false;
563- if (disabled) return;
564-
565564 if (isGlobalCall) {
566565 // Don't trigger other elements belongs to other ReactTooltip
567566 var targetArray = this.getTargetArray(this.props.id);
@@ -581,15 +580,16 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
581580 var isMultiline = e.currentTarget.getAttribute('data-multiline') || multiline || false;
582581
583582 // Generate tootlip content
584- var content = children ;
583+ var content = void 0 ;
585584 if (getContent) {
586585 if (Array.isArray(getContent)) {
587586 content = getContent[0] && getContent[0]();
588587 } else {
589588 content = getContent();
590589 }
591590 }
592- var placeholder = (0, _getTipContent2.default)(originTooltip, content, isMultiline);
591+ var placeholder = (0, _getTipContent2.default)(originTooltip, children, content, isMultiline);
592+ var isEmptyTip = typeof placeholder === 'string' && placeholder === '' || placeholder === null;
593593
594594 // If it is focus event or called by ReactTooltip.show, switch to `solid` effect
595595 var switchToSolid = e instanceof window.FocusEvent || isGlobalCall;
@@ -604,6 +604,7 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
604604
605605 this.setState({
606606 placeholder: placeholder,
607+ isEmptyTip: isEmptyTip,
607608 place: e.currentTarget.getAttribute('data-place') || this.props.place || 'top',
608609 type: e.currentTarget.getAttribute('data-type') || this.props.type || 'dark',
609610 effect: switchToSolid && 'solid' || e.currentTarget.getAttribute('data-effect') || this.props.effect || 'float',
@@ -612,7 +613,8 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
612613 delayShow: e.currentTarget.getAttribute('data-delay-show') || this.props.delayShow || 0,
613614 delayHide: e.currentTarget.getAttribute('data-delay-hide') || this.props.delayHide || 0,
614615 border: e.currentTarget.getAttribute('data-border') ? e.currentTarget.getAttribute('data-border') === 'true' : this.props.border || false,
615- extraClass: e.currentTarget.getAttribute('data-class') || this.props.class || ''
616+ extraClass: e.currentTarget.getAttribute('data-class') || this.props.class || '',
617+ disable: e.currentTarget.getAttribute('data-tip-disable') ? e.currentTarget.getAttribute('data-tip-disable') === 'true' : this.props.disable || false
616618 }, function () {
617619 if (scrollHide) _this5.addScrollListener(e);
618620 _this5.updateTooltip(e);
@@ -623,8 +625,10 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
623625 var _getContent = _this5.props.getContent;
624626
625627 var _placeholder = (0, _getTipContent2.default)(originTooltip, _getContent[0](), isMultiline);
628+ var _isEmptyTip = typeof _placeholder === 'string' && _placeholder === '';
626629 _this5.setState({
627- placeholder: _placeholder
630+ placeholder: _placeholder,
631+ isEmptyTip: _isEmptyTip
628632 });
629633 }
630634 }, getContent[1]);
@@ -644,14 +648,16 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
644648 var _state = this.state;
645649 var delayShow = _state.delayShow;
646650 var show = _state.show;
651+ var isEmptyTip = _state.isEmptyTip;
652+ var disable = _state.disable;
647653 var afterShow = this.props.afterShow;
648654 var placeholder = this.state.placeholder;
649655
650656 var delayTime = show ? 0 : parseInt(delayShow, 10);
651657 var eventTarget = e.currentTarget;
652658
659+ if (isEmptyTip || disable) return; // if the tooltip is empty, disable the tooltip
653660 var updateState = function updateState() {
654- if (typeof placeholder === 'string') placeholder = placeholder.trim();
655661 if (Array.isArray(placeholder) && placeholder.length > 0 || placeholder) {
656662 (function () {
657663 var isInvisible = !_this6.state.show;
@@ -684,7 +690,14 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
684690 value: function hideTooltip(e, hasTarget) {
685691 var _this7 = this;
686692
693+ var _state2 = this.state;
694+ var delayHide = _state2.delayHide;
695+ var isEmptyTip = _state2.isEmptyTip;
696+ var disable = _state2.disable;
697+ var afterHide = this.props.afterHide;
698+
687699 if (!this.mount) return;
700+ if (isEmptyTip || disable) return; // if the tooltip is empty, disable the tooltip
688701 if (hasTarget) {
689702 // Don't trigger other elements belongs to other ReactTooltip
690703 var targetArray = this.getTargetArray(this.props.id);
@@ -693,9 +706,6 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
693706 });
694707 if (!isMyElement || !this.state.show) return;
695708 }
696- var delayHide = this.state.delayHide;
697- var afterHide = this.props.afterHide;
698-
699709 var resetState = function resetState() {
700710 var isVisible = _this7.state.show;
701711 _this7.setState({
@@ -738,15 +748,14 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
738748 value: function updatePosition() {
739749 var _this8 = this;
740750
741- var _state2 = this.state;
742- var currentEvent = _state2 .currentEvent;
743- var currentTarget = _state2 .currentTarget;
744- var place = _state2 .place;
745- var effect = _state2 .effect;
746- var offset = _state2 .offset;
751+ var _state3 = this.state;
752+ var currentEvent = _state3 .currentEvent;
753+ var currentTarget = _state3 .currentTarget;
754+ var place = _state3 .place;
755+ var effect = _state3 .effect;
756+ var offset = _state3 .offset;
747757
748758 var node = _reactDom2.default.findDOMNode(this);
749-
750759 var result = (0, _getPosition2.default)(currentEvent, currentTarget, node, place, effect, offset);
751760
752761 if (result.isNewState) {
@@ -790,14 +799,15 @@ var ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.de
790799 }, {
791800 key: 'render',
792801 value: function render() {
793- var _state3 = this.state;
794- var placeholder = _state3.placeholder;
795- var extraClass = _state3.extraClass;
796- var html = _state3.html;
797- var ariaProps = _state3.ariaProps;
798-
799- var tooltipClass = (0, _classnames2.default)('__react_component_tooltip', { 'show': this.state.show }, { 'border': this.state.border }, { 'place-top': this.state.place === 'top' }, { 'place-bottom': this.state.place === 'bottom' }, { 'place-left': this.state.place === 'left' }, { 'place-right': this.state.place === 'right' }, { 'type-dark': this.state.type === 'dark' }, { 'type-success': this.state.type === 'success' }, { 'type-warning': this.state.type === 'warning' }, { 'type-error': this.state.type === 'error' }, { 'type-info': this.state.type === 'info' }, { 'type-light': this.state.type === 'light' });
800-
802+ var _state4 = this.state;
803+ var placeholder = _state4.placeholder;
804+ var extraClass = _state4.extraClass;
805+ var html = _state4.html;
806+ var ariaProps = _state4.ariaProps;
807+ var disable = _state4.disable;
808+ var isEmptyTip = _state4.isEmptyTip;
809+
810+ var tooltipClass = (0, _classnames2.default)('__react_component_tooltip', { 'show': this.state.show && !disable && !isEmptyTip }, { 'border': this.state.border }, { 'place-top': this.state.place === 'top' }, { 'place-bottom': this.state.place === 'bottom' }, { 'place-left': this.state.place === 'left' }, { 'place-right': this.state.place === 'right' }, { 'type-dark': this.state.type === 'dark' }, { 'type-success': this.state.type === 'success' }, { 'type-warning': this.state.type === 'warning' }, { 'type-error': this.state.type === 'error' }, { 'type-info': this.state.type === 'info' }, { 'type-light': this.state.type === 'light' });
801811 if (html) {
802812 return _react2.default.createElement('div', _extends({ className: tooltipClass + ' ' + extraClass
803813 }, ariaProps, {
@@ -1207,11 +1217,14 @@ Object.defineProperty(exports, "__esModule", {
12071217 value: true
12081218});
12091219
1210- exports.default = function (tip, children, multiline) {
1220+ exports.default = function (tip, children, getContent, multiline) {
12111221 if (children) return children;
1222+ if (getContent !== undefined && getContent !== null) return getContent; // getContent can be 0, '', etc.
1223+ if (getContent === null) return null; // Tip not exist and childern is null or undefined
12121224
12131225 var regexp = /<br\s*\/?>/;
12141226 if (!multiline || multiline === 'false' || !regexp.test(tip)) {
1227+ // No trim(), so that user can keep their input
12151228 return tip;
12161229 }
12171230
0 commit comments