Skip to content

Commit fe40665

Browse files
Merge pull request #588 from thejackshelton/tabs-sync-refactor
refactor(tabs): removed last visible task with sync$
2 parents b35c4c2 + 6d08bdf commit fe40665

File tree

1 file changed

+23
-27
lines changed
  • packages/kit-headless/src/components/tabs

1 file changed

+23
-27
lines changed

packages/kit-headless/src/components/tabs/tab.tsx

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import {
66
useComputed$,
77
useContext,
88
useSignal,
9-
useVisibleTask$,
9+
sync$,
1010
} from '@builder.io/qwik';
11-
import { KeyCode } from '../../utils/key-code.type';
1211
import { TAB_PANEL_ID_PREFIX } from './tab-panel';
1312
import { tabsContextId } from './tabs-context-id';
13+
import { KeyCode } from '../../utils/key-code.type';
1414

1515
export const TAB_ID_PREFIX = '_tab_';
1616

@@ -21,17 +21,6 @@ export type TabProps = QwikIntrinsicElements['button'] & {
2121
tabId?: string;
2222
};
2323

24-
const preventedKeys = [
25-
KeyCode.Home,
26-
KeyCode.End,
27-
KeyCode.PageDown,
28-
KeyCode.PageUp,
29-
KeyCode.ArrowDown,
30-
KeyCode.ArrowUp,
31-
KeyCode.ArrowLeft,
32-
KeyCode.ArrowRight,
33-
];
34-
3524
export const Tab = component$<TabProps>(({ selectedClassName, tabId, ...props }) => {
3625
const contextService = useContext(tabsContextId);
3726

@@ -48,20 +37,6 @@ export const Tab = component$<TabProps>(({ selectedClassName, tabId, ...props })
4837
return contextService.selectedTabIdSig.value === tabId;
4938
});
5039

51-
useVisibleTask$(function preventDefaultOnKeysVisibleTask({ cleanup }) {
52-
function handler(event: KeyboardEvent) {
53-
if (preventedKeys.includes(event.key as KeyCode)) {
54-
event.preventDefault();
55-
}
56-
contextService.onTabKeyDown$(event.key as KeyCode, tabId!);
57-
}
58-
// TODO put the listener on TabList
59-
elementRefSig.value?.addEventListener('keydown', handler);
60-
cleanup(() => {
61-
elementRefSig.value?.removeEventListener('keydown', handler);
62-
});
63-
});
64-
6540
const selectIfAutomatic$ = $(() => {
6641
contextService.selectIfAutomatic$(tabId!);
6742
});
@@ -86,6 +61,27 @@ export const Tab = component$<TabProps>(({ selectedClassName, tabId, ...props })
8661
tabIndex={isSelectedSig.value ? 0 : -1}
8762
class={[props.class, classNamesSig.value]}
8863
onClick$={[$(() => contextService.selectTab$(tabId!)), props.onClick$]}
64+
onKeyDown$={[
65+
/* KeyCode cannot be used here. */
66+
sync$((e: KeyboardEvent): void => {
67+
const keys = [
68+
'Home',
69+
'End',
70+
'PageDown',
71+
'PageUp',
72+
'ArrowDown',
73+
'ArrowUp',
74+
'ArrowLeft',
75+
'ArrowRight',
76+
];
77+
78+
if (keys.includes(e.key)) {
79+
e.preventDefault();
80+
}
81+
}),
82+
$((e) => contextService.onTabKeyDown$(e.key as KeyCode, tabId!)),
83+
props.onKeyDown$,
84+
]}
8985
>
9086
<Slot />
9187
</button>

0 commit comments

Comments
 (0)