Coverage Summary for Class: OnboardingScreenKt (release.com.greybox.projectmesh.views)

Class Method, % Branch, % Line, % Instruction, %
OnboardingScreenKt$OnboardingScreen$1$1 0% (0/1) 0% (0/1) 0% (0/4)
OnboardingScreenKt$OnboardingScreen$1$2 0% (0/1) 0% (0/4) 0% (0/4) 0% (0/44)
OnboardingScreenKt$OnboardingScreen$1$2$1 0% (0/1) 0% (0/2) 0% (0/13)
OnboardingScreenKt$OnboardingScreen$1$2$1$1 0% (0/1) 0% (0/1) 0% (0/4)
OnboardingScreenKt$OnboardingScreen$1$2$2 0% (0/1) 0% (0/1) 0% (0/4)
OnboardingScreenKt$OnboardingScreen$1$2$3 0% (0/1) 0% (0/1) 0% (0/4)
OnboardingScreenKt$OnboardingScreen$2
OnboardingScreenKt$OnboardingScreen$factory$1$1 0% (0/2) 0% (0/2) 0% (0/7) 0% (0/21)
Total 0% (0/10) 0% (0/6) 0% (0/17) 0% (0/94)


 package com.greybox.projectmesh.views
 
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
 import androidx.compose.material3.Button
 import androidx.compose.material3.Text
 import androidx.compose.material3.TextField
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.collectAsState
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.remember
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.unit.dp
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
 import androidx.lifecycle.viewmodel.compose.viewModel
 import com.greybox.projectmesh.GlobalApp
 import com.greybox.projectmesh.extension.getLocalIpFromDI
 import com.greybox.projectmesh.viewModel.OnboardingViewModel
 import org.kodein.di.compose.localDI
 
 @Composable
 fun OnboardingScreen(
     onComplete: () -> Unit
 ) {
     // Retrieve DI instance
     val di = localDI()
     // Get the local IP from DI using our helper function
     val localIp = getLocalIpFromDI(di)
 
     // Create a custom ViewModelProvider.Factory that passes the local IP to OnboardingViewModel
     val factory = remember {
         object : ViewModelProvider.Factory {
             override fun <T : ViewModel> create(modelClass: Class<T>): T {
                 if (modelClass.isAssignableFrom(OnboardingViewModel::class.java)) {
                     @Suppress("UNCHECKED_CAST")
                     return OnboardingViewModel(
                         userRepository = GlobalApp.GlobalUserRepo.userRepository,
                         prefs = GlobalApp.GlobalUserRepo.prefs,
                         localIp = localIp  // pass the local IP here
                     ) as T
                 }
                 throw IllegalArgumentException("Unknown ViewModel class")
             }
         }
     }
 
     // Obtain the OnboardingViewModel using the custom factory
     val onboardingViewModel: OnboardingViewModel = viewModel(factory = factory)
     val uiState by onboardingViewModel.uiState.collectAsState()
 
     // Build your UI
     Column(modifier = Modifier.padding(16.dp)) {
         Text("Welcome to Project Mesh!")
         Spacer(modifier = Modifier.height(16.dp))
         Text("Please set your username:")
         TextField(
             value = uiState.username,
             onValueChange = { newValue -> onboardingViewModel.onUsernameChange(newValue) }
         )
         Spacer(modifier = Modifier.height(16.dp))
         Button(onClick = {
             // Check if the username is null or blank
             if (uiState.username.isNullOrBlank()) {
                 onboardingViewModel.blankUsernameGenerator{ generatedName ->
                     onboardingViewModel.onUsernameChange(generatedName)
 
                     onboardingViewModel.handleFirstTimeSetup { onComplete() }
                 }
             } else {
                 onboardingViewModel.handleFirstTimeSetup { onComplete() }
             }
 
             onboardingViewModel.handleFirstTimeSetup { onComplete() }
         }) {
             Text("Next")
         }
     }
 }