1- import React , { useState } from 'react' ;
1+ import React , { useEffect , useState } from 'react' ;
22import '../../styles/Modal.css' ;
3- import { CuteButton } from '../CuteButton' ;
4- import { UserModule } from '../../dtos/ModuleDto' ;
3+ import { CuteButton } from '../CuteButton' ;
4+ import { UserModule } from '../../dtos/ModuleDto' ;
55
66interface Props {
7- isOpen : boolean ;
8- modules : UserModule [ ] ;
9- onClose : ( ) => void ;
10- onSubmit : ( moduleName : string , date : string , time : string , room : string ) => void ;
7+ isOpen : boolean ;
8+ modules : UserModule [ ] ;
9+ onClose : ( ) => void ;
10+ onSubmit : ( moduleName : string , date : string , time : string , room : string ) => void ;
1111}
1212
13- export default function ExamDateModal ( { isOpen, modules, onClose, onSubmit } : Props ) {
14- const [ pick , setPick ] = useState ( modules [ 0 ] ?. name || '' ) ;
15- const [ day , setDay ] = useState ( '' ) ;
16- const [ hour , setHour ] = useState ( '' ) ;
17- const [ loc , setLoc ] = useState ( '' ) ;
13+ export default function ExamDateModal ( { isOpen, modules, onClose, onSubmit} : Props ) {
14+ const [ pick , setPick ] = useState ( modules [ 0 ] || '' ) ;
15+ const [ day , setDay ] = useState ( pick . examDate ) ;
16+ const [ hour , setHour ] = useState ( pick . examTime ) ;
17+ const [ loc , setLoc ] = useState ( pick . examLoc ) ;
1818
19- if ( ! isOpen ) return null ;
19+ useEffect ( ( ) => {
20+ setDay ( pick . examDate ) ;
21+ setHour ( pick . examTime ) ;
22+ setLoc ( pick . examLoc ) ;
23+ } , [ pick ] )
2024
21- return (
22- < div className = "modal-overlay" onClick = { onClose } >
23- < div className = "modal-content max-w-[90%] w-[500px] p-7 relative" onClick = { e => e . stopPropagation ( ) } >
24- < button onClick = { onClose } className = "absolute top-4 right-4 text-white text-2xl hover:text-red-400" > ×</ button >
25- < h2 className = "text-2xl font-bold text-white mb-4" > Prüfungstermin hinzufügen</ h2 >
26- < div className = "flex flex-col gap-4 mb-6" >
27- < select value = { pick } onChange = { e => setPick ( e . target . value ) } className = "p-2 rounded bg-[#2A2A2A] text-white" >
28- { modules . map ( m => < option key = { m . name } > { m . name } </ option > ) }
29- </ select >
30- < input type = "date" value = { day } onChange = { e => setDay ( e . target . value ) } className = "p-2 rounded bg-[#2A2A2A] text-white" />
31- < input type = "time" value = { hour } onChange = { e => setHour ( e . target . value ) } className = "p-2 rounded bg-[#2A2A2A] text-white" />
32- < input type = "text" placeholder = "Raum" value = { loc } onChange = { e => setLoc ( e . target . value ) } className = "p-2 rounded bg-[#2A2A2A] text-white" />
33- </ div >
34- < div className = "flex justify-end gap-4" >
35- < CuteButton onClick = { onClose } text = "Abbrechen" bgColor = "#974242" textColor = "#e8fcf6" classname = "px-4 py-2" />
36- < CuteButton onClick = { ( ) => onSubmit ( pick , day , hour , loc ) } text = "Speichern" bgColor = "#56A095" textColor = "#e6ebfc" classname = "px-4 py-2" />
25+ if ( ! isOpen ) return null ;
26+
27+ return (
28+ < div className = "modal-overlay" onClick = { onClose } >
29+ < div className = "modal-content max-w-[90%] w-[500px] p-7 relative" onClick = { e => e . stopPropagation ( ) } >
30+ < button onClick = { onClose } className = "absolute top-4 right-4 text-white text-2xl hover:text-red-400" > ×
31+ </ button >
32+ < h2 className = "text-2xl font-bold text-white mb-4" > Prüfungstermin hinzufügen</ h2 >
33+ < div className = "flex flex-col gap-4 mb-6" >
34+ < select value = { pick . name }
35+ onChange = { e => {
36+ const selectedModule = modules . find ( m => m . name === e . target . value ) ;
37+ if ( selectedModule )
38+ setPick ( selectedModule ) ;
39+ } }
40+ className = "p-2 rounded bg-[#2A2A2A] text-white" >
41+ { modules . map ( m => < option key = { m . name } > { m . name } </ option > ) }
42+ </ select >
43+ < input type = "date" value = { day } onChange = { e => setDay ( e . target . value ) }
44+ className = "p-2 rounded bg-[#2A2A2A] text-white" />
45+ < input type = "time" value = { hour } onChange = { e => setHour ( e . target . value ) }
46+ className = "p-2 rounded bg-[#2A2A2A] text-white" />
47+ < input type = "text" placeholder = "Raum" value = { loc } onChange = { e => setLoc ( e . target . value ) }
48+ className = "p-2 rounded bg-[#2A2A2A] text-white" />
49+ </ div >
50+ < div className = "flex justify-end gap-4" >
51+ < CuteButton onClick = { onClose } text = "Abbrechen" bgColor = "#974242" textColor = "#e8fcf6"
52+ classname = "px-4 py-2" />
53+ < CuteButton onClick = { ( ) => onSubmit ( pick . name , day , hour , loc ) } text = "Speichern" bgColor = "#56A095"
54+ textColor = "#e6ebfc" classname = "px-4 py-2" />
55+ </ div >
56+ </ div >
3757 </ div >
38- </ div >
39- </ div >
40- ) ;
58+ ) ;
4159}
0 commit comments