import axios from "axios"; import { useEffect, useState } from "react"; import { useMutation, useQueryClient } from "react-query"; import { createExo } from "../../requests/requests.exos.js"; import { notificationService } from "../../services/notification.service.js"; import styles from "../../styles/exos/ExoCreateForm.module.scss"; import { CODE_SEPARATOR, PYTHON_DEFAULT } from "../../utils/constant.js"; import { csrftoken, isEmpty, parseClassName } from "../../utils/utils.js"; import ModelInput from "./modelInput.jsx"; export default function ExoCreateForm({ cancel }) { const [newExo, setNewExo] = useState({ name: "", consigne: "", exo_model: {data: PYTHON_DEFAULT, filename: null}, }); const queryClient = useQueryClient(); const [errors, setErrors] = useState({ name: null, consigne: null, exo_model: null }) const[test, setTest] = useState() const { mutate, isLoading, data } = useMutation( () => { var data_sent = new FormData(); var blob = new Blob([newExo.exo_model.data], { type: "text/x-python", }); var file = new File([blob], "main.py", { type: "text/x-python", }); data_sent.append("file", file); data_sent.append('name', newExo.name) data_sent.append('consigne', newExo.consigne) return createExo(data_sent); }, { onSuccess: (data) => { queryClient.invalidateQueries("exo-data"); notificationService.success( "Nouvel exercice", `Exercice ${newExo.name} crée !`, { autoClose: true, keepAfterRouteChange: true } ); cancel(); }, onError: (err) => { var resetErrors = { name: null, exo_model: null, consigne: null, }; var newError = { ...resetErrors, ...err.response.data.errors }; console.log(err, err.response, 'errs') setErrors({ ...newError }); notificationService.error( "Erreur", "L'exercice n'a pu être crée ! Réessayez plus tard !", { autoClose: true, keepAfterRouteChange: true } ); }, } ); const [full, setFull] = useState({ state: false, fade: false }); const fadeFull = (state) => { setFull({ state: !state, fade: state }); setTimeout(() => { setFull({ state: state, fade: false }); }, 300); }; return (
{full.state == false && ( <>
Nouvel exercice
{ setNewExo({ ...newExo, name: e.target.value, }); }} /> {errors.name !== null && errors.name.map((err, i) => { return (

{err}

); })} {errors.consigne !== null && errors.consigne.map((err, i) => { return (

{err}

); })} )} {setNewExo({...newExo, exo_model: n})}} step={{ ...newExo, name: newExo.name == "" ? "Nouveau" : newExo.name, }} onChange={(new_model) => { setNewExo({ ...newExo, exo_model: new_model }); }} tempSpec={newExo} /> {errors.exo_model !== null && errors.exo_model.map((err, i) => { return (

{err}

); })} {full.state == false && (
)}
); }