Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 937bb3da authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé
Browse files

Add OnFolderClick event and add OpenFolder and CloseDrawer effect

parent 008a5e28
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ fun DrawerContentWithAccountPreview() {
            state = DrawerContract.State(
                accounts = persistentListOf(DISPLAY_ACCOUNT),
                currentAccount = DISPLAY_ACCOUNT,
                folders = persistentListOf(),
            ),
            onEvent = {},
        )
+7 −1
Original line number Diff line number Diff line
@@ -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()
@@ -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() },
                )
            }
        }
    }
+4 −2
Original line number Diff line number Diff line
@@ -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,
            )
        }
+8 −3
Original line number Diff line number Diff line
@@ -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
    }
}
+9 −1
Original line number Diff line number Diff line
@@ -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