Package-level declarations

Functions

Link copied to clipboard
fun DefaultMessageComposerFooterContent(messageComposerState: MessageComposerState, onAlsoSendToChannelSelected: (Boolean) -> Unit)

Represents the default content shown at the bottom of the message composer component.

Link copied to clipboard
fun DefaultMessageComposerHeaderContent(messageComposerState: MessageComposerState, onCancelAction: () -> Unit, onLinkPreviewClick: (LinkPreview) -> Unit? = null)

Represents the default content shown at the top of the message composer component.

Link copied to clipboard
fun MessageComposer(viewModel: MessageComposerViewModel, modifier: Modifier = Modifier, statefulStreamMediaRecorder: StatefulStreamMediaRecorder? = null, onSendMessage: (Message) -> Unit = { viewModel.sendMessage(it) }, onAttachmentsClick: () -> Unit = {}, onCommandsClick: () -> Unit = {}, onValueChange: (String) -> Unit = { viewModel.setMessageInput(it) }, onAttachmentRemoved: (Attachment) -> Unit = { viewModel.removeSelectedAttachment(it) }, onCancelAction: () -> Unit = { viewModel.dismissMessageActions() }, onLinkPreviewClick: (LinkPreview) -> Unit? = null, onMentionSelected: (User) -> Unit = { viewModel.selectMention(it) }, onCommandSelected: (Command) -> Unit = { viewModel.selectCommand(it) }, onAlsoSendToChannelSelected: (Boolean) -> Unit = { viewModel.setAlsoSendToChannel(it) }, onRecordingSaved: (Attachment) -> Unit = { viewModel.addSelectedAttachments(listOf(it)) }, headerContent: @Composable ColumnScope.(MessageComposerState) -> Unit = { DefaultMessageComposerHeaderContent( messageComposerState = it, onCancelAction = onCancelAction, onLinkPreviewClick = onLinkPreviewClick, ) }, footerContent: @Composable ColumnScope.(MessageComposerState) -> Unit = { DefaultMessageComposerFooterContent( messageComposerState = it, onAlsoSendToChannelSelected = onAlsoSendToChannelSelected, ) }, mentionPopupContent: @Composable (List<User>) -> Unit = { DefaultMentionPopupContent( mentionSuggestions = it, onMentionSelected = onMentionSelected, ) }, commandPopupContent: @Composable (List<Command>) -> Unit = { DefaultCommandPopupContent( commandSuggestions = it, onCommandSelected = onCommandSelected, ) }, integrations: @Composable RowScope.(MessageComposerState) -> Unit = { DefaultComposerIntegrations( messageInputState = it, onAttachmentsClick = onAttachmentsClick, onCommandsClick = onCommandsClick, ownCapabilities = it.ownCapabilities, ) }, label: @Composable (MessageComposerState) -> Unit = { DefaultComposerLabel(it.ownCapabilities) }, input: @Composable RowScope.(MessageComposerState) -> Unit = { DefaultComposerInputContent( messageComposerState = it, onValueChange = onValueChange, onAttachmentRemoved = onAttachmentRemoved, label = label, ) }, audioRecordingContent: @Composable RowScope.(StatefulStreamMediaRecorder) -> Unit = { DefaultMessageComposerAudioRecordingContent(it) }, trailingContent: @Composable (MessageComposerState) -> Unit = { DefaultMessageComposerTrailingContent( value = it.inputValue, coolDownTime = it.coolDownTime, validationErrors = it.validationErrors, attachments = it.attachments, ownCapabilities = it.ownCapabilities, isInEditMode = it.action is Edit, onSendMessage = { input, attachments -> val message = viewModel.buildNewMessage(input, attachments) onSendMessage(message) }, onRecordingSaved = onRecordingSaved, statefulStreamMediaRecorder = statefulStreamMediaRecorder, ) })

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, statefulStreamMediaRecorder: StatefulStreamMediaRecorder? = null, onAttachmentsClick: () -> Unit = {}, onCommandsClick: () -> Unit = {}, onValueChange: (String) -> Unit = {}, onAttachmentRemoved: (Attachment) -> Unit = {}, onCancelAction: () -> Unit = {}, onLinkPreviewClick: (LinkPreview) -> Unit? = null, onMentionSelected: (User) -> Unit = {}, onCommandSelected: (Command) -> Unit = {}, onAlsoSendToChannelSelected: (Boolean) -> Unit = {}, onRecordingSaved: (Attachment) -> Unit = {}, headerContent: @Composable ColumnScope.(MessageComposerState) -> Unit = { DefaultMessageComposerHeaderContent( messageComposerState = it, onCancelAction = onCancelAction, onLinkPreviewClick = onLinkPreviewClick, ) }, footerContent: @Composable ColumnScope.(MessageComposerState) -> Unit = { DefaultMessageComposerFooterContent( messageComposerState = it, onAlsoSendToChannelSelected = onAlsoSendToChannelSelected, ) }, mentionPopupContent: @Composable (List<User>) -> Unit = { DefaultMentionPopupContent( mentionSuggestions = it, onMentionSelected = onMentionSelected, ) }, commandPopupContent: @Composable (List<Command>) -> Unit = { DefaultCommandPopupContent( commandSuggestions = it, onCommandSelected = onCommandSelected, ) }, integrations: @Composable RowScope.(MessageComposerState) -> Unit = { DefaultComposerIntegrations( messageInputState = it, onAttachmentsClick = onAttachmentsClick, onCommandsClick = onCommandsClick, ownCapabilities = messageComposerState.ownCapabilities, ) }, label: @Composable (MessageComposerState) -> Unit = { DefaultComposerLabel(messageComposerState.ownCapabilities) }, input: @Composable RowScope.(MessageComposerState) -> Unit = { DefaultComposerInputContent( messageComposerState = messageComposerState, onValueChange = onValueChange, onAttachmentRemoved = onAttachmentRemoved, label = label, ) }, audioRecordingContent: @Composable RowScope.(StatefulStreamMediaRecorder) -> Unit = { DefaultMessageComposerAudioRecordingContent(it) }, trailingContent: @Composable (MessageComposerState) -> Unit = { DefaultMessageComposerTrailingContent( value = it.inputValue, coolDownTime = it.coolDownTime, validationErrors = it.validationErrors, attachments = it.attachments, onSendMessage = onSendMessage, ownCapabilities = messageComposerState.ownCapabilities, isInEditMode = it.action is Edit, onRecordingSaved = onRecordingSaved, statefulStreamMediaRecorder = statefulStreamMediaRecorder, ) })

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.