feat: add reject reason for affiliationRequest

This commit is contained in:
2025-07-04 17:24:51 +02:00
parent 97ca8766af
commit dea91714fa
3 changed files with 56 additions and 9 deletions

View File

@@ -38,9 +38,9 @@ export function AffiliationReqPage() {
function Content({data, refresh}) {
const navigate = useNavigate();
const handleRm = (e) => {
const handleRm = (reason) => {
toast.promise(
apiAxios.delete(`/affiliation/request/${data.id}`),
apiAxios.delete(`/affiliation/request/${data.id}?reason=${encodeURIComponent(reason)}`),
{
pending: "Suppression de la demande d'affiliation en cours",
success: "Demande d'affiliation supprimée avec succès 🎉",
@@ -219,8 +219,8 @@ function Content({data, refresh}) {
<button type="submit" value="accept" className="btn btn-success">Accepter</button>
<button type="submit" value="save" className="btn btn-primary">Enregistrer</button>
<button className="btn btn-danger" value="rm" data-bs-toggle="modal" data-bs-target="#confirm-delete">Refuser</button>
<ConfirmDialog title="Refuser la demande" message="Êtes-vous sûr de vouloir refuser cette demande ?"
onConfirm={handleRm}/>
<ConfirmReasonDialog title="Refuser la demande" message="Êtes-vous sûr de vouloir refuser cette demande ?"
onConfirm={handleRm}/>
</div>
</div>
</div>
@@ -228,6 +228,34 @@ function Content({data, refresh}) {
</>
}
function ConfirmReasonDialog({onConfirm, id = "confirm-delete"}) {
const [reason, setReason] = useState("")
return <div className="modal fade" id={id} tabIndex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div className="modal-dialog">
<div className="modal-content">
<div className="modal-header">
<h4 className="modal-title" id="myModalLabel">"Refuser la demande"</h4>
</div>
<div className="modal-body">
<div className="row mb-3">
<div className="col">
<label htmlFor="reason" className="form-label">Raison du refus</label>
<textarea className="form-control" id="reason" name="reason" rows="3"
placeholder="Veuillez indiquer la raison du refus" value={reason}
onChange={e => setReason(e.target.value)}></textarea>
</div>
</div>
<span>Êtes-vous sûr de vouloir refuser cette demande ?</span>
</div>
<div className="modal-footer">
<button type="button" className="btn btn-default" data-dismiss="modal" data-bs-dismiss="modal">Annuler</button>
<a className="btn btn-danger btn-ok" data-bs-dismiss="modal" onClick={_ => onConfirm(reason)}>Confirmer</a>
</div>
</div>
</div>
</div>
}
function MemberPart({index, member}) {
const [mode, setMode] = useState(member.licence >= 0 ? 0 : 2)
const [current, setCurrent] = useState(-1)
@@ -394,4 +422,4 @@ function MemberSimilar({member, current, setCurrent, mode, index, setEmail}) {
</button>
})}
</div>
}
}