Skip to content

Commit 55145f5

Browse files
committed
Format the code and fix ESLint complaints
1 parent 32f8ec9 commit 55145f5

File tree

3 files changed

+129
-101
lines changed

3 files changed

+129
-101
lines changed

demo/tsconfig.json

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,20 @@
11
{
2-
"compilerOptions": {
3-
"target": "es5",
4-
"lib": [
5-
"dom",
6-
"dom.iterable",
7-
"esnext"
8-
],
9-
"allowJs": true,
10-
"skipLibCheck": true,
11-
"esModuleInterop": true,
12-
"allowSyntheticDefaultImports": true,
13-
"strict": true,
14-
"forceConsistentCasingInFileNames": true,
15-
"module": "esnext",
16-
"moduleResolution": "node",
17-
"resolveJsonModule": true,
18-
"isolatedModules": true,
19-
"noEmit": true,
20-
"jsx": "react-jsx",
21-
"noFallthroughCasesInSwitch": true
22-
},
23-
"include": [
24-
"src"
25-
]
2+
"compilerOptions": {
3+
"target": "es5",
4+
"lib": ["dom", "dom.iterable", "esnext"],
5+
"allowJs": true,
6+
"skipLibCheck": true,
7+
"esModuleInterop": true,
8+
"allowSyntheticDefaultImports": true,
9+
"strict": true,
10+
"forceConsistentCasingInFileNames": true,
11+
"module": "esnext",
12+
"moduleResolution": "node",
13+
"resolveJsonModule": true,
14+
"isolatedModules": true,
15+
"noEmit": true,
16+
"jsx": "react-jsx",
17+
"noFallthroughCasesInSwitch": true
18+
},
19+
"include": ["src"]
2620
}

src/use-dropdown-menu.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ interface ButtonProps
1111
}
1212

