Coverage Summary for Class: ProductsNavigationKt (com.imecatro.demosales.navigation.products)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| ProductsNavigationKt |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/10)
|
| ProductsNavigationKt$productsNavigation$1 |
0%
(0/1)
|
|
0%
(0/7)
|
0%
(0/80)
|
| ProductsNavigationKt$productsNavigation$1$1 |
0%
(0/1)
|
|
0%
(0/3)
|
0%
(0/88)
|
| ProductsNavigationKt$productsNavigation$1$1$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/9)
|
| ProductsNavigationKt$productsNavigation$1$1$2$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/13)
|
| ProductsNavigationKt$productsNavigation$1$1$3$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/12)
|
| ProductsNavigationKt$productsNavigation$1$3 |
0%
(0/1)
|
|
0%
(0/2)
|
0%
(0/75)
|
| ProductsNavigationKt$productsNavigation$1$3$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/9)
|
| ProductsNavigationKt$productsNavigation$1$3$2$1 |
0%
(0/1)
|
0%
(0/2)
|
0%
(0/5)
|
0%
(0/48)
|
| ProductsNavigationKt$productsNavigation$1$3$2$1$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/6)
|
| ProductsNavigationKt$productsNavigation$1$4 |
0%
(0/1)
|
|
0%
(0/4)
|
0%
(0/75)
|
| ProductsNavigationKt$productsNavigation$1$4$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/6)
|
| ProductsNavigationKt$productsNavigation$1$4$1$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/5)
|
| ProductsNavigationKt$productsNavigation$1$4$1$1$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/3)
|
| ProductsNavigationKt$productsNavigation$1$4$viewModel$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/5)
|
| ProductsNavigationKt$productsNavigation$1$5 |
0%
(0/1)
|
0%
(0/2)
|
0%
(0/9)
|
0%
(0/153)
|
| ProductsNavigationKt$productsNavigation$1$5$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/6)
|
| ProductsNavigationKt$productsNavigation$1$5$1$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/5)
|
| ProductsNavigationKt$productsNavigation$1$5$1$1$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/3)
|
| ProductsNavigationKt$productsNavigation$1$5$2$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/6)
|
| ProductsNavigationKt$productsNavigation$1$5$2$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/5)
|
| ProductsNavigationKt$productsNavigation$1$5$2$1$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/3)
|
| ProductsNavigationKt$productsNavigation$1$5$3$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/14)
|
| ProductsNavigationKt$productsNavigation$1$5$viewModel$1$1 |
0%
(0/1)
|
|
0%
(0/2)
|
0%
(0/5)
|
| ProductsNavigationKt$productsNavigation$1$6 |
0%
(0/1)
|
|
0%
(0/2)
|
0%
(0/67)
|
| ProductsNavigationKt$productsNavigation$1$6$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/6)
|
| ProductsNavigationKt$productsNavigation$1$6$1$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/5)
|
| ProductsNavigationKt$productsNavigation$1$6$1$1$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/3)
|
| ProductsNavigationKt$productsNavigation$1$6$2$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/6)
|
| ProductsNavigationKt$productsNavigation$1$6$2$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/6)
|
| ProductsNavigationKt$productsNavigation$1$7 |
0%
(0/1)
|
|
0%
(0/8)
|
0%
(0/142)
|
| ProductsNavigationKt$productsNavigation$1$7$1$1 |
0%
(0/1)
|
|
0%
(0/4)
|
0%
(0/17)
|
| ProductsNavigationKt$productsNavigation$1$7$1$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/6)
|
| ProductsNavigationKt$productsNavigation$1$7$1$1$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/3)
|
| ProductsNavigationKt$productsNavigation$1$7$2$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/6)
|
| ProductsNavigationKt$productsNavigation$1$7$2$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/5)
|
| ProductsNavigationKt$productsNavigation$1$7$2$1$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/3)
|
| ProductsNavigationKt$productsNavigation$1$7$3$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/6)
|
| ProductsNavigationKt$productsNavigation$1$7$3$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/6)
|
| ProductsNavigationKt$productsNavigation$1$7$viewModel$1$1 |
0%
(0/1)
|
|
0%
(0/2)
|
0%
(0/5)
|
| Total |
0%
(0/40)
|
0%
(0/4)
|
0%
(0/77)
|
0%
(0/936)
|
package com.imecatro.demosales.navigation.products
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavHostController
import androidx.navigation.compose.composable
import androidx.navigation.navigation
import androidx.navigation.toRoute
import com.imecatro.products.ui.add.views.AddProductComposableStateImpl
import com.imecatro.products.ui.catalog.CatalogViewModel
import com.imecatro.products.ui.catalog.screens.CatalogPreview
import com.imecatro.products.ui.categories.screens.CategoriesScreenImpl
import com.imecatro.products.ui.details.viewmodels.ProductsDetailsViewModel
import com.imecatro.products.ui.details.views.DetailsComposableStateImpl
import com.imecatro.products.ui.list.views.ListOfProductsStateImpl
import com.imecatro.products.ui.update.viewmodel.UpdateProductViewModel
import com.imecatro.products.ui.update.views.UpdateProductComposableStateImpl
import kotlinx.coroutines.launch
private const val TAG = "ProductsNavigation"
/**
* Defines the navigation graph for the Products feature.
*
* This includes routes for listing products, adding/editing products, managing categories,
* and creating catalogs.
*
* @param T The type of the root destination for this feature.
* @param navController The [NavHostController] used for navigation between screens.
*/
inline fun <reified T : Any> NavGraphBuilder.productsNavigation(navController: NavHostController) {
navigation<T>(startDestination = ProductsDestinations.ListAndDetails) {
composable<ProductsDestinations.ListAndDetails> {
ListAndDetailsPane(onAddProduct = {
navController.navigate(ProductsDestinations.Add)
}, onCreateCatalog = { ids ->
navController.navigate(ProductsDestinations.CatalogMaker(ids))
},
onEditProduct = { id ->
navController.navigate(ProductsDestinations.Edit(id))
})
}
composable<ProductsDestinations.Categories> {
CategoriesScreenImpl(hiltViewModel())
}
composable<ProductsDestinations.List> {
ListOfProductsStateImpl(productsViewModel = hiltViewModel(), onCategoriesNav = {
navController.navigate(ProductsDestinations.Categories)
}) {
it?.let {
navController.navigate(ProductsDestinations.Details(it)) {
popUpTo(ProductsDestinations.List)
}
} ?: run {
navController.navigate(ProductsDestinations.Add)
}
}
}
composable<ProductsDestinations.CatalogMaker> { backStackEntry ->
val navArgs = backStackEntry.toRoute<ProductsDestinations.CatalogMaker>()
val viewModel: CatalogViewModel =
hiltViewModel(creationCallback = { f: CatalogViewModel.Factory -> f.create(navArgs.ids) })
CatalogPreview(catalogViewModel = viewModel, onBack = {
navController.navigate(ProductsDestinations.ListAndDetails) {
popUpTo(ProductsDestinations.ListAndDetails) { inclusive = true }
}
})
}
composable<ProductsDestinations.Details> { backStackEntry ->
val navArgs = backStackEntry.toRoute<ProductsDestinations.Details>()
val viewModel: ProductsDetailsViewModel =
hiltViewModel(creationCallback = { factory: ProductsDetailsViewModel.Factory ->
factory.create(
navArgs.id
)
})
DetailsComposableStateImpl(
viewModel,
pageSelected = if (navArgs.mode == ProductsDestinations.DetailsOf.Stock) 1 else 0,
onNavigateBack = {
navController.navigate(ProductsDestinations.ListAndDetails) {
popUpTo(ProductsDestinations.ListAndDetails) { inclusive = true }
}
},
onProductDeleted = {
navController.navigate(ProductsDestinations.ListAndDetails) {
popUpTo(ProductsDestinations.ListAndDetails) { inclusive = true }
}
}, onNavigateToEdit = {
navController.navigate(ProductsDestinations.Edit(navArgs.id))
})
}
composable<ProductsDestinations.Add> {
AddProductComposableStateImpl(hiltViewModel(), onBackToList = {
navController.navigate(ProductsDestinations.ListAndDetails) {
popUpTo(ProductsDestinations.ListAndDetails) { inclusive = true }
}
}) {
navController.navigate(ProductsDestinations.ListAndDetails) {
popUpTo(ProductsDestinations.ListAndDetails)
}
}
}
composable<ProductsDestinations.Edit> { backStackEntry ->
val navArgs = backStackEntry.toRoute<ProductsDestinations.Edit>()
val viewModel: UpdateProductViewModel =
hiltViewModel(creationCallback = { factory: UpdateProductViewModel.Factory ->
factory.create(
navArgs.id
)
})
UpdateProductComposableStateImpl(
updateProductViewModel = viewModel,
onEditStock = {
val destinationRoute = ProductsDestinations.Details(
navArgs.id,
ProductsDestinations.DetailsOf.Stock
)
navController.navigate(destinationRoute) {
popUpTo(destinationRoute) { inclusive = true }
}
},
onBackToList = {
navController.navigate(ProductsDestinations.ListAndDetails) {
popUpTo(ProductsDestinations.ListAndDetails) { inclusive = true }
}
}) {
navController.navigate(ProductsDestinations.ListAndDetails) {
popUpTo(ProductsDestinations.ListAndDetails)
}
}
}
}
}