Skip to content

Commit 33cfca9

Browse files
authored
fix: Board item visibility issue when moving using keyboard arrows (#379)
1 parent 0ce808b commit 33cfca9

File tree

3 files changed

+35
-8
lines changed

3 files changed

+35
-8
lines changed

src/internal/item-container/__tests__/item-container.test.tsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { DragAndDropData } from "../../../../lib/components/internal/dnd-control
88
import { ItemContainer, ItemContainerProps, useItemContext } from "../../../../lib/components/internal/item-container";
99
import { Coordinates } from "../../../../lib/components/internal/utils/coordinates";
1010

11+
import styles from "../../../../lib/components/internal/item-container/styles.css.js";
12+
1113
afterEach(cleanup);
1214

1315
vi.mock("../../../../lib/components/internal/dnd-controller/controller");
@@ -121,6 +123,23 @@ describe("keyboard interaction", () => {
121123
expect(onKeyMoveMock).toBeCalledWith("up");
122124
});
123125
});
126+
127+
test("applies keyboardDragged class when keyboard drag transition is active", () => {
128+
const { container } = render(<ItemContainer {...defaultProps} placed={true} />);
129+
130+
act(() => {
131+
mockController.start({
132+
interactionType: "keyboard",
133+
operation: "reorder",
134+
draggableItem: defaultProps.item,
135+
collisionRect: { top: 0, bottom: 0, left: 0, right: 0 },
136+
coordinates: new Coordinates({ x: 0, y: 0 }),
137+
} as DragAndDropData);
138+
});
139+
140+
const itemElement = container.querySelector('[data-item-id="ID"]');
141+
expect(itemElement).toHaveClass(styles.keyboardDragged);
142+
});
124143
});
125144

126145
test("does not renders in portal when item in reorder state by a pointer", () => {

src/internal/item-container/index.tsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -440,14 +440,19 @@ function ItemContainerComponent(
440440
itemTransitionClassNames.push(styles.inTransition);
441441
}
442442

443-
if (transition && transition.interactionType === "pointer") {
444-
// Adjust the dragged/resized item to the pointer's location.
445-
itemTransitionClassNames.push(transition.operation === "resize" ? styles.resized : styles.dragged);
446-
itemTransitionStyle.insetInlineStart = transition.positionTransform?.x;
447-
itemTransitionStyle.insetBlockStart = transition.positionTransform?.y;
448-
itemTransitionStyle.inlineSize = transition.sizeTransform?.width;
449-
itemTransitionStyle.blockSize = transition.sizeTransform?.height;
450-
itemTransitionStyle.pointerEvents = "none";
443+
if (transition) {
444+
if (transition.interactionType === "pointer") {
445+
// Adjust the dragged/resized item to the pointer's location.
446+
itemTransitionClassNames.push(transition.operation === "resize" ? styles.resized : styles.dragged);
447+
itemTransitionStyle.insetInlineStart = transition.positionTransform?.x;
448+
itemTransitionStyle.insetBlockStart = transition.positionTransform?.y;
449+
itemTransitionStyle.inlineSize = transition.sizeTransform?.width;
450+
itemTransitionStyle.blockSize = transition.sizeTransform?.height;
451+
itemTransitionStyle.pointerEvents = "none";
452+
}
453+
if (transition.interactionType === "keyboard") {
454+
itemTransitionClassNames.push(styles.keyboardDragged);
455+
}
451456
}
452457

453458
if (isHidden) {

src/internal/item-container/styles.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
z-index: 2000;
2626
position: fixed;
2727
}
28+
.transformed.keyboardDragged {
29+
z-index: 2000;
30+
}
2831
.resized {
2932
z-index: 2000;
3033
position: absolute;

0 commit comments

Comments
 (0)