1313
// A custom Hook that abstracts away the listeners/controls for dropdown menus
14+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
1415
export default function useDropdownMenu(itemCount: number) {
1516
// Use state
1617
const [isOpen, setIsOpen] = useState<boolean>(false);
@@ -24,7 +25,7 @@ export default function useDropdownMenu(itemCount: number) {
2425

2526
// Initialize refs and update them when the item count changes
2627
useEffect(() => {
27-
itemRefs.current = [...Array(itemCount)].map(() => createRef<HTMLAnchorElement>());
28+
itemRefs.current = [...Array<undefined>(itemCount)].map(() => createRef<HTMLAnchorElement>());
2829
}, [itemCount]);
2930

3031
// Create type guard
@@ -187,7 +188,7 @@ export default function useDropdownMenu(itemCount: number) {
187188
'aria-expanded': isOpen,
188189
};
189190

190-
const itemProps = [...Array(itemCount)].map((ignore, index) => ({
191+
const itemProps = [...Array<undefined>(itemCount)].map((_ignore, index) => ({
191192
onKeyDown: itemListener,
192193
tabIndex: -1,
193194
role: 'menuitem',

test/use-dropdown-menu.test.tsx

Lines changed: 108 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,14 @@ it('Moves the focus to the first menu item after clicking the menu to open it, t
5656

5757
expect(screen.getByText('Primary')).toHaveFocus();
5858

59-
fireEvent(screen.getByText('Primary'), new KeyboardEvent('keydown', {
60-
key: 'ArrowDown',
61-
bubbles: true,
62-
cancelable: true,
63-
}));
59+
fireEvent(
60+
screen.getByText('Primary'),
61+
new KeyboardEvent('keydown', {
62+
key: 'ArrowDown',
63+
bubbles: true,
64+
cancelable: true,
65+
})
66+
);
6467

6568
expect(screen.getByText('Item 1')).toHaveFocus();
6669
});
@@ -114,91 +117,109 @@ it('Moves the focus to the next element in the menu after pressing the down arro
114117
userEvent.type(screen.getByText('Primary'), '{enter}', {
115118
skipClick: true,
116119
});
117-
120+
118121
expect(screen.getByText('Item 1')).toHaveFocus();
119122

120-
fireEvent(screen.getByText('Item 1'), new KeyboardEvent('keydown', {
121-
key: 'ArrowDown',
122-
bubbles: true,
123-
cancelable: true,
124-
}));
125-
123+
fireEvent(
124+
screen.getByText('Item 1'),
125+
new KeyboardEvent('keydown', {
126+
key: 'ArrowDown',
127+
bubbles: true,
128+
cancelable: true,
129+
})
130+
);
131+
126132
expect(screen.getByText('Item 2')).toHaveFocus();
127133
});
128134

129135
it('Moves the focus to the previous element in the menu after pressing the up arrow', () => {
130136
render(<TestComponent />);
131137

132138
userEvent.tab();
133-
139+
134140
userEvent.type(screen.getByText('Primary'), '{enter}', {
135141
skipClick: true,
136142
});
137-
143+
138144
expect(screen.getByText('Item 1')).toHaveFocus();
139145

140-
fireEvent(screen.getByText('Item 1'), new KeyboardEvent('keydown', {
141-
key: 'ArrowDown',
142-
bubbles: true,
143-
cancelable: true,
144-
}));
145-
146+
fireEvent(
147+
screen.getByText('Item 1'),
148+
new KeyboardEvent('keydown', {
149+
key: 'ArrowDown',
150+
bubbles: true,
151+
cancelable: true,
152+
})
153+
);
154+
146155
expect(screen.getByText('Item 2')).toHaveFocus();
147156

148-
fireEvent(screen.getByText('Item 2'), new KeyboardEvent('keydown', {
149-
key: 'ArrowUp',
150-
bubbles: true,
151-
cancelable: true,
152-
}));
153-
157+
fireEvent(
158+
screen.getByText('Item 2'),
159+
new KeyboardEvent('keydown', {
160+
key: 'ArrowUp',
161+
bubbles: true,
162+
cancelable: true,
163+
})
164+
);
165+
154166
expect(screen.getByText('Item 1')).toHaveFocus();
155167
});
156168

157169
it('Wraps the focus to the last element when pressing the up arrow at the beginning of the menu', () => {
158170
render(<TestComponent />);
159171

160172
userEvent.tab();
161-
173+
162174
userEvent.type(screen.getByText('Primary'), '{enter}', {
163175
skipClick: true,
164176
});
165-
177+
166178
expect(screen.getByText('Item 1')).toHaveFocus();
167179

168-
fireEvent(screen.getByText('Item 1'), new KeyboardEvent('keydown', {
169-
key: 'ArrowUp',
170-
bubbles: true,
171-
cancelable: true,
172-
}));
173-
180+
fireEvent(
181+
screen.getByText('Item 1'),
182+
new KeyboardEvent('keydown', {
183+
key: 'ArrowUp',
184+
bubbles: true,
185+
cancelable: true,
186+
})
187+
);
188+
174189
expect(screen.getByText('Item 3')).toHaveFocus();
175190
});
176191

177192
it('Wraps the focus to the first element when pressing the down arrow at the end of the menu', () => {
178193
render(<TestComponent />);
179194

180195
userEvent.tab();
181-
196+
182197
userEvent.type(screen.getByText('Primary'), '{enter}', {
183198
skipClick: true,
184199
});
185-
200+
186201
expect(screen.getByText('Item 1')).toHaveFocus();
187202

188-
fireEvent(screen.getByText('Item 1'), new KeyboardEvent('keydown', {
189-
key: 'ArrowUp',
190-
bubbles: true,
191-
cancelable: true,
192-
}));
193-
203+
fireEvent(
204+
screen.getByText('Item 1'),
205+
new KeyboardEvent('keydown', {
206+
key: 'ArrowUp',
207+
bubbles: true,
208+
cancelable: true,
209+
})
210+
);
211+
194212
expect(screen.getByText('Item 3')).toHaveFocus();
195213

196-
fireEvent(screen.getByText('Item 3'), new KeyboardEvent('keydown', {
197-
key: 'ArrowDown',
198-
bubbles: true,
199-
cancelable: true,
200-
}));
201-
214+
fireEvent(
215+
screen.getByText('Item 3'),
216+
new KeyboardEvent('keydown', {
217+
key: 'ArrowDown',
218+
bubbles: true,
219+
cancelable: true,
220+
})
221+
);
222+
202223
expect(screen.getByText('Item 1')).toHaveFocus();
203224
});
204225

@@ -222,7 +243,7 @@ it('Sets isOpen to false after pressing tab while focused on a menu item', () =>
222243
render(<TestComponent />);
223244

224245
userEvent.tab();
225-
246+
226247
userEvent.type(screen.getByText('Primary'), '{enter}', {
227248
skipClick: true,
228249
});
@@ -236,11 +257,11 @@ it('Moves the focus to the menu button after pressing escape while focused on a
236257
render(<TestComponent />);
237258

238259
userEvent.tab();
239-
260+
240261
userEvent.type(screen.getByText('Primary'), '{enter}', {
241262
skipClick: true,
242263
});
243-
264+
244265
userEvent.type(screen.getByText('Item 1'), '{esc}', {
245266
skipClick: true,
246267
});
@@ -282,29 +303,41 @@ it('Can navigate to a dynamically-added item', () => {
282303

283304
userEvent.click(screen.getByText('Primary'));
284305

285-
fireEvent(screen.getByText('Primary'), new KeyboardEvent('keydown', {
286-
key: 'ArrowDown',
287-
bubbles: true,
288-
cancelable: true,
289-
}));
290-
291-
fireEvent(screen.getByText('Item 1'), new KeyboardEvent('keydown', {
292-
key: 'ArrowDown',
293-
bubbles: true,
294-
cancelable: true,
295-
}));
296-
297-
fireEvent(screen.getByText('Item 2'), new KeyboardEvent('keydown', {
298-
key: 'ArrowDown',
299-
bubbles: true,
300-
cancelable: true,
301-
}));
302-
303-
fireEvent(screen.getByText('Item 3'), new KeyboardEvent('keydown', {
304-
key: 'ArrowDown',
305-
bubbles: true,
306-
cancelable: true,
307-
}));
308-
306+
fireEvent(
307+
screen.getByText('Primary'),
308+
new KeyboardEvent('keydown', {
309+
key: 'ArrowDown',
310+
bubbles: true,
311+
cancelable: true,
312+
})
313+
);
314+
315+
fireEvent(
316+
screen.getByText('Item 1'),
317+
new KeyboardEvent('keydown', {
318+
key: 'ArrowDown',
319+
bubbles: true,
320+
cancelable: true,
321+
})
322+
);
323+
324+
fireEvent(
325+
screen.getByText('Item 2'),
326+
new KeyboardEvent('keydown', {
327+
key: 'ArrowDown',
328+
bubbles: true,
329+
cancelable: true,
330+
})
331+
);
332+
333+
fireEvent(
334+
screen.getByText('Item 3'),
335+
new KeyboardEvent('keydown', {
336+
key: 'ArrowDown',
337+
bubbles: true,
338+
cancelable: true,
339+
})
340+
);
341+
309342
expect(screen.getByText('Item 4')).toHaveFocus();
310343
});

0 commit comments

Comments
 (0)