diff --git a/src/components/TeamCard/styles/TeamCard.module.scss b/src/components/TeamCard/styles/TeamCard.module.scss
index 6253407a..ffe5f401 100644
--- a/src/components/TeamCard/styles/TeamCard.module.scss
+++ b/src/components/TeamCard/styles/TeamCard.module.scss
@@ -15,10 +15,11 @@
.teamMemberImg {
- width: fit-content;
border-radius: 10px 10px 0 0;
width: 100%;
height: 100%;
+ object-fit: cover;
+ object-position: center;
}
.ImgDiv{
@@ -27,6 +28,9 @@
background-color: #aeaeae;
border-radius: 10px 10px 0 0;
overflow: hidden;
+ display: flex;
+ align-items: center;
+ justify-content: center;
}
.ImgDiv span{
margin-left: 0;
diff --git a/src/features/Modals/Event/TeamDetailsModal/TeamDetailsModal.jsx b/src/features/Modals/Event/TeamDetailsModal/TeamDetailsModal.jsx
index 0315153d..50690956 100644
--- a/src/features/Modals/Event/TeamDetailsModal/TeamDetailsModal.jsx
+++ b/src/features/Modals/Event/TeamDetailsModal/TeamDetailsModal.jsx
@@ -1,9 +1,10 @@
-import React, { useState, useEffect } from "react";
+import React, { useState, useEffect, useContext } from "react";
import PropTypes from "prop-types";
-import { MdClose, MdGroups, MdPerson, MdEmail, MdSchool, MdCalendarToday } from "react-icons/md";
+import { MdClose, MdGroups, MdPerson, MdEmail, MdSchool, MdCalendarToday, MdPersonRemove } from "react-icons/md";
import { FaCopy, FaCheck } from "react-icons/fa";
import { api } from "../../../../services";
import { Alert, MicroLoading } from "../../../../microInteraction";
+import AuthContext from "../../../../context/AuthContext";
import styles from "./style/TeamDetailsModal.module.scss";
const TeamDetailsModal = ({ isOpen, onClose, formId, eventTitle }) => {
@@ -11,6 +12,8 @@ const TeamDetailsModal = ({ isOpen, onClose, formId, eventTitle }) => {
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState(null);
const [copiedCode, setCopiedCode] = useState(false);
+ const [removingMember, setRemovingMember] = useState(null);
+ const authCtx = useContext(AuthContext);
useEffect(() => {
if (isOpen && formId) {
@@ -61,7 +64,7 @@ const TeamDetailsModal = ({ isOpen, onClose, formId, eventTitle }) => {
await navigator.clipboard.writeText(teamDetails.teamCode);
setCopiedCode(true);
setTimeout(() => setCopiedCode(false), 2000);
-
+
Alert({
type: "success",
message: "Team code copied to clipboard!",
@@ -74,6 +77,59 @@ const TeamDetailsModal = ({ isOpen, onClose, formId, eventTitle }) => {
}
};
+ const handleRemoveMember = async (memberEmail, memberName) => {
+ // Confirm removal
+ const confirmed = window.confirm(
+ `Are you sure you want to remove ${memberName} from the team?`
+ );
+
+ if (!confirmed) return;
+
+ try {
+ setRemovingMember(memberEmail);
+
+ const response = await api.delete(`/api/form/removeMember/${formId}`, {
+ data: { memberEmail },
+ headers: {
+ Authorization: `Bearer ${localStorage.getItem("token")}`,
+ },
+ });
+
+ if (response.status === 200) {
+ Alert({
+ type: "success",
+ message: "Member removed successfully!",
+ position: "bottom-right",
+ duration: 3000,
+ });
+
+ // Update team details with the response data
+ setTeamDetails(response.data.data);
+ } else {
+ setError(response.data.message || "Failed to remove member");
+ }
+ } catch (err) {
+ console.error("Error removing member:", err);
+ setError(
+ err.response?.data?.message || "Failed to remove member. Please try again."
+ );
+ } finally {
+ setRemovingMember(null);
+ }
+ };
+
+ // Check if current user is team creator or admin
+ const canRemoveMembers = () => {
+ if (!teamDetails || !authCtx.user) return false;
+
+ // Get the team creator email (first member who registered)
+ const teamCreatorEmail = teamDetails.members[0]?.email;
+ const currentUserEmail = authCtx.user.email;
+ const isAdmin = authCtx.user.access === "ADMIN";
+
+ return currentUserEmail === teamCreatorEmail || isAdmin;
+ };
+
const handleBackdropClick = (e) => {
if (e.target === e.currentTarget) {
onClose();
@@ -109,19 +165,19 @@ const TeamDetailsModal = ({ isOpen, onClose, formId, eventTitle }) => {