Skip to content

Commit 5a3dcbb

Browse files
committed
Return tooltip to original position when possible
1 parent 2762495 commit 5a3dcbb

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
@@ -247,6 +247,7 @@ class ReactTooltip extends Component {
247247
this.setState({
248248
placeholder,
249249
isEmptyTip,
250+
desiredPlace: e.currentTarget.getAttribute('data-place') || this.props.place || 'top',
250251
place: e.currentTarget.getAttribute('data-place') || this.props.place || 'top',
251252
type: e.currentTarget.getAttribute('data-type') || this.props.type || 'dark',
252253
effect: switchToSolid && 'solid' || e.currentTarget.getAttribute('data-effect') || this.props.effect || 'float',
@@ -363,9 +364,9 @@ class ReactTooltip extends Component {
363364

364365
// Calculation the position
365366
updatePosition () {
366-
const {currentEvent, currentTarget, place, effect, offset} = this.state
367+
const {currentEvent, currentTarget, place, desiredPlace, effect, offset} = this.state
367368
const node = ReactDOM.findDOMNode(this)
368-
const result = getPosition(currentEvent, currentTarget, node, place, effect, offset)
369+
const result = getPosition(currentEvent, currentTarget, node, place, desiredPlace, effect, offset)
369370

370371
if (result.isNewState) {
371372
// 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)