Added basic UI components for submodules support

This commit is contained in:
Abdelilah El Aissaoui 2023-03-25 16:07:24 +01:00
parent f9ccf87030
commit 05852a6034
No known key found for this signature in database
GPG Key ID: 7587FC860F594869
6 changed files with 77 additions and 17 deletions

View File

@ -0,0 +1,16 @@
package com.jetpackduba.gitnuro.git.submodules
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.eclipse.jgit.api.Git
import javax.inject.Inject
class AddSubmoduleUseCase @Inject constructor() {
suspend operator fun invoke(git: Git, name: String, path: String, uri: String): Unit = withContext(Dispatchers.IO) {
git.submoduleAdd()
.setName(name)
.setPath(path)
.setURI(uri)
.call()
}
}

View File

@ -0,0 +1,14 @@
package com.jetpackduba.gitnuro.git.submodules
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.eclipse.jgit.api.Git
import javax.inject.Inject
class DeInitializeSubmoduleUseCase @Inject constructor() {
suspend operator fun invoke(git: Git, path: String): Unit = withContext(Dispatchers.IO) {
git.submoduleDeinit()
.addPath(path)
.call()
}
}

View File

@ -0,0 +1,14 @@
package com.jetpackduba.gitnuro.git.submodules
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.eclipse.jgit.api.Git
import javax.inject.Inject
class SyncSubmoduleUseCase @Inject constructor() {
suspend operator fun invoke(git: Git, path: String): Unit = withContext(Dispatchers.IO) {
git.submoduleSync()
.addPath(path)
.call()
}
}

View File

@ -197,17 +197,12 @@ fun ExtendedMenuButton(
onClick: () -> Unit,
extendedListItems: List<ContextMenuElement>,
) {
var showDropDownMenu by remember { mutableStateOf(false) }
Row(
modifier = modifier
.size(width = 64.dp, height = 56.dp)
.ignoreKeyEvents()
.clip(RoundedCornerShape(4.dp))
.background(MaterialTheme.colors.surface)
.handMouseClickable {
showDropDownMenu = true
}
) {
Column(
modifier = Modifier
@ -250,18 +245,6 @@ fun ExtendedMenuButton(
)
}
// DropdownMenu(
// onDismissRequest = {
// showDropDownMenu = false
// },
// content = {
// for (item in extendedListItems) {
// DropDownContent(item, onDismiss = { showDropDownMenu = false })
// }
// },
// expanded = showDropDownMenu,
// )
}
}
}

View File

@ -6,6 +6,7 @@ import org.eclipse.jgit.submodule.SubmoduleStatusType
fun submoduleContextMenuItems(
submoduleStatus: SubmoduleStatus,
onInitializeModule: () -> Unit,
onOpenSubmoduleInTab: () -> Unit,
): List<ContextMenuElement> {
return mutableListOf<ContextMenuElement>().apply {
if (submoduleStatus.type == SubmoduleStatusType.UNINITIALIZED) {
@ -16,5 +17,33 @@ fun submoduleContextMenuItems(
)
)
}
if (submoduleStatus.type != SubmoduleStatusType.UNINITIALIZED) {
add(
ContextMenuElement.ContextTextEntry(
label = "Open submodule in new tab",
onClick = onOpenSubmoduleInTab
)
)
add(
ContextMenuElement.ContextTextEntry(
label = "Sync submodule",
onClick = onInitializeModule
)
)
add(
ContextMenuElement.ContextTextEntry(
label = "Update submodule",
onClick = onInitializeModule
)
)
add(
ContextMenuElement.ContextTextEntry(
label = "DeInitialize submodule",
onClick = onInitializeModule
)
)
}
}
}

View File

@ -69,6 +69,10 @@ class SubmodulesViewModel @AssistedInject constructor(
suspend fun refresh(git: Git) {
loadSubmodules(git)
}
fun onOpenSubmoduleInTab(@Suppress("UNUSED_PARAMETER") path: String) {
TODO()
}
}
data class SubmodulesState(val submodules: List<Pair<String, SubmoduleStatus>>, val isExpanded: Boolean)