Skip to content

Instantly share code, notes, and snippets.

@Nantris
Created November 24, 2019 01:24
Show Gist options
  • Save Nantris/7cfda5064273f0c9b9765ce48ab00bb3 to your computer and use it in GitHub Desktop.
Save Nantris/7cfda5064273f0c9b9765ce48ab00bb3 to your computer and use it in GitHub Desktop.
const originalMouseX = resizeType === ResizeType.Left ? e.pageX + space.adjustedSize : e.pageX - space.adjustedSize;
const originalMouseY = resizeType === ResizeType.Top ? e.pageY + space.adjustedSize : e.pageY - space.adjustedSize;
const minimumAdjust = (props.minimumSize === undefined ? 20 : props.minimumSize) - size + space.adjustedSize;
const maximumAdjust = props.maximumSize ? (props.maximumSize - size + space.adjustedSize) : undefined;
let lastX = 0;
let lastY = 0;
let moved = false;
const mouseResize = (x, y, startX = originalMouseX, startY = originalMouseY) => onResize(startX, startY, x, y, minimumAdjust, maximumAdjust);
const throttledMouseResize = throttle<typeof mouseResize>(mouseResize, RESIZE_THROTTLE);
const withPreventDefault = (e: MouseEvent) => {
moved = true;
lastX = e.pageX;
lastY = e.pageY;
e.preventDefault();
e.stopImmediatePropagation();
throttledMouseResize(lastX, lastY);
};
const removeListener = () => {
if (moved) {
// Not sure about the right math here, but need to get the final bounds to pass correct values to onResize
// const currentRect = divElementRef.current.getBoundingClientRect();
// const startX = ?
// const startY = ?
mouseResize(lastX, lastY, startX, startY);
}
window.removeEventListener('mousemove', withPreventDefault);
window.removeEventListener('mouseup', removeListener);
onResizeEnd(currentRect); // Pass rect (or more relevant value(s)) and skip running getBoundingClientRect() there
};
window.addEventListener('mousemove', withPreventDefault);
window.addEventListener('mouseup', removeListener);
e.preventDefault();
e.stopPropagation();
props.onResizeStart && props.onResizeStart();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment