@@ -2,13 +2,26 @@ import { SupportedKeys } from './SupportedKeys';
22import { RemoteControlManagerInterface } from './RemoteControlManager.interface' ;
33import CustomEventEmitter from './CustomEventEmitter' ;
44
5+ const LONG_PRESS_DURATION = 500 ;
6+
57class RemoteControlManager implements RemoteControlManagerInterface {
68 constructor ( ) {
79 window . addEventListener ( 'keydown' , this . handleKeyDown ) ;
10+ window . addEventListener ( 'keyup' , this . handleKeyUp ) ;
811 }
912
1013 private eventEmitter = new CustomEventEmitter < { keyDown : SupportedKeys } > ( ) ;
1114
15+ private isEnterKeyDown = false ;
16+ private longEnterTimeout : NodeJS . Timeout | null = null ;
17+
18+ private handleLongEnter = ( ) => {
19+ this . longEnterTimeout = setTimeout ( ( ) => {
20+ this . eventEmitter . emit ( 'keyDown' , SupportedKeys . LongEnter ) ;
21+ this . longEnterTimeout = null ;
22+ } , LONG_PRESS_DURATION ) ;
23+ } ;
24+
1225 private handleKeyDown = ( event : KeyboardEvent ) => {
1326 const mappedKey = {
1427 ArrowRight : SupportedKeys . Right ,
@@ -23,9 +36,35 @@ class RemoteControlManager implements RemoteControlManagerInterface {
2336 return ;
2437 }
2538
39+ if ( mappedKey === SupportedKeys . Enter ) {
40+ if ( ! this . isEnterKeyDown ) {
41+ this . isEnterKeyDown = true ;
42+ this . handleLongEnter ( ) ;
43+ }
44+ return ;
45+ }
46+
2647 this . eventEmitter . emit ( 'keyDown' , mappedKey ) ;
2748 } ;
2849
50+ private handleKeyUp = ( event : KeyboardEvent ) => {
51+ const mappedKey = {
52+ Enter : SupportedKeys . Enter ,
53+ } [ event . code ] ;
54+
55+ if ( ! mappedKey ) {
56+ return ;
57+ }
58+
59+ if ( mappedKey === SupportedKeys . Enter ) {
60+ this . isEnterKeyDown = false ;
61+ if ( this . longEnterTimeout ) {
62+ clearTimeout ( this . longEnterTimeout ) ;
63+ this . eventEmitter . emit ( 'keyDown' , mappedKey ) ;
64+ }
65+ }
66+ } ;
67+
2968 addKeydownListener = ( listener : ( event : SupportedKeys ) => boolean ) => {
3069 this . eventEmitter . on ( 'keyDown' , listener ) ;
3170 return listener ;
0 commit comments