fix(xo-web/tooltip): use pointer events instead of mouse events (#5084)

This commit is contained in:
Pierre Donias
2020-06-15 17:29:40 +02:00
committed by GitHub
parent 3578d16e9e
commit 4137758caa
3 changed files with 26 additions and 30 deletions

View File

@@ -57,12 +57,6 @@ export class TooltipViewer extends Component {
// =================================================================== // ===================================================================
// Wrap disabled HTML element before wrapping it with Tooltip
// <Tooltip>
// <div>
// <MyComponent disabled />
// </div>
// </Tooltip>
export default class Tooltip extends Component { export default class Tooltip extends Component {
static propTypes = { static propTypes = {
children: PropTypes.oneOfType([PropTypes.element, PropTypes.string]), children: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),
@@ -95,9 +89,15 @@ export default class Tooltip extends Component {
_addListeners() { _addListeners() {
const node = (this._node = ReactDOM.findDOMNode(this)) const node = (this._node = ReactDOM.findDOMNode(this))
node.addEventListener('mouseenter', this._showTooltip) // 2020-06-15: Use pointer events instead of mouse events to workaround
node.addEventListener('mouseleave', this._hideTooltip) // Chrome not firing any mouse event on disabled inputs. Pointer events
node.addEventListener('mousemove', this._updateTooltip) // should be correctly fired on most browsers and are similar to mouse
// events on mouse-controlled devices.
// https://github.com/reach/reach-ui/issues/564#issuecomment-620502842
// https://caniuse.com/#feat=mdn-api_pointerevent
node.addEventListener('pointerenter', this._showTooltip)
node.addEventListener('pointerleave', this._hideTooltip)
node.addEventListener('pointermove', this._updateTooltip)
} }
_removeListeners() { _removeListeners() {
@@ -108,9 +108,9 @@ export default class Tooltip extends Component {
return return
} }
node.removeEventListener('mouseenter', this._showTooltip) node.removeEventListener('pointerenter', this._showTooltip)
node.removeEventListener('mouseleave', this._hideTooltip) node.removeEventListener('pointerleave', this._hideTooltip)
node.removeEventListener('mousemove', this._updateTooltip) node.removeEventListener('pointermove', this._updateTooltip)
this._node = null this._node = null
} }

View File

@@ -160,20 +160,18 @@ const SchedulePreviewBody = decorate([
/> />
{job.runId !== undefined ? ( {job.runId !== undefined ? (
<Tooltip content={_('temporarilyDisabled')}> <Tooltip content={_('temporarilyDisabled')}>
<span> <ActionButton
<ActionButton btnStyle='danger'
btnStyle='danger' // 2020-01-29 Job cancellation will be disabled until we find a way to make it work.
// 2020-01-29 Job cancellation will be disabled until we find a way to make it work. // See https://github.com/vatesfr/xen-orchestra/issues/4657
// See https://github.com/vatesfr/xen-orchestra/issues/4657 disabled
disabled handler={cancelJob}
handler={cancelJob} handlerParam={job}
handlerParam={job} icon='cancel'
icon='cancel' key='cancel'
key='cancel' size='small'
size='small' tooltip={_('formCancel')}
tooltip={_('formCancel')} />
/>
</span>
</Tooltip> </Tooltip>
) : ( ) : (
<ActionButton <ActionButton

View File

@@ -199,12 +199,10 @@ export default class extends Component {
<Col className='text-xs-right'> <Col className='text-xs-right'>
{!isNetDataPluginCorrectlySet ? ( {!isNetDataPluginCorrectlySet ? (
<Tooltip content={_('pluginNetDataIsNecessary')}> <Tooltip content={_('pluginNetDataIsNecessary')}>
<span>{telemetryButton}</span> {telemetryButton}
</Tooltip> </Tooltip>
) : !_isXcpNgHost ? ( ) : !_isXcpNgHost ? (
<Tooltip content={_('xcpOnlyFeature')}> <Tooltip content={_('xcpOnlyFeature')}>{telemetryButton}</Tooltip>
<span>{telemetryButton}</span>
</Tooltip>
) : ( ) : (
telemetryButton telemetryButton
)} )}