in web/src/shared/components/annotator/hooks/use-gutter-move.ts [84:168]
y: getNewPositionOrBorderIfExceeded(
selectedGutter!.stablePosition.end.y,
yDelta,
selectedGutter!.type
)
}
};
const realXDelta =
selectedGutter!.type === 'vertical'
? newPosition.start.x - selectedGutter!.stablePosition.start.x
: 0;
setXDeltaState(realXDelta);
const realYDelta =
selectedGutter!.type === 'horizontal'
? newPosition.start.y - selectedGutter!.stablePosition.start.y
: 0;
setYDeltaState(realYDelta);
let gtrs = gutters;
gtrs[selectedGutter!.id] = {
...(selectedGutter as TableGutter),
stablePosition: newPosition
};
onGuttersChanged(gtrs);
};
const isClickedNotOnGutter = (target: HTMLElement): boolean => {
return (
isCellMode ||
!possiblyClickedOnTableGutter(target) ||
!selectedGutter ||
!Object.values(selectedGutter).length ||
!selectedAnnotation ||
selectedAnnotation.id !== annotation.id
);
};
const findNeighbourGutter = (
selectedGutter: TableGutter,
direction: 'prev' | 'next'
): Maybe<TableGutter> => {
let closestGutter: Maybe<TableGutter> = undefined;
const possibleGutter = gutters[selectedGutter.id + (direction === 'next' ? 1 : -1)];
if (possibleGutter && possibleGutter.type === selectedGutter.type)
closestGutter = possibleGutter;
return closestGutter;
};
const getRelativeGutterIndex = (): number => {
let idx = 0;
let prevGutter = findNeighbourGutter(selectedGutter!, 'prev');
while (prevGutter) {
idx = idx + 1;
prevGutter = findNeighbourGutter(prevGutter, 'prev');
}
return idx;
};
const recalculateGutterPartsAfterMouseUp = (
gutter: TableGutter,
idx: number,
delta: number
): GutterPart[] => {
let newParts: GutterPart[] = gutter.parts;
if (newParts.length > 1) {
newParts[idx].length += delta;
newParts[idx + 1].length -= delta;
}
return newParts;
};
const recalculatedAffectedCells = () => {
const delta: number = selectedGutter!.type === 'vertical' ? xDeltaState : yDeltaState;
const selector: string = selectedGutter!.type === 'vertical' ? 'col' : 'row';
const boundSelector: 'width' | 'height' =
selectedGutter!.type === 'vertical' ? 'width' : 'height';
const coordSelector: 'x' | 'y' = selectedGutter!.type === 'vertical' ? 'x' : 'y';
const relativeIdx = getRelativeGutterIndex();
const newCells: Annotation[] = [];
for (let cell of scaledCells) {
const newCell: Annotation = cell;
if (
cell.data[selector] +
(cell.data[`${selector}span`] ? cell.data[`${selector}span`] - 1 : 0) ===
relativeIdx
) {