From dae32e360745737384022cb075addaece194c3a9 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Tue, 16 Jul 2024 12:45:11 +0200 Subject: [PATCH] feat: affiliation request --- .../domain/service/AffiliationService.java | 4 ++ .../ffsaf/rest/AffiliationEndpoints.java | 8 ++++ .../admin/affiliation/AffiliationReqPage.jsx | 46 ++++++++++++++----- 3 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java index 7f06786..feb2adc 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java @@ -287,4 +287,8 @@ public class AffiliationService { public Uni deleteAffiliation(long id) { return Panache.withTransaction(() -> repository.deleteById(id)); } + + public Uni deleteReqAffiliation(long id) { + return Panache.withTransaction(() -> repositoryRequest.deleteById(id)); + } } diff --git a/src/main/java/fr/titionfire/ffsaf/rest/AffiliationEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/AffiliationEndpoints.java index 185c189..5e9b41c 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/AffiliationEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/AffiliationEndpoints.java @@ -52,6 +52,14 @@ public class AffiliationEndpoints { return service.getRequest(id); } + @DELETE + @Path("/request/{id}") + @RolesAllowed({"federation_admin"}) + @Produces(MediaType.APPLICATION_JSON) + public Uni getDelAffRequest(@PathParam("id") long id) { + return service.deleteReqAffiliation(id); + } + @PUT @Path("/request/save") @RolesAllowed({"federation_admin"}) diff --git a/src/main/webapp/src/pages/admin/affiliation/AffiliationReqPage.jsx b/src/main/webapp/src/pages/admin/affiliation/AffiliationReqPage.jsx index 06e2ddf..fd52ae2 100644 --- a/src/main/webapp/src/pages/admin/affiliation/AffiliationReqPage.jsx +++ b/src/main/webapp/src/pages/admin/affiliation/AffiliationReqPage.jsx @@ -8,6 +8,7 @@ import {RoleList, TextField} from "../../../components/MemberCustomFiels.jsx"; import {useEffect, useRef, useState} from "react"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faFilePdf} from "@fortawesome/free-solid-svg-icons"; +import {ConfirmDialog} from "../../../components/ConfirmDialog.jsx"; const vite_url = import.meta.env.VITE_URL; @@ -16,7 +17,7 @@ export function AffiliationReqPage() { const navigate = useNavigate(); const setLoading = useLoadingSwitcher() - const {data, error} = useFetch(`/affiliation/request/${id}`, setLoading, 1) + const {data, refresh, error} = useFetch(`/affiliation/request/${id}`, setLoading, 1) return <>

Demande d'affiliation

@@ -26,7 +27,7 @@ export function AffiliationReqPage() {
{data ?
- +
: error && } @@ -34,14 +35,30 @@ export function AffiliationReqPage() { } -function Content({data}) { +function Content({data, refresh}) { + const navigate = useNavigate(); + + const handleRm = (e) => { + toast.promise( + apiAxios.delete(`/affiliation/request/${data.id}`), + { + pending: "Suppression de la demande d'affiliation en cours", + success: "Demande d'affiliation supprimée avec succès 🎉", + error: "Échec de la suppression de la demande d'affiliation 😕" + } + ).then(_ => { + navigate("/admin/affiliation") + }) + } const handleSubmit = (event) => { event.preventDefault(); + + if (event.nativeEvent.submitter.value === "rm") { + return; + } + const formData = new FormData(); - - console.log(); - let err = 0; formData.append('id', data.id); @@ -53,7 +70,7 @@ function Content({data}) { if (event.target.logo.files[0]) formData.append('logo', event.target.logo.files[0]); if (event.target.status.files[0]) - formData.append('status', event.target.status.files[0]); + formData.append('status', event.target.status.files[0]); for (let i = 0; i < 3; i++) { const mode = event.target['mode' + i].value; @@ -113,7 +130,9 @@ function Content({data}) { success: "Demande d'affiliation enregistrée avec succès 🎉", error: "Échec de l'enregistrement de la demande d'affiliation 😕" } - ) + ).then(_ => { + refresh(`/affiliation/request/${data.id}`) + }) } else if (event.nativeEvent.submitter.value === "accept") { toast.promise( apiAxios.put(`/affiliation/request/apply`, formData), @@ -122,7 +141,9 @@ function Content({data}) { success: "Affiliation acceptée avec succès 🎉", error: "Échec de l'acceptation de l'affiliation 😕" } - ) + ).then(_ => { + navigate("/admin/affiliation") + }) } } @@ -182,8 +203,11 @@ function Content({data}) {
- - + + + +