Update GradeCard styles, add points sum

This commit is contained in:
adam-skowronek 2023-01-17 00:40:02 +01:00
parent dd333a6674
commit dba2b24267
3 changed files with 58 additions and 24 deletions

View File

@ -11,3 +11,12 @@
text-align: center; text-align: center;
width: 100px; width: 100px;
} }
.small-row td {
padding: 0.2rem;
padding-left: 1rem;
}
.row-required td {
background-color: #fff2cc;
}

View File

@ -8,11 +8,12 @@ import {
updateGradesFirstTerm, updateGradesFirstTerm,
updateGradesSecondTerm, updateGradesSecondTerm,
} from '../api/grades' } from '../api/grades'
import { getGroup } from '../api/groups'
import { gradeOptions } from '../utils/gradeCard' import { gradeOptions } from '../utils/gradeCard'
import styles from './GradeCard.module.css' import styles from './GradeCard.module.css'
const GradeCard = () => { const GradeCard = () => {
const { handleSubmit, setValue, control } = useForm() const { handleSubmit, setValue, control, watch, getValues } = useForm()
const { id } = useParams<{ id: string }>() const { id } = useParams<{ id: string }>()
const [supervisorId] = useLocalStorageState('userId') const [supervisorId] = useLocalStorageState('userId')
@ -39,18 +40,23 @@ const GradeCard = () => {
}, },
}, },
) )
const {
data: groupDetails,
refetch: refetchGroup,
isLoading: isGroupLoading,
} = useQuery(['getGroup', id], () => getGroup(Number(id)))
const { mutate: mutateGradesFirstTerm } = useMutation( const { mutateAsync: mutateGradesFirstTerm } = useMutation(
'update_grades_first', 'update_grades_first',
(payload: any) => updateGradesFirstTerm(1, 1, payload), (payload: any) => updateGradesFirstTerm(1, 1, payload),
) )
const { mutate: mutateGradesSecondTerm } = useMutation( const { mutateAsync: mutateGradesSecondTerm } = useMutation(
'update_grades_second', 'update_grades_second',
(payload: any) => updateGradesSecondTerm(1, 1, payload), (payload: any) => updateGradesSecondTerm(1, 1, payload),
) )
const onSubmit = (data: any) => { const onSubmit = async (data: any) => {
let firstTermGrades: { [key: string]: any } = {} let firstTermGrades: { [key: string]: any } = {}
let secondTermGrades: { [key: string]: any } = {} let secondTermGrades: { [key: string]: any } = {}
for (const [key, value] of Object.entries(data)) { for (const [key, value] of Object.entries(data)) {
@ -60,8 +66,9 @@ const GradeCard = () => {
secondTermGrades[key] = Number(value) secondTermGrades[key] = Number(value)
} }
} }
mutateGradesFirstTerm(firstTermGrades) await mutateGradesFirstTerm(firstTermGrades)
mutateGradesSecondTerm(secondTermGrades) await mutateGradesSecondTerm(secondTermGrades)
refetchGroup()
} }
// const data = useWatch(getValues()) // const data = useWatch(getValues())
@ -146,13 +153,29 @@ const GradeCard = () => {
} }
} }
const SumRow = () => {
return (
<tr className={styles['small-row']}>
<td>
<span>Suma uzyskanych punktów:</span>
</td>
<td className="text-center font-bold">
{groupDetails?.data?.points_for_first_term}%
</td>
<td className="text-center font-bold">
{groupDetails?.data?.points_for_second_term}%
</td>
</tr>
)
}
return ( return (
<div className={styles['grade-table']}> <div className={styles['grade-table']}>
<form onSubmit={handleSubmit(onSubmit)}> <form onSubmit={handleSubmit(onSubmit)} className="overflow-x-scroll">
{/* <div className="flex justify-end"> {/* <div className="flex justify-end">
<button className="btn btn-success mb-2">ZAPISZ</button> <button className="btn btn-success mb-2">ZAPISZ</button>
</div> */} </div> */}
<table className=" table-normal border-collapse"> <table className="md:table-normal table-compact border-collapse">
<thead> <thead>
<tr> <tr>
<th>Kryterium</th> <th>Kryterium</th>
@ -161,15 +184,16 @@ const GradeCard = () => {
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <SumRow />
<tr className={styles['small-row']}>
<td> <td>
<h3 className="text-xl font-bold">Prezentacja</h3> <h3 className="text-xl font-bold">Prezentacja</h3>
</td> </td>
<td>&nbsp;</td> <td></td>
<td>&nbsp;</td> <td></td>
</tr> </tr>
<tr> <tr className={styles['row-required']}>
<td> <td>
Czy prezentacja zawierała wszystkie wymagane treści (cel i Czy prezentacja zawierała wszystkie wymagane treści (cel i
założenia projektowe, podział prac na semestry, przegląd założenia projektowe, podział prac na semestry, przegląd
@ -221,7 +245,7 @@ const GradeCard = () => {
/> />
</td> </td>
</tr> </tr>
<tr> <tr className={styles['row-required']}>
<td> <td>
Czy prezentacja (omówienie projektu i jego demonstracja) była Czy prezentacja (omówienie projektu i jego demonstracja) była
przeprowadzona zgodnie ze sztuką? (oceniane podczas obrony przeprowadzona zgodnie ze sztuką? (oceniane podczas obrony
@ -271,7 +295,7 @@ const GradeCard = () => {
/> />
</td> </td>
</tr> </tr>
<tr> <tr className={styles['row-required']}>
<td> <td>
Demonstracja systemu * (oceniane podczas obrony semestralnej) Demonstracja systemu * (oceniane podczas obrony semestralnej)
</td> </td>
@ -319,7 +343,7 @@ const GradeCard = () => {
/> />
</td> </td>
</tr> </tr>
<tr> <tr className={styles['row-required']}>
<td> <td>
Odpowiedzi na pytania komisji (oceniane podczas obrony Odpowiedzi na pytania komisji (oceniane podczas obrony
semestralnej) semestralnej)
@ -369,7 +393,7 @@ const GradeCard = () => {
</td> </td>
</tr> </tr>
{/* */} {/* */}
<tr> <tr className={styles['small-row']}>
<td> <td>
{' '} {' '}
<h3 className="text-xl font-bold">Dokumentacja</h3> <h3 className="text-xl font-bold">Dokumentacja</h3>
@ -609,7 +633,7 @@ const GradeCard = () => {
</td> </td>
</tr> </tr>
{/* */} {/* */}
<tr> <tr className={styles['small-row']}>
<td> <td>
{' '} {' '}
<h3 className="text-xl font-bold">Praca grupy w semestrze</h3> <h3 className="text-xl font-bold">Praca grupy w semestrze</h3>
@ -942,7 +966,7 @@ const GradeCard = () => {
</td> </td>
</tr> </tr>
{/* */} {/* */}
<tr> <tr className={styles['small-row']}>
<td> <td>
{' '} {' '}
<h3 className="text-xl font-bold">Produkty projektu</h3> <h3 className="text-xl font-bold">Produkty projektu</h3>
@ -1000,7 +1024,7 @@ const GradeCard = () => {
/> />
</td> </td>
</tr> </tr>
<tr> <tr className={styles['row-required']}>
<td> <td>
Dostęp do produktu projektu dla komisji do testów podczas Dostęp do produktu projektu dla komisji do testów podczas
prezentacji * (obowiązkowe w II sem) (oceniane podczas obrony prezentacji * (obowiązkowe w II sem) (oceniane podczas obrony
@ -1050,7 +1074,7 @@ const GradeCard = () => {
/> />
</td> </td>
</tr> </tr>
<tr> <tr className={styles['row-required']}>
<td> <td>
Brak krytycznych błędów w tym: bezpieczeństwa oraz Brak krytycznych błędów w tym: bezpieczeństwa oraz
uniemożliwiających korzystanie z systemu * (oceniane podczas uniemożliwiających korzystanie z systemu * (oceniane podczas
@ -1100,7 +1124,7 @@ const GradeCard = () => {
/> />
</td> </td>
</tr> </tr>
<tr> <tr className={styles['row-required']}>
<td> <td>
Dostęp do produktu projektu dla komisji do testów tydzień przed Dostęp do produktu projektu dla komisji do testów tydzień przed
prezentacją (oceniane podczas obrony semestralnej) prezentacją (oceniane podczas obrony semestralnej)
@ -1531,6 +1555,7 @@ const GradeCard = () => {
/> />
</td> </td>
</tr> </tr>
<SumRow />
</tbody> </tbody>
</table> </table>
{/* <div className="flex justify-end"> {/* <div className="flex justify-end">

View File

@ -90,7 +90,7 @@ const Groups = () => {
<tr className="bg-gray-50"> <tr className="bg-gray-50">
<th>Nazwa</th> <th>Nazwa</th>
<th>Opiekun</th> <th>Opiekun</th>
<th>Semestr 1</th> <th>Punkty semestr 1</th>
<th>Semestr 2</th> <th>Semestr 2</th>
<th></th> <th></th>
</tr> </tr>
@ -120,8 +120,8 @@ const Groups = () => {
<td> <td>
{`${project_supervisor.first_name} ${project_supervisor.last_name}`} {`${project_supervisor.first_name} ${project_supervisor.last_name}`}
</td> </td>
<td>{points_for_first_term}</td> <td>{points_for_first_term}%</td>
<td>{points_for_second_term}</td> <td>{points_for_second_term}%</td>
<td> <td>
<div className="flex align-center gap-2"> <div className="flex align-center gap-2">
<Link <Link