diff --git a/frontend/src/api/schedule.ts b/frontend/src/api/schedule.ts index a45e783..b083cb9 100644 --- a/frontend/src/api/schedule.ts +++ b/frontend/src/api/schedule.ts @@ -1,4 +1,5 @@ import axiosInstance from './axiosInstance' +import { Student } from './students' interface TermOfDefences { id: number @@ -8,7 +9,7 @@ interface TermOfDefences { members_of_committee: { members: { first_name: string; last_name: string }[] } - group: { name: string } + group: { name: string; students: Student[] } } export const getTermsOfDefences = (scheduleId: number) => { @@ -16,6 +17,13 @@ export const getTermsOfDefences = (scheduleId: number) => { term_of_defences: TermOfDefences[] }>(`coordinator/enrollments/${scheduleId}/term-of-defences/`) } +export const getTermsOfDefencesWithGroups = (scheduleId: number) => { + return axiosInstance.get<{ + term_of_defences: TermOfDefences[] + }>( + `coordinator/enrollments/${scheduleId}/assigned-group-to-term-of-defences/`, + ) +} export const getStudentsTermsOfDefences = ( scheduleId: number, diff --git a/frontend/src/views/coordinator/EditSchedule.tsx b/frontend/src/views/coordinator/EditSchedule.tsx index 96117f7..ac2d546 100644 --- a/frontend/src/views/coordinator/EditSchedule.tsx +++ b/frontend/src/views/coordinator/EditSchedule.tsx @@ -89,7 +89,19 @@ const EditSchedule = ({ ))} {eventData.resource.group && ( -

Grupa: {eventData.resource.group.name}

+ <> +

Grupa: {eventData.resource.group.name}

+ + )} ) : ( diff --git a/frontend/src/views/coordinator/Schedule.tsx b/frontend/src/views/coordinator/Schedule.tsx index e9a184e..336a552 100644 --- a/frontend/src/views/coordinator/Schedule.tsx +++ b/frontend/src/views/coordinator/Schedule.tsx @@ -6,6 +6,7 @@ import { createEvent, downloadSchedule, getTermsOfDefences, + getTermsOfDefencesWithGroups, setDateOfExaminationSchedule, } from '../../api/schedule' import { useParams } from 'react-router-dom' @@ -92,36 +93,64 @@ const Schedule = () => { }, ) - const { refetch } = useQuery( + const { refetch, isFetching } = useQuery( ['schedules'], () => getTermsOfDefences(Number(id)), { - onSuccess: (data) => { - setEvents( - data.data.term_of_defences.map( - ({ - id, - start_date, - end_date, - title = 'Obrona', - members_of_committee, - group, - }) => { - return { + onSettled: (data) => { + if (data) { + setEvents( + data.data.term_of_defences.map( + ({ id, - title: `${group?.name ?? '-'}`, - start: new Date(start_date), - end: new Date(end_date), - resource: { - members_of_committee, - }, - } - }, - ), - ) + start_date, + end_date, + title = 'Obrona', + members_of_committee, + group, + }) => { + return { + id, + title: `${group?.name ?? '-'}`, + start: new Date(start_date), + end: new Date(end_date), + resource: { + members_of_committee, + group, + }, + } + }, + ), + ) + } }, }, ) + + const { refetch: refetchWithGroups } = useQuery( + ['schedules_groups'], + () => getTermsOfDefencesWithGroups(Number(id)), + { + onSettled: (data) => { + data?.data.term_of_defences.forEach((term) => { + const index = events.findIndex((event) => event.id === term.id) + if (index !== -1) { + const eventsCopy = [...events] + eventsCopy[index] = { + ...eventsCopy[index], + resource: { + ...eventsCopy[index].resource, + group: term.group, + }, + } + setEvents(eventsCopy) + } + }) + }, + enabled: !isFetching, + }, + ) + const { mutateAsync: mutateCreateEvent } = useMutation( ['createEvent'], (data: { @@ -197,6 +226,7 @@ const Schedule = () => { project_supervisors: data?.project_supervisors, }) refetch() + refetchWithGroups() reset() closeModal() } diff --git a/frontend/src/views/coordinator/Students.tsx b/frontend/src/views/coordinator/Students.tsx index 5a81491..439fdb9 100644 --- a/frontend/src/views/coordinator/Students.tsx +++ b/frontend/src/views/coordinator/Students.tsx @@ -132,7 +132,7 @@ const Students = () => { ))} - */}