From 0a223aa8698d30bd5b3011a907ece24fbc881131 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 2 Feb 2025 02:12:31 +0200 Subject: [PATCH] Remove user from group --- .../app/groups/groupmembers.tsx | 23 +++++++++++++++ CollectifyFrontend/services/groupService.ts | 29 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/CollectifyFrontend/app/groups/groupmembers.tsx b/CollectifyFrontend/app/groups/groupmembers.tsx index 0cc1180..df2cce0 100644 --- a/CollectifyFrontend/app/groups/groupmembers.tsx +++ b/CollectifyFrontend/app/groups/groupmembers.tsx @@ -7,12 +7,14 @@ import { ApplicationProvider, Avatar, Spinner, + Button, } from '@ui-kitten/components'; import { StyleSheet } from 'react-native'; import * as eva from '@eva-design/eva'; import { getGroupMembers } from '../../services/groupService'; import { getProfile } from '../../services/authService'; import { useLocalSearchParams } from 'expo-router'; +import { deleteMemberFromGroup } from '../../services/groupService'; // Import the delete function type UserProfile = { id: string; @@ -64,6 +66,18 @@ export default function GroupMembersScreen() { fetchMembers(); }, [groupId, currentUserId]); + // Handle member deletion + const handleDeleteMember = async (memberId: string) => { + try { + await deleteMemberFromGroup(groupId as string, memberId); + // Update the UI after successful deletion + setGroupMembers((prevMembers) => prevMembers.filter((member) => member.id !== memberId)); + alert('Member removed successfully.'); + } catch (error) { + alert('Failed to remove member.'); + } + }; + if (error) { return ( @@ -101,6 +115,15 @@ export default function GroupMembersScreen() { accessoryLeft={() => ( )} + accessoryRight={() => ( + + )} style={styles.listItem} /> )} diff --git a/CollectifyFrontend/services/groupService.ts b/CollectifyFrontend/services/groupService.ts index 9c88f5c..c89b113 100644 --- a/CollectifyFrontend/services/groupService.ts +++ b/CollectifyFrontend/services/groupService.ts @@ -176,4 +176,33 @@ export const getGroupMembers = async (groupId: string) => { console.error('Error fetching the group members:', error); throw error; } +}; + +export const deleteMemberFromGroup = async (groupId: string, memberId: string) => { + try { + const accessToken = await SecureStore.getItemAsync('accessToken'); + + if (!accessToken) { + throw new Error('Access token is missing. Please log in.'); + } + + const response = await api.delete('/api/groups/remove_member', { + data: { + groupId: groupId, + memberId: memberId, + }, + headers: { + Authorization: `Bearer ${accessToken}`, + }, + }); + + return response.data; + } catch (error) { + if (axios.isAxiosError(error)) { + console.error('Error deleting the member', error.response?.data || error.message); + } else { + console.error('An unknown error occurred:', error); + } + throw error; + } }; \ No newline at end of file