From fcc894aba9b7536bcdd0efc04fbe71b3a6a3e044 Mon Sep 17 00:00:00 2001 From: adam-skowronek Date: Mon, 13 Jun 2022 20:03:34 +0200 Subject: [PATCH] Integrate groups endpoints in frontend --- frontend/src/api/groups.ts | 54 ++++++---------- frontend/src/views/coordinator/AddGroup.tsx | 71 ++++++++++----------- frontend/src/views/coordinator/Groups.tsx | 46 ++++--------- 3 files changed, 63 insertions(+), 108 deletions(-) diff --git a/frontend/src/api/groups.ts b/frontend/src/api/groups.ts index d95445e..faa6b0b 100644 --- a/frontend/src/api/groups.ts +++ b/frontend/src/api/groups.ts @@ -1,50 +1,36 @@ import axiosInstance from './axiosInstance' import { Leader } from './leaders' -import { Student } from './students' -type OrderType = 'asc' | 'desc' - -interface GroupResponse { - max_pages: number - groups: Group[] -} - -export interface Group { - id: number - name: string - project_supervisor: Leader - points_for_first_term: number - points_for_second_term: number -} - -export interface GroupPost { +export interface CreateGroup { name: string project_supervisor_id: number students: number[] } +export interface Group { + cdyd_kod: string + id: number + name: string + points_for_first_term: number + points_for_second_term: number + project_supervisor: Leader + prz_kod: string + tzaj_kod: string +} + export const getGroups = ( params: Partial<{ - name: string page: number per_page: number - }> = {}, + name: string + }>, ) => - axiosInstance.get( - 'http://127.0.0.1:5000/api/coordinator/groups', - { params }, + axiosInstance.get<{ max_pages: number; groups: Group[] }>( + 'http://127.0.0.1:5000/api/coordinator/groups/', + { + params, + }, ) -export const createGroup = (payload: Group) => +export const createGroup = (payload: CreateGroup) => axiosInstance.post('http://127.0.0.1:5000/api/coordinator/groups/', payload) - -export const uploadGroups = (payload: FormData) => - axiosInstance.post( - 'http://127.0.0.1:5000/api/coordinator/groups/upload/', - payload, - ) - -export const deleteGroup = (payload: Number) => - axiosInstance.delete( - 'http://127.0.0.1:5000/api/coordinator/groups/'+payload.toString()+'/', - ) diff --git a/frontend/src/views/coordinator/AddGroup.tsx b/frontend/src/views/coordinator/AddGroup.tsx index 1426a1a..a92d154 100644 --- a/frontend/src/views/coordinator/AddGroup.tsx +++ b/frontend/src/views/coordinator/AddGroup.tsx @@ -1,11 +1,11 @@ import { useState } from 'react' -import { Controller, useForm } from 'react-hook-form' -import { useQuery, useMutation } from 'react-query' +import { Controller, NestedValue, useForm } from 'react-hook-form' +import { useMutation, useQuery } from 'react-query' import { getStudents } from '../../api/students' +import { createGroup, CreateGroup } from '../../api/groups' import InputError from '../../components/InputError' import Select from 'react-select' import { getLeaders } from '../../api/leaders' -import { createGroup, Group } from '../../api/groups' type SelectValue = { value: string | number @@ -18,33 +18,10 @@ const AddGroup = () => { register, handleSubmit, formState: { errors }, - reset, control, - } = useForm<{ - name: string - project_supervisor_id: any - students: any - }>({ + } = useForm }>({ mode: 'onBlur', }) - const { mutate: mutateCreateGroup } = useMutation( - 'createStudent', - (payload: any) => createGroup(payload), - { - onSuccess: () => { - reset() - setIsAlertVisible(true) - }, - }, - ) - const onSubmit = (data: any) => { - data.project_supervisor_id = data.project_supervisor_id.value - data.students = data.students.map((st: any) => st.value) - mutateCreateGroup(data) - console.log(data) - } - - const [studentOptions, setStudentOptions] = useState([]) const { isLoading: areStudentsLoading } = useQuery( 'students', @@ -62,26 +39,40 @@ const AddGroup = () => { }, }, ) - - const [leadersOptions, setLeadersOptions] = useState([]) - const { isLoading: areLeadersLoading } = useQuery( - 'project_supervisors', + 'leaders', () => getLeaders({ per_page: 1000 }), { onSuccess: (data) => { - setLeadersOptions( - data?.data.project_supervisors.map(({ id, first_name, last_name }) => { - return { + setSupervisorOptions( + data?.data.project_supervisors.map( + ({ id, first_name, last_name }) => ({ value: id, label: `${first_name} ${last_name}`, - } - }), + }), + ), ) }, }, ) + const { mutate: mutateCreateGroup } = useMutation( + 'createGroup', + (payload: CreateGroup) => createGroup(payload), + { + onSuccess: () => { + setIsAlertVisible(true) + }, + }, + ) + + const onSubmit = (data: CreateGroup) => { + mutateCreateGroup(data) + } + + const [studentOptions, setStudentOptions] = useState([]) + const [supervisorOptions, setSupervisorOptions] = useState([]) + if (areStudentsLoading || areLeadersLoading) { return <>Ładowanie } @@ -120,9 +111,9 @@ const AddGroup = () => { rules={{ required: true }} render={({ field: { onChange, onBlur } }) => (