wrap profilescreen in route
This commit is contained in:
		
							parent
							
								
									90170eb635
								
							
						
					
					
						commit
						3fd191cccc
					
				
					 2 changed files with 55 additions and 24 deletions
				
			
		| 
						 | 
				
			
			@ -30,6 +30,7 @@ import be.ugent.sel.studeez.screens.log_in.LoginRoute
 | 
			
		|||
import be.ugent.sel.studeez.screens.log_in.LoginScreen
 | 
			
		||||
import be.ugent.sel.studeez.screens.profile.EditProfileRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.profile.EditProfileScreen
 | 
			
		||||
import be.ugent.sel.studeez.screens.profile.ProfileRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.profile.ProfileScreen
 | 
			
		||||
import be.ugent.sel.studeez.screens.session.SessionScreen
 | 
			
		||||
import be.ugent.sel.studeez.screens.sign_up.SignUpScreen
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +123,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) {
 | 
			
		|||
    // TODO Sessions screen
 | 
			
		||||
 | 
			
		||||
    composable(StudeezDestinations.PROFILE_SCREEN) {
 | 
			
		||||
        ProfileScreen(open, openAndPopUp)
 | 
			
		||||
        ProfileRoute(open, openAndPopUp, viewModel = hiltViewModel())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    composable(StudeezDestinations.TIMER_OVERVIEW_SCREEN) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,48 +4,68 @@ import androidx.compose.material.Icon
 | 
			
		|||
import androidx.compose.material.IconButton
 | 
			
		||||
import androidx.compose.material.icons.Icons
 | 
			
		||||
import androidx.compose.material.icons.filled.Edit
 | 
			
		||||
import androidx.compose.runtime.*
 | 
			
		||||
import androidx.compose.runtime.Composable
 | 
			
		||||
import androidx.compose.runtime.LaunchedEffect
 | 
			
		||||
import androidx.compose.runtime.getValue
 | 
			
		||||
import androidx.compose.runtime.mutableStateOf
 | 
			
		||||
import androidx.compose.runtime.remember
 | 
			
		||||
import androidx.compose.runtime.setValue
 | 
			
		||||
import androidx.compose.ui.tooling.preview.Preview
 | 
			
		||||
import androidx.hilt.navigation.compose.hiltViewModel
 | 
			
		||||
import be.ugent.sel.studeez.R
 | 
			
		||||
import be.ugent.sel.studeez.common.composable.Headline
 | 
			
		||||
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
 | 
			
		||||
import be.ugent.sel.studeez.resources
 | 
			
		||||
import be.ugent.sel.studeez.screens.drawer.DrawerActions
 | 
			
		||||
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
 | 
			
		||||
import be.ugent.sel.studeez.screens.drawer.getDrawerActions
 | 
			
		||||
import be.ugent.sel.studeez.screens.navbar.NavigationBarActions
 | 
			
		||||
import be.ugent.sel.studeez.screens.navbar.NavigationBarViewModel
 | 
			
		||||
import be.ugent.sel.studeez.screens.navbar.getNavigationBarActions
 | 
			
		||||
import kotlinx.coroutines.CoroutineScope
 | 
			
		||||
import be.ugent.sel.studeez.R.string as AppText
 | 
			
		||||
 | 
			
		||||
data class ProfileActions(
 | 
			
		||||
    val getUsername: suspend CoroutineScope.() -> String?,
 | 
			
		||||
    val onEditProfileClick: () -> Unit,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
fun getProfileActions(
 | 
			
		||||
    viewModel: ProfileViewModel,
 | 
			
		||||
    open: (String) -> Unit,
 | 
			
		||||
): ProfileActions {
 | 
			
		||||
    return ProfileActions(
 | 
			
		||||
        getUsername = { viewModel.getUsername() },
 | 
			
		||||
        onEditProfileClick = { viewModel.onEditProfileClick(open) },
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Composable
 | 
			
		||||
fun ProfileRoute(
 | 
			
		||||
    open: (String) -> Unit,
 | 
			
		||||
    openAndPopUp: (String, String) -> Unit,
 | 
			
		||||
    viewModel: ProfileViewModel,
 | 
			
		||||
) {
 | 
			
		||||
    ProfileScreen(
 | 
			
		||||
        profileActions = getProfileActions(viewModel, open),
 | 
			
		||||
        drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp),
 | 
			
		||||
        navigationBarActions = getNavigationBarActions(hiltViewModel(), open),
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Composable
 | 
			
		||||
fun ProfileScreen(
 | 
			
		||||
    open: (String) -> Unit,
 | 
			
		||||
    openAndPopUp: (String, String) -> Unit,
 | 
			
		||||
    viewModel: ProfileViewModel = hiltViewModel()
 | 
			
		||||
    profileActions: ProfileActions,
 | 
			
		||||
    drawerActions: DrawerActions,
 | 
			
		||||
    navigationBarActions: NavigationBarActions,
 | 
			
		||||
) {
 | 
			
		||||
    var username: String? by remember { mutableStateOf("") }
 | 
			
		||||
    LaunchedEffect(key1 = Unit) {
 | 
			
		||||
        username = viewModel.getUsername()
 | 
			
		||||
        username = profileActions.getUsername(this)
 | 
			
		||||
    }
 | 
			
		||||
    val drawerViewModel: DrawerViewModel = hiltViewModel()
 | 
			
		||||
    val drawerActions = DrawerActions(
 | 
			
		||||
        onHomeButtonClick = { drawerViewModel.onHomeButtonClick(open) },
 | 
			
		||||
        onTimersClick = { drawerViewModel.onTimersClick(open) },
 | 
			
		||||
        onSettingsClick = { drawerViewModel.onSettingsClick(open) },
 | 
			
		||||
        onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
 | 
			
		||||
        onAboutClick = { drawerViewModel.onAboutClick(open) },
 | 
			
		||||
    )
 | 
			
		||||
    val navigationBarViewModel: NavigationBarViewModel = hiltViewModel()
 | 
			
		||||
    val navigationBarActions = NavigationBarActions(
 | 
			
		||||
        onHomeClick = { navigationBarViewModel.onHomeClick(open) },
 | 
			
		||||
        onTasksClick = { navigationBarViewModel.onTasksClick(open) },
 | 
			
		||||
        onSessionsClick = { navigationBarViewModel.onSessionsClick(open) },
 | 
			
		||||
        onProfileClick = { navigationBarViewModel.onProfileClick(open) },
 | 
			
		||||
    )
 | 
			
		||||
    PrimaryScreenTemplate(
 | 
			
		||||
        title = resources().getString(AppText.profile),
 | 
			
		||||
        drawerActions = drawerActions,
 | 
			
		||||
        navigationBarActions = navigationBarActions,
 | 
			
		||||
        action = { EditAction { viewModel.onEditProfileClick(open) } }
 | 
			
		||||
        action = { EditAction(onClick = profileActions.onEditProfileClick) }
 | 
			
		||||
    ) {
 | 
			
		||||
        Headline(text = (username ?: resources().getString(R.string.no_username)))
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -62,4 +82,14 @@ fun EditAction(
 | 
			
		|||
        )
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Preview
 | 
			
		||||
@Composable
 | 
			
		||||
fun ProfileScreenPreview() {
 | 
			
		||||
    ProfileScreen(
 | 
			
		||||
        profileActions = ProfileActions({ null }, {}),
 | 
			
		||||
        drawerActions = DrawerActions({}, {}, {}, {}, {}),
 | 
			
		||||
        navigationBarActions = NavigationBarActions({}, {}, {}, {})
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
		Reference in a new issue