@@ -25,7 +25,6 @@ export default function LoginPage() {
2525
2626 if ( data . authenticated ) {
2727 // User is already authenticated, redirect to home
28- console . log ( 'User already authenticated, redirecting to home.' )
2928
3029 // Get the "from" parameter if it exists
3130 const urlParams = new URLSearchParams ( window . location . search )
@@ -109,12 +108,34 @@ export default function LoginPage() {
109108 }
110109 }
111110
111+ const handlePaste = ( pasteIndex : number , e : React . ClipboardEvent < HTMLDivElement > ) => {
112+ e . preventDefault ( )
113+ const pasteData = e . clipboardData . getData ( 'Text' ) . toUpperCase ( ) . slice ( 0 , 6 ) . split ( '' )
114+ const newCode = [ ...code ]
115+
116+ for ( let i = 0 ; i < pasteData . length ; i ++ ) {
117+ if ( pasteIndex + i < 6 ) {
118+ newCode [ pasteIndex + i ] = pasteData [ i ]
119+ }
120+ }
121+
122+ setCode ( newCode )
123+
124+ // Focus the next empty input or login button
125+ const firstEmptyIndex = newCode . findIndex ( ( digit ) => digit === '' )
126+ if ( firstEmptyIndex !== - 1 ) {
127+ inputRefs . current [ firstEmptyIndex ] ?. focus ( )
128+ } else {
129+ loginButtonRef . current ?. focus ( )
130+ }
131+ }
132+
112133 // Show loading while checking authentication
113134 if ( isLoading ) {
114135 return (
115136 < div className = { styles . container } >
116137 < div className = { styles . loginPrompt } >
117- < p > Checking authentication ...</ p >
138+ < p > Prüfe Login-Status ...</ p >
118139 </ div >
119140 </ div >
120141 )
@@ -126,12 +147,12 @@ export default function LoginPage() {
126147 < h1 > Login</ h1 >
127148 < p > Bitte logge dich ein, um auf die Workshops zuzugreifen. Du erhältst den Zugangscode von einem Mentor.</ p >
128149 < div className = { styles . inputForm } >
129- < input type = "text" maxLength = { 1 } value = { code [ 0 ] } onChange = { ( e ) => setCodeDigit ( 0 , e . target . value ) } onKeyDown = { ( e ) => handleKeyDown ( 0 , e ) } ref = { ( el ) => { inputRefs . current [ 0 ] = el } } />
130- < input type = "text" maxLength = { 1 } value = { code [ 1 ] } onChange = { ( e ) => setCodeDigit ( 1 , e . target . value ) } onKeyDown = { ( e ) => handleKeyDown ( 1 , e ) } ref = { ( el ) => { inputRefs . current [ 1 ] = el } } />
131- < input type = "text" maxLength = { 1 } value = { code [ 2 ] } onChange = { ( e ) => setCodeDigit ( 2 , e . target . value ) } onKeyDown = { ( e ) => handleKeyDown ( 2 , e ) } ref = { ( el ) => { inputRefs . current [ 2 ] = el } } />
132- < input type = "text" maxLength = { 1 } value = { code [ 3 ] } onChange = { ( e ) => setCodeDigit ( 3 , e . target . value ) } onKeyDown = { ( e ) => handleKeyDown ( 3 , e ) } ref = { ( el ) => { inputRefs . current [ 3 ] = el } } />
133- < input type = "text" maxLength = { 1 } value = { code [ 4 ] } onChange = { ( e ) => setCodeDigit ( 4 , e . target . value ) } onKeyDown = { ( e ) => handleKeyDown ( 4 , e ) } ref = { ( el ) => { inputRefs . current [ 4 ] = el } } />
134- < input type = "text" maxLength = { 1 } value = { code [ 5 ] } onChange = { ( e ) => setCodeDigit ( 5 , e . target . value ) } onKeyDown = { ( e ) => handleKeyDown ( 5 , e ) } ref = { ( el ) => { inputRefs . current [ 5 ] = el } } />
150+ < input type = "text" maxLength = { 1 } value = { code [ 0 ] } onChange = { ( e ) => setCodeDigit ( 0 , e . target . value ) } onKeyDown = { ( e ) => handleKeyDown ( 0 , e ) } ref = { ( el ) => { inputRefs . current [ 0 ] = el } } onPaste = { ( e ) => handlePaste ( 0 , e ) } />
151+ < input type = "text" maxLength = { 1 } value = { code [ 1 ] } onChange = { ( e ) => setCodeDigit ( 1 , e . target . value ) } onKeyDown = { ( e ) => handleKeyDown ( 1 , e ) } ref = { ( el ) => { inputRefs . current [ 1 ] = el } } onPaste = { ( e ) => handlePaste ( 1 , e ) } />
152+ < input type = "text" maxLength = { 1 } value = { code [ 2 ] } onChange = { ( e ) => setCodeDigit ( 2 , e . target . value ) } onKeyDown = { ( e ) => handleKeyDown ( 2 , e ) } ref = { ( el ) => { inputRefs . current [ 2 ] = el } } onPaste = { ( e ) => handlePaste ( 2 , e ) } />
153+ < input type = "text" maxLength = { 1 } value = { code [ 3 ] } onChange = { ( e ) => setCodeDigit ( 3 , e . target . value ) } onKeyDown = { ( e ) => handleKeyDown ( 3 , e ) } ref = { ( el ) => { inputRefs . current [ 3 ] = el } } onPaste = { ( e ) => handlePaste ( 3 , e ) } />
154+ < input type = "text" maxLength = { 1 } value = { code [ 4 ] } onChange = { ( e ) => setCodeDigit ( 4 , e . target . value ) } onKeyDown = { ( e ) => handleKeyDown ( 4 , e ) } ref = { ( el ) => { inputRefs . current [ 4 ] = el } } onPaste = { ( e ) => handlePaste ( 4 , e ) } />
155+ < input type = "text" maxLength = { 1 } value = { code [ 5 ] } onChange = { ( e ) => setCodeDigit ( 5 , e . target . value ) } onKeyDown = { ( e ) => handleKeyDown ( 5 , e ) } ref = { ( el ) => { inputRefs . current [ 5 ] = el } } onPaste = { ( e ) => handlePaste ( 5 , e ) } />
135156 </ div >
136157 { errorMessage && < p className = { styles . errorMessage } > { errorMessage } </ p > }
137158 < button
@@ -140,7 +161,7 @@ export default function LoginPage() {
140161 disabled = { isSubmitting }
141162 className = { styles . loginButton }
142163 >
143- { isSubmitting ? 'Logging in ...' : 'Log In ' }
164+ { isSubmitting ? 'Wird angemeldet ...' : 'Anmelden ' }
144165 </ button >
145166 </ div >
146167 </ div >
0 commit comments