From 0d233ebf89eb372fb95da6822440c8e9fbde4487 Mon Sep 17 00:00:00 2001 From: "mael.daim" Date: Tue, 2 Apr 2024 23:58:21 +0200 Subject: [PATCH] Create team page translated --- .env | 4 +- src/App.tsx | 5 +++ src/model/Team.ts | 7 +++- src/pages/{template => }/AddMemberPage.tsx | 6 +-- src/pages/CreateTeamPage.tsx | 32 +++++++-------- src/pages/TeamPanel.tsx | 48 +++++++++++++++------- 6 files changed, 65 insertions(+), 37 deletions(-) rename src/pages/{template => }/AddMemberPage.tsx (96%) diff --git a/.env b/.env index f9d70fc..5fc3483 100644 --- a/.env +++ b/.env @@ -1,2 +1,2 @@ -#VITE_API_ENDPOINT=https://iqball.maxou.dev/api/dotnet-master -VITE_API_ENDPOINT=http://localhost:5254 +VITE_API_ENDPOINT=https://iqball.maxou.dev/api/dotnet-master +#VITE_API_ENDPOINT=http://localhost:5254 diff --git a/src/App.tsx b/src/App.tsx index 350928f..542ebfd 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -23,6 +23,7 @@ import { import { BASE } from "./Constants.ts" import { Authentication, Fetcher } from "./app/Fetcher.ts" import { User } from "./model/User.ts" +import AddMemberPage from "./pages/AddMemberPage.tsx"; const HomePage = lazy(() => import("./pages/HomePage.tsx")) const LoginPage = lazy(() => import("./pages/LoginPage.tsx")) @@ -131,6 +132,10 @@ export default function App() { , )} /> + )} + /> )} diff --git a/src/model/Team.ts b/src/model/Team.ts index 4d0885e..aec9238 100644 --- a/src/model/Team.ts +++ b/src/model/Team.ts @@ -15,5 +15,10 @@ export interface Team { export interface Member { user: User - role: string + role: MemberRole +} + +export const enum MemberRole{ + PLAYER, + COACH } diff --git a/src/pages/template/AddMemberPage.tsx b/src/pages/AddMemberPage.tsx similarity index 96% rename from src/pages/template/AddMemberPage.tsx rename to src/pages/AddMemberPage.tsx index a554b2a..9a36d7f 100644 --- a/src/pages/template/AddMemberPage.tsx +++ b/src/pages/AddMemberPage.tsx @@ -4,11 +4,11 @@ import { Failure } from "../api/failure.ts" import "../style/form.css" // @ts-ignore import { useNavigate } from "react-router-dom" -import {getSession, saveSession} from "../api/session.ts"; +import {useAppFetcher} from "../App.tsx"; export default function AddMemberPage() { const [errors, setErrors] = useState([]) - + const fetcher = useAppFetcher() const navigate = useNavigate() async function handleSubmit(e : FormEvent){ @@ -18,7 +18,7 @@ export default function AddMemberPage() { new FormData(e.target as HTMLFormElement), ) - const response = await fetchAPI( + const response = await fetcher.fetchAPI( "teams", {name,mainColor,secondColor,picture}, "POST" diff --git a/src/pages/CreateTeamPage.tsx b/src/pages/CreateTeamPage.tsx index 914de2a..c923249 100644 --- a/src/pages/CreateTeamPage.tsx +++ b/src/pages/CreateTeamPage.tsx @@ -1,31 +1,31 @@ import {FormEvent, useState} from "react" -import { fetchAPI } from "../Fetcher.ts" -import { Failure } from "../api/failure.ts" import "../style/form.css" // @ts-ignore import { useNavigate } from "react-router-dom" +import {useAppFetcher} from "../App.tsx"; +import {Failure} from "../app/Failure.ts"; export default function CreateTeamPage() { const [errors, setErrors] = useState([]) - + const fetcher = useAppFetcher() const navigate = useNavigate() async function handleSubmit(e : FormEvent){ e.preventDefault() - const { name, mainColor,secondColor,picture } = Object.fromEntries( + const { name, firstColor,secondColor,picture } = Object.fromEntries( new FormData(e.target as HTMLFormElement), ) - const response = await fetchAPI( + const response = await fetcher.fetchAPI( "teams", - {name,mainColor,secondColor,picture}, + {name,firstColor: firstColor.toString().toUpperCase(),secondColor: secondColor.toString().toUpperCase(),picture}, "POST" ) if(response.ok){ - const teamId = await response.json() - navigate("/team/"+teamId+"/members") + const {id} = await response.json() + navigate("/team/"+id) return } @@ -66,8 +66,8 @@ export default function CreateTeamPage() { @@ -78,21 +78,21 @@ export default function CreateTeamPage() { name="picture" required /> - +
diff --git a/src/pages/TeamPanel.tsx b/src/pages/TeamPanel.tsx index eb35239..65cf3c5 100644 --- a/src/pages/TeamPanel.tsx +++ b/src/pages/TeamPanel.tsx @@ -1,23 +1,40 @@ import "../style/team_panel.css" -import { BASE } from "../Constants" -import { Member, Team, TeamInfo } from "../model/Team" -import { useParams } from "react-router-dom" +import {BASE} from "../Constants" +import {Member, MemberRole, Team, TeamInfo} from "../model/Team" +import {useNavigate, useParams} from "react-router-dom" +import {useAppFetcher, useUser} from "../App.tsx"; +import {useEffect, useState} from "react"; export default function TeamPanelPage() { + const fetcher = useAppFetcher() const { teamId } = useParams() - const teamInfo = { - id: parseInt(teamId!), - name: teamId!, - mainColor: "#FFFFFF", - secondColor: "#000000", - picture: - "https://a.espncdn.com/combiner/i?img=/i/teamlogos/nba/500/lal.png", + const [team,setTeam ] = useState() + const [user] = useUser() + useEffect(() => { + async function init(){ + const infoResponse = await fetcher.fetchAPIGet("teams/"+teamId) + const teamInfo : TeamInfo = await infoResponse.json() + const membersResponse = await fetcher.fetchAPIGet("teams/"+teamId+"/members") + const members : Member[] = await membersResponse.json() + setTeam({info:teamInfo, members:members}) + } + + if(team === undefined){ + init() + } + + }, [fetcher,team]); + if(team === undefined){ + return

Chargement ...

} + + const isCoach = team.members.some(m=>m.user.id === user!.id && m.role === MemberRole.COACH) + console.log(isCoach,team,user) return ( ) } @@ -119,6 +136,7 @@ function MembersDisplay({ currentUserId={currentUserId} /> )) + const navigate = useNavigate() return (
@@ -127,7 +145,7 @@ function MembersDisplay({ @@ -157,7 +175,7 @@ function MemberDisplay({ alt="Photo de profile" />

{member.user.name}

-

{member.role}

+

{member.role === MemberRole.COACH ? "Coach" : "Joueur"}

{member.user.email}

{isCoach && currentUserId !== member.user.id && (