mirror of
https://github.com/InsanusMokrassar/KotlinPublicationScriptsBuilder.git
synced 2024-11-25 03:28:52 +00:00
almost completed adding of new creds type UI
This commit is contained in:
parent
3be0f24eac
commit
788fe49aa4
@ -53,6 +53,11 @@ data class MavenPublishingRepository(
|
|||||||
val usernameProperty: String,
|
val usernameProperty: String,
|
||||||
val passwordProperty: String
|
val passwordProperty: String
|
||||||
): CredentialsType {
|
): CredentialsType {
|
||||||
|
constructor(baseParameter: String) : this(
|
||||||
|
"${baseParameter.uppercase()}_USER",
|
||||||
|
"${baseParameter.uppercase()}_PASSWORD",
|
||||||
|
)
|
||||||
|
|
||||||
override fun buildCheckPart(): String = "(project.hasProperty('${usernameProperty}') || System.getenv('${usernameProperty}') != null) && (project.hasProperty('${passwordProperty}') || System.getenv('${passwordProperty}') != null)"
|
override fun buildCheckPart(): String = "(project.hasProperty('${usernameProperty}') || System.getenv('${usernameProperty}') != null) && (project.hasProperty('${passwordProperty}') || System.getenv('${passwordProperty}') != null)"
|
||||||
override fun buildCredsPart(): String {
|
override fun buildCredsPart(): String {
|
||||||
return """
|
return """
|
||||||
|
@ -3,24 +3,32 @@ package dev.inmo.kmppscriptbuilder.core.ui
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository
|
import dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.ui.utils.ButtonsPanel
|
||||||
import dev.inmo.kmppscriptbuilder.core.ui.utils.CommonText
|
import dev.inmo.kmppscriptbuilder.core.ui.utils.CommonText
|
||||||
import dev.inmo.kmppscriptbuilder.core.ui.utils.CommonTextField
|
import dev.inmo.kmppscriptbuilder.core.ui.utils.CommonTextField
|
||||||
import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultSmallVerticalMargin
|
import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultSmallVerticalMargin
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.ui.utils.Drawer
|
||||||
|
|
||||||
class RepositoryState(
|
class RepositoryState(
|
||||||
name: String = "",
|
name: String = "",
|
||||||
url: String = ""
|
url: String = "",
|
||||||
|
credsType: MavenPublishingRepository.CredentialsType = MavenPublishingRepository.CredentialsType.UsernameAndPassword(name)
|
||||||
) {
|
) {
|
||||||
var name: String by mutableStateOf(name)
|
var name: String by mutableStateOf(name)
|
||||||
var url: String by mutableStateOf(url)
|
var url: String by mutableStateOf(url)
|
||||||
|
var credsType by mutableStateOf(credsType)
|
||||||
|
|
||||||
fun toRepository() = MavenPublishingRepository(name, url)
|
fun toRepository() = MavenPublishingRepository(name, url)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun MavenPublishingRepository.toRepositoryState() = RepositoryState(name, url)
|
private fun MavenPublishingRepository.toRepositoryState() = RepositoryState(name, url)
|
||||||
|
|
||||||
|
expect class RepositoryCredentialTypeDrawer : Drawer<MavenPublishingRepository.CredentialsType>
|
||||||
|
expect fun RepositoryCredentialTypeDrawerWithState(repositoryState: RepositoryState): RepositoryCredentialTypeDrawer
|
||||||
|
|
||||||
class RepositoriesView : ListView<RepositoryState>("Repositories info") {
|
class RepositoriesView : ListView<RepositoryState>("Repositories info") {
|
||||||
var repositories: List<MavenPublishingRepository>
|
var repositories: List<MavenPublishingRepository>
|
||||||
get() = itemsList.map { it.toRepository() }
|
get() = itemsList.map { it.toRepository() }
|
||||||
@ -38,6 +46,10 @@ class RepositoriesView : ListView<RepositoryState>("Repositories info") {
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun buildView(item: RepositoryState) {
|
override fun buildView(item: RepositoryState) {
|
||||||
|
val credsTypesDrawer = remember {
|
||||||
|
RepositoryCredentialTypeDrawerWithState(item)
|
||||||
|
}
|
||||||
|
|
||||||
CommonText("Repository name")
|
CommonText("Repository name")
|
||||||
CommonTextField(
|
CommonTextField(
|
||||||
item.name,
|
item.name,
|
||||||
@ -49,6 +61,49 @@ class RepositoriesView : ListView<RepositoryState>("Repositories info") {
|
|||||||
item.url,
|
item.url,
|
||||||
"For example: https://repo.maven.apache.org/maven2/"
|
"For example: https://repo.maven.apache.org/maven2/"
|
||||||
) { item.url = it }
|
) { item.url = it }
|
||||||
|
|
||||||
|
ButtonsPanel(
|
||||||
|
"Credentials type",
|
||||||
|
MavenPublishingRepository.CredentialsType.Nothing.takeIf { item.credsType != it } ?: item.credsType,
|
||||||
|
MavenPublishingRepository.CredentialsType.UsernameAndPassword(item.name).takeIf { item.credsType !is MavenPublishingRepository.CredentialsType.UsernameAndPassword } ?: item.credsType,
|
||||||
|
MavenPublishingRepository.CredentialsType.HttpHeaderCredentials("Authorization", "${item.name.uppercase()}_TOKEN").takeIf { item.credsType !is MavenPublishingRepository.CredentialsType.HttpHeaderCredentials } ?: item.credsType,
|
||||||
|
) {
|
||||||
|
with(credsTypesDrawer) {
|
||||||
|
with(item.credsType) {
|
||||||
|
draw()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
when (val credsType = item.credsType) {
|
||||||
|
is MavenPublishingRepository.CredentialsType.HttpHeaderCredentials -> {
|
||||||
|
CommonText("Header name")
|
||||||
|
CommonTextField(credsType.headerName) {
|
||||||
|
item.credsType = credsType.copy(headerName = it)
|
||||||
|
}
|
||||||
|
DefaultSmallVerticalMargin()
|
||||||
|
|
||||||
|
CommonText("Property name")
|
||||||
|
CommonTextField(credsType.headerValueProperty) {
|
||||||
|
item.credsType = credsType.copy(headerValueProperty = it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MavenPublishingRepository.CredentialsType.Nothing -> {
|
||||||
|
CommonText("No parameters for absence of credentials")
|
||||||
|
}
|
||||||
|
is MavenPublishingRepository.CredentialsType.UsernameAndPassword -> {
|
||||||
|
CommonText("Username property name")
|
||||||
|
CommonTextField(credsType.usernameProperty) {
|
||||||
|
item.credsType = credsType.copy(usernameProperty = it)
|
||||||
|
}
|
||||||
|
DefaultSmallVerticalMargin()
|
||||||
|
|
||||||
|
CommonText("Password property name")
|
||||||
|
CommonTextField(credsType.passwordProperty) {
|
||||||
|
item.credsType = credsType.copy(passwordProperty = it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
package dev.inmo.kmppscriptbuilder.core.ui
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import dev.inmo.jsuikit.elements.DefaultButton
|
||||||
|
import dev.inmo.jsuikit.modifiers.UIKitButton
|
||||||
|
import dev.inmo.jsuikit.modifiers.UIKitMargin
|
||||||
|
import dev.inmo.jsuikit.modifiers.UIKitUtility
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.ui.utils.Drawer
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.ui.utils.NoTransform
|
||||||
|
|
||||||
|
actual class RepositoryCredentialTypeDrawer(
|
||||||
|
private val state: RepositoryState
|
||||||
|
) : Drawer<MavenPublishingRepository.CredentialsType> {
|
||||||
|
@Composable
|
||||||
|
override fun MavenPublishingRepository.CredentialsType.draw() {
|
||||||
|
val name = when (this@draw) {
|
||||||
|
is MavenPublishingRepository.CredentialsType.HttpHeaderCredentials -> "Headers"
|
||||||
|
MavenPublishingRepository.CredentialsType.Nothing -> "No"
|
||||||
|
is MavenPublishingRepository.CredentialsType.UsernameAndPassword -> "Username and password"
|
||||||
|
}
|
||||||
|
if (state.credsType == this) {
|
||||||
|
DefaultButton(name, UIKitButton.Type.Primary, UIKitButton.Size.Small, UIKitMargin.Small.Horizontal, UIKitUtility.NoTransform, UIKitUtility.Border.Rounded)
|
||||||
|
} else {
|
||||||
|
DefaultButton(name, UIKitButton.Type.Default, UIKitButton.Size.Small, UIKitMargin.Small.Horizontal, UIKitUtility.NoTransform, UIKitUtility.Border.Rounded) {
|
||||||
|
state.credsType = this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
actual fun RepositoryCredentialTypeDrawerWithState(repositoryState: RepositoryState): RepositoryCredentialTypeDrawer = RepositoryCredentialTypeDrawer(repositoryState)
|
@ -0,0 +1,40 @@
|
|||||||
|
package dev.inmo.kmppscriptbuilder.core.ui
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.material.Button
|
||||||
|
import androidx.compose.material.OutlinedButton
|
||||||
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository
|
||||||
|
import dev.inmo.kmppscriptbuilder.core.ui.utils.Drawer
|
||||||
|
|
||||||
|
actual class RepositoryCredentialTypeDrawer(
|
||||||
|
private val state: RepositoryState
|
||||||
|
) : Drawer<MavenPublishingRepository.CredentialsType> {
|
||||||
|
@Composable
|
||||||
|
override fun MavenPublishingRepository.CredentialsType.draw() {
|
||||||
|
val name = when (this@draw) {
|
||||||
|
is MavenPublishingRepository.CredentialsType.HttpHeaderCredentials -> "Headers"
|
||||||
|
MavenPublishingRepository.CredentialsType.Nothing -> "No"
|
||||||
|
is MavenPublishingRepository.CredentialsType.UsernameAndPassword -> "Username and password"
|
||||||
|
}
|
||||||
|
if (state.credsType == this) {
|
||||||
|
Button({}, Modifier.padding(8.dp, 0.dp)) {
|
||||||
|
Text(name)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
OutlinedButton(
|
||||||
|
{
|
||||||
|
state.credsType = this
|
||||||
|
},
|
||||||
|
Modifier.padding(8.dp, 0.dp)
|
||||||
|
) {
|
||||||
|
Text(name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
actual fun RepositoryCredentialTypeDrawerWithState(repositoryState: RepositoryState): RepositoryCredentialTypeDrawer = RepositoryCredentialTypeDrawer(repositoryState)
|
@ -87,7 +87,8 @@ actual fun TitleText(text: String) {
|
|||||||
actual fun <T> ButtonsPanel(
|
actual fun <T> ButtonsPanel(
|
||||||
title: String,
|
title: String,
|
||||||
data: Iterable<T>,
|
data: Iterable<T>,
|
||||||
itemDrawer: @Composable (T) -> Unit) {
|
itemDrawer: @Composable (T) -> Unit
|
||||||
|
) {
|
||||||
Row {
|
Row {
|
||||||
Text(title, Modifier.padding(8.dp))
|
Text(title, Modifier.padding(8.dp))
|
||||||
data.forEach { itemDrawer(it) }
|
data.forEach { itemDrawer(it) }
|
||||||
|
Loading…
Reference in New Issue
Block a user