@@ -13,6 +13,7 @@ const Footer: React.FC = () => {
13
13
let shiftPressed = false ;
14
14
15
15
const handleKeyDown = ( e : KeyboardEvent ) => {
16
+ // Detect if Ctrl or Shift are pressed
16
17
if ( e . key === 'Control' ) {
17
18
ctrlPressed = true ;
18
19
}
@@ -22,42 +23,47 @@ const Footer: React.FC = () => {
22
23
} ;
23
24
24
25
const handleKeyUp = ( e : KeyboardEvent ) => {
26
+ // When both Ctrl and Shift are released, start listening for "admin"
25
27
if ( ctrlPressed && shiftPressed ) {
26
- setListeningForAdmin ( true ) ;
27
- setInputSequence ( '' ) ;
28
+ setListeningForAdmin ( true ) ; // Set flag to start listening for "admin"
29
+ setInputSequence ( '' ) ; // Reset input sequence
28
30
ctrlPressed = false ;
29
31
shiftPressed = false ;
30
32
33
+ // Set a timer to stop listening if no input in 5 seconds
31
34
if ( timer ) clearTimeout ( timer ) ;
32
35
setTimer (
33
36
setTimeout ( ( ) => {
34
- setListeningForAdmin ( false ) ;
35
- setInputSequence ( '' ) ;
37
+ setListeningForAdmin ( false ) ; // Stop listening after 5 seconds
38
+ setInputSequence ( '' ) ; // Reset sequence
36
39
} , 5000 )
37
40
) ;
38
41
}
39
42
} ;
40
43
41
44
const handleKeyPress = ( e : KeyboardEvent ) => {
45
+ // Only proceed if we're in the input mode
42
46
if ( listeningForAdmin ) {
43
47
const newSequence = inputSequence + e . key . toLowerCase ( ) ;
44
48
49
+ // Check if the input sequence matches "admin"
45
50
if ( newSequence === 'admin' ) {
46
51
setShowLink ( true ) ;
47
- setInputSequence ( '' ) ;
48
- setListeningForAdmin ( false ) ;
52
+ setInputSequence ( '' ) ; // Reset sequence after success
53
+ setListeningForAdmin ( false ) ; // Stop listening
49
54
55
+ // Set a timer to hide the link after 5 seconds
50
56
if ( timer ) clearTimeout ( timer ) ;
51
57
setTimer (
52
58
setTimeout ( ( ) => {
53
- setShowLink ( false ) ;
59
+ setShowLink ( false ) ; // Hide the link after 5 seconds
54
60
} , 5000 )
55
61
) ;
56
62
} else if ( 'admin' . startsWith ( newSequence ) ) {
57
- setInputSequence ( newSequence ) ;
63
+ setInputSequence ( newSequence ) ; // Update sequence
58
64
} else {
59
- setInputSequence ( '' ) ;
60
- setListeningForAdmin ( false ) ;
65
+ setInputSequence ( '' ) ; // Reset sequence on wrong input
66
+ setListeningForAdmin ( false ) ; // Stop listening if incorrect
61
67
}
62
68
}
63
69
} ;
@@ -70,7 +76,7 @@ const Footer: React.FC = () => {
70
76
window . removeEventListener ( 'keydown' , handleKeyDown ) ;
71
77
window . removeEventListener ( 'keyup' , handleKeyUp ) ;
72
78
window . removeEventListener ( 'keypress' , handleKeyPress ) ;
73
- if ( timer ) clearTimeout ( timer ) ;
79
+ if ( timer ) clearTimeout ( timer ) ; // Clean up timeout on unmount
74
80
} ;
75
81
} , [ inputSequence , listeningForAdmin , timer ] ) ;
76
82
@@ -84,7 +90,7 @@ const Footer: React.FC = () => {
84
90
} ;
85
91
86
92
return (
87
- < footer className = "footer" >
93
+ < footer >
88
94
< div className = "footer-content" >
89
95
< p > © 2024 ProBooker</ p >
90
96
{ showLink && (
@@ -95,21 +101,13 @@ const Footer: React.FC = () => {
95
101
</ div >
96
102
< AdminLoginModal show = { showModal } onClose = { closeModal } />
97
103
< style jsx > { `
98
- .footer {
99
- width: 100%;
100
- position: absolute;
101
- bottom: 0;
102
- background: #f8f9fa;
103
- border-top: 1px solid #e9ecef;
104
- padding: 20px;
105
- text-align: center;
106
- }
107
104
.footer-content {
108
105
display: flex;
109
106
justify-content: space-between;
110
107
align-items: center;
111
- max-width: 1200px;
112
- margin: 0 auto;
108
+ padding: 20px;
109
+ background: #f8f9fa;
110
+ border-top: 1px solid #e9ecef;
113
111
}
114
112
a {
115
113
color: #0070f3;
@@ -124,4 +122,4 @@ const Footer: React.FC = () => {
124
122
) ;
125
123
} ;
126
124
127
- export default Footer ;
125
+ export default Footer ;
0 commit comments