1- import React from 'react' ;
1+ import React , { useEffect , useState } from 'react' ;
22import '../../styles/Modal.css' ;
3- import { CuteButton } from "../CuteButton" ;
4- import { CreateMeetingDto } from "../../dtos/MeetingDto" ;
3+ import { CuteButton } from "../CuteButton" ;
4+ import { MeetingDto } from "../../dtos/MeetingDto" ;
5+ import { getUserIdsForMeeting } from "../../api/UserGroupApi" ;
6+ import axiosInstance from "../../AxiosConfig" ;
7+ import { joinStudyGroup } from "../../api/UserGroupApi"
58
69interface ModalProps {
710 isOpen : boolean ;
8- meeting : CreateMeetingDto | null ;
11+ meeting : MeetingDto | null ;
912 onClose : ( ) => void ;
1013 openMeetingForm : ( ) => void ;
1114 openChooseMeetingModal : ( ) => void ;
1215}
1316
14- const MeetingDetails : React . FC < ModalProps > = ( { isOpen, meeting, onClose, openMeetingForm, openChooseMeetingModal} ) => {
17+ const MeetingDetails : React . FC < ModalProps > = ( { isOpen, meeting, onClose, openMeetingForm, openChooseMeetingModal } ) => {
18+
19+ const [ userIds , setUserIds ] = useState < string [ ] > ( [ ] ) ;
20+
21+ useEffect ( ( ) => {
22+ if ( isOpen && meeting ) {
23+ getUserIdsForMeeting ( axiosInstance , meeting . id )
24+ . then ( setUserIds )
25+ . catch ( err => {
26+ console . error ( "Fehler beim Laden der Teilnehmer:" , err ) ;
27+ } ) ;
28+ }
29+ } , [ isOpen , meeting ] ) ;
30+
1531 if ( ! isOpen || ! meeting ) return null ;
1632
1733 const updateMeeting = ( ) => {
@@ -21,9 +37,23 @@ const MeetingDetails: React.FC<ModalProps> = ({isOpen, meeting, onClose, openMee
2137 else
2238 openMeetingForm ( ) ;
2339 }
40+
41+ const joinMeeting = ( ) => {
42+
43+ joinStudyGroup ( axiosInstance , meeting . id )
44+
45+ }
46+
2447 return (
2548 < div className = "modal-overlay" onClick = { onClose } >
26- < div className = "modal-content max-w-[90%] w-[450px]" onClick = { ( e ) => e . stopPropagation ( ) } >
49+ < div className = "modal-content max-w-[90%] w-[700px] relative p-7" onClick = { ( e ) => e . stopPropagation ( ) } >
50+
51+ < button
52+ onClick = { onClose }
53+ className = "absolute top-4 right-4 text-white text-xxl hover:text-red-400"
54+ >
55+ ×
56+ </ button >
2757
2858 < h2 className = "font-bold text-2xl text-white mb-4" > { meeting . title } </ h2 >
2959
@@ -40,18 +70,34 @@ const MeetingDetails: React.FC<ModalProps> = ({isOpen, meeting, onClose, openMee
4070 < p className = "text-bs font-medium text-white" >
4171 < strong className = "text-[#CAE8FF] font-semibold" > Raum:</ strong > { meeting . place }
4272 </ p >
73+
74+ < p className = "text-bs font-medium text-white" >
75+ < strong className = "text-[#CAE8FF] font-semibold" > Teilnehmer:</ strong >
76+ </ p >
77+ < ul className = "text-white text-sm list-disc list-inside" >
78+ { userIds . map ( id => ( < li key = { id } > { id } </ li > ) ) }
79+ { userIds . length === 0 && < li > (noch keine Teilnehmer)</ li > }
80+ </ ul >
4381 </ div >
4482
4583 < div className = "flex flex-row gap-4 mb-4 justify-end mt-auto items-center" >
4684 < div >
47- < CuteButton onClick = { onClose } text = { "Abbrechen" } bgColor = { "#598BB1" } textColor = { "#e6ebfc" }
48- classname = { "md:text-base text-sm" } />
85+ < CuteButton
86+ onClick = { updateMeeting }
87+ text = { "Meeting bearbeiten" }
88+ bgColor = { "#598BB1" }
89+ textColor = { "#e6ebfc" }
90+ classname = { "md:text-base text-sm" }
91+ />
4992 </ div >
5093 < div >
5194 < CuteButton
52- onClick = { updateMeeting }
53- text = { "Meeting Bearbeiten" } bgColor = { "#56A095" } textColor = { "#e8fcf6" }
54- classname = { "md:text-lg text-base" } />
95+ onClick = { joinMeeting }
96+ text = { "Beitreten" }
97+ bgColor = { "#56A095" }
98+ textColor = { "#e8fcf6" }
99+ classname = { "md:text-lg text-base" }
100+ />
55101 </ div >
56102 </ div >
57103
0 commit comments