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) { @media screen and (max-width: 760px) {
.eventCard { .eventCard {
min-width: 100%; min-width: 100%;
@@ -34,39 +34,40 @@ function PendingMembers() {
); );
}; };
const handleValidate = async (id) => { const handleValidate = async (id) => {
setActionLoading(id); setActionLoading(id);
setError(null); setError(null);
try { try {
const result = await validateUser(id); const result = await validateUser(id);
if (result.success) { if (result === true) {
removeMember(id); removeMember(id);
} else { } else {
setError(result.message || "Échec de la validation."); setError("Échec de la validation.");
}
} catch (err) {
setError("Erreur lors de la validation.");
} finally {
setActionLoading(null);
} }
}; } catch (err) {
setError("Erreur lors de la validation.");
} finally {
setActionLoading(null);
}
};
const handleReject = async (id) => { const handleReject = async (id) => {
setActionLoading(id); setActionLoading(id);
setError(null); setError(null);
try { try {
const result = await deleteOtherUser(id); const result = await deleteUser(id);
if (result.success) { if (result.status >= 200 && result.status < 300) {
removeMember(id); removeMember(id);
} else { } else {
setError(result.message || "Échec de la suppression."); setError(result.errors || "Échec de la suppression.");
}
} catch (err) {
setError("Erreur lors de la suppression.");
} finally {
setActionLoading(null);
} }
}; } catch (err) {
setError("Erreur lors de la suppression.");
} finally {
setActionLoading(null);
}
};
if (loading) { if (loading) {
return <div>Chargement des membres en attente...</div>; return <div>Chargement des membres en attente...</div>;
@@ -17,25 +17,6 @@
scroll-behavior: smooth; 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 { .memberCard {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -54,6 +35,10 @@
.memberCard p { .memberCard p {
font-weight: bold; font-weight: bold;
font-size: 20px; font-size: 20px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 250px;
} }
.buttonGroup { .buttonGroup {
@@ -71,11 +56,20 @@
.membersContainer { .membersContainer {
max-height: 200px; max-height: 200px;
} }
.rightBlock > h2{
font-size:18px;
}
.rightBlock > h2{
font-size: 18px;
}
.memberCard p{ .memberCard p{
font-size: 15px; 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 { .content {
width: 100%; width: 100%;
padding: 20px; padding: 16px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 20px;
} }
.modifyIcon { .modifyIcon {
height: 30px; height: 28px;
width: 30px; width: 28px;
} }
.section { .section {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 10px; gap: 12px;
margin-top: 15px; margin-top: 10px;
margin-bottom: 15px; }
.section h3 {
font-size: 1.1rem;
margin-bottom: 5px;
}
.section h4 {
font-size: 0.95rem;
font-weight: 500;
} }
.submitBtn { .submitBtn {
align-self: center; width: 100%;
margin-top: 15px;
} }
.section button {
width: 100%;
}
.alignText{ @media (min-width: 600px) {
text-align: center; .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%; width: 100%;
height: auto; height: auto;
min-height: auto; min-height: auto;
margin-bottom: 20px;
} }
.chartContainer { .chartContainer {
@@ -167,7 +166,6 @@
font-size: 48px; font-size: 48px;
} }
} }
/* scrollbar */
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 8px; width: 8px;
height: 8px; height: 8px;
+4 -3
View File
@@ -4,9 +4,8 @@
width: 100%; width: 100%;
padding: 20px; padding: 20px;
box-sizing: border-box; box-sizing: border-box;
gap: 20px; gap: 20px;
} }
.rightSection { .rightSection {
width: 60%; width: 60%;
display: flex; display: flex;
@@ -19,11 +18,13 @@
flex-direction: column; flex-direction: column;
width: 100%; width: 100%;
padding: 0; padding: 0;
margin-top:25px;
} }
.rightSection { .rightSection {
width: 100%; width: 100%;
margin: 0; margin: 0;
margin-bottom: 15px; margin-top:0;
margin-bottom:25px;
} }
} }
+82 -4
View File
@@ -1,11 +1,89 @@
.eventsContainer { .eventsContainer {
width: 100%; width: 100%;
position: relative; position: relative;
padding: 10px;
box-sizing: border-box;
} }
.eventsList {
.eventsList{
display: flex; display: flex;
align-items: center;
flex-direction: column; 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; position: absolute;
z-index: 2; z-index: 9999;
touch-action: manipulation;
width: 90%;
max-width: 380px;
padding: 20px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 600px;
max-height: 80%;
justify-content: center;
align-items: center; align-items: center;
padding: 20px; justify-content: center;
border-radius: 12px; border-radius: 14px;
left: 50%; left: 50%;
top: 50%; top: 50%;
transform: translate(-50%, -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 { .title {
font-size: 36px; font-size: 1.8rem;
color: white; color: white;
text-align: center; text-align: center;
margin-bottom: 20px; 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 { .container {
width: 100%; width: 100%;
padding: 10px; padding: 12px;
box-sizing: border-box; box-sizing: border-box;
} }
.profileboard { .profileboard {
width: 100%; width: 100%;
padding: 15px; padding: 16px;
border-radius: 20px; border-radius: 20px;
box-sizing: border-box; box-sizing: border-box;
} }
.contentWrapper { .contentWrapper {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
width: 100%; width: 100%;
} }
.profilePictureContainer { .profilePictureContainer {
width: 120px; width: 120px;
height: 120px; height: 120px;
margin-bottom: 15px; margin-bottom: 16px;
} }
.profilePicture { .profilePicture {
width: 100%; width: 100%;
height: 100%; height: 100%;
border-radius: 50%; border-radius: 50%;
object-fit: cover; object-fit: cover;
} }
.description { .description {
width: 100%; width: 100%;
text-align: left; text-align: left;
margin-left:4%; }
.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 { .topDescription {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; gap: 12px;
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;
margin-bottom: 20px; margin-bottom: 20px;
} }
@media screen and (min-width: 1024px) { .infoBlock {
.container { width: 100%;
max-width: 100%; padding: 12px;
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;
} }
.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 { .container {
position: relative; position: relative;
z-index: 2; z-index: 9999;
touch-action: manipulation;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 30%;
justify-content: center;
align-items: center; align-items: center;
justify-content: center;
width: 90%;
max-width: 420px;
padding: 20px; padding: 20px;
border-radius:12px; border-radius: 14px;
margin: auto;
} }
.title { .title {
font-size: 36px; font-size: 1.8rem;
color: white; color: white;
text-align: center; text-align: center;
margin-bottom: 20px; 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) { :global(.glassCard) {
--glass-bg: #ffffff9f; --glass-bg: #ffffff9f;
} }
.logButton{
display: flex; .inputContainer {
justify-content: center; width: 100%;
flex-direction: column; padding: 16px;
align-items: center;
margin-top: 12px;
}
.formGroup{
margin-top:23px;
} }
.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 { h1 {
overflow: visible; overflow: visible;
text-align: center; 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.profileboard} glassCard`} onClick={(() => setIsExpanded(!isExpanded))}>
<div className={styles.header}> <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 <Button
variant={"transparent"} variant={"transparent"}
onClick={toggleExpand} onClick={toggleExpand}
+114 -63
View File
@@ -1,24 +1,46 @@
.container { .container {
width: 100%; width: 100%;
position: relative; 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 { .profileboard {
width: 80%; width: 100%;
max-width: 380px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 10px; gap: 10px;
box-sizing: border-box; box-sizing: border-box;
margin: 1rem 0; margin: 1rem 0;
padding: 1rem 0.5rem; padding: 12px 10px;
border-radius: 12px;
} }
.usersList{
display: flex;
flex-direction: column;
align-items: center;
}
.header { .header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -28,56 +50,12 @@
.header h2 { .header h2 {
margin: 0; margin: 0;
} font-size: 1rem;
font-weight: bold;
white-space: nowrap;
.mainContent { overflow: hidden;
display: flex; text-overflow: ellipsis;
flex-direction: row; max-width: 70%;
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;
} }
.expandButton { .expandButton {
@@ -93,13 +71,72 @@
} }
.moreButtonClicked { .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) { @media screen and (min-width: 768px) {
.profileboard {
max-width: 600px;
padding: 16px 12px;
}
.header h2 {
font-size: 1.2rem;
max-width: 75%;
}
.profilePictureContainer { .profilePictureContainer {
width: 150px; width: 150px;
height: 150px; height: 150px;
margin-right: 15px;
}
.expandedContent {
flex-direction: row;
gap: 15px;
} }
} }
@@ -107,13 +144,27 @@
.container { .container {
padding: 20px; padding: 20px;
} }
.usersList {
gap: 20px;
}
.profileboard { .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 { .profilePictureContainer {
width: 200px; width: 200px;
height: auto; height: auto;
} }
.contactInfo p {
font-size: 1rem;
}
} }