diff --git a/app/src/main/java/com/example/login_v3/data/api/Main_API_Service.kt b/app/src/main/java/com/example/login_v3/data/api/Main_API_Service.kt index 82b2222..196463e 100644 --- a/app/src/main/java/com/example/login_v3/data/api/Main_API_Service.kt +++ b/app/src/main/java/com/example/login_v3/data/api/Main_API_Service.kt @@ -55,12 +55,14 @@ interface TecnologiaApi { suspend fun getFriendsPending(): PendingFriendsResponse //accept and reject - @POST("api/friends/{id}/accept") + // accept and reject + @POST("api/friends/{fromUserId}/accept") suspend fun acceptFriendRequest( - @Path("id") friendshipId: String + @Path("fromUserId") fromUserId: String ): Response - @POST("api/friends/{id}/reject") + + @POST("api/friends/{fromUserId}/reject") suspend fun rejectFriendRequest( - @Path("id") friendshipId: String + @Path("fromUserId") fromUserId: String ): Response } \ No newline at end of file diff --git a/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_contact_list.kt b/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_contact_list.kt index afe1a81..9534c8a 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_contact_list.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_contact_list.kt @@ -84,8 +84,13 @@ fun Message_contact_list( items(uiState.pendingRequests) { request -> PendingFriendRow( request, - onAccept = { id -> contactListViewModel.acceptFriend(id) }, - onReject = { id -> /* 實作邏輯同 accept */ } + isLoading = uiState.isLoading, + onAccept = { _ -> + request.fromUserId?.let { id -> contactListViewModel.acceptFriend(id) } + }, + onReject = { _ -> + request.fromUserId?.let { id -> contactListViewModel.rejectFriend(id) } + } ) } item { HorizontalDivider(modifier = Modifier.padding(vertical = 12.dp)) } @@ -158,6 +163,7 @@ fun FriendRow(friend: Friend) { @Composable fun PendingFriendRow( request: PendingFriendApiModel, + isLoading: Boolean, onAccept: (String) -> Unit, // 增加回呼 onReject: (String) -> Unit // 增加回呼 ) { @@ -175,14 +181,16 @@ fun PendingFriendRow( }, trailingContent = { Row { - IconButton(onClick = { - request.friendshipId?.let { onReject(it) } - }) { + IconButton( + onClick = { request.friendshipId?.let { onReject(it) } }, + enabled = !isLoading // 正在載入時禁用 + ) { Icon(Icons.Default.Close, contentDescription = "拒絕", tint = Color.Red) } - IconButton(onClick = { - request.friendshipId?.let { onAccept(it) } - }) { + IconButton( + onClick = { request.friendshipId?.let { onAccept(it) } }, + enabled = !isLoading // 正在載入時禁用 + ) { Icon(Icons.Default.Check, contentDescription = "接受", tint = Color.Green) } } diff --git a/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Contact_list_ViewModel.kt b/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Contact_list_ViewModel.kt index 37010cd..4e242b8 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Contact_list_ViewModel.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Contact_list_ViewModel.kt @@ -58,7 +58,10 @@ class ContactListViewModel @Inject constructor( //accept and reject fun acceptFriend(friendshipId: String) { viewModelScope.launch { - // 這裡可以選擇性開啟 loading + + //loading + _uiState.update { it.copy(isLoading = true) } + val result = repository.acceptFriendRequest(friendshipId) result.onSuccess { @@ -72,6 +75,9 @@ class ContactListViewModel @Inject constructor( } fun rejectFriend(friendshipId: String) { viewModelScope.launch { + + _uiState.update { it.copy(isLoading = true) } + val result = repository.rejectFriendRequest(friendshipId) result.onSuccess {