From 25355be9ff9a0a5df2ead199f0bf79cac7d3abd1 Mon Sep 17 00:00:00 2001 From: adam-skowronek Date: Fri, 16 Dec 2022 01:31:36 +0100 Subject: [PATCH 1/2] Add leader to year group after create --- .../coordinator/routes/project_supervisor.py | 2 +- backend/app/coordinator/schemas/students.py | 2 +- frontend/src/api/leaders.ts | 12 +++++++- frontend/src/views/coordinator/AddLeader.tsx | 30 +++++++++++++++---- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/backend/app/coordinator/routes/project_supervisor.py b/backend/app/coordinator/routes/project_supervisor.py index e1d11d8..f591fff 100644 --- a/backend/app/coordinator/routes/project_supervisor.py +++ b/backend/app/coordinator/routes/project_supervisor.py @@ -69,7 +69,7 @@ def create_project_supervisor(data: dict) -> dict: db.session.add(project_supervisor) db.session.commit() - return {"message": "Project Supervisor was created!"} + return {"message": "Project Supervisor was created!", "id": project_supervisor.id} @bp.get("//detail") diff --git a/backend/app/coordinator/schemas/students.py b/backend/app/coordinator/schemas/students.py index 269f574..0a72204 100644 --- a/backend/app/coordinator/schemas/students.py +++ b/backend/app/coordinator/schemas/students.py @@ -52,7 +52,7 @@ class StudentEditSchema(ma.Schema): class MessageSchema(ma.Schema): message = fields.Str(required=True) - + id = fields.Str(required=False) class FileSchema(ma.Schema): file = fields.Raw(type='file', required=True) diff --git a/frontend/src/api/leaders.ts b/frontend/src/api/leaders.ts index 54cda5a..c35af71 100644 --- a/frontend/src/api/leaders.ts +++ b/frontend/src/api/leaders.ts @@ -12,7 +12,7 @@ export interface Leader { first_name: string last_name: string email: string - limit_group: number + limit_group?: number count_groups: number } @@ -36,3 +36,13 @@ export const createLeader = (payload: Partial) => export const deleteLeader = (id: number) => axiosInstance.delete(`coordinator/project_supervisor/${id}/`) + +export const addLeaderToGroup = ( + id: number, + year_group_id: number, + payload: { limit_group: number }, +) => + axiosInstance.post( + `coordinator/project_supervisor/${id}/year-group/${year_group_id}`, + payload, + ) diff --git a/frontend/src/views/coordinator/AddLeader.tsx b/frontend/src/views/coordinator/AddLeader.tsx index 005705c..a7e0be7 100644 --- a/frontend/src/views/coordinator/AddLeader.tsx +++ b/frontend/src/views/coordinator/AddLeader.tsx @@ -1,7 +1,8 @@ import { useState } from 'react' import { useForm } from 'react-hook-form' import { useMutation } from 'react-query' -import { createLeader, Leader } from '../../api/leaders' +import useLocalStorageState from 'use-local-storage-state' +import { addLeaderToGroup, createLeader, Leader } from '../../api/leaders' import InputError from '../../components/InputError' const AddLeader = () => { @@ -11,18 +12,35 @@ const AddLeader = () => { handleSubmit, formState: { errors }, reset, + getValues, } = useForm() + const [yearGroupId] = useLocalStorageState('yearGroupId') const { mutate: mutateCreateLeader } = useMutation( 'createLeader', - (payload: Leader) => createLeader(payload), + (payload: Leader) => { + delete payload.limit_group + return createLeader(payload) + }, { - onSuccess: () => { - reset() + onSuccess: (data) => { setIsAlertVisible(true) + mutateAddToYearGroup({ + id: data?.data?.id, + year_group_id: Number(yearGroupId), + limit_group: getValues('limit_group') ?? 0, + }) + reset() }, }, ) + const { mutate: mutateAddToYearGroup } = useMutation( + 'addLeaderToGroup', + (payload: { id: any; year_group_id: number; limit_group: number }) => + addLeaderToGroup(payload.id, payload.year_group_id, { + limit_group: payload.limit_group, + }), + ) const onSubmit = (data: Leader) => { mutateCreateLeader(data) @@ -83,7 +101,7 @@ const AddLeader = () => { Email jest wymagany )} - {/*
+
@@ -99,7 +117,7 @@ const AddLeader = () => { {errors.limit_group?.type === 'pattern' && ( Limit grup musi być liczbą dodatnią )} -
*/} +
) From bd256e0f4433168b4910b806ee69327fd8927354 Mon Sep 17 00:00:00 2001 From: adam-skowronek Date: Fri, 16 Dec 2022 01:43:00 +0100 Subject: [PATCH 2/2] Fix routes --- frontend/src/App.tsx | 3 +++ frontend/src/views/coordinator/Group.tsx | 11 +++++++++-- frontend/src/views/coordinator/Groups.tsx | 20 +++++++++++++++++--- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 455b18d..6864eb3 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -70,8 +70,11 @@ function App() { }> } /> } /> + } /> + } /> } /> } /> + } /> diff --git a/frontend/src/views/coordinator/Group.tsx b/frontend/src/views/coordinator/Group.tsx index 6a5e45b..2c66d9d 100644 --- a/frontend/src/views/coordinator/Group.tsx +++ b/frontend/src/views/coordinator/Group.tsx @@ -1,9 +1,10 @@ import { useQuery } from 'react-query' -import { Link, useParams } from 'react-router-dom' +import { Link, useLocation, useParams } from 'react-router-dom' import { getGroup } from '../../api/groups' const Group = () => { const { id } = useParams<{ id: string }>() + const location = useLocation() const { data: groups } = useQuery(['getGroup'], () => getGroup(Number(id))) const { name, project_supervisor } = groups?.data || {} @@ -15,7 +16,13 @@ const Group = () => { Opiekun: {project_supervisor?.first_name}{' '} {project_supervisor?.last_name} - + diff --git a/frontend/src/views/coordinator/Groups.tsx b/frontend/src/views/coordinator/Groups.tsx index 424a3b7..b422461 100644 --- a/frontend/src/views/coordinator/Groups.tsx +++ b/frontend/src/views/coordinator/Groups.tsx @@ -1,7 +1,7 @@ import classNames from 'classnames' import { useEffect, useState } from 'react' import { useMutation, useQuery } from 'react-query' -import { useNavigate } from 'react-router-dom' +import { useLocation, useNavigate } from 'react-router-dom' import useLocalStorageState from 'use-local-storage-state' import { deleteGroup, getGroups } from '../../api/groups' import { ReactComponent as IconRemove } from '../../assets/svg/icon-remove.svg' @@ -9,6 +9,8 @@ import { Link } from 'react-router-dom' const Groups = () => { let navigate = useNavigate() + const location = useLocation() + const [page, setPage] = useState(1) const [perPage, setPerPage] = useState(10) const [yearGroupId] = useLocalStorageState('yearGroupId') @@ -60,7 +62,15 @@ const Groups = () => {
@@ -97,7 +107,11 @@ const Groups = () => { {name}