From 8644930f42e57f945220755bc1c31cb1845979b1 Mon Sep 17 00:00:00 2001 From: Eric85710 Date: Sun, 31 May 2026 15:08:19 +0800 Subject: [PATCH] dm-67 --- .../Message/UI/Detail/Message_Messaging.kt | 4 +++ .../Detail/Message_Messaging_ViewModel.kt | 33 +++++++++++++++---- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging.kt b/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging.kt index 42ee21a..e284f48 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging.kt @@ -113,6 +113,9 @@ fun MessageMessaging( // 💡 1. 取得 ViewModel 裡的 Reaction 狀態 val reactionState by viewModel.reactionUsersState.collectAsStateWithLifecycle() + //message that selected + val actionMessage by viewModel.actionMessage.collectAsStateWithLifecycle() + //進入時重整 LaunchedEffect(roomId) { @@ -332,6 +335,7 @@ fun MessageRow( var showEmojiPanel by remember { mutableStateOf(false) } val commonEmojis = listOf("👍", "❤️", "😂", "😮", "😢", "🙏") + Row( modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt b/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt index df6882e..f8123be 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt @@ -64,6 +64,29 @@ class ChatViewModel @Inject constructor( private val tokenManager: TokenManager ) : ViewModel() { + // --- 訊息長按動作選單狀態 (Action Menu State) --- + + // 1. 私有的 MutableStateFlow,用來控制長按選中的訊息 + private val _actionMessage = MutableStateFlow(null) + + // 2. 公開給 Compose UI 觀察的唯讀 StateFlow + val actionMessage: StateFlow = _actionMessage.asStateFlow() + + /** + * 設定目前哪一則訊息被長按選取(開啟動作選單) + */ + fun setActionMessage(message: Message?) { + _actionMessage.value = message + } + + /** + * 清除目前選取的訊息狀態(關閉動作選單) + */ + fun clearActionMessage() { + _actionMessage.value = null + } + + //reply function private val _replyingMessage = MutableStateFlow(null) val replyingMessage: StateFlow = _replyingMessage.asStateFlow() @@ -264,23 +287,21 @@ class ChatViewModel @Inject constructor( result.onSuccess { _deleteMessageState.value = DeleteMessageState.Success - // 😎【超讚的體驗優化】:不重新 call loadMessages,直接在本地修改該訊息的狀態 + // ✨【優化】:刪除成功後,自動關閉長按選單 + clearActionMessage() + val currentState = _uiState.value if (currentState is MessagesUiState.Success) { - val updatedMessages = currentState.messages.map { message -> if (message.id == messageId) { - // 將該則訊息改為已刪除狀態(利用 copy 複製,並帶入對應欄位) message.copy( isDeleted = true, - content = "此訊息已被刪除" // 可選擇在這裡直接改 content,或交由 UI 根據 isDeleted 顯示對應文字 + content = "此訊息已被刪除" ) } else { message } } - - // 更新 uiState,Compose 畫面會立刻連動刷新 _uiState.value = currentState.copy(messages = updatedMessages) }