Submodules UI now calls methods to sync, update and deinit

This commit is contained in:
Abdelilah El Aissaoui 2023-04-08 21:25:32 +02:00
parent 5359f58a67
commit 8e14696bdf
No known key found for this signature in database
GPG Key ID: 7587FC860F594869
3 changed files with 52 additions and 17 deletions

View File

@ -320,8 +320,11 @@ fun LazyListScope.submodules(
if (isExpanded) {
items(submodules, key = { it.first }) { submodule ->
Submodule(
submodule,
onInitializeModule = { submodulesViewModel.initializeSubmodule(submodule.first) },
submodule = submodule,
onInitializeSubmodule = { submodulesViewModel.initializeSubmodule(submodule.first) },
onDeinitializeSubmodule = { submodulesViewModel.onDeinitializeSubmodule(submodule.first) },
onSyncSubmodule = { submodulesViewModel.onSyncSubmodule(submodule.first) },
onUpdateSubmodule = { submodulesViewModel.onUpdateSubmodule(submodule.first) },
onOpenSubmoduleInTab = { submodulesViewModel.onOpenSubmoduleInTab(submodule.first) },
)
}
@ -463,24 +466,30 @@ private fun Stash(
@Composable
private fun Submodule(
submodulePair: Pair<String, SubmoduleStatus>,
onInitializeModule: () -> Unit,
submodule: Pair<String, SubmoduleStatus>,
onInitializeSubmodule: () -> Unit,
onDeinitializeSubmodule: () -> Unit,
onSyncSubmodule: () -> Unit,
onUpdateSubmodule: () -> Unit,
onOpenSubmoduleInTab: () -> Unit,
) {
ContextMenu(
items = {
submoduleContextMenuItems(
submodulePair.second,
onInitializeModule = onInitializeModule,
submodule.second,
onInitializeSubmodule = onInitializeSubmodule,
onDeinitializeSubmodule = onDeinitializeSubmodule,
onSyncSubmodule = onSyncSubmodule,
onUpdateSubmodule = onUpdateSubmodule,
onOpenSubmoduleInTab = onOpenSubmoduleInTab,
)
}
) {
SideMenuSubentry(
text = submodulePair.first,
text = submodule.first,
iconResourcePath = AppIcons.TOPIC,
) {
val stateName = submodulePair.second.type.toString()
val stateName = submodule.second.type.toString()
Tooltip(stateName) {
Text(
text = stateName.first().toString(),

View File

@ -5,7 +5,10 @@ import org.eclipse.jgit.submodule.SubmoduleStatusType
fun submoduleContextMenuItems(
submoduleStatus: SubmoduleStatus,
onInitializeModule: () -> Unit,
onInitializeSubmodule: () -> Unit,
onDeinitializeSubmodule: () -> Unit,
onSyncSubmodule: () -> Unit,
onUpdateSubmodule: () -> Unit,
onOpenSubmoduleInTab: () -> Unit,
): List<ContextMenuElement> {
return mutableListOf<ContextMenuElement>().apply {
@ -13,7 +16,7 @@ fun submoduleContextMenuItems(
add(
ContextMenuElement.ContextTextEntry(
label = "Initialize submodule",
onClick = onInitializeModule
onClick = onInitializeSubmodule,
)
)
}
@ -21,27 +24,27 @@ fun submoduleContextMenuItems(
add(
ContextMenuElement.ContextTextEntry(
label = "Open submodule in new tab",
onClick = onOpenSubmoduleInTab
onClick = onOpenSubmoduleInTab,
)
)
add(
ContextMenuElement.ContextTextEntry(
label = "Sync submodule",
onClick = onInitializeModule
onClick = onSyncSubmodule,
)
)
add(
ContextMenuElement.ContextTextEntry(
label = "Update submodule",
onClick = onInitializeModule
onClick = onUpdateSubmodule,
)
)
add(
ContextMenuElement.ContextTextEntry(
label = "DeInitialize submodule",
onClick = onInitializeModule
onClick = onDeinitializeSubmodule,
)
)
}

View File

@ -3,9 +3,7 @@ package com.jetpackduba.gitnuro.viewmodels.sidepanel
import com.jetpackduba.gitnuro.extensions.lowercaseContains
import com.jetpackduba.gitnuro.git.RefreshType
import com.jetpackduba.gitnuro.git.TabState
import com.jetpackduba.gitnuro.git.submodules.GetSubmodulesUseCase
import com.jetpackduba.gitnuro.git.submodules.InitializeSubmoduleUseCase
import com.jetpackduba.gitnuro.git.submodules.UpdateSubmoduleUseCase
import com.jetpackduba.gitnuro.git.submodules.*
import com.jetpackduba.gitnuro.ui.TabsManager
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
@ -20,6 +18,8 @@ class SubmodulesViewModel @AssistedInject constructor(
private val getSubmodulesUseCase: GetSubmodulesUseCase,
private val initializeSubmoduleUseCase: InitializeSubmoduleUseCase,
private val updateSubmoduleUseCase: UpdateSubmoduleUseCase,
private val syncSubmoduleUseCase: SyncSubmoduleUseCase,
private val deInitializeSubmoduleUseCase: DeInitializeSubmoduleUseCase,
private val tabScope: CoroutineScope,
private val tabsManager: TabsManager,
@Assisted
@ -67,6 +67,29 @@ class SubmodulesViewModel @AssistedInject constructor(
fun onOpenSubmoduleInTab(path: String) = tabState.runOperation(refreshType = RefreshType.NONE) { git ->
tabsManager.addNewTabFromPath("${git.repository.directory.parent}/$path", true)
}
fun onDeinitializeSubmodule(path: String) = tabState.safeProcessing(
refreshType = RefreshType.SUBMODULES,
title = "Deinitializing submodule $path",
){ git ->
deInitializeSubmoduleUseCase(git, path)
}
fun onSyncSubmodule(path: String) = tabState.safeProcessing(
refreshType = RefreshType.SUBMODULES,
title = "Syncing submodule $path",
subtitle = "Please wait until synchronization has finished",
){ git ->
syncSubmoduleUseCase(git, path)
}
fun onUpdateSubmodule(path: String) = tabState.safeProcessing(
refreshType = RefreshType.SUBMODULES,
title = "Updating submodule $path",
subtitle = "Please wait until update has finished",
){ git ->
updateSubmoduleUseCase(git, path)
}
}
data class SubmodulesState(val submodules: List<Pair<String, SubmoduleStatus>>, val isExpanded: Boolean)