Skip to content

Commit 67cb9ad

Browse files
committed
feat(web): open someday form on enter key
1 parent 85b6d03 commit 67cb9ad

File tree

3 files changed

+104
-7
lines changed

3 files changed

+104
-7
lines changed

packages/web/src/views/Calendar/Calendar.form.test.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ describe("Event Form", () => {
2121
const user = userEvent.setup();
2222

2323
await act(async () => {
24-
await user.click(screen.getByRole("button", { name: CLIMB.title }));
24+
const climbBtn = document.querySelector(
25+
`[data-event-id="${CLIMB._id}"]`,
26+
) as HTMLElement;
27+
await user.click(climbBtn);
2528
});
2629

2730
await act(async () => {
@@ -64,11 +67,10 @@ describe("Event Form", () => {
6467
const { container } = render(<CalendarView />, { state: preloadedState });
6568

6669
await act(async () => {
67-
await user.click(
68-
screen.getByRole("button", {
69-
name: /climb/i,
70-
}),
71-
);
70+
const climbBtn = document.querySelector(
71+
`[data-event-id="${CLIMB._id}"]`,
72+
) as HTMLElement;
73+
await user.click(climbBtn);
7274
});
7375

7476
expect(container.getElementsByClassName("startDatePicker")).toHaveLength(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import React from "react";
2+
import "@testing-library/jest-dom";
3+
import userEvent from "@testing-library/user-event";
4+
import { LEARN_CHINESE } from "@core/__mocks__/v1/events/events.misc";
5+
import { Categories_Event } from "@core/types/event.types";
6+
import {
7+
fireEvent,
8+
render,
9+
screen,
10+
} from "@web/__tests__/__mocks__/mock.render";
11+
import { SidebarDraftContext } from "../../../../Draft/sidebar/context/SidebarDraftContext";
12+
import { SomedayEventContainer } from "./SomedayEventContainer";
13+
14+
jest.mock(
15+
"@web/views/Calendar/components/Draft/hooks/state/useDraftForm",
16+
() => ({
17+
useDraftForm: () => ({
18+
context: {},
19+
refs: { setFloating: jest.fn(), setReference: jest.fn() },
20+
strategy: "absolute",
21+
x: 0,
22+
y: 0,
23+
getReferenceProps: () => ({}),
24+
getFloatingProps: () => ({}),
25+
}),
26+
}),
27+
);
28+
29+
describe("SomedayEventContainer keyboard interactions", () => {
30+
it("opens the form when Enter is pressed", async () => {
31+
const onDraft = jest.fn();
32+
const contextValue = {
33+
state: {
34+
draft: null,
35+
isDrafting: false,
36+
isOverGrid: false,
37+
isSomedayFormOpen: false,
38+
} as any,
39+
setters: {
40+
setIsSomedayFormOpen: jest.fn(),
41+
} as any,
42+
actions: {
43+
onDraft,
44+
onMigrate: jest.fn(),
45+
discard: jest.fn(),
46+
reset: jest.fn(),
47+
closeForm: jest.fn(),
48+
close: jest.fn(),
49+
} as any,
50+
};
51+
52+
render(
53+
<SidebarDraftContext.Provider value={contextValue as any}>
54+
<SomedayEventContainer
55+
category={Categories_Event.SOMEDAY_WEEK}
56+
event={LEARN_CHINESE}
57+
isDrafting={false}
58+
isDragging={false}
59+
isOverGrid={false}
60+
onSubmit={jest.fn()}
61+
provided={
62+
{
63+
draggableProps: {},
64+
dragHandleProps: null,
65+
innerRef: jest.fn(),
66+
} as any
67+
}
68+
snapshot={{ isDragging: false } as any}
69+
setEvent={jest.fn()}
70+
weekViewRange={{ startDate: "2020-01-01", endDate: "2020-01-07" }}
71+
/>
72+
</SidebarDraftContext.Provider>,
73+
);
74+
75+
const btn = document.querySelector(
76+
`[data-event-id="${LEARN_CHINESE._id}"]`,
77+
)! as HTMLElement;
78+
btn.focus();
79+
fireEvent.keyDown(btn, { key: "Enter" });
80+
81+
expect(onDraft).toHaveBeenCalledTimes(1);
82+
expect(onDraft).toHaveBeenCalledWith(
83+
LEARN_CHINESE,
84+
Categories_Event.SOMEDAY_WEEK,
85+
);
86+
});
87+
});

packages/web/src/views/Calendar/components/Sidebar/SomedayTab/SomedayEvents/SomedayEventContainer/SomedayEventContainer.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, { useState } from "react";
2+
import { Key } from "ts-key-enum";
23
import { FloatingFocusManager, FloatingPortal } from "@floating-ui/react";
34
import { DraggableProvided, DraggableStateSnapshot } from "@hello-pangea/dnd";
45
import { Priorities } from "@core/constants/core.constants";
@@ -51,6 +52,13 @@ export const SomedayEventContainer = ({
5152

5253
const [isFocused, setIsFocused] = useState(false);
5354

55+
const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {
56+
if (e.key === Key.Enter) {
57+
e.preventDefault();
58+
actions.onDraft(event, category);
59+
}
60+
};
61+
5462
const isDraftingThisEvent =
5563
state.isDrafting && state.draft?._id === event._id;
5664

@@ -68,7 +76,7 @@ export const SomedayEventContainer = ({
6876
actions.onDraft(event, category);
6977
}}
7078
onFocus={() => setIsFocused(true)}
71-
onKeyDown={() => console.log("onKeyDown")}
79+
onKeyDown={handleKeyDown}
7280
priority={event.priority || Priorities.UNASSIGNED}
7381
provided={provided}
7482
snapshot={snapshot}

0 commit comments

Comments
 (0)