Skip to content

Commit fc8c2bd

Browse files
author
Alexandra Zwinger
committed
Fix many issues with backend compatibility
1 parent c654538 commit fc8c2bd

File tree

10 files changed

+73
-42
lines changed

10 files changed

+73
-42
lines changed

src/api/UserGroupApi.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ export function joinStudyGroup(axios: AxiosInstance, meetingId: string): Promise
77
.then(handleSuccessResponse, handleErrorResponse);
88
}
99

10+
export function joinSuperStudyGroup(axios: AxiosInstance, superMeetingId: string): Promise<void> {
11+
const meetingId = "";
12+
return axios.post(`/${Resources.USERGROUP}`, {superMeetingId, meetingId})
13+
.then(handleSuccessResponse, handleErrorResponse);
14+
}
15+
1016
export async function getUserIdsForMeeting(axios: AxiosInstance, uuid: string): Promise<string[]> {
1117
const res = await axios.get(`/studygroup?uuid=${uuid}`);
1218
const data = res.data;
@@ -19,4 +25,11 @@ export function leaveStudyGroup(axios: AxiosInstance, targetUUID: string): Promi
1925
params: {targetUUID}
2026
})
2127
.then(handleSuccessResponse, handleErrorResponse);
28+
}
29+
30+
export function leaveSuperStudyGroup(axios: AxiosInstance, targetUUID: string): Promise<void> {
31+
return axios.delete(`/${Resources.USERGROUP}`, {
32+
params: {targetUUID}
33+
})
34+
.then(handleSuccessResponse, handleErrorResponse);
2235
}

src/components/CalendarComponent.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export default function CalendarComponent(props: { isDialogOpen: boolean }) {
3434
return meetings.map(meeting => ({
3535
id: meeting.id.toString(),
3636
superId: meeting.superId.toString(),
37-
title: meeting.title,
37+
title: meeting.module,
3838
start: new Date(meeting.dateFrom).toISOString(),
3939
end: new Date(meeting.dateUntil).toISOString(),
4040
description: meeting.description,
@@ -50,9 +50,10 @@ export default function CalendarComponent(props: { isDialogOpen: boolean }) {
5050
}, [props.isDialogOpen, isMeetingFormOpen]);
5151

5252
const Eventhandler = (info: any) => {
53+
console.log(info);
5354
const {event} = info;
5455
const id = event.id;
55-
const title = event.title;
56+
const module = event.title;
5657
const date_from = new Date(event.start).toLocaleString();
5758
const date_until = new Date(event.end).toLocaleString();
5859
const superId = event.extendedProps?.superId || '';
@@ -64,7 +65,7 @@ export default function CalendarComponent(props: { isDialogOpen: boolean }) {
6465
setSelectedMeeting({
6566
id: id,
6667
superId: superId,
67-
title,
68+
module,
6869
dateFrom: date_from,
6970
dateUntil: date_until,
7071
description,
Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, {useState} from 'react'
22
import {MeetingDto} from '../../dtos/MeetingDto'
33
import MeetingSearchResult from './MeetingSearchResult'
4-
import {Grid2} from '@mui/material'
4+
import Grid from '@mui/material/Grid2';
55

66
export default function GroupedMeeting({meetings}: { meetings: MeetingDto[] }) {
77
const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set())
@@ -25,7 +25,7 @@ export default function GroupedMeeting({meetings}: { meetings: MeetingDto[] }) {
2525
}
2626

2727
return (
28-
<Grid2 container spacing={3} className="my-5 overflow-y-scroll">
28+
<Grid container spacing={3} className="my-5 overflow-y-scroll">
2929
{Object.entries(grouped).map(([sidStr, group]) => {
3030
const sid = sidStr;
3131
const [first, ...rest] = group;
@@ -34,28 +34,25 @@ export default function GroupedMeeting({meetings}: { meetings: MeetingDto[] }) {
3434

3535
return (
3636
<React.Fragment key={sid}>
37-
<Grid2 size={{xs: 12, md: 6, lg: 4}}>
38-
<div className="relative">
39-
<MeetingSearchResult
40-
meeting={first}
41-
isRepeatable={isRepeat}
42-
isExpanded={isExp}
43-
onToggle={isRepeat ? () => toggle(sid) : undefined}
44-
/>
45-
</div>
46-
</Grid2>
37+
<Grid size={{xs: 12, md: 6, lg: 4}}>
38+
<MeetingSearchResult
39+
meeting={first}
40+
isExpanded={!isRepeat ? undefined : isExp}
41+
onToggle={isRepeat ? () => toggle(sid) : undefined}
42+
/>
43+
</Grid>
4744

4845
{isExp && rest.map(m => (
49-
<Grid2 size={{xs: 12, md: 6, lg: 4}} key={m.id}> <MeetingSearchResult
50-
meeting={m}
51-
isRepeatable={false}
52-
isExpanded={true}
53-
/>
54-
</Grid2>
46+
<Grid size={{xs: 12, md: 6, lg: 4}} key={m.id}>
47+
<MeetingSearchResult
48+
meeting={m}
49+
isExpanded={true}
50+
/>
51+
</Grid>
5552
))}
5653
</React.Fragment>
5754
)
5855
})}
59-
</Grid2>
56+
</Grid>
6057
)
6158
}

src/components/meeting/MeetingDetails.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ const MeetingDetails: React.FC<ModalProps> = ({isOpen, meeting, onClose, openMee
6464
×
6565
</button>
6666

67-
<h2 className="font-bold text-2xl text-white mb-4">{meeting?.title}</h2>
67+
<h2 className="font-bold text-2xl text-white mb-4">{meeting?.module}</h2>
6868

6969
<div className="flex flex-col gap-4 mb-4">
7070
<p className="text-bs font-medium text-white">

src/components/meeting/MeetingSearchResult.tsx

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,20 @@ import React, {ReactNode, useEffect, useState} from 'react';
22
import {MeetingDto} from '../../dtos/MeetingDto';
33
import {UserDto} from '../../dtos/UserDto';
44
import {getUser} from '../../api/UserApi';
5-
import {getUserIdsForMeeting, joinStudyGroup, leaveStudyGroup} from '../../api/UserGroupApi';
5+
import {
6+
getUserIdsForMeeting,
7+
joinStudyGroup,
8+
joinSuperStudyGroup,
9+
leaveStudyGroup,
10+
leaveSuperStudyGroup
11+
} from '../../api/UserGroupApi';
612
import axiosInstance from '../../AxiosConfig';
713
import {CuteButton} from '../CuteButton';
814
import {Theme, Tooltip} from '@mui/material';
915
import useMediaQuery from '@mui/material/useMediaQuery';
1016

1117
interface Props {
1218
meeting: MeetingDto;
13-
isRepeatable?: boolean;
1419
isExpanded?: boolean;
1520
onToggle?: () => void;
1621
children?: ReactNode;
@@ -19,7 +24,6 @@ interface Props {
1924
export default function MeetingSearchResult(
2025
{
2126
meeting,
22-
isRepeatable,
2327
isExpanded,
2428
onToggle
2529
}: Props
@@ -59,17 +63,36 @@ export default function MeetingSearchResult(
5963
.finally(() => setLoading(false));
6064
};
6165

66+
const joinSuperMeeting = () => {
67+
setLoading(true);
68+
if (myUserId === undefined) {
69+
setLoading(false);
70+
alert("userId undefined");
71+
return;
72+
}
73+
joinSuperStudyGroup(axiosInstance, meeting.superId.toString())
74+
.then(() => setUserIds(prev => [...prev, myUserId]))
75+
.finally(() => setLoading(false));
76+
};
77+
6278
const leaveMeeting = () => {
6379
setLoading(true);
6480
leaveStudyGroup(axiosInstance, meeting.id)
6581
.then(() => setUserIds(prev => prev.filter(id => id !== myUserId)))
6682
.finally(() => setLoading(false));
6783
};
6884

85+
const leaveSuperMeeting = () => {
86+
setLoading(true);
87+
leaveSuperStudyGroup(axiosInstance, meeting.superId.toString())
88+
.then(() => setUserIds(prev => prev.filter(id => id !== myUserId)))
89+
.finally(() => setLoading(false));
90+
};
91+
6992
return (
7093
<div className="bg-[#333C4F] p-4 flex flex-col gap-4">
7194
<div className="min-h-80">
72-
<h2 className="font-bold text-2xl text-white mb-4 line-clamp-2 h-14">{meeting.title}</h2>
95+
<h2 className="font-bold text-2xl text-white mb-4 line-clamp-2 h-14">{meeting.module}</h2>
7396

7497
<div className="flex flex-col gap-4 mb-4">
7598
<p className="text-bs font-medium text-white">
@@ -142,8 +165,8 @@ export default function MeetingSearchResult(
142165
<div className="flex gap-2 pt-2">
143166
{!loading && !isMember && (
144167
<CuteButton
145-
onClick={joinMeeting}
146-
text={isRepeatable ? 'An allen Meetings teilnehmen' : 'Teilnehmen'}
168+
onClick={isExpanded == false ? joinSuperMeeting : joinMeeting}
169+
text={isExpanded == false ? 'An allen Meetings teilnehmen' : 'Teilnehmen'}
147170
textColor="#e8fcf6"
148171
bgColor="#56A095"
149172
classname="text-sm w-full"
@@ -154,8 +177,8 @@ export default function MeetingSearchResult(
154177

155178
{!loading && isMember && (
156179
<CuteButton
157-
onClick={leaveMeeting}
158-
text={isRepeatable ? 'Alle Meetings verlassen' : 'Meeting verlassen'}
180+
onClick={isExpanded == false ? leaveSuperMeeting : leaveMeeting}
181+
text={isExpanded == false ? 'Alle Meetings verlassen' : 'Meeting verlassen'}
159182
textColor="#e8fcf6"
160183
bgColor="#974242"
161184
classname="text-sm w-full"

src/components/yourStudies/UserInfo.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export default function UserInfo() {
8888
<tbody>
8989
{weeklyMeetings.map((meeting, index) => (
9090
<tr key={index}>
91-
<td className="px-1 py-1 text-[#9B9B9B]">{meeting.title}</td>
91+
<td className="px-1 py-1 text-[#9B9B9B]">{meeting.module}</td>
9292
<td className="px-1 py-1 text-[#2AB19D]">
9393
{new Date(meeting.dateFrom).toLocaleDateString()}
9494
</td>
@@ -108,7 +108,7 @@ export default function UserInfo() {
108108
{weeklyMeetings.map((meeting, index) => (
109109
<div key={index} className="p-3 shadow-sm">
110110
<p className="text-[#9B9B9B]">
111-
{meeting.title}
111+
{meeting.module}
112112
</p>
113113
<p className="text-[#2AB19D] inline">
114114
{new Date(meeting.dateFrom).toLocaleDateString()}

src/dtos/MeetingDto.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {ChangeType} from "../enum/ChangeType";
33
export type MeetingDto = {
44
id: string,
55
superId: number,
6-
title: string,
6+
module: string,
77
description: string,
88
dateFrom: string,
99
dateUntil: string,
@@ -14,7 +14,7 @@ export type MeetingDto = {
1414
}
1515

1616
export type CreateMeetingDto = {
17-
title: string,
17+
module: string,
1818
description: string,
1919
dateFrom: string,
2020
dateUntil: string,

src/form/CreateOrUpdateMeetingForm.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export function CreateOrUpdateMeetingForm({open, onClose, meeting, onlyThisMeeti
3030
const dateFrom = dayjs(meeting?.dateFrom, "D.M.YYYY, H:mm:ss");
3131
const dateUntil = dayjs(meeting?.dateUntil, "D.M.YYYY, H:mm:ss");
3232

33-
const [meetingTitle, setMeetingTitle] = useState(meeting ? meeting.title : "");
33+
const [meetingTitle, setMeetingTitle] = useState(meeting ? meeting.module : "");
3434
const [repeatable, setRepeatable] = useState(meeting ? meeting.repeatable : "never");
3535
const [meetingDescription, setMeetingDescription] = useState(meeting ? meeting.description : '');
3636
const [meetingRoom, setMeetingRoom] = useState(meeting ? meeting.place : '');
@@ -100,7 +100,7 @@ export function CreateOrUpdateMeetingForm({open, onClose, meeting, onlyThisMeeti
100100
changeType = ChangeType.SERIES;
101101

102102
const meetingData: CreateMeetingDto = {
103-
title: meetingTitle,
103+
module: meetingTitle,
104104
description: meetingDescription,
105105
place: meetingRoom,
106106
dateFrom: date1.hour(time1.hour()).minute(time1.minute()).format("DD-MM-YYYY:HH:mm") || "",

src/form/SearchMeetingForm.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import {
77
Select,
88
MenuItem,
99
SelectChangeEvent,
10-
Grid2
1110
} from '@mui/material';
1211
import CloseIconPath from '../data/close_icon_red.png';
1312
import {getMeetingsForModule} from '../api/MeetingApi';
@@ -112,9 +111,7 @@ export function SearchMeetingForm({open, onClose}: Props) {
112111
))}
113112
</Select>
114113

115-
<Grid2 container spacing={3} className="my-5 overflow-y-scroll">
116-
<GroupedMeeting meetings={meetings}/>
117-
</Grid2>
114+
<GroupedMeeting meetings={meetings}/>
118115
</form>
119116
</DialogContent>
120117
</Dialog>

src/pages/CalendarPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export default function CalenderPage() {
3737
<CreateOrUpdateMeetingForm open={isCreateMeetingDialogOpen} onClose={closeCreateMeetingForm}/>
3838
<SearchMeetingForm open={isSearchMeetingDialogOpen} onClose={closeSearchMeetingForm}/>
3939
<div className="flex overflow-hidden flex-col justify-center sm:mx-10 mx-3">
40-
<CalendarComponent isDialogOpen={isCreateMeetingDialogOpen}/>
40+
<CalendarComponent isDialogOpen={isCreateMeetingDialogOpen || isSearchMeetingDialogOpen}/>
4141
</div>
4242
</>
4343
);

0 commit comments

Comments
 (0)