Skip to content

Commit cf4f56d

Browse files
authored
chore: add stories for MoreMenu (#12464)
1 parent 8d8220b commit cf4f56d

File tree

2 files changed

+61
-6
lines changed

2 files changed

+61
-6
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import GrassIcon from "@mui/icons-material/Grass";
2+
import KitesurfingIcon from "@mui/icons-material/Kitesurfing";
3+
import { action } from "@storybook/addon-actions";
4+
import type { Meta, StoryObj } from "@storybook/react";
5+
import { expect, screen, userEvent, waitFor, within } from "@storybook/test";
6+
import {
7+
MoreMenu,
8+
MoreMenuContent,
9+
MoreMenuItem,
10+
MoreMenuTrigger,
11+
ThreeDotsButton,
12+
} from "./MoreMenu";
13+
14+
const meta: Meta<typeof MoreMenu> = {
15+
title: "components/MoreMenu",
16+
component: MoreMenu,
17+
};
18+
19+
export default meta;
20+
type Story = StoryObj<typeof MoreMenu>;
21+
22+
const Example: Story = {
23+
args: {
24+
children: (
25+
<>
26+
<MoreMenuTrigger>
27+
<ThreeDotsButton />
28+
</MoreMenuTrigger>
29+
<MoreMenuContent>
30+
<MoreMenuItem onClick={action("grass")}>
31+
<GrassIcon />
32+
Touch grass
33+
</MoreMenuItem>
34+
<MoreMenuItem onClick={action("water")}>
35+
<KitesurfingIcon />
36+
Touch water
37+
</MoreMenuItem>
38+
</MoreMenuContent>
39+
</>
40+
),
41+
},
42+
play: async ({ canvasElement, step }) => {
43+
const canvas = within(canvasElement);
44+
45+
await step("Open menu", async () => {
46+
await userEvent.click(
47+
canvas.getByRole("button", { name: "More options" }),
48+
);
49+
await waitFor(() =>
50+
Promise.all([
51+
expect(screen.getByText(/touch grass/i)).toBeInTheDocument(),
52+
expect(screen.getByText(/touch water/i)).toBeInTheDocument(),
53+
]),
54+
);
55+
});
56+
},
57+
};
58+
59+
export { Example as MoreMenu };

site/src/components/MoreMenu/MoreMenu.tsx

+2-6
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,7 @@ export const MoreMenuItem: FC<MoreMenuItemProps> = ({
111111
danger = false,
112112
...menuItemProps
113113
}) => {
114-
const ctx = useContext(MoreMenuContext);
115-
116-
if (!ctx) {
117-
throw new Error("MoreMenuItem must be used inside of MoreMenu");
118-
}
114+
const menu = useMoreMenuContext();
119115

120116
return (
121117
<MenuItem
@@ -131,7 +127,7 @@ export const MoreMenuItem: FC<MoreMenuItemProps> = ({
131127
onClick={(e) => {
132128
menuItemProps.onClick && menuItemProps.onClick(e);
133129
if (closeOnClick) {
134-
ctx.close();
130+
menu.close();
135131
}
136132
}}
137133
/>

0 commit comments

Comments
 (0)