Skip to content

Commit e5f3329

Browse files
authored
Merge pull request #207 from hassanbot/master
Return tooltip to original position when possible
2 parents 9b8c083 + 5a3dcbb commit e5f3329

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

src/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ class ReactTooltip extends React.Component {
271271
this.setState({
272272
placeholder,
273273
isEmptyTip,
274+
desiredPlace: e.currentTarget.getAttribute('data-place') || this.props.place || 'top',
274275
place: e.currentTarget.getAttribute('data-place') || this.props.place || 'top',
275276
type: e.currentTarget.getAttribute('data-type') || this.props.type || 'dark',
276277
effect: switchToSolid && 'solid' || this.getEffect(e.currentTarget),
@@ -387,9 +388,9 @@ class ReactTooltip extends React.Component {
387388

388389
// Calculation the position
389390
updatePosition () {
390-
const {currentEvent, currentTarget, place, effect, offset} = this.state
391+
const {currentEvent, currentTarget, place, desiredPlace, effect, offset} = this.state
391392
const node = ReactDOM.findDOMNode(this)
392-
const result = getPosition(currentEvent, currentTarget, node, place, effect, offset)
393+
const result = getPosition(currentEvent, currentTarget, node, place, desiredPlace, effect, offset)
393394

394395
if (result.isNewState) {
395396
// Switch to reverse placement

src/utils/getPosition.js

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* - `newState` {Object}
1515
* - `position` {OBject} {left: {Number}, top: {Number}}
1616
*/
17-
export default function (e, target, node, place, effect, offset) {
17+
export default function (e, target, node, place, desiredPlace, effect, offset) {
1818
const tipWidth = node.clientWidth
1919
const tipHeight = node.clientHeight
2020
const {mouseX, mouseY} = getCurrentOffset(e, target, effect)
@@ -151,6 +151,31 @@ export default function (e, target, node, place, effect, offset) {
151151
}
152152
}
153153

154+
// Change back to original place if possible
155+
if (place !== desiredPlace) {
156+
if (desiredPlace === 'top' && !outsideTopResult.result) {
157+
return {
158+
isNewState: true,
159+
newState: {place: 'top'}
160+
}
161+
} else if (desiredPlace === 'left' && !outsideLeftResult.result) {
162+
return {
163+
isNewState: true,
164+
newState: {place: 'left'}
165+
}
166+
} else if (desiredPlace === 'right' && !outsideRightResult.result) {
167+
return {
168+
isNewState: true,
169+
newState: {place: 'right'}
170+
}
171+
} else if (desiredPlace === 'bottom' && !outsideBottomResult.result) {
172+
return {
173+
isNewState: true,
174+
newState: {place: 'bottom'}
175+
}
176+
}
177+
}
178+
154179
// Return tooltip offset position
155180
return {
156181
isNewState: false,

0 commit comments

Comments
 (0)