@ -35,6 +35,33 @@ class Tooltip extends Component {
}
}
//
// Control
computeMaxSize = ( data ) => {
const {
top ,
right ,
bottom ,
left
} = data . offsets . reference ;
const windowWidth = window . innerWidth ;
const windowHeight = window . innerHeight ;
if ( ( /^top/ ) . test ( data . placement ) ) {
data . styles . maxHeight = top - 20 ;
} else if ( ( /^bottom/ ) . test ( data . placement ) ) {
data . styles . maxHeight = windowHeight - bottom - 20 ;
} else if ( ( /^right/ ) . test ( data . placement ) ) {
data . styles . maxWidth = windowWidth - right - 30 ;
} else {
data . styles . maxWidth = left - 30 ;
}
return data ;
}
//
// Listeners
@ -72,7 +99,8 @@ class Tooltip extends Component {
anchor ,
tooltip ,
kind ,
position
position ,
canFlip
} = this . props ;
return (
@ -98,10 +126,18 @@ class Tooltip extends Component {
// are shown (Quality Definitions for example).
eventsEnabled = { false }
modifiers = { {
computeMaxHeight : {
order : 851 ,
enabled : true ,
fn : this . computeMaxSize
} ,
preventOverflow : {
// Fixes positioning for tooltips in the queue
// and likely others.
escapeWithReference : true
} ,
flip : {
enabled : canFlip
}
} }
>
@ -132,7 +168,9 @@ class Tooltip extends Component {
) }
/ >
< div className = { bodyClassName } >
< div
className = { bodyClassName }
>
{ tooltip }
< / d i v >
< / d i v > :
@ -154,13 +192,15 @@ Tooltip.propTypes = {
anchor : PropTypes . node . isRequired ,
tooltip : PropTypes . oneOfType ( [ PropTypes . string , PropTypes . node ] ) . isRequired ,
kind : PropTypes . oneOf ( [ kinds . DEFAULT , kinds . INVERSE ] ) ,
position : PropTypes . oneOf ( tooltipPositions . all )
position : PropTypes . oneOf ( tooltipPositions . all ) ,
canFlip : PropTypes . bool . isRequired
} ;
Tooltip . defaultProps = {
bodyClassName : styles . body ,
kind : kinds . DEFAULT ,
position : tooltipPositions . TOP
position : tooltipPositions . TOP ,
canFlip : true
} ;
export default Tooltip ;