@wix/design-system
Version:
@wix/design-system
103 lines (102 loc) • 3.22 kB
JavaScript
;
exports.__esModule = true;
exports.useAngleInput = void 0;
var _react = require("react");
var _useEventCallback = require("../../common/useEventCallback/useEventCallback");
var _AngleInput = require("../AngleInput.constants");
var useAngleInput = _ref => {
var {
onChange,
onPointerDown,
onPointerUp,
onFocus,
onBlur,
step
} = _ref;
var rootRef = (0, _react.useRef)(null);
var calculateAngleFromEvent = (0, _react.useCallback)((clientX, clientY) => {
var rootElement = rootRef.current;
if (!rootElement) return;
var {
left,
top,
width,
height
} = rootElement.getBoundingClientRect();
var centerX = left + width / 2;
var centerY = top + height / 2;
var dx = clientX - centerX;
var dy = clientY - centerY;
var rawAngle = Math.atan2(dx, -dy) * (180 / Math.PI);
var normalizedAngle = normalizeAngle(rawAngle);
return Math.round(normalizedAngle / step) * step % 360;
}, [step]);
var updateAngle = (0, _useEventCallback.useEventCallback)((clientX, clientY) => {
var angle = calculateAngleFromEvent(clientX, clientY);
if (angle !== undefined) onChange(angle);
});
var handlePointerDown = (0, _useEventCallback.useEventCallback)(event => {
event.currentTarget.setPointerCapture(event.pointerId);
onPointerDown == null || onPointerDown();
updateAngle(event.clientX, event.clientY);
});
var handlePointerMove = (0, _useEventCallback.useEventCallback)(event => {
if (event.currentTarget.hasPointerCapture(event.pointerId)) {
updateAngle(event.clientX, event.clientY);
}
});
var handlePointerUp = (0, _useEventCallback.useEventCallback)(event => {
onPointerUp == null || onPointerUp();
if (event.currentTarget.hasPointerCapture(event.pointerId)) {
event.currentTarget.releasePointerCapture(event.pointerId);
}
});
var handleInputChange = (0, _useEventCallback.useEventCallback)(event => {
onChange(normalizeAngle(Number(event.target.value)));
});
var handleKeyboardEvent = (0, _useEventCallback.useEventCallback)(event => {
var {
key,
currentTarget
} = event;
var currentAngle = Number(currentTarget.value);
var newAngle = currentAngle;
switch (key) {
case 'ArrowUp':
case 'ArrowRight':
case 'PageUp':
newAngle += step;
break;
case 'ArrowDown':
case 'ArrowLeft':
case 'PageDown':
newAngle -= step;
break;
default:
return;
}
if (newAngle > _AngleInput.angleLimits.max || newAngle < _AngleInput.angleLimits.min) {
event.preventDefault();
onChange(normalizeAngle(newAngle));
}
});
var handleFocus = (0, _useEventCallback.useEventCallback)(() => {
onFocus == null || onFocus();
});
var handleBlur = (0, _useEventCallback.useEventCallback)(() => {
onBlur == null || onBlur();
});
return {
rootRef,
handlePointerDown,
handlePointerUp,
handlePointerMove,
handleInputChange,
handleKeyboardEvent,
handleFocus,
handleBlur
};
};
exports.useAngleInput = useAngleInput;
var normalizeAngle = angle => (angle + 360) % 360;
//# sourceMappingURL=useAngleInput.js.map