diff --git a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/userdetail/UserDetailScreen.kt b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/userdetail/UserDetailScreen.kt index 15918955d..5f0e610d4 100644 --- a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/userdetail/UserDetailScreen.kt +++ b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/userdetail/UserDetailScreen.kt @@ -16,6 +16,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment @@ -25,6 +26,8 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.text.style.TextOverflow import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen +import cafe.adriel.voyager.navigator.CurrentScreen +import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.bottomSheet.LocalBottomSheetNavigator import com.github.diegoberaldin.racconforlemmy.core.utils.onClick @@ -36,6 +39,10 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.userdetail.comment import com.github.diegoberaldin.raccoonforlemmy.core.commonui.userdetail.posts.UserDetailPostsScreen import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.UserModel import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toIcon +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach class UserDetailScreen( private val user: UserModel, @@ -114,32 +121,41 @@ class UserDetailScreen( verticalArrangement = Arrangement.spacedBy(Spacing.s), horizontalAlignment = Alignment.CenterHorizontally, ) { - val screen = when (uiState.currentTab) { - UserDetailSection.POSTS -> { - UserDetailPostsScreen( - modifier = Modifier.weight(1f).fillMaxWidth(), - user = user, - ).apply { - parentModel = model - onSectionSelected = { - model.reduce(UserDetailMviModel.Intent.SelectTab(it)) - } + val screens = listOf( + UserDetailPostsScreen( + modifier = Modifier.weight(1f).fillMaxWidth(), + user = user, + ).apply { + parentModel = model + onSectionSelected = { + model.reduce(UserDetailMviModel.Intent.SelectTab(it)) + } + }, + UserDetailCommentsScreen( + modifier = Modifier.weight(1f).fillMaxWidth(), + user = user, + ).apply { + parentModel = model + onSectionSelected = { + model.reduce(UserDetailMviModel.Intent.SelectTab(it)) } } + ) + Navigator(screens) { + CurrentScreen() - UserDetailSection.COMMENTS -> { - UserDetailCommentsScreen( - modifier = Modifier.weight(1f).fillMaxWidth(), - user = user, - ).apply { - parentModel = model - onSectionSelected = { - model.reduce(UserDetailMviModel.Intent.SelectTab(it)) - } - } + val navigator = LocalNavigator.current + LaunchedEffect(model) { + model.uiState.map { state -> state.currentTab }.distinctUntilChanged() + .onEach { tab -> + val index = when (tab) { + UserDetailSection.POSTS -> 0 + UserDetailSection.COMMENTS -> 1 + } + navigator?.replace(screens[index]) + }.launchIn(this) } } - Navigator(screen) } } } diff --git a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/userdetail/posts/UserDetailPostsScreen.kt b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/userdetail/posts/UserDetailPostsScreen.kt index 875c2d928..d2294428e 100644 --- a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/userdetail/posts/UserDetailPostsScreen.kt +++ b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/userdetail/posts/UserDetailPostsScreen.kt @@ -39,6 +39,7 @@ import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.bottomSheet.LocalBottomSheetNavigator import cafe.adriel.voyager.navigator.currentOrThrow +import com.github.diegoberaldin.racconforlemmy.core.utils.onClick import com.github.diegoberaldin.racconforlemmy.core.utils.toLocalPixel import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing import com.github.diegoberaldin.raccoonforlemmy.core.architecture.bindToLifecycle @@ -50,6 +51,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.UserCou import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.UserHeader import com.github.diegoberaldin.raccoonforlemmy.core.commonui.createcomment.CreateCommentScreen import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getUserPostsViewModel +import com.github.diegoberaldin.raccoonforlemmy.core.commonui.postdetail.PostDetailScreen import com.github.diegoberaldin.raccoonforlemmy.core.commonui.userdetail.UserDetailSection import com.github.diegoberaldin.raccoonforlemmy.core.commonui.userdetail.UserDetailViewModel import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.UserModel @@ -198,6 +200,17 @@ internal class UserDetailPostsScreen( }, content = { PostCard( + modifier = Modifier.onClick { + navigator.push( + PostDetailScreen( + post = post, + ).apply { + onBack = { + navigator.pop() + } + }, + ) + }, post = post, blurNsfw = uiState.blurNsfw, onUpVote = {