Gitnuro/src/main/kotlin/com/jetpackduba/gitnuro/ui/Submodules.kt
2022-10-22 22:19:37 +02:00

72 lines
2.5 KiB
Kotlin

package com.jetpackduba.gitnuro.ui
import androidx.compose.foundation.layout.padding
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import com.jetpackduba.gitnuro.theme.onBackgroundSecondary
import com.jetpackduba.gitnuro.ui.components.SideMenuPanel
import com.jetpackduba.gitnuro.ui.components.SideMenuSubentry
import com.jetpackduba.gitnuro.ui.components.Tooltip
import com.jetpackduba.gitnuro.ui.components.gitnuroViewModel
import com.jetpackduba.gitnuro.ui.context_menu.ContextMenu
import com.jetpackduba.gitnuro.ui.context_menu.submoduleContextMenuItems
import com.jetpackduba.gitnuro.viewmodels.SubmodulesViewModel
import org.eclipse.jgit.submodule.SubmoduleStatus
@Composable
fun Submodules(
submodulesViewModel: SubmodulesViewModel = gitnuroViewModel(),
) {
val submodules by submodulesViewModel.submodules.collectAsState()
val isExpanded by submodulesViewModel.isExpanded.collectAsState()
SideMenuPanel(
title = "Submodules",
icon = painterResource("topic.svg"),
items = submodules,
isExpanded = isExpanded,
onExpand = { submodulesViewModel.onExpand() },
itemContent = { submodule ->
SubmoduleLineEntry(
submodulePair = submodule,
onInitializeModule = { submodulesViewModel.initializeSubmodule(submodule.first) }
)
}
)
}
@Composable
private fun SubmoduleLineEntry(
submodulePair: Pair<String, SubmoduleStatus>,
onInitializeModule: () -> Unit,
) {
ContextMenu(
items = {
submoduleContextMenuItems(
submodulePair.second,
onInitializeModule = onInitializeModule
)
}
) {
SideMenuSubentry(
text = submodulePair.first,
iconResourcePath = "topic.svg",
) {
val stateName = submodulePair.second.type.toString()
Tooltip(stateName) {
Text(
text = stateName.first().toString(),
color = MaterialTheme.colors.onBackgroundSecondary,
style = MaterialTheme.typography.body2,
modifier = Modifier.padding(horizontal = 16.dp),
)
}
}
}
}