Skip to content

Commit be63943

Browse files
committed
Refactor command selection handling.
- Removed `CommandSelectionRouting.kt` and its associated tests, moving command availability logic into the `MessageComposerViewModel`. - Added `snackbarHostState` to `MessageComposerParams` and `MessageComposer` to support displaying validation errors and transient notifications like unavailable commands. - Updated `MessageComposer` to collect events from `MessageComposerViewModel` and show relevant snackbar messages. - Updated `AttachmentPickerMenu` and `ChatComponentFactory` to align with the new command selection and snackbar logic. - Exposed `events` flow in `MessageComposerViewModel` and updated public API signatures.
1 parent 79f2abf commit be63943

8 files changed

Lines changed: 53 additions & 208 deletions

File tree

stream-chat-android-compose/api/stream-chat-android-compose.api

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1938,7 +1938,7 @@ public final class io/getstream/chat/android/compose/ui/messages/composer/Compos
19381938

19391939
public final class io/getstream/chat/android/compose/ui/messages/composer/MessageComposerKt {
19401940
public static final fun MessageComposer (Lio/getstream/chat/android/compose/viewmodel/messages/MessageComposerViewModel;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;III)V
1941-
public static final fun MessageComposer (Lio/getstream/chat/android/ui/common/state/messages/composer/MessageComposerState;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;III)V
1941+
public static final fun MessageComposer (Lio/getstream/chat/android/ui/common/state/messages/composer/MessageComposerState;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/SnackbarHostState;Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;III)V
19421942
}
19431943

19441944
public final class io/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions {
@@ -4708,8 +4708,8 @@ public final class io/getstream/chat/android/compose/ui/theme/MessageComposerLin
47084708

47094709
public final class io/getstream/chat/android/compose/ui/theme/MessageComposerParams {
47104710
public static final field $stable I
4711-
public fun <init> (Lio/getstream/chat/android/ui/common/state/messages/composer/MessageComposerState;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
4712-
public synthetic fun <init> (Lio/getstream/chat/android/ui/common/state/messages/composer/MessageComposerState;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
4711+
public fun <init> (Lio/getstream/chat/android/ui/common/state/messages/composer/MessageComposerState;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/SnackbarHostState;)V
4712+
public synthetic fun <init> (Lio/getstream/chat/android/ui/common/state/messages/composer/MessageComposerState;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/SnackbarHostState;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
47134713
public final fun component1 ()Lio/getstream/chat/android/ui/common/state/messages/composer/MessageComposerState;
47144714
public final fun component10 ()Lkotlin/jvm/functions/Function1;
47154715
public final fun component11 ()Lkotlin/jvm/functions/Function1;
@@ -4718,6 +4718,7 @@ public final class io/getstream/chat/android/compose/ui/theme/MessageComposerPar
47184718
public final fun component14 ()Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;
47194719
public final fun component15 ()Lkotlin/jvm/functions/Function1;
47204720
public final fun component16 ()Lkotlin/jvm/functions/Function0;
4721+
public final fun component17 ()Landroidx/compose/material3/SnackbarHostState;
47214722
public final fun component2 ()Lkotlin/jvm/functions/Function4;
47224723
public final fun component3 ()Landroidx/compose/ui/Modifier;
47234724
public final fun component4 ()Z
@@ -4726,8 +4727,8 @@ public final class io/getstream/chat/android/compose/ui/theme/MessageComposerPar
47264727
public final fun component7 ()Lkotlin/jvm/functions/Function1;
47274728
public final fun component8 ()Lkotlin/jvm/functions/Function1;
47284729
public final fun component9 ()Lkotlin/jvm/functions/Function0;
4729-
public final fun copy (Lio/getstream/chat/android/ui/common/state/messages/composer/MessageComposerState;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Lio/getstream/chat/android/compose/ui/theme/MessageComposerParams;
4730-
public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/MessageComposerParams;Lio/getstream/chat/android/ui/common/state/messages/composer/MessageComposerState;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/MessageComposerParams;
4730+
public final fun copy (Lio/getstream/chat/android/ui/common/state/messages/composer/MessageComposerState;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/SnackbarHostState;)Lio/getstream/chat/android/compose/ui/theme/MessageComposerParams;
4731+
public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/MessageComposerParams;Lio/getstream/chat/android/ui/common/state/messages/composer/MessageComposerState;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/SnackbarHostState;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/MessageComposerParams;
47314732
public fun equals (Ljava/lang/Object;)Z
47324733
public final fun getInput ()Lkotlin/jvm/functions/Function4;
47334734
public final fun getMessageComposerState ()Lio/getstream/chat/android/ui/common/state/messages/composer/MessageComposerState;
@@ -4744,6 +4745,7 @@ public final class io/getstream/chat/android/compose/ui/theme/MessageComposerPar
47444745
public final fun getOnUserSelected ()Lkotlin/jvm/functions/Function1;
47454746
public final fun getOnValueChange ()Lkotlin/jvm/functions/Function1;
47464747
public final fun getRecordingActions ()Lio/getstream/chat/android/compose/ui/messages/composer/actions/AudioRecordingActions;
4748+
public final fun getSnackbarHostState ()Landroidx/compose/material3/SnackbarHostState;
47474749
public fun hashCode ()I
47484750
public final fun isAttachmentPickerVisible ()Z
47494751
public fun toString ()Ljava/lang/String;
@@ -6701,6 +6703,7 @@ public final class io/getstream/chat/android/compose/viewmodel/messages/MessageC
67016703
public static synthetic fun completeRecording$default (Lio/getstream/chat/android/compose/viewmodel/messages/MessageComposerViewModel;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
67026704
public final fun createPoll (Lio/getstream/chat/android/models/CreatePollParams;)V
67036705
public final fun dismissMessageActions ()V
6706+
public final fun getEvents ()Lkotlinx/coroutines/flow/SharedFlow;
67046707
public final fun getInputFocusEvents ()Lkotlinx/coroutines/flow/SharedFlow;
67056708
public final fun getMessageComposerState ()Lkotlinx/coroutines/flow/StateFlow;
67066709
public final fun getMessageInput ()Lkotlinx/coroutines/flow/StateFlow;

stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/attachments/AttachmentPickerMenu.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,10 @@ import androidx.compose.runtime.saveable.rememberSaveable
2929
import androidx.compose.runtime.setValue
3030
import androidx.compose.ui.Alignment
3131
import androidx.compose.ui.Modifier
32-
import androidx.compose.ui.platform.LocalContext
3332
import androidx.compose.ui.platform.LocalFocusManager
3433
import androidx.compose.ui.unit.dp
3534
import androidx.lifecycle.compose.collectAsStateWithLifecycle
3635
import io.getstream.chat.android.compose.ui.messages.ChannelScreen
37-
import io.getstream.chat.android.compose.ui.messages.composer.internal.routeCommandSelection
3836
import io.getstream.chat.android.compose.ui.theme.AttachmentPickerParams
3937
import io.getstream.chat.android.compose.ui.theme.ChatTheme
4038
import io.getstream.chat.android.compose.util.isKeyboardVisibleAsState
@@ -98,8 +96,7 @@ public fun AttachmentPickerMenu(
9896
else -> 350.dp
9997
}
10098

101-
val context = LocalContext.current
102-
val actions = remember(attachmentsPickerViewModel, composerViewModel, composerState.action) {
99+
val actions = remember(attachmentsPickerViewModel, composerViewModel) {
103100
val baseActions = AttachmentPickerActions.defaultActions(attachmentsPickerViewModel, composerViewModel)
104101
baseActions.copy(
105102
onCreatePollClick = {
@@ -116,7 +113,7 @@ public fun AttachmentPickerMenu(
116113
},
117114
onCommandSelected = { command ->
118115
isShowingDialog = false
119-
routeCommandSelection(command, composerState.action, context, baseActions.onCommandSelected)
116+
baseActions.onCommandSelected(command)
120117
},
121118
onDismiss = {
122119
isShowingDialog = false

0 commit comments

Comments
 (0)