import type { Store } from '../../state' import type { MeasuringConfiguration } from '@dnd-kit/core' import { MARGIN_FOR_SHIFTING } from '../../constants' import { calculateIndent } from '../../utils/indent' function getLeftOffsetForRow(store: Store) { const state = store.getState() const treeGrid = store.selectors.selectIsTreeGrid(state) const treeIndentSize = store.selectors.selectTreeIndentSize(state) let previewLeftOffset = store.selectors.selectPreviewLeftOffset(state) if (treeGrid) { const draggingRowIds = store.selectors.selectDraggingRowIds(state) const level = store.selectors.selectRowLevel( state, [...draggingRowIds][0] ) previewLeftOffset += calculateIndent(level, treeIndentSize, true) } // This allows visibility of the drop "dot" for better placement previewLeftOffset += MARGIN_FOR_SHIFTING return previewLeftOffset } export const measuringFactory = (store: Store) => { const measuringConfig: MeasuringConfiguration = { draggable: { measure(node) { const leftOffset = getLeftOffsetForRow(store) const box = node.getBoundingClientRect() return { ...box.toJSON(), left: box.left + leftOffset, x: box.x + leftOffset, right: box.right + leftOffset, } }, }, } return measuringConfig }