mirror of
https://github.com/LiveFastEatTrashRaccoon/RaccoonForLemmy.git
synced 2025-02-03 14:07:45 +01:00
fix(post): open post from user detail
This commit is contained in:
parent
50f6610159
commit
08f4b2d7ed
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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 = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user