Merge branch 'main' of https://gitlab2.istic.univ-rennes1.fr/tuvu/hackathon
This commit is contained in:
75
front_end/src/components/createActivite.tsx
Normal file
75
front_end/src/components/createActivite.tsx
Normal file
@@ -0,0 +1,75 @@
|
||||
import { useState, useEffect } from "react";
|
||||
import { Session, User, Coach, Activite, Groupe } from "../classes";
|
||||
import { Modal } from "./Modal";
|
||||
|
||||
type CreateActiciteProps = {
|
||||
returnActivite: (activite:Activite|null) => void
|
||||
}
|
||||
|
||||
|
||||
export function CreateActivite({ returnActivite }: CreateActiciteProps){
|
||||
|
||||
const [activities, setActivities] = useState<Activite[]>([]);
|
||||
const [activiteNom, setActiviteNom] = useState("");
|
||||
const [activiteTheme, setActiviteTheme] = useState("");
|
||||
const [activiteDuree, setActiviteDuree] = useState(0);
|
||||
|
||||
function addAcitivte(){
|
||||
if (!activiteNom) return;
|
||||
|
||||
const newActivite = new Activite();
|
||||
newActivite.nom= activiteNom;
|
||||
newActivite.theme=activiteTheme;
|
||||
newActivite.duree= activiteDuree;
|
||||
newActivite.data= new Map<string,string>();
|
||||
setActivities([...activities, newActivite]);
|
||||
|
||||
setActiviteNom("");
|
||||
setActiviteTheme("");
|
||||
setActiviteDuree(0);
|
||||
|
||||
returnActivite(newActivite);
|
||||
}
|
||||
|
||||
function cancel(){
|
||||
returnActivite(null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
return (
|
||||
<Modal isOpen={true} onClose={() => cancel()}>
|
||||
<div className="edt_activite_modal">
|
||||
<h2>Nouvelle Activité :</h2>
|
||||
<div>
|
||||
Nom de l'activité:
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" value={activiteNom} onChange={e => setActiviteNom(e.target.value)} />
|
||||
</div>
|
||||
<div>
|
||||
Theme:
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" value={activiteTheme} onChange={e => setActiviteTheme(e.target.value)} />
|
||||
</div>
|
||||
<div>
|
||||
Duree (minutes):
|
||||
</div>
|
||||
<div>
|
||||
<input type="number" value={activiteDuree} onChange={e => setActiviteDuree(Number(e.target.value))} />
|
||||
</div>
|
||||
<button type="button" onClick={()=>addAcitivte()}>Ajouter l'activite</button>
|
||||
<button type="button" onClick={()=>cancel()}>Annuler</button>
|
||||
|
||||
<ul>
|
||||
{activities.map((act, idx) => (
|
||||
<li key={idx}>{act.nom} - {act.theme} ({act.duree} min)</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
export default CreateActivite;
|
||||
@@ -15,7 +15,7 @@ export const CreateSession = () => {
|
||||
const [activiteDuree, setActiviteDuree] = useState(0);
|
||||
const [isRecurent, setIsRecurent] = useState(false);
|
||||
|
||||
function addAcitivte(){
|
||||
async function addAcitivte(){
|
||||
if (!activiteNom) return;
|
||||
|
||||
const newActivite = new Activite();
|
||||
@@ -23,11 +23,18 @@ export const CreateSession = () => {
|
||||
newActivite.theme=activiteTheme;
|
||||
newActivite.duree= activiteDuree;
|
||||
newActivite.data= new Map<string,string>();
|
||||
setActivities([...activities, newActivite]);
|
||||
try{
|
||||
await sessionService.create(newActivite);
|
||||
console.log("Session créée");
|
||||
|
||||
setActiviteNom("");
|
||||
setActiviteTheme("");
|
||||
setActiviteDuree(0);
|
||||
setActivities([...activities, newActivite]);
|
||||
|
||||
setActiviteNom("");
|
||||
setActiviteTheme("");
|
||||
setActiviteDuree(0);
|
||||
} catch (error) {
|
||||
console.error("Erreur lors de la création de la session", error);
|
||||
}
|
||||
}
|
||||
|
||||
async function handleCreateSession() {
|
||||
|
||||
@@ -42,10 +42,7 @@ export const EDT =() =>{
|
||||
|
||||
var newWeek: Session[] = []
|
||||
user.sessions.forEach(session => {
|
||||
if( session.isRecurrent ){
|
||||
newWeek.push(session);
|
||||
}
|
||||
if(session.creneau >= date && session.creneau <= maxDate && !session.isRecurrent){
|
||||
if((session.creneau >= date && session.creneau <= maxDate && !session.isRecurrent) || session.isRecurrent){
|
||||
newWeek.push(session);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -5,6 +5,7 @@ import './style/edt.css';
|
||||
import { Modal } from './Modal';
|
||||
import Loading from './loading';
|
||||
import {delay} from "../requetes";
|
||||
import CreateActivite from './createActivite';
|
||||
|
||||
|
||||
type Props = {
|
||||
@@ -13,21 +14,22 @@ type Props = {
|
||||
|
||||
function EdtSession({session}:Props){
|
||||
|
||||
const [open, setOpen] = useState<boolean>(false)
|
||||
const [open, setOpen] = useState<boolean>(false);
|
||||
const [open2, setOpen2] = useState<boolean>(false);
|
||||
const [loading,setLoading] = useState<boolean>(false);
|
||||
const [activites,setActivites] = useState<Activite[]>([]);
|
||||
|
||||
function handleOpen(): void {
|
||||
setOpen(!open);
|
||||
}
|
||||
|
||||
function handleDeleteActivite(): void {
|
||||
session.activites.pop(); //TODO
|
||||
function handleDeleteActivite(activite:Activite): void {
|
||||
session.activites.splice(session.activites.indexOf(activite), 1);
|
||||
setActivites([...session.activites])
|
||||
}
|
||||
|
||||
function handleAddActivite(): void {
|
||||
const newActivite = new Activite();
|
||||
//TODO
|
||||
session.activites.push(newActivite);
|
||||
setOpen2(true)
|
||||
}
|
||||
|
||||
async function updateActivites(){
|
||||
@@ -45,7 +47,24 @@ function EdtSession({session}:Props){
|
||||
}
|
||||
},[open])
|
||||
|
||||
useEffect(() => {
|
||||
if(!loading){
|
||||
setActivites([...session.activites])
|
||||
}
|
||||
},[loading])
|
||||
|
||||
const sDate = session.creneau;
|
||||
|
||||
|
||||
|
||||
function returnActivite(activite: Activite|null){
|
||||
if(activite!==null){
|
||||
session.activites.push(activite);
|
||||
setActivites([...session.activites])
|
||||
}
|
||||
setOpen2(false);
|
||||
}
|
||||
|
||||
return(
|
||||
<div>
|
||||
<div className="edt_session" onClick={() => handleOpen()}>
|
||||
@@ -64,16 +83,20 @@ function EdtSession({session}:Props){
|
||||
<div>
|
||||
Activités :
|
||||
<div className="ent_activite_list">
|
||||
{session.activites.map((activite,index)=>(
|
||||
{activites.map((activite,index)=>(
|
||||
<div>
|
||||
{activite.nom}
|
||||
<button className="deleteButton" onClick={() => handleDeleteActivite}>x</button>
|
||||
<button className="deleteButton" onClick={() => handleDeleteActivite(activite)}>x</button>
|
||||
</div>
|
||||
))}
|
||||
<button className="addButton" onClick={() => handleAddActivite}>+</button>
|
||||
<button className="addButton" onClick={() => handleAddActivite()}>+</button>
|
||||
{loading && <div className='edt_loading'><Loading/></div>}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{open2 &&
|
||||
<CreateActivite returnActivite={(activite) => returnActivite(activite)}/>
|
||||
}
|
||||
</div>
|
||||
</Modal>
|
||||
}
|
||||
|
||||
@@ -29,8 +29,19 @@ export const Login =() =>{
|
||||
return(
|
||||
<div>
|
||||
<div>
|
||||
Authenticated : {keycloak.authenticated ? 'oui' : 'non'}
|
||||
Etat : {keycloak.authenticated ? 'connecté' : 'non connecté'}
|
||||
</div>
|
||||
{keycloak.authenticated &&
|
||||
<div>
|
||||
<div>
|
||||
Keycloak ID : { keycloak.tokenParsed?.sub}
|
||||
</div>
|
||||
<div>
|
||||
User nom : { user.nom}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
}
|
||||
<button onClick={() => handleLogin()}>
|
||||
Se connecter
|
||||
</button>
|
||||
|
||||
@@ -118,4 +118,11 @@
|
||||
.addButton{
|
||||
background-color: var(--tint5);
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.edt_activite_modal{
|
||||
background-color: var(--tint3);
|
||||
padding: 10px;
|
||||
border-radius: 20px;
|
||||
position: relative;
|
||||
}
|
||||
@@ -1,14 +1,27 @@
|
||||
import { getUsersAPI } from "../requetes"
|
||||
import { useKeycloak } from "@react-keycloak/web"
|
||||
import { getCoachsAPI, getUsersAPI, postAdmin } from "../requetes"
|
||||
import { Admin } from "../classes";
|
||||
|
||||
|
||||
function TestAPI(){
|
||||
const { keycloak } = useKeycloak()
|
||||
|
||||
function handleGetUsers(): void {
|
||||
getUsersAPI()
|
||||
getCoachsAPI();
|
||||
}
|
||||
|
||||
function handleSendAdmin(): void {
|
||||
const admin = new Admin;
|
||||
admin.nom = "admin";
|
||||
admin.email = "admin@gmail.com";
|
||||
|
||||
postAdmin(admin);
|
||||
}
|
||||
|
||||
return(
|
||||
<div style={{padding:30, backgroundColor:"#000000"}}>
|
||||
<button onClick={()=>handleGetUsers()}>getUsers</button>
|
||||
<button onClick={()=>handleSendAdmin()}>sendAdmin</button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user