mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-24 01:15:25 +01:00
42 lines
944 B
JavaScript
42 lines
944 B
JavaScript
import React, {useContext} from 'react';
|
|
import {AppContext} from "../dom/components/AppContext";
|
|
|
|
export function ActionButtonBehavior({children, actionId}) {
|
|
|
|
const ctx = useContext(AppContext);
|
|
|
|
const request = {actionId, x: 0, y: 0};
|
|
|
|
let canceled = true;
|
|
let shown = false;
|
|
|
|
function updateCoords({pageX, pageY}) {
|
|
request.x = pageX + 10;
|
|
request.y = pageY + 10;
|
|
}
|
|
|
|
const actionService = ctx.services.action;
|
|
|
|
return children({
|
|
'data-action-id': actionId,
|
|
onClick: e => actionService.run(actionId, e),
|
|
onMouseEnter: e => {
|
|
updateCoords(e);
|
|
canceled = false;
|
|
shown = false;
|
|
setTimeout(() => {
|
|
if (!canceled) {
|
|
shown = true;
|
|
actionService.showHintFor(request)
|
|
}
|
|
}, 500);
|
|
},
|
|
onMouseMove: updateCoords,
|
|
onMouseLeave: () => {
|
|
canceled = true;
|
|
if (shown) {
|
|
actionService.showHintFor(null)
|
|
}
|
|
}
|
|
});
|
|
}
|