35 lines
980 B
TypeScript
35 lines
980 B
TypeScript
import { HandleElement, Position } from '../../types';
|
|
import { getDimensions } from '../../utils';
|
|
|
|
export const getHandleBounds = (
|
|
selector: string,
|
|
nodeElement: HTMLDivElement,
|
|
parentBounds: ClientRect | DOMRect,
|
|
k: number
|
|
): HandleElement[] | null => {
|
|
const handles = nodeElement.querySelectorAll(selector);
|
|
|
|
if (!handles || !handles.length) {
|
|
return null;
|
|
}
|
|
|
|
const handlesArray = Array.from(handles) as HTMLDivElement[];
|
|
|
|
return handlesArray.map(
|
|
(handle): HandleElement => {
|
|
const bounds = handle.getBoundingClientRect();
|
|
const dimensions = getDimensions(handle);
|
|
const handleId = handle.getAttribute('data-handleid');
|
|
const handlePosition = (handle.getAttribute('data-handlepos') as unknown) as Position;
|
|
|
|
return {
|
|
id: handleId,
|
|
position: handlePosition,
|
|
x: (bounds.left - parentBounds.left) / k,
|
|
y: (bounds.top - parentBounds.top) / k,
|
|
...dimensions,
|
|
};
|
|
}
|
|
);
|
|
};
|