Loading feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContentPreview.kt +4 −2 Original line number Original line Diff line number Diff line Loading @@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.feature.navigation.drawer.ui.FakeData.DISPLAY_ACCOUNT import app.k9mail.feature.navigation.drawer.ui.FakeData.DISPLAY_ACCOUNT import kotlinx.collections.immutable.persistentListOf @Composable @Composable @Preview(showBackground = true) @Preview(showBackground = true) Loading @@ -11,8 +12,9 @@ internal fun DrawerContentPreview() { PreviewWithTheme { PreviewWithTheme { DrawerContent( DrawerContent( state = DrawerContract.State( state = DrawerContract.State( accounts = emptyList(), currentAccount = null, currentAccount = null, accounts = persistentListOf(), folders = persistentListOf(), ), ), ) ) } } Loading @@ -24,7 +26,7 @@ fun DrawerContentWithAccountPreview() { PreviewWithTheme { PreviewWithTheme { DrawerContent( DrawerContent( state = DrawerContract.State( state = DrawerContract.State( accounts = listOf(DISPLAY_ACCOUNT), accounts = persistentListOf(DISPLAY_ACCOUNT), currentAccount = DISPLAY_ACCOUNT, currentAccount = DISPLAY_ACCOUNT, ), ), ) ) Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/NavigationDrawerModule.kt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -49,6 +49,7 @@ val navigationDrawerModule: Module = module { viewModel { viewModel { DrawerViewModel( DrawerViewModel( getDisplayAccounts = get(), getDisplayAccounts = get(), getDisplayFoldersForAccount = get(), ) ) } } } } feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContent.kt +7 −28 Original line number Original line Diff line number Diff line Loading @@ -4,16 +4,15 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.platform.testTag import app.k9mail.core.ui.compose.designsystem.atom.DividerHorizontal import app.k9mail.core.ui.compose.designsystem.atom.DividerHorizontal import app.k9mail.core.ui.compose.designsystem.atom.Surface import app.k9mail.core.ui.compose.designsystem.atom.Surface import app.k9mail.core.ui.compose.designsystem.organism.drawer.NavigationDrawerItem import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.feature.navigation.drawer.ui.DrawerContract.State import app.k9mail.feature.navigation.drawer.ui.DrawerContract.State import app.k9mail.feature.navigation.drawer.ui.account.AccountView import app.k9mail.feature.navigation.drawer.ui.account.AccountView import app.k9mail.feature.navigation.drawer.ui.folder.FolderList @Composable @Composable fun DrawerContent( fun DrawerContent( Loading Loading @@ -42,32 +41,12 @@ fun DrawerContent( DividerHorizontal() DividerHorizontal() } } LazyColumn( FolderList( modifier = Modifier folders = state.folders, .fillMaxSize(), selectedFolder = state.folders.firstOrNull(), // TODO Use selected folder from state ) { onFolderClick = { }, item { showStarredCount = state.showStarredCount, NavigationDrawerItem( label = "Folder1", selected = true, onClick = {}, ) } item { NavigationDrawerItem( label = "Folder2", selected = false, onClick = {}, ) ) } } item { NavigationDrawerItem( label = "Folder3", selected = false, onClick = {}, ) } } } } } } } feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContract.kt +9 −1 Original line number Original line Diff line number Diff line package app.k9mail.feature.navigation.drawer.ui package app.k9mail.feature.navigation.drawer.ui import androidx.compose.runtime.Stable import app.k9mail.core.ui.compose.common.mvi.UnidirectionalViewModel import app.k9mail.core.ui.compose.common.mvi.UnidirectionalViewModel import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount import app.k9mail.legacy.ui.folder.DisplayFolder import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.immutableListOf import kotlinx.collections.immutable.persistentListOf interface DrawerContract { interface DrawerContract { interface ViewModel : UnidirectionalViewModel<State, Event, Effect> interface ViewModel : UnidirectionalViewModel<State, Event, Effect> @Stable data class State( data class State( val currentAccount: DisplayAccount? = null, val currentAccount: DisplayAccount? = null, val accounts: List<DisplayAccount> = emptyList(), val accounts: ImmutableList<DisplayAccount> = persistentListOf(), val folders: ImmutableList<DisplayFolder> = persistentListOf(), val showStarredCount: Boolean = false, val isLoading: Boolean = false, val isLoading: Boolean = false, ) ) Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerView.kt +4 −2 Original line number Original line Diff line number Diff line Loading @@ -4,16 +4,18 @@ import androidx.compose.runtime.Composable import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.core.ui.compose.designsystem.molecule.PullToRefreshBox import app.k9mail.core.ui.compose.designsystem.molecule.PullToRefreshBox import org.koin.androidx.compose.koinViewModel import org.koin.androidx.compose.koinViewModel import app.k9mail.feature.navigation.drawer.ui.DrawerContract.Event import app.k9mail.feature.navigation.drawer.ui.DrawerContract.ViewModel @Composable @Composable fun DrawerView( fun DrawerView( viewModel: DrawerContract.ViewModel = koinViewModel<DrawerViewModel>(), viewModel: ViewModel = koinViewModel<DrawerViewModel>(), ) { ) { val (state, dispatch) = viewModel.observe { } val (state, dispatch) = viewModel.observe { } PullToRefreshBox( PullToRefreshBox( isRefreshing = state.value.isLoading, isRefreshing = state.value.isLoading, onRefresh = { dispatch(DrawerContract.Event.OnRefresh) }, onRefresh = { dispatch(Event.OnRefresh) }, ) { ) { DrawerContent( DrawerContent( state = state.value, state = state.value, Loading Loading
feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContentPreview.kt +4 −2 Original line number Original line Diff line number Diff line Loading @@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme import app.k9mail.feature.navigation.drawer.ui.FakeData.DISPLAY_ACCOUNT import app.k9mail.feature.navigation.drawer.ui.FakeData.DISPLAY_ACCOUNT import kotlinx.collections.immutable.persistentListOf @Composable @Composable @Preview(showBackground = true) @Preview(showBackground = true) Loading @@ -11,8 +12,9 @@ internal fun DrawerContentPreview() { PreviewWithTheme { PreviewWithTheme { DrawerContent( DrawerContent( state = DrawerContract.State( state = DrawerContract.State( accounts = emptyList(), currentAccount = null, currentAccount = null, accounts = persistentListOf(), folders = persistentListOf(), ), ), ) ) } } Loading @@ -24,7 +26,7 @@ fun DrawerContentWithAccountPreview() { PreviewWithTheme { PreviewWithTheme { DrawerContent( DrawerContent( state = DrawerContract.State( state = DrawerContract.State( accounts = listOf(DISPLAY_ACCOUNT), accounts = persistentListOf(DISPLAY_ACCOUNT), currentAccount = DISPLAY_ACCOUNT, currentAccount = DISPLAY_ACCOUNT, ), ), ) ) Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/NavigationDrawerModule.kt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -49,6 +49,7 @@ val navigationDrawerModule: Module = module { viewModel { viewModel { DrawerViewModel( DrawerViewModel( getDisplayAccounts = get(), getDisplayAccounts = get(), getDisplayFoldersForAccount = get(), ) ) } } } }
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContent.kt +7 −28 Original line number Original line Diff line number Diff line Loading @@ -4,16 +4,15 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.platform.testTag import app.k9mail.core.ui.compose.designsystem.atom.DividerHorizontal import app.k9mail.core.ui.compose.designsystem.atom.DividerHorizontal import app.k9mail.core.ui.compose.designsystem.atom.Surface import app.k9mail.core.ui.compose.designsystem.atom.Surface import app.k9mail.core.ui.compose.designsystem.organism.drawer.NavigationDrawerItem import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.core.ui.compose.theme2.MainTheme import app.k9mail.feature.navigation.drawer.ui.DrawerContract.State import app.k9mail.feature.navigation.drawer.ui.DrawerContract.State import app.k9mail.feature.navigation.drawer.ui.account.AccountView import app.k9mail.feature.navigation.drawer.ui.account.AccountView import app.k9mail.feature.navigation.drawer.ui.folder.FolderList @Composable @Composable fun DrawerContent( fun DrawerContent( Loading Loading @@ -42,32 +41,12 @@ fun DrawerContent( DividerHorizontal() DividerHorizontal() } } LazyColumn( FolderList( modifier = Modifier folders = state.folders, .fillMaxSize(), selectedFolder = state.folders.firstOrNull(), // TODO Use selected folder from state ) { onFolderClick = { }, item { showStarredCount = state.showStarredCount, NavigationDrawerItem( label = "Folder1", selected = true, onClick = {}, ) } item { NavigationDrawerItem( label = "Folder2", selected = false, onClick = {}, ) ) } } item { NavigationDrawerItem( label = "Folder3", selected = false, onClick = {}, ) } } } } } } }
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContract.kt +9 −1 Original line number Original line Diff line number Diff line package app.k9mail.feature.navigation.drawer.ui package app.k9mail.feature.navigation.drawer.ui import androidx.compose.runtime.Stable import app.k9mail.core.ui.compose.common.mvi.UnidirectionalViewModel import app.k9mail.core.ui.compose.common.mvi.UnidirectionalViewModel import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount import app.k9mail.feature.navigation.drawer.domain.entity.DisplayAccount import app.k9mail.legacy.ui.folder.DisplayFolder import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.immutableListOf import kotlinx.collections.immutable.persistentListOf interface DrawerContract { interface DrawerContract { interface ViewModel : UnidirectionalViewModel<State, Event, Effect> interface ViewModel : UnidirectionalViewModel<State, Event, Effect> @Stable data class State( data class State( val currentAccount: DisplayAccount? = null, val currentAccount: DisplayAccount? = null, val accounts: List<DisplayAccount> = emptyList(), val accounts: ImmutableList<DisplayAccount> = persistentListOf(), val folders: ImmutableList<DisplayFolder> = persistentListOf(), val showStarredCount: Boolean = false, val isLoading: Boolean = false, val isLoading: Boolean = false, ) ) Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerView.kt +4 −2 Original line number Original line Diff line number Diff line Loading @@ -4,16 +4,18 @@ import androidx.compose.runtime.Composable import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.core.ui.compose.designsystem.molecule.PullToRefreshBox import app.k9mail.core.ui.compose.designsystem.molecule.PullToRefreshBox import org.koin.androidx.compose.koinViewModel import org.koin.androidx.compose.koinViewModel import app.k9mail.feature.navigation.drawer.ui.DrawerContract.Event import app.k9mail.feature.navigation.drawer.ui.DrawerContract.ViewModel @Composable @Composable fun DrawerView( fun DrawerView( viewModel: DrawerContract.ViewModel = koinViewModel<DrawerViewModel>(), viewModel: ViewModel = koinViewModel<DrawerViewModel>(), ) { ) { val (state, dispatch) = viewModel.observe { } val (state, dispatch) = viewModel.observe { } PullToRefreshBox( PullToRefreshBox( isRefreshing = state.value.isLoading, isRefreshing = state.value.isLoading, onRefresh = { dispatch(DrawerContract.Event.OnRefresh) }, onRefresh = { dispatch(Event.OnRefresh) }, ) { ) { DrawerContent( DrawerContent( state = state.value, state = state.value, Loading