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, 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) }, recordingActions: AudioRecordingActions = AudioRecordingActions.defaultActions(viewModel), headerContent: @Composable ColumnScope.(MessageComposerState) -> Unit = {
with(ChatTheme.componentFactory) {
MessageComposerHeaderContent(
state = it,
onCancel = onCancelAction,
onLinkPreviewClick = onLinkPreviewClick,
)
}
}, footerContent: @Composable ColumnScope.(MessageComposerState) -> Unit = {
with(ChatTheme.componentFactory) {
MessageComposerFooterContent(
state = it,
onAlsoSendToChannelSelected = onAlsoSendToChannelSelected,
)
}
}, mentionPopupContent: @Composable (List<User>) -> Unit = {
ChatTheme.componentFactory.MessageComposerMentionsPopupContent(
mentionSuggestions = it,
onMentionSelected = onMentionSelected,
)
}, commandPopupContent: @Composable (List<Command>) -> Unit = {
ChatTheme.componentFactory.MessageComposerCommandsPopupContent(
commandSuggestions = it,
onCommandSelected = onCommandSelected,
)
}, integrations: @Composable RowScope.(MessageComposerState) -> Unit = {
with(ChatTheme.componentFactory) {
MessageComposerIntegrations(
state = it,
onAttachmentsClick = onAttachmentsClick,
onCommandsClick = onCommandsClick,
)
}
}, label: @Composable (MessageComposerState) -> Unit = {
ChatTheme.componentFactory.MessageComposerLabel(state = it)
}, input: @Composable RowScope.(MessageComposerState) -> Unit = {
with(ChatTheme.componentFactory) {
MessageComposerInput(
state = it,
onInputChanged = onValueChange,
onAttachmentRemoved = onAttachmentRemoved,
label = label,
)
}
}, audioRecordingContent: @Composable RowScope.(MessageComposerState) -> Unit = {
with(ChatTheme.componentFactory) {
MessageComposerAudioRecordingContent(
state = it,
recordingActions = recordingActions,
)
}
}, trailingContent: @Composable (MessageComposerState) -> Unit = {
ChatTheme.componentFactory.MessageComposerTrailingContent(
state = it,
onSendClick = { input, attachments ->
val message = viewModel.buildNewMessage(input, attachments)
onSendMessage(message)
},
recordingActions = recordingActions,
)
})
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, 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 = {}, recordingActions: AudioRecordingActions = AudioRecordingActions.None, headerContent: @Composable ColumnScope.(MessageComposerState) -> Unit = {
with(ChatTheme.componentFactory) {
MessageComposerHeaderContent(
state = it,
onCancel = onCancelAction,
onLinkPreviewClick = onLinkPreviewClick,
)
}
}, footerContent: @Composable ColumnScope.(MessageComposerState) -> Unit = {
with(ChatTheme.componentFactory) {
MessageComposerFooterContent(
state = it,
onAlsoSendToChannelSelected = onAlsoSendToChannelSelected,
)
}
}, mentionPopupContent: @Composable (List<User>) -> Unit = {
ChatTheme.componentFactory.MessageComposerMentionsPopupContent(
mentionSuggestions = it,
onMentionSelected = onMentionSelected,
)
}, commandPopupContent: @Composable (List<Command>) -> Unit = {
ChatTheme.componentFactory.MessageComposerCommandsPopupContent(
commandSuggestions = it,
onCommandSelected = onCommandSelected,
)
}, integrations: @Composable RowScope.(MessageComposerState) -> Unit = {
with(ChatTheme.componentFactory) {
MessageComposerIntegrations(
state = it,
onAttachmentsClick = onAttachmentsClick,
onCommandsClick = onCommandsClick,
)
}
}, label: @Composable (MessageComposerState) -> Unit = {
ChatTheme.componentFactory.MessageComposerLabel(state = it)
}, input: @Composable RowScope.(MessageComposerState) -> Unit = {
with(ChatTheme.componentFactory) {
MessageComposerInput(
state = it,
onInputChanged = onValueChange,
onAttachmentRemoved = onAttachmentRemoved,
label = label,
)
}
}, audioRecordingContent: @Composable RowScope.(MessageComposerState) -> Unit = {
with(ChatTheme.componentFactory) {
MessageComposerAudioRecordingContent(
state = it,
recordingActions = recordingActions,
)
}
}, trailingContent: @Composable (MessageComposerState) -> Unit = {
ChatTheme.componentFactory.MessageComposerTrailingContent(
state = it,
onSendClick = onSendMessage,
recordingActions = recordingActions,
)
})
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.