Package-level declarations
Functions
Link copied to clipboard
fun MessageComposer(viewModel: MessageComposerViewModel, modifier: Modifier = Modifier, isAttachmentPickerVisible: Boolean = false, onSendMessage: (Message) -> Unit = { viewModel.sendMessage(it) }, onAttachmentsClick: () -> Unit = {}, onValueChange: (String) -> Unit = { viewModel.setMessageInput(it) }, onAttachmentRemoved: (Attachment) -> Unit = { viewModel.removeAttachment(it) }, onCancelAction: () -> Unit = { viewModel.dismissMessageActions() }, onLinkPreviewClick: (LinkPreview) -> Unit? = null, onCancelLinkPreviewClick: () -> Unit? = { viewModel.cancelLinkPreview() }, onUserSelected: (User) -> Unit = { viewModel.selectMention(it) }, onCommandSelected: (Command) -> Unit = { viewModel.selectCommand(it) }, onAlsoSendToChannelChange: (Boolean) -> Unit = viewModel::setAlsoSendToChannel, onActiveCommandDismiss: () -> Unit = viewModel::clearActiveCommand, recordingActions: AudioRecordingActions = AudioRecordingActions.defaultActions(
viewModel = viewModel,
sendOnComplete = ChatTheme.config.composer.audioRecordingSendOnComplete,
), input: @Composable RowScope.(MessageComposerState) -> Unit = { state ->
val inputFocusRequester = remember { FocusRequester() }
LaunchedEffect(Unit) {
viewModel.inputFocusEvents.collect {
inputFocusRequester.requestFocus()
}
}
ChatTheme.componentFactory.MessageComposerInput(
params = MessageComposerInputParams(
modifier = Modifier
.weight(1f)
.focusRequester(inputFocusRequester),
state = state,
onInputChanged = onValueChange,
onAttachmentRemoved = onAttachmentRemoved,
onLinkPreviewClick = onLinkPreviewClick,
onCancelLinkPreviewClick = onCancelLinkPreviewClick,
onCancel = onCancelAction,
onSendClick = { input, attachments ->
val message = viewModel.buildNewMessage(input, attachments)
onSendMessage(message)
},
onAlsoSendToChannelChange = onAlsoSendToChannelChange,
recordingActions = recordingActions,
onActiveCommandDismiss = onActiveCommandDismiss,
),
)
})
Default MessageComposer component that relies on MessageComposerViewModel to handle data and communicate various events.
fun MessageComposer(messageComposerState: MessageComposerState, onSendMessage: (String, List<Attachment>) -> Unit, modifier: Modifier = Modifier, isAttachmentPickerVisible: Boolean = false, onAttachmentsClick: () -> Unit = {}, onValueChange: (String) -> Unit = {}, onAttachmentRemoved: (Attachment) -> Unit = {}, onCancelAction: () -> Unit = {}, onLinkPreviewClick: (LinkPreview) -> Unit? = null, onCancelLinkPreviewClick: () -> Unit? = null, onUserSelected: (User) -> Unit = {}, onCommandSelected: (Command) -> Unit = {}, onAlsoSendToChannelChange: (Boolean) -> Unit = {}, onActiveCommandDismiss: () -> Unit = {}, recordingActions: AudioRecordingActions = AudioRecordingActions.None, input: @Composable RowScope.(MessageComposerState) -> Unit = { state ->
ChatTheme.componentFactory.MessageComposerInput(
params = MessageComposerInputParams(
modifier = Modifier.weight(1f),
state = state,
onInputChanged = onValueChange,
onAttachmentRemoved = onAttachmentRemoved,
onCancel = onCancelAction,
onLinkPreviewClick = onLinkPreviewClick,
onCancelLinkPreviewClick = onCancelLinkPreviewClick,
onSendClick = onSendMessage,
onAlsoSendToChannelChange = onAlsoSendToChannelChange,
recordingActions = recordingActions,
onActiveCommandDismiss = onActiveCommandDismiss,
),
)
})
Clean version of the MessageComposer that doesn't rely on ViewModels, so the user can provide a manual way to handle and represent data and various operations.