@@ -32,6 +32,9 @@ import io.getstream.chat.android.core.internal.coroutines.DispatcherProvider
3232import io.getstream.chat.android.models.Message
3333import io.getstream.chat.android.state.extensions.watchChannelAsState
3434import io.getstream.chat.android.ui.common.feature.messages.composer.MessageComposerController
35+ import io.getstream.chat.android.ui.common.feature.messages.composer.internal.ComposerStateSaver
36+ import io.getstream.chat.android.ui.common.feature.messages.composer.internal.NoOpComposerStateSaver
37+ import io.getstream.chat.android.ui.common.feature.messages.composer.internal.SavedStateComposerStateSaver
3538import io.getstream.chat.android.ui.common.feature.messages.composer.mention.DefaultUserLookupHandler
3639import io.getstream.chat.android.ui.common.feature.messages.composer.mention.UserLookupHandler
3740import io.getstream.chat.android.ui.common.feature.messages.list.DateSeparatorHandler
@@ -123,21 +126,7 @@ public class MessagesViewModelFactory(
123126 */
124127 private val factories: Map <Class <* >, () -> ViewModel > = mapOf (
125128 MessageComposerViewModel ::class .java to {
126- MessageComposerViewModel (
127- MessageComposerController (
128- chatClient = chatClient,
129- channelState = channelStateFlow,
130- mediaRecorder = mediaRecorder,
131- userLookupHandler = userLookupHandler,
132- fileToUri = fileToUriConverter,
133- channelCid = channelId,
134- config = MessageComposerController .Config (
135- maxAttachmentCount = maxAttachmentCount,
136- isLinkPreviewEnabled = isComposerLinkPreviewEnabled,
137- isDraftMessageEnabled = isComposerDraftMessageEnabled,
138- ),
139- ),
140- )
129+ createMessageComposerViewModel(NoOpComposerStateSaver )
141130 },
142131 MessageListViewModel ::class .java to {
143132 MessageListViewModel (
@@ -190,6 +179,11 @@ public class MessagesViewModelFactory(
190179 * that do not require a [SavedStateHandle].
191180 */
192181 override fun <T : ViewModel > create (modelClass : Class <T >, extras : CreationExtras ): T {
182+ if (modelClass == MessageComposerViewModel ::class .java) {
183+ val savedStateHandle = extras.createSavedStateHandle()
184+ @Suppress(" UNCHECKED_CAST" )
185+ return createMessageComposerViewModel(SavedStateComposerStateSaver (savedStateHandle)) as T
186+ }
193187 if (modelClass == AttachmentsPickerViewModel ::class .java) {
194188 val savedStateHandle = extras.createSavedStateHandle()
195189 @Suppress(" UNCHECKED_CAST" )
@@ -201,4 +195,23 @@ public class MessagesViewModelFactory(
201195 }
202196 return create(modelClass)
203197 }
198+
199+ private fun createMessageComposerViewModel (stateSaver : ComposerStateSaver ): MessageComposerViewModel {
200+ return MessageComposerViewModel (
201+ MessageComposerController (
202+ chatClient = chatClient,
203+ channelState = channelStateFlow,
204+ mediaRecorder = mediaRecorder,
205+ userLookupHandler = userLookupHandler,
206+ fileToUri = fileToUriConverter,
207+ channelCid = channelId,
208+ config = MessageComposerController .Config (
209+ maxAttachmentCount = maxAttachmentCount,
210+ isLinkPreviewEnabled = isComposerLinkPreviewEnabled,
211+ isDraftMessageEnabled = isComposerDraftMessageEnabled,
212+ ),
213+ stateSaver = stateSaver,
214+ ),
215+ )
216+ }
204217}
0 commit comments