Coverage Summary for Class: ChatNodeListScreenKt (debug.com.greybox.projectmesh.messaging.ui.screens)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| ChatNodeListScreenKt$ChatNodeListScreen$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/5)
|
| ChatNodeListScreenKt$ChatNodeListScreen$2$1 |
0%
(0/1)
|
|
| ChatNodeListScreenKt$ChatNodeListScreen$2$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/2)
|
| ChatNodeListScreenKt$ChatNodeListScreen$2$1$2$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/5)
|
| ChatNodeListScreenKt$ChatNodeListScreen$2$1$invoke$$inlined$items$default$1 |
0%
(0/1)
|
|
| ChatNodeListScreenKt$ChatNodeListScreen$2$1$invoke$$inlined$items$default$2 |
0%
(0/1)
|
|
| ChatNodeListScreenKt$ChatNodeListScreen$2$1$invoke$$inlined$items$default$3 |
0%
(0/1)
|
|
| ChatNodeListScreenKt$ChatNodeListScreen$2$1$invoke$$inlined$items$default$4 |
0%
(0/1)
|
|
| ChatNodeListScreenKt$ChatNodeListScreen$3 |
|
| Total |
0%
(0/10)
|
|
0%
(0/3)
|
0%
(0/12)
|
package com.greybox.projectmesh.messaging.ui.screens
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.lifecycle.viewmodel.compose.viewModel
import com.greybox.projectmesh.ViewModelFactory
import com.greybox.projectmesh.viewModel.NetworkScreenViewModel
import com.greybox.projectmesh.extension.WifiListItem
import org.kodein.di.compose.localDI
import androidx.compose.ui.platform.LocalSavedStateRegistryOwner
import com.greybox.projectmesh.viewModel.NetworkScreenModel
/**
* Composable that displays a list of network nodes as clickable items.
*
* @param onNodeSelected Lambda invoked when a node is selected; passes the node's IP address as a [String].
* @param viewModel Optional [NetworkScreenViewModel] instance to provide network node data.
* Defaults to a ViewModel created with [ViewModelFactory] using the local DI context.
*/
@Composable
fun ChatNodeListScreen(
onNodeSelected: (String) -> Unit,
// Reuse NetworkScreenViewModel in the same way as NetworkScreen
viewModel: NetworkScreenViewModel = viewModel(
factory = ViewModelFactory(
di = localDI(),
owner = LocalSavedStateRegistryOwner.current,
vmFactory = { di, savedStateHandle ->
NetworkScreenViewModel(di, savedStateHandle)
},
defaultArgs = null
)
)
) {
// Provide the same initial state you used in NetworkScreen
val uiState: NetworkScreenModel by viewModel.uiState.collectAsState(initial = NetworkScreenModel())
LazyColumn {
items(
items = uiState.allNodes.entries.toList(),
key = { it.key }
) { nodeEntry ->
// Tapping a WifiListItem calls 'onNodeSelected' instead of onClickNetworkNode
WifiListItem(
wifiAddress = nodeEntry.key,
wifiEntry = nodeEntry.value,
onClick = { selectedIp ->
onNodeSelected(selectedIp)
}
)
}
}
}