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 {
static propTypes = {
children: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),
@@ -95,9 +89,15 @@ export default class Tooltip extends Component {
_addListeners() {
const node = (this._node = ReactDOM.findDOMNode(this))
node.addEventListener('mouseenter', this._showTooltip)
node.addEventListener('mouseleave', this._hideTooltip)
node.addEventListener('mousemove', this._updateTooltip)
// 2020-06-15: Use pointer events instead of mouse events to workaround
// Chrome not firing any mouse event on disabled inputs. Pointer events
// 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() {
@@ -108,9 +108,9 @@ export default class Tooltip extends Component {
return
}
node.removeEventListener('mouseenter', this._showTooltip)
node.removeEventListener('mouseleave', this._hideTooltip)
node.removeEventListener('mousemove', this._updateTooltip)
node.removeEventListener('pointerenter', this._showTooltip)
node.removeEventListener('pointerleave', this._hideTooltip)
node.removeEventListener('pointermove', this._updateTooltip)
this._node = null
}

View File

@@ -160,20 +160,18 @@ const SchedulePreviewBody = decorate([
/>
{job.runId !== undefined ? (
<Tooltip content={_('temporarilyDisabled')}>
<span>
<ActionButton
btnStyle='danger'
// 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
disabled
handler={cancelJob}
handlerParam={job}
icon='cancel'
key='cancel'
size='small'
tooltip={_('formCancel')}
/>
</span>
<ActionButton
btnStyle='danger'
// 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
disabled
handler={cancelJob}
handlerParam={job}
icon='cancel'
key='cancel'
size='small'
tooltip={_('formCancel')}
/>
</Tooltip>
) : (
<ActionButton

View File

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