Loading feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContentPreview.kt +1 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ fun DrawerContentWithAccountPreview() { state = DrawerContract.State( accounts = persistentListOf(DISPLAY_ACCOUNT), currentAccount = DISPLAY_ACCOUNT, folders = persistentListOf(), ), onEvent = {}, ) Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/FolderDrawer.kt +7 −1 Original line number Diff line number Diff line Loading @@ -15,6 +15,8 @@ import org.koin.core.component.inject class FolderDrawer( override val parent: AppCompatActivity, private val openFolder: (folderId: Long) -> Unit, createDrawerListener: () -> DrawerLayout.DrawerListener, ) : NavigationDrawer, KoinComponent { private val themeProvider: FeatureThemeProvider by inject() Loading @@ -28,10 +30,14 @@ class FolderDrawer( sliderView.visibility = View.GONE drawerView.visibility = View.VISIBLE swipeRefreshLayout.isEnabled = false drawer.addDrawerListener(createDrawerListener()) drawerView.setContent { themeProvider.WithTheme { DrawerView() DrawerView( openFolder = openFolder, closeDrawer = { close() }, ) } } } Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContent.kt +4 −2 Original line number Diff line number Diff line Loading @@ -46,8 +46,10 @@ fun DrawerContent( } FolderList( folders = state.folders, selectedFolder = state.folders.firstOrNull(), // TODO Use selected folder from state onFolderClick = { }, selectedFolder = state.selectedFolder, onFolderClick = { folder -> onEvent(Event.OnFolderClick(folder)) }, showStarredCount = state.showStarredCount, ) } Loading feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContract.kt +8 −3 Original line number Diff line number Diff line Loading @@ -13,18 +13,23 @@ interface DrawerContract { @Stable data class State( val currentAccount: DisplayAccount? = null, val accounts: ImmutableList<DisplayAccount> = persistentListOf(), val currentAccount: DisplayAccount? = null, val folders: ImmutableList<DisplayFolder> = persistentListOf(), val selectedFolder: DisplayFolder? = null, val showStarredCount: Boolean = false, val isLoading: Boolean = false, ) sealed interface Event { data object OnRefresh : Event data class OnAccountClick(val account: DisplayAccount) : Event data class OnAccountViewClick(val account: DisplayAccount) : Event data class OnFolderClick(val folder: DisplayFolder) : Event data object OnRefresh : Event } sealed interface Effect sealed interface Effect { data class OpenFolder(val folderId: Long) : Effect data object CloseDrawer : Effect } } feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerView.kt +9 −1 Original line number Diff line number Diff line Loading @@ -3,15 +3,23 @@ package app.k9mail.feature.navigation.drawer.ui import androidx.compose.runtime.Composable import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.core.ui.compose.designsystem.molecule.PullToRefreshBox import app.k9mail.feature.navigation.drawer.ui.DrawerContract.Effect import app.k9mail.feature.navigation.drawer.ui.DrawerContract.Event import app.k9mail.feature.navigation.drawer.ui.DrawerContract.ViewModel import org.koin.androidx.compose.koinViewModel @Composable fun DrawerView( openFolder: (folderId: Long) -> Unit, closeDrawer: () -> Unit, viewModel: ViewModel = koinViewModel<DrawerViewModel>(), ) { val (state, dispatch) = viewModel.observe { } val (state, dispatch) = viewModel.observe { effect -> when (effect) { is Effect.OpenFolder -> openFolder(effect.folderId) Effect.CloseDrawer -> closeDrawer() } } PullToRefreshBox( isRefreshing = state.value.isLoading, Loading Loading
feature/navigation/drawer/src/debug/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContentPreview.kt +1 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ fun DrawerContentWithAccountPreview() { state = DrawerContract.State( accounts = persistentListOf(DISPLAY_ACCOUNT), currentAccount = DISPLAY_ACCOUNT, folders = persistentListOf(), ), onEvent = {}, ) Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/FolderDrawer.kt +7 −1 Original line number Diff line number Diff line Loading @@ -15,6 +15,8 @@ import org.koin.core.component.inject class FolderDrawer( override val parent: AppCompatActivity, private val openFolder: (folderId: Long) -> Unit, createDrawerListener: () -> DrawerLayout.DrawerListener, ) : NavigationDrawer, KoinComponent { private val themeProvider: FeatureThemeProvider by inject() Loading @@ -28,10 +30,14 @@ class FolderDrawer( sliderView.visibility = View.GONE drawerView.visibility = View.VISIBLE swipeRefreshLayout.isEnabled = false drawer.addDrawerListener(createDrawerListener()) drawerView.setContent { themeProvider.WithTheme { DrawerView() DrawerView( openFolder = openFolder, closeDrawer = { close() }, ) } } } Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContent.kt +4 −2 Original line number Diff line number Diff line Loading @@ -46,8 +46,10 @@ fun DrawerContent( } FolderList( folders = state.folders, selectedFolder = state.folders.firstOrNull(), // TODO Use selected folder from state onFolderClick = { }, selectedFolder = state.selectedFolder, onFolderClick = { folder -> onEvent(Event.OnFolderClick(folder)) }, showStarredCount = state.showStarredCount, ) } Loading
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerContract.kt +8 −3 Original line number Diff line number Diff line Loading @@ -13,18 +13,23 @@ interface DrawerContract { @Stable data class State( val currentAccount: DisplayAccount? = null, val accounts: ImmutableList<DisplayAccount> = persistentListOf(), val currentAccount: DisplayAccount? = null, val folders: ImmutableList<DisplayFolder> = persistentListOf(), val selectedFolder: DisplayFolder? = null, val showStarredCount: Boolean = false, val isLoading: Boolean = false, ) sealed interface Event { data object OnRefresh : Event data class OnAccountClick(val account: DisplayAccount) : Event data class OnAccountViewClick(val account: DisplayAccount) : Event data class OnFolderClick(val folder: DisplayFolder) : Event data object OnRefresh : Event } sealed interface Effect sealed interface Effect { data class OpenFolder(val folderId: Long) : Effect data object CloseDrawer : Effect } }
feature/navigation/drawer/src/main/kotlin/app/k9mail/feature/navigation/drawer/ui/DrawerView.kt +9 −1 Original line number Diff line number Diff line Loading @@ -3,15 +3,23 @@ package app.k9mail.feature.navigation.drawer.ui import androidx.compose.runtime.Composable import app.k9mail.core.ui.compose.common.mvi.observe import app.k9mail.core.ui.compose.designsystem.molecule.PullToRefreshBox import app.k9mail.feature.navigation.drawer.ui.DrawerContract.Effect import app.k9mail.feature.navigation.drawer.ui.DrawerContract.Event import app.k9mail.feature.navigation.drawer.ui.DrawerContract.ViewModel import org.koin.androidx.compose.koinViewModel @Composable fun DrawerView( openFolder: (folderId: Long) -> Unit, closeDrawer: () -> Unit, viewModel: ViewModel = koinViewModel<DrawerViewModel>(), ) { val (state, dispatch) = viewModel.observe { } val (state, dispatch) = viewModel.observe { effect -> when (effect) { is Effect.OpenFolder -> openFolder(effect.folderId) Effect.CloseDrawer -> closeDrawer() } } PullToRefreshBox( isRefreshing = state.value.isLoading, Loading