refact: [DATABASE] allow multiple times the same tab open (#326)

Co-authored-by: Florent Champigny <florent@bere.al>
This commit is contained in:
Florent CHAMPIGNY 2025-10-09 22:03:19 +02:00 committed by GitHub
parent 0b60acfde1
commit 46160e4457
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 21 additions and 9 deletions

View file

@ -82,11 +82,13 @@ class DatabaseViewModel(
fun onTableDoubleClicked(databaseId: DeviceDataBaseId, table: TableUiModel) {
viewModelScope.launch(dispatcherProvider.viewModel) {
val generatedName = table.name
createTab(
DatabaseTabState(
databaseId = databaseId,
tableName = table.name,
displayName = table.name,
displayName = generatedName,
generatedName = generatedName,
)
)
}
@ -109,11 +111,13 @@ class DatabaseViewModel(
private fun createTabForDatabase(database: DeviceDataBaseUiModel) {
viewModelScope.launch(dispatcherProvider.viewModel) {
val generatedName = "${database.name}.db"
createTab(
DatabaseTabState(
databaseId = database.id,
tableName = null,
displayName = "${database.name}.db"
displayName = generatedName,
generatedName = generatedName,
)
)
}
@ -148,16 +152,23 @@ class DatabaseViewModel(
private suspend fun createTab(tab: DatabaseTabState) {
val deviceIdAndPackageName = getCurrentDeviceIdAndPackageNameUseCase() ?: return
_selectedTab.update { it + (deviceIdAndPackageName to tab) }
lateinit var addedTab : DatabaseTabState
_tabs.update {
val list = it[deviceIdAndPackageName] ?: emptyList()
if (list.contains(tab)) it // nothing
else {
val newList = list.toMutableList().apply {
add(tab)
}
it + (deviceIdAndPackageName to newList)
// if we have already a tab with the same "generatedName", it creates a new one with (number) after
val withSameName = list.count { it.generatedName == tab.generatedName }
addedTab = if (withSameName != 0) {
tab.copy(displayName = "${tab.displayName} (${withSameName})")
} else {
tab
}
val newList = list.toMutableList().apply {
add(addedTab)
}
it + (deviceIdAndPackageName to newList)
}
_selectedTab.update { it + (deviceIdAndPackageName to addedTab) }
}
}

View file

@ -6,5 +6,6 @@ import androidx.compose.runtime.Immutable
data class DatabaseTabState(
val databaseId: String,
val tableName: String?,
val generatedName: String,
val displayName: String,
)