1
0
mirror of https://github.com/XFox111/TabsAsideExtension.git synced 2026-04-22 07:58:01 +03:00

fix: misplaced draggable item

This commit is contained in:
2025-07-18 21:02:25 +03:00
parent 57e87aace0
commit bc2e2489e6
2 changed files with 36 additions and 0 deletions
@@ -21,6 +21,7 @@ import { collisionDetector } from "../../utils/dnd/collisionDetector";
import { useStyles_CollectionListView } from "./CollectionListView.styles"; import { useStyles_CollectionListView } from "./CollectionListView.styles";
import SearchBar from "./SearchBar"; import SearchBar from "./SearchBar";
import StorageCapacityIssueMessage from "./messages/StorageCapacityIssueMessage"; import StorageCapacityIssueMessage from "./messages/StorageCapacityIssueMessage";
import { snapHandleToCursor } from "../../utils/dnd/snapHandleToCursor";
export default function CollectionListView(): ReactElement export default function CollectionListView(): ReactElement
{ {
@@ -110,6 +111,7 @@ export default function CollectionListView(): ReactElement
collisionDetection={ collisionDetector(!tilesView) } collisionDetection={ collisionDetector(!tilesView) }
onDragStart={ handleDragStart } onDragStart={ handleDragStart }
onDragEnd={ handleDragEnd } onDragEnd={ handleDragEnd }
modifiers={ [snapHandleToCursor] }
> >
<SortableContext <SortableContext
items={ resultList.map((_, index) => index.toString()) } items={ resultList.map((_, index) => index.toString()) }
@@ -0,0 +1,34 @@
import { Modifier } from "@dnd-kit/core";
import { Coordinates, getEventCoordinates } from "@dnd-kit/utilities";
import { DndItem } from "../../hooks/useDndItem";
export const snapHandleToCursor: Modifier = ({
activatorEvent,
draggingNodeRect,
transform,
active
}) =>
{
if (draggingNodeRect && activatorEvent)
{
const activeItem: DndItem | undefined = active?.data.current as DndItem;
const activatorCoordinates: Coordinates | null = getEventCoordinates(activatorEvent);
if (!activatorCoordinates)
return transform;
const initX: number = activatorCoordinates.x - draggingNodeRect.left;
const initY: number = activatorCoordinates.y - draggingNodeRect.top;
const offsetX: number = activeItem?.item.type === "group" ? 24 : draggingNodeRect.height / 2;
const offsetY: number = activeItem?.item.type === "group" ? 20 : draggingNodeRect.height / 2;
return {
...transform,
x: transform.x + initX - offsetX,
y: transform.y + initY - offsetY
};
}
return transform;
};