@@ -2,6 +2,7 @@ import React, {useState, Dispatch } from 'react'
22import { Link , useParams , useNavigate } from "react-router-dom"
33import { Form } from "react-bootstrap"
44import Select from "react-select"
5+ import Button from 'react-bootstrap/Button'
56
67import { useEngine , useGetDegree , useIndexExam , usePostDegree , usePatchDegree , ExamGet } from '../modules/engine'
78import Card from '../components/Card'
@@ -185,6 +186,7 @@ type ExamGroup = {
185186}
186187
187188function DegreeForm ( { mutate, degree, exams} ) {
189+ const [ error , setError ] = useState < string > ( '' )
188190 const [ data , setData ] = useState ( degree )
189191 const [ groups , setGroups ] = useState < ExamGroup [ ] > ( Object . entries ( degree . groups as Record < string , string [ ] > )
190192 . map ( ( [ name , exam_ids ] ) => ( { name, exam_ids} ) )
@@ -196,6 +198,7 @@ function DegreeForm({mutate, degree, exams}) {
196198 const current_year = new Date ( ) . getFullYear ( )
197199
198200 return < Card >
201+ { error && < div className = "alert alert-danger" > { error } </ div > }
199202 < Group
200203 validationError = { validation . name }
201204 controlId = "name"
@@ -320,9 +323,11 @@ function DegreeForm({mutate, degree, exams}) {
320323 </ HTMLEditor >
321324 </ Group >
322325
323- < pre >
326+ < Button onClick = { submit } > salva corso di Laurea</ Button >
327+
328+ { /* <pre>
324329 { JSON.stringify({data,exams},null,2)}
325- </ pre >
330+ </pre> */ }
326331 </ Card >
327332
328333 function setContent ( field ) {
@@ -336,6 +341,27 @@ function DegreeForm({mutate, degree, exams}) {
336341 function onChangeCheck ( field ) {
337342 return e => setData ( data => ( { ...data , [ field ] : e . target . checked } ) )
338343 }
344+
345+ function submit ( ) {
346+ data . groups = Object . fromEntries ( groups . map ( group => [ group . name , group . exam_ids ] ) )
347+ data . academic_year = parseInt ( data . academic_year )
348+ data . years = parseInt ( data . years )
349+ mutate ( data ,
350+ {
351+ onSuccess : ( res ) => {
352+ const id = degree . _id || res . data
353+ navigate ( `/degrees/${ id } ` )
354+ } ,
355+ onError : ( err ) => {
356+ if ( err . response ?. status === 422 ) {
357+ setValidation ( err . response . data . issues )
358+ } else {
359+ setError ( `${ err } ` )
360+ }
361+ }
362+ }
363+ )
364+ }
339365}
340366
341367function EditGroups ( { groups, setGroups, exams} :{
0 commit comments