1- import React from "react" ;
1+ import React , { useEffect , useRef } from "react" ;
22import styles from "./debugger-toolbar.module.scss" ;
33import { BoxComponent } from "@/features/common/components/box/box.component" ;
44import { useDebuggerStore } from "@/features/debugger/services/debugger.store" ;
@@ -18,9 +18,22 @@ interface DebuggerToolbarComponentProps {
1818export const DebuggerToolbarComponent : React . FC <
1919 DebuggerToolbarComponentProps
2020> = ( { decoderDictionary, encoderDictionary, mode } ) => {
21+ const tabRefs = useRef < Array < HTMLLIElement | null > > ( [ ] ) ;
2122 const activeWidget$ = useDebuggerStore ( ( state ) => state . activeWidget$ ) ;
22-
2323 const setActiveWidget$ = useDebuggerStore ( ( state ) => state . setActiveWidget$ ) ;
24+ const isDecoder = activeWidget$ === DebuggerWidgetValues . DECODER ;
25+
26+ const handleKeyDown = ( e : React . KeyboardEvent < HTMLLIElement > ) => {
27+ const { key } = e ;
28+
29+ if ( key == "ArrowRight" || key == "ArrowLeft" ) {
30+ setActiveWidget$ (
31+ isDecoder ? DebuggerWidgetValues . ENCODER : DebuggerWidgetValues . DECODER
32+ ) ;
33+ e . preventDefault ( ) ;
34+ }
35+ tabRefs . current [ isDecoder ? 0 : 1 ] ?. focus ( ) ;
36+ } ;
2437
2538 if ( mode === DebuggerModeValues . UNIFIED ) {
2639 return (
@@ -40,8 +53,15 @@ export const DebuggerToolbarComponent: React.FC<
4053 onClick = { ( ) => {
4154 setActiveWidget$ ( DebuggerWidgetValues . DECODER ) ;
4255 } }
56+ onKeyDown = { handleKeyDown }
4357 data-active = { activeWidget$ === DebuggerWidgetValues . DECODER }
4458 data-testid = { dataTestidDictionary . debugger . decoderTab . id }
59+ aria-selected = { activeWidget$ === DebuggerWidgetValues . DECODER }
60+ aria-controls = { `${ DebuggerWidgetValues . DECODER } -panel` }
61+ ref = { ( el ) => {
62+ tabRefs . current [ 0 ] = el ;
63+ } }
64+ tabIndex = { activeWidget$ === DebuggerWidgetValues . DECODER ? 0 : - 1 }
4565 >
4666 < span className = { styles . titleTab__compactLabel } >
4767 { decoderDictionary . compactTitle }
@@ -53,11 +73,18 @@ export const DebuggerToolbarComponent: React.FC<
5373 < li
5474 role = "tab"
5575 className = { styles . titleTab }
76+ onKeyDown = { handleKeyDown }
5677 onClick = { ( ) => {
5778 setActiveWidget$ ( DebuggerWidgetValues . ENCODER ) ;
5879 } }
5980 data-active = { activeWidget$ === DebuggerWidgetValues . ENCODER }
6081 data-testid = { dataTestidDictionary . debugger . encoderTab . id }
82+ aria-selected = { activeWidget$ === DebuggerWidgetValues . ENCODER }
83+ aria-controls = { `${ DebuggerWidgetValues . ENCODER } -panel` }
84+ ref = { ( el ) => {
85+ tabRefs . current [ 1 ] = el ;
86+ } }
87+ tabIndex = { activeWidget$ === DebuggerWidgetValues . ENCODER ? 0 : - 1 }
6188 >
6289 < span className = { styles . titleTab__compactLabel } >
6390 { encoderDictionary . compactTitle }
0 commit comments