Skip to content

Commit 8a156a7

Browse files
fix: focus after click & keyboard logic only for controlled tabs
1 parent d01b28d commit 8a156a7

File tree

1 file changed

+19
-22
lines changed

1 file changed

+19
-22
lines changed

src/Tabs.tsx

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -108,31 +108,28 @@ export const Tabs = memo(
108108
const onKeyboardNavigation = (
109109
event: React.KeyboardEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLUListElement>
110110
) => {
111-
let targetIndex = selectedTabIndex;
112-
switch (event.key) {
113-
case "ArrowRight":
114-
targetIndex = selectedTabIndex < tabs.length - 1 ? selectedTabIndex + 1 : 0;
115-
break;
116-
case "ArrowLeft":
117-
targetIndex = selectedTabIndex === 0 ? tabs.length - 1 : selectedTabIndex - 1;
118-
break;
119-
case "Home":
120-
targetIndex = 0;
121-
break;
122-
case "End":
123-
targetIndex = tabs.length - 1;
124-
break;
111+
if (selectedTabId !== undefined) {
112+
let targetIndex = selectedTabIndex;
113+
switch (event.key) {
114+
case "ArrowRight":
115+
targetIndex = selectedTabIndex < tabs.length - 1 ? selectedTabIndex + 1 : 0;
116+
break;
117+
case "ArrowLeft":
118+
targetIndex =
119+
selectedTabIndex === 0 ? tabs.length - 1 : selectedTabIndex - 1;
120+
break;
121+
case "Home":
122+
targetIndex = 0;
123+
break;
124+
case "End":
125+
targetIndex = tabs.length - 1;
126+
break;
127+
}
128+
buttonRefs.current[targetIndex]?.click();
129+
buttonRefs.current[targetIndex]?.focus();
125130
}
126-
buttonRefs.current[targetIndex]?.click();
127131
};
128132

129-
React.useEffect(() => {
130-
const targetTabButton = buttonRefs.current[selectedTabIndex];
131-
if (targetTabButton) {
132-
targetTabButton.focus();
133-
}
134-
}, [selectedTabIndex]);
135-
136133
const { getPanelId, getTabId } = (function useClosure() {
137134
const id = useId();
138135

0 commit comments

Comments
 (0)