in packages/react-components/src/components/ModalClone/ModalClone.tsx [248:336]
x: getClampedAxis('x', coordinates.x),
y: getClampedAxis('y', coordinates.y)
});
}
}
};
/**
* Clamps an axis to a specified min and max position.
*
* @param axis A string that represents the axis (x/y).
* @param position The position on the axis.
*/
const getClampedAxis = React.useCallback(
(axis: keyof _ICoordinates, position: number) => {
const { minPosition, maxPosition } = internalState;
if (keepInBounds && minPosition && maxPosition) {
position = Math.max(minPosition[axis], position);
position = Math.min(maxPosition[axis], position);
}
return position;
},
[keepInBounds, internalState]
);
const handleModalClose = (): void => {
internalState.lastSetCoordinates = ZERO;
setModalMenuClose();
internalState.isInKeyboardMoveMode = false;
setIsModalOpen(false);
setCoordinates(ZERO);
internalState.disposeOnKeyUp?.();
onDismissed?.();
};
const handleDragStart = React.useCallback((): void => {
setModalMenuClose();
internalState.isInKeyboardMoveMode = false;
}, [internalState, setModalMenuClose]);
const handleDrag = React.useCallback(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(ev: React.MouseEvent<HTMLElement> & React.TouchEvent<HTMLElement>, dragData: any): void => {
setCoordinates((prevValue) => ({
x: getClampedAxis('x', prevValue.x + dragData.delta.x),
y: getClampedAxis('y', prevValue.y + dragData.delta.y)
}));
},
[getClampedAxis]
);
const handleDragStop = React.useCallback((): void => {
if (focusTrapZone.current) {
focusTrapZone.current.focus();
}
}, []);
const handleEnterKeyboardMoveMode = () => {
// We need a global handleKeyDown event when we are in the move mode so that we can
// handle the key presses and the components inside the modal do not get the events
const handleKeyDown = (event: Event): void => {
const ev = event as KeyboardEvent;
if (ev.altKey && ev.ctrlKey && ev.keyCode === KeyCodes.space) {
// CTRL + ALT + SPACE is handled during keyUp
ev.preventDefault();
ev.stopPropagation();
return;
}
const newLocal = ev.altKey || ev.keyCode === KeyCodes.escape;
if (isModalMenuOpen && newLocal) {
setModalMenuClose();
}
if (internalState.isInKeyboardMoveMode && (ev.keyCode === KeyCodes.escape || ev.keyCode === KeyCodes.enter)) {
internalState.isInKeyboardMoveMode = false;
forceUpdateCallback();
ev.preventDefault();
ev.stopPropagation();
}
if (internalState.isInKeyboardMoveMode) {
let handledEvent = true;
const delta = getMoveDelta(ev);
switch (ev.keyCode) {