Merge branch 'features/pendingMembers' into 'dev'

Features/pendingmembers

See merge request sae-but2/2025-26/gestion-benevoles-association/Frontend!67
This commit is contained in:
LEBLOND MALO p2405951
2026-01-14 21:20:45 +00:00
12 changed files with 551 additions and 302 deletions
@@ -80,7 +80,6 @@
}
}
/* Adaptation pour mobile */
@media screen and (max-width: 760px) {
.eventCard {
min-width: 100%;
@@ -34,39 +34,40 @@ function PendingMembers() {
);
};
const handleValidate = async (id) => {
setActionLoading(id);
setError(null);
try {
const result = await validateUser(id);
if (result.success) {
removeMember(id);
} else {
setError(result.message || "Échec de la validation.");
}
} catch (err) {
setError("Erreur lors de la validation.");
} finally {
setActionLoading(null);
const handleValidate = async (id) => {
setActionLoading(id);
setError(null);
try {
const result = await validateUser(id);
if (result === true) {
removeMember(id);
} else {
setError("Échec de la validation.");
}
};
} catch (err) {
setError("Erreur lors de la validation.");
} finally {
setActionLoading(null);
}
};
const handleReject = async (id) => {
setActionLoading(id);
setError(null);
try {
const result = await deleteOtherUser(id);
if (result.success) {
removeMember(id);
} else {
setError(result.message || "Échec de la suppression.");
}
} catch (err) {
setError("Erreur lors de la suppression.");
} finally {
setActionLoading(null);
const handleReject = async (id) => {
setActionLoading(id);
setError(null);
try {
const result = await deleteUser(id);
if (result.status >= 200 && result.status < 300) {
removeMember(id);
} else {
setError(result.errors || "Échec de la suppression.");
}
};
} catch (err) {
setError("Erreur lors de la suppression.");
} finally {
setActionLoading(null);
}
};
if (loading) {
return <div>Chargement des membres en attente...</div>;
@@ -17,25 +17,6 @@
scroll-behavior: smooth;
}
/*.membersContainer::-webkit-scrollbar {
width: 8px;
}
.membersContainer::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.1);
border-radius: 10px;
}
.membersContainer::-webkit-scrollbar-thumb {
background: rgba(255, 0, 0, 0.5);
border-radius: 10px;
}
.membersContainer::-webkit-scrollbar-thumb:hover {
background: rgba(125, 249, 30, 0.7);
}*/
.memberCard {
display: flex;
justify-content: space-between;
@@ -54,6 +35,10 @@
.memberCard p {
font-weight: bold;
font-size: 20px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 250px;
}
.buttonGroup {
@@ -71,11 +56,20 @@
.membersContainer {
max-height: 200px;
}
.rightBlock > h2{
font-size:18px;
}
.rightBlock > h2{
font-size: 18px;
}
.memberCard p{
font-size: 15px;
max-width: 150px;
}
}
@media screen and (min-width: 761px) {
.memberCard p{
white-space: normal;
overflow: visible;
text-overflow: clip;
max-width: none;
}
}
@@ -1,28 +1,73 @@
.content {
width: 100%;
padding: 20px;
padding: 16px;
display: flex;
flex-direction: column;
gap: 20px;
}
.modifyIcon {
height: 30px;
width: 30px;
height: 28px;
width: 28px;
}
.section {
display: flex;
flex-direction: column;
gap: 10px;
margin-top: 15px;
margin-bottom: 15px;
gap: 12px;
margin-top: 10px;
}
.section h3 {
font-size: 1.1rem;
margin-bottom: 5px;
}
.section h4 {
font-size: 0.95rem;
font-weight: 500;
}
.submitBtn {
align-self: center;
width: 100%;
margin-top: 15px;
}
.section button {
width: 100%;
}
.alignText{
text-align: center;
}
@media (min-width: 600px) {
.content {
padding: 24px;
}
.section h3 {
font-size: 1.2rem;
}
.submitBtn {
width: auto;
align-self: center;
min-width: 200px;
}
.section button {
width: fit-content;
}
}
@media (min-width: 900px) {
.content {
padding: 30px;
gap: 30px;
}
.section {
gap: 14px;
}
.modifyIcon {
height: 30px;
width: 30px;
}
}
@@ -149,7 +149,6 @@
width: 100%;
height: auto;
min-height: auto;
margin-bottom: 20px;
}
.chartContainer {
@@ -167,7 +166,6 @@
font-size: 48px;
}
}
/* scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
+4 -3
View File
@@ -4,9 +4,8 @@
width: 100%;
padding: 20px;
box-sizing: border-box;
gap: 20px;
gap: 20px;
}
.rightSection {
width: 60%;
display: flex;
@@ -19,11 +18,13 @@
flex-direction: column;
width: 100%;
padding: 0;
margin-top:25px;
}
.rightSection {
width: 100%;
margin: 0;
margin-bottom: 15px;
margin-top:0;
margin-bottom:25px;
}
}
+82 -4
View File
@@ -1,11 +1,89 @@
.eventsContainer {
width: 100%;
position: relative;
padding: 10px;
box-sizing: border-box;
}
.eventsList{
.eventsList {
display: flex;
align-items: center;
flex-direction: column;
}
align-items: center;
gap: 10px;
}
.eventCard {
width: 100%;
max-width: 360px;
padding: 12px 10px;
border-radius: 12px;
box-sizing: border-box;
display: flex;
flex-direction: column;
background-color: #ffffffcc;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.eventCard h3 {
margin: 0 0 5px 0;
font-size: 1rem;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.eventCard p {
margin: 0;
font-size: 0.9rem;
color: #333;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.eventImage {
width: 100%;
height: 120px;
object-fit: cover;
border-radius: 8px;
margin-bottom: 8px;
}
@media screen and (min-width: 768px) {
.eventCard {
max-width: 600px;
padding: 16px 12px;
}
.eventCard h3 {
font-size: 1.2rem;
white-space: normal;
overflow: visible;
text-overflow: clip;
}
.eventCard p {
font-size: 1rem;
white-space: normal;
overflow: visible;
text-overflow: clip;
}
}
@media screen and (min-width: 1024px) {
.eventsContainer {
padding: 20px;
}
.eventsList {
gap: 20px;
}
.eventCard {
max-width: 700px;
padding: 20px;
}
.eventCard h3 {
font-size: 1.4rem;
}
.eventCard p {
font-size: 1.1rem;
}
.eventImage {
height: 180px;
}
}
+50 -9
View File
@@ -1,23 +1,64 @@
.container {
/*.container {
position: absolute;
z-index: 2;
z-index: 9999;
touch-action: manipulation;
width: 90%;
max-width: 380px;
padding: 20px;
display: flex;
flex-direction: column;
width: 600px;
max-height: 80%;
justify-content: center;
align-items: center;
padding: 20px;
border-radius: 12px;
justify-content: center;
border-radius: 14px;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}*/
.container {
position: relative; /* au lieu d'absolute */
z-index: 9999;
touch-action: manipulation;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 90%;
max-width: 420px; /* RegisterPage : 420px / LoginPage : 380px */
padding: 20px;
border-radius: 14px;
margin: auto; /* centre dans le parent flex */
}
.title {
font-size: 36px;
font-size: 1.8rem;
color: white;
text-align: center;
margin-bottom: 20px;
text-shadow: 0 2px 8px rgba(0,0,0,0.3);
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
@media (min-width: 600px) {
.container {
max-width: 460px;
padding: 24px;
}
.title {
font-size: 2.2rem;
}
}
@media (min-width: 1024px) {
.container {
max-width: 600px;
padding: 32px;
}
.title {
font-size: 2.6rem;
}
}
+129 -136
View File
@@ -1,161 +1,154 @@
.container {
width: 100%;
padding: 10px;
box-sizing: border-box;
width: 100%;
padding: 12px;
box-sizing: border-box;
}
.profileboard {
width: 100%;
padding: 15px;
border-radius: 20px;
box-sizing: border-box;
width: 100%;
padding: 16px;
border-radius: 20px;
box-sizing: border-box;
}
.contentWrapper {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
}
.profilePictureContainer {
width: 120px;
height: 120px;
margin-bottom: 15px;
width: 120px;
height: 120px;
margin-bottom: 16px;
}
.profilePicture {
width: 100%;
height: 100%;
border-radius: 50%;
object-fit: cover;
width: 100%;
height: 100%;
border-radius: 50%;
object-fit: cover;
}
.description {
width: 100%;
text-align: left;
margin-left:4%;
width: 100%;
text-align: left;
}
.headerProfile {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16px;
}
.description h2 {
font-size: 1.6rem;
margin-bottom: 10px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.description button {
width: 44px;
height: 44px;
min-width: 44px;
min-height: 44px;
display: flex;
align-items: center;
justify-content: center;
padding: 0;
background: transparent;
border: none;
cursor: pointer;
}
.modifyIcon {
width: 22px;
height: 22px;
display: block;
margin: 0;
}
.topDescription {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
margin-bottom: 15px;
}
.infoBlock {
width: 100%;
padding: 10px;
}
.eventTasks {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease-out, opacity 0.2s ease;
opacity: 0;
padding-left: 20px;
}
.eventTasks.expanded {
max-height: 500px;
opacity: 1;
margin-top: 10px;
}
.description h2{
font-size:30px;
}
.profilePicture{
width:90%;
}
.settingsBtns {
display: flex;
gap: 5px;
justify-content: right;
}
@media screen and (min-width: 768px) {
.contentWrapper {
flex-direction: row;
justify-content: flex-start;
align-items: flex-start;
}
.profilePictureContainer {
width: 150px;
height: 150px;
margin-right: 20px;
margin-bottom: 0;
}
.description {
width: calc(100% - 170px);
margin-left:4%;
}
.topDescription {
flex-direction: row;
justify-content: space-between;
}
.infoBlock {
width: 48%;
}
.event {
padding: 15px;
}
.description h2{
font-size:30px;
}
.profilePicture{
width:90%;
}
}
.description button{
width:50px;
height:50px;
}
.headerProfile {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
gap: 12px;
margin-bottom: 20px;
}
@media screen and (min-width: 1024px) {
.container {
max-width: 100%;
margin: 0 auto;
padding: 20px;
}
.profileboard {
padding: 25px;
}
.profilePictureContainer {
width: 30%;
height:auto;
}
.profilePicture{
width:90%;
}
.description {
width: calc(100% - 200px);
margin-left:4%;
}
.event {
padding: 18px;
}
.description h2{
font-size:30px;
.infoBlock {
width: 100%;
padding: 12px;
}
.eventTasks {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease, opacity 0.2s ease;
opacity: 0;
padding-left: 16px;
}
.eventTasks.expanded {
max-height: 500px;
opacity: 1;
margin-top: 10px;
}
@media (min-width: 768px) {
.contentWrapper {
flex-direction: row;
align-items: flex-start;
}
.profilePictureContainer {
width: 150px;
height: 150px;
margin-right: 24px;
margin-bottom: 0;
}
.description {
width: calc(100% - 180px);
}
.topDescription {
flex-direction: row;
justify-content: space-between;
}
.infoBlock {
width: 48%;
}
.description h2 {
font-size: 1.8rem;
}
}
@media (min-width: 1024px) {
.container {
max-width: 1200px;
margin: 0 auto;
padding: 24px;
}
.profileboard {
padding: 28px;
}
.profilePictureContainer {
width: 180px;
height: 180px;
}
.description {
width: calc(100% - 220px);
}
.description h2 {
font-size: 2rem;
}
}
+65 -21
View File
@@ -1,44 +1,88 @@
.container {
position: relative;
z-index: 2;
z-index: 9999;
touch-action: manipulation;
display: flex;
flex-direction: column;
width: 30%;
justify-content: center;
align-items: center;
justify-content: center;
width: 90%;
max-width: 420px;
padding: 20px;
border-radius:12px;
border-radius: 14px;
margin: auto;
}
.title {
font-size: 36px;
font-size: 1.8rem;
color: white;
text-align: center;
margin-bottom: 20px;
text-shadow: 0 2px 8px rgba(0,0,0,0.3);
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
:global(.glassCard) {
--glass-bg: #ffffff9f;
}
.logButton{
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
margin-top: 12px;
}
.formGroup{
margin-top:23px;
.inputContainer {
width: 100%;
padding: 16px;
}
.formGroup {
margin-top: 18px;
}
.logButton {
display: flex;
flex-direction: column;
gap: 10px;
align-items: center;
margin-top: 20px;
}
.logButton button {
width: 100%;
}
@media (min-width: 600px) {
.container {
max-width: 480px;
padding: 24px;
}
.title {
font-size: 2.2rem;
}
.inputContainer {
padding: 20px;
}
}
@media (min-width: 1024px) {
.container {
max-width: 600px;
padding: 32px;
}
.title {
font-size: 2.6rem;
}
.logButton {
flex-direction: row;
justify-content: space-between;
}
.logButton button {
width: auto;
min-width: 180px;
}
}
h1 {
overflow: visible;
text-align: center;
}
.inputContainer {
padding: 15px;
width: 100%;
}
+5 -1
View File
@@ -18,7 +18,11 @@ export default function VolunteerCard({ user }) {
<div className={`${styles.profileboard} glassCard`} onClick={(() => setIsExpanded(!isExpanded))}>
<div className={styles.header}>
<h2>{user?.name} {user?.lastname}</h2>
<h2 className={styles.userName}>
<span className={styles.firstName}>{user?.name}</span>{" "}
<span className={styles.lastName}>{user?.lastname}</span>
</h2>
<Button
variant={"transparent"}
onClick={toggleExpand}
+114 -63
View File
@@ -1,24 +1,46 @@
.container {
width: 100%;
position: relative;
padding: 10px;
}
.userName {
display: flex;
gap: 5px;
font-weight: bold;
font-size: 1rem;
overflow: hidden;
}
.firstName {
white-space: nowrap;
flex-shrink: 0;
}
.lastName {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
flex-shrink: 1;
max-width: 100px;
}
.usersList {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.profileboard {
width: 80%;
width: 100%;
max-width: 380px;
display: flex;
flex-direction: column;
gap: 10px;
box-sizing: border-box;
margin: 1rem 0;
padding: 1rem 0.5rem;
padding: 12px 10px;
border-radius: 12px;
}
.usersList{
display: flex;
flex-direction: column;
align-items: center;
}
.header {
display: flex;
justify-content: space-between;
@@ -28,56 +50,12 @@
.header h2 {
margin: 0;
}
.mainContent {
display: flex;
flex-direction: row;
width: 100%;
flex: 1;
}
.basicInfo {
flex: 1;
}
.expandedContent {
display: flex;
flex-direction: row;
width: 100%;
}
.textInfo {
display: flex;
flex-direction: column;
flex: 1;
}
.contactInfo {
margin-top: 10px;
}
.contactInfo p {
margin: 5px 0;
}
.bottomBar {
display: flex;
justify-content: flex-end;
}
.profilePictureContainer {
width: 120px;
height: 120px;
margin-right: 20px;
}
.profilePicture {
width: 100%;
height: 100%;
border-radius: 50%;
object-fit: cover;
font-size: 1rem;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 70%;
}
.expandButton {
@@ -93,13 +71,72 @@
}
.moreButtonClicked {
rotate: 90deg;
transform: rotate(90deg);
}
.mainContent {
display: flex;
flex-direction: column;
width: 100%;
}
.basicInfo {
flex: 1;
}
.expandedContent {
display: flex;
flex-direction: column;
width: 100%;
gap: 10px;
}
.textInfo {
display: flex;
flex-direction: column;
flex: 1;
}
.contactInfo {
margin-top: 8px;
}
.contactInfo p {
margin: 4px 0;
font-size: 0.9rem;
}
.bottomBar {
display: flex;
justify-content: flex-end;
margin-top: 10px;
}
.profilePictureContainer {
width: 100px;
height: 100px;
margin-bottom: 10px;
}
.profilePicture {
width: 100%;
height: 100%;
border-radius: 50%;
object-fit: cover;
}
@keyframes slideInMember {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
@media screen and (min-width: 768px) {
.profileboard {
max-width: 600px;
padding: 16px 12px;
}
.header h2 {
font-size: 1.2rem;
max-width: 75%;
}
.profilePictureContainer {
width: 150px;
height: 150px;
margin-right: 15px;
}
.expandedContent {
flex-direction: row;
gap: 15px;
}
}
@@ -107,13 +144,27 @@
.container {
padding: 20px;
}
.usersList {
gap: 20px;
}
.profileboard {
padding: 25px;
max-width: 700px;
padding: 20px;
flex-direction: column;
}
.header h2 {
font-size: 1.4rem;
max-width: 80%;
}
.expandedContent {
flex-direction: row;
gap: 20px;
}
.profilePictureContainer {
width: 200px;
height: auto;
}
.contactInfo p {
font-size: 1rem;
}
}