diff --git a/feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/ConversationChatListScreen.kt b/feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/ConversationChatListScreen.kt index 912961976..2c1f312f5 100644 --- a/feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/ConversationChatListScreen.kt +++ b/feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/ConversationChatListScreen.kt @@ -99,6 +99,10 @@ internal fun ConversationChatListScreen( val posts: LazyPagingItems = viewModel.chatListUseCase.postPagingData.collectAsLazyPagingItems() + LaunchedEffect(courseId, conversationId) { + chatListState.scrollToItem(0) + } + ConversationChatListScreen( modifier = modifier, courseId = courseId, diff --git a/feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/ConversationScreen.kt b/feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/ConversationScreen.kt index aa40fb9a4..6f040a642 100644 --- a/feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/ConversationScreen.kt +++ b/feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/ConversationScreen.kt @@ -10,16 +10,12 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.VerticalDivider import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import androidx.lifecycle.ViewModelStore -import androidx.lifecycle.ViewModelStoreOwner import de.tum.informatics.www1.artemis.native_app.core.ui.getWindowSizeClass import de.tum.informatics.www1.artemis.native_app.core.ui.navigation.DefaultTransition import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.StandalonePostId @@ -44,39 +40,17 @@ fun ConversationScreen( onNavigateToSettings: () -> Unit, conversationsOverview: @Composable (Modifier) -> Unit ) { - val store = remember { ViewModelStore() } - - val owner = remember(store) { - object : ViewModelStoreOwner { - override val viewModelStore: ViewModelStore = store - } - } - - DisposableEffect(courseId, conversationId) { - onDispose { - store.clear() - } - } - val viewModel: ConversationViewModel = koinViewModel( key = "$courseId|$conversationId", - viewModelStoreOwner = owner - ) { parametersOf(courseId, conversationId, threadPostId) } + ) { parametersOf(courseId, conversationId, threadPostId) } LaunchedEffect(threadPostId, viewModel) { viewModel.updateOpenedThread(threadPostId) } - var showThread by remember { mutableStateOf(threadPostId != null) } - - val onNavigateUp = { - onCloseThread() - showThread = false - } - val onClickViewPost = { clientPostId: StandalonePostId -> - onOpenThread(clientPostId) - showThread = true + val showThread by remember(threadPostId) { + mutableStateOf(threadPostId != null) } WindowSizeAwareTwoColumnLayout( @@ -101,7 +75,7 @@ fun ConversationScreen( ConversationThreadScreen( modifier = Modifier.fillMaxSize(), viewModel = viewModel, - onNavigateUp = onNavigateUp + onNavigateUp = onCloseThread ) } else { ConversationChatListScreen( @@ -111,7 +85,7 @@ fun ConversationScreen( conversationId = conversationId, onNavigateBack = onCloseConversation, onNavigateToSettings = onNavigateToSettings, - onClickViewPost = onClickViewPost + onClickViewPost = onOpenThread ) } } diff --git a/feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/chatlist/PostsDataState.kt b/feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/chatlist/PostsDataState.kt index 93d03b6dc..f993f0773 100644 --- a/feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/chatlist/PostsDataState.kt +++ b/feature/metis/conversation/src/main/kotlin/de/tum/informatics/www1/artemis/native_app/feature/metis/conversation/ui/chatlist/PostsDataState.kt @@ -2,7 +2,6 @@ package de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.ui import androidx.paging.LoadState import androidx.paging.compose.LazyPagingItems -import androidx.paging.compose.itemKey /** * Abstract layer over the loaded posts state, so we can use both a Pager and a simple list to display posts. @@ -72,7 +71,13 @@ sealed interface PostsDataState { } fun LazyPagingItems.asPostsDataState(): PostsDataState = when { - itemCount == 0 -> PostsDataState.Empty + itemCount == 0 -> { + if (loadState.isIdle) { + PostsDataState.Empty + } else { + PostsDataState.Loading + } + } loadState.refresh is LoadState.Loading -> PostsDataState.Loading loadState.refresh is LoadState.Error -> PostsDataState.Error(::retry) else -> PostsDataState.Loaded.WithLazyPagingItems(