From cffcc8a2c7e4e444fd1f25ec95c67db109d9b9c9 Mon Sep 17 00:00:00 2001 From: Eugene Date: Fri, 7 Aug 2026 13:50:36 +0300 Subject: [PATCH] add send button --- .../composeResources/drawable/send.xml | 11 +++++ .../chat/presentation/ChatScreen.kt | 42 ++++++++++++------- 2 files changed, 39 insertions(+), 14 deletions(-) create mode 100644 feature/chat/chat-client/src/commonMain/composeResources/drawable/send.xml diff --git a/feature/chat/chat-client/src/commonMain/composeResources/drawable/send.xml b/feature/chat/chat-client/src/commonMain/composeResources/drawable/send.xml new file mode 100644 index 0000000..fc78a6b --- /dev/null +++ b/feature/chat/chat-client/src/commonMain/composeResources/drawable/send.xml @@ -0,0 +1,11 @@ + + + diff --git a/feature/chat/chat-client/src/commonMain/kotlin/ru/shadowsparky/chat/presentation/ChatScreen.kt b/feature/chat/chat-client/src/commonMain/kotlin/ru/shadowsparky/chat/presentation/ChatScreen.kt index 2627b06..4ab5098 100644 --- a/feature/chat/chat-client/src/commonMain/kotlin/ru/shadowsparky/chat/presentation/ChatScreen.kt +++ b/feature/chat/chat-client/src/commonMain/kotlin/ru/shadowsparky/chat/presentation/ChatScreen.kt @@ -5,10 +5,12 @@ import androiddev.feature.chat.chat_client.generated.resources.chat_input_placeh import androiddev.feature.chat.chat_client.generated.resources.chat_load_error import androiddev.feature.chat.chat_client.generated.resources.chat_ok import androiddev.feature.chat.chat_client.generated.resources.chat_retry_button +import androiddev.feature.chat.chat_client.generated.resources.send import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding @@ -26,6 +28,8 @@ import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material3.Button import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField @@ -56,6 +60,7 @@ import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.withLink import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp +import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource import ru.shadowsparky.chat.domain.ChatRoles import ru.shadowsparky.chat.domain.Message @@ -172,20 +177,29 @@ private fun ChatContent( if (state.isSending) { LinearProgressIndicator(Modifier.fillMaxWidth()) } - OutlinedTextField( - value = textInput, - onValueChange = { textInput = it }, - modifier = Modifier.focusRequester(textFieldFocusRequester).resetFocusOnUpEvent(listFocusRequester).fillMaxWidth(), - shape = RoundedCornerShape(24.dp), - placeholder = { Text(stringResource(Res.string.chat_input_placeholder)) }, - enabled = !state.isSending, - keyboardActions = KeyboardActions( - onDone = { - if (textInput.isNotBlank()) onSendMessage(textInput) - } - ), - keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done) - ) + Spacer(Modifier.height(4.dp)) + Row { + OutlinedTextField( + value = textInput, + onValueChange = { textInput = it }, + modifier = Modifier.focusRequester(textFieldFocusRequester).resetFocusOnUpEvent(listFocusRequester).weight(1f), + shape = RoundedCornerShape(24.dp), + placeholder = { Text(stringResource(Res.string.chat_input_placeholder)) }, + enabled = !state.isSending, + keyboardActions = KeyboardActions( + onDone = { + if (textInput.isNotBlank()) onSendMessage(textInput) + } + ), + keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done) + ) + IconButton( + onClick = { onSendMessage(textInput) }, + enabled = !state.isSending + ) { + Icon(painterResource(Res.drawable.send), contentDescription = null) + } + } } LaunchedEffect(null) { withFrameNanos {}