This commit is contained in:
InsanusMokrassar 2022-11-16 17:54:16 +06:00
parent 788fe49aa4
commit c6b1289f5a
10 changed files with 90 additions and 49 deletions

View File

@ -33,13 +33,10 @@ data class MavenPublishingRepository(
val name: String, val name: String,
val url: String, val url: String,
val credsType: CredentialsType = CredentialsType.UsernameAndPassword( val credsType: CredentialsType = CredentialsType.UsernameAndPassword(
"${name.uppercase()}_USER", CredentialsType.UsernameAndPassword.defaultUsernameProperty(name),
"${name.uppercase()}_PASSWORD" CredentialsType.UsernameAndPassword.defaultPasswordProperty(name),
) )
) { ) {
val defaultUsernameProperty = "${name.uppercase()}_USER"
val defaultPasswordProperty = "${name.uppercase()}_PASSWORD"
val defaultHeaderValueProperty = "${name.uppercase()}_TOKEN"
@Serializable @Serializable
sealed interface CredentialsType { sealed interface CredentialsType {
@ -54,8 +51,8 @@ data class MavenPublishingRepository(
val passwordProperty: String val passwordProperty: String
): CredentialsType { ): CredentialsType {
constructor(baseParameter: String) : this( constructor(baseParameter: String) : this(
"${baseParameter.uppercase()}_USER", defaultUsernameProperty(baseParameter),
"${baseParameter.uppercase()}_PASSWORD", defaultPasswordProperty(baseParameter)
) )
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)"
@ -67,6 +64,15 @@ return """
} }
""" """
} }
companion object {
fun defaultUsernameProperty(name: String): String {
return "${name.uppercase()}_USER"
}
fun defaultPasswordProperty(name: String): String {
return "${name.uppercase()}_PASSWORD"
}
}
} }
@Serializable @Serializable
data class HttpHeaderCredentials( data class HttpHeaderCredentials(
@ -82,6 +88,12 @@ return """
} }
""" """
} }
companion object {
fun defaultValueProperty(name: String): String {
return "${name.uppercase()}_TOKEN"
}
}
} }
fun buildCheckPart(): String fun buildCheckPart(): String

View File

@ -5,7 +5,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import dev.inmo.kmppscriptbuilder.core.models.Config import dev.inmo.kmppscriptbuilder.core.models.Config
import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultBox import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultContentColumn
import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultDivider import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultDivider
@Composable @Composable
@ -45,7 +45,7 @@ class BuilderView : View() {
config = it config = it
} }
DefaultBox { DefaultContentColumn {
projectTypeView.build() projectTypeView.build()
DefaultDivider() DefaultDivider()
licensesView.build() licensesView.build()

View File

@ -7,7 +7,6 @@ import androidx.compose.runtime.setValue
import dev.inmo.kmppscriptbuilder.core.models.Developer import dev.inmo.kmppscriptbuilder.core.models.Developer
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.DefaultBox
import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultSmallVerticalMargin import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultSmallVerticalMargin
class DeveloperState( class DeveloperState(

View File

@ -9,6 +9,7 @@ import dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository
import dev.inmo.kmppscriptbuilder.core.ui.utils.ButtonsPanel 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.DefaultContentColumn
import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultSmallVerticalMargin import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultSmallVerticalMargin
import dev.inmo.kmppscriptbuilder.core.ui.utils.Drawer import dev.inmo.kmppscriptbuilder.core.ui.utils.Drawer
@ -21,10 +22,10 @@ class RepositoryState(
var url: String by mutableStateOf(url) var url: String by mutableStateOf(url)
var credsType by mutableStateOf(credsType) var credsType by mutableStateOf(credsType)
fun toRepository() = MavenPublishingRepository(name, url) fun toRepository() = MavenPublishingRepository(name, url, credsType)
} }
private fun MavenPublishingRepository.toRepositoryState() = RepositoryState(name, url) private fun MavenPublishingRepository.toRepositoryState() = RepositoryState(name, url, credsType)
expect class RepositoryCredentialTypeDrawer : Drawer<MavenPublishingRepository.CredentialsType> expect class RepositoryCredentialTypeDrawer : Drawer<MavenPublishingRepository.CredentialsType>
expect fun RepositoryCredentialTypeDrawerWithState(repositoryState: RepositoryState): RepositoryCredentialTypeDrawer expect fun RepositoryCredentialTypeDrawerWithState(repositoryState: RepositoryState): RepositoryCredentialTypeDrawer
@ -54,7 +55,34 @@ class RepositoriesView : ListView<RepositoryState>("Repositories info") {
CommonTextField( CommonTextField(
item.name, item.name,
"This name will be used to identify repository in gradle" "This name will be used to identify repository in gradle"
) { item.name = it } ) {
val previous = item.name
item.name = it
when (val currentCredsType = item.credsType) {
is MavenPublishingRepository.CredentialsType.HttpHeaderCredentials -> {
if (MavenPublishingRepository.CredentialsType.HttpHeaderCredentials.defaultValueProperty(previous) == currentCredsType.headerValueProperty) {
item.credsType = currentCredsType.copy(
headerValueProperty = MavenPublishingRepository.CredentialsType.HttpHeaderCredentials.defaultValueProperty(it)
)
}
}
MavenPublishingRepository.CredentialsType.Nothing -> {}
is MavenPublishingRepository.CredentialsType.UsernameAndPassword -> {
var current: MavenPublishingRepository.CredentialsType.UsernameAndPassword = currentCredsType
if (MavenPublishingRepository.CredentialsType.UsernameAndPassword.defaultUsernameProperty(previous) == currentCredsType.usernameProperty) {
current = current.copy(
usernameProperty = MavenPublishingRepository.CredentialsType.UsernameAndPassword.defaultUsernameProperty(it)
)
}
if (MavenPublishingRepository.CredentialsType.UsernameAndPassword.defaultPasswordProperty(previous) == currentCredsType.passwordProperty) {
current = current.copy(
passwordProperty = MavenPublishingRepository.CredentialsType.UsernameAndPassword.defaultPasswordProperty(it)
)
}
item.credsType = current
}
}
}
DefaultSmallVerticalMargin() DefaultSmallVerticalMargin()
CommonText("Repository url") CommonText("Repository url")
CommonTextField( CommonTextField(
@ -66,41 +94,46 @@ class RepositoriesView : ListView<RepositoryState>("Repositories info") {
"Credentials type", "Credentials type",
MavenPublishingRepository.CredentialsType.Nothing.takeIf { item.credsType != it } ?: item.credsType, 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.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, MavenPublishingRepository.CredentialsType.HttpHeaderCredentials(
"Authorization",
MavenPublishingRepository.CredentialsType.HttpHeaderCredentials.defaultValueProperty(item.name)
).takeIf { item.credsType !is MavenPublishingRepository.CredentialsType.HttpHeaderCredentials } ?: item.credsType,
) { ) {
with(credsTypesDrawer) { with(credsTypesDrawer) {
with(item.credsType) { with(it) {
draw() draw()
} }
} }
} }
when (val credsType = item.credsType) { DefaultContentColumn {
is MavenPublishingRepository.CredentialsType.HttpHeaderCredentials -> { when (val credsType = item.credsType) {
CommonText("Header name") is MavenPublishingRepository.CredentialsType.HttpHeaderCredentials -> {
CommonTextField(credsType.headerName) { CommonText("Header name")
item.credsType = credsType.copy(headerName = it) CommonTextField(credsType.headerName) {
} item.credsType = credsType.copy(headerName = it)
DefaultSmallVerticalMargin() }
DefaultSmallVerticalMargin()
CommonText("Property name") CommonText("Property name")
CommonTextField(credsType.headerValueProperty) { CommonTextField(credsType.headerValueProperty) {
item.credsType = credsType.copy(headerValueProperty = it) item.credsType = credsType.copy(headerValueProperty = it)
}
} }
} MavenPublishingRepository.CredentialsType.Nothing -> {
MavenPublishingRepository.CredentialsType.Nothing -> { CommonText("No parameters for absence of credentials")
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() is MavenPublishingRepository.CredentialsType.UsernameAndPassword -> {
CommonText("Username property name")
CommonTextField(credsType.usernameProperty) {
item.credsType = credsType.copy(usernameProperty = it)
}
DefaultSmallVerticalMargin()
CommonText("Password property name") CommonText("Password property name")
CommonTextField(credsType.passwordProperty) { CommonTextField(credsType.passwordProperty) {
item.credsType = credsType.copy(passwordProperty = it) item.credsType = credsType.copy(passwordProperty = it)
}
} }
} }
} }

View File

@ -1,13 +1,13 @@
package dev.inmo.kmppscriptbuilder.core.ui package dev.inmo.kmppscriptbuilder.core.ui
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultBox import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultContentColumn
abstract class VerticalView(protected val title: String) : View() { abstract class VerticalView(protected val title: String) : View() {
abstract val content: @Composable () -> Unit abstract val content: @Composable () -> Unit
@Composable @Composable
override fun build() { override fun build() {
DefaultBox { DefaultContentColumn {
DrawVertically(title, content) DrawVertically(title, content)
} }
} }

View File

@ -46,4 +46,4 @@ expect fun DefaultDivider()
expect fun DefaultSmallVerticalMargin() expect fun DefaultSmallVerticalMargin()
@Composable @Composable
expect fun DefaultBox(block: @Composable () -> Unit) expect fun DefaultContentColumn(block: @Composable () -> Unit)

View File

@ -5,17 +5,15 @@ import dev.inmo.jsuikit.elements.DefaultButton
import dev.inmo.jsuikit.modifiers.UIKitButton import dev.inmo.jsuikit.modifiers.UIKitButton
import dev.inmo.jsuikit.modifiers.UIKitMargin import dev.inmo.jsuikit.modifiers.UIKitMargin
import dev.inmo.jsuikit.modifiers.UIKitUtility import dev.inmo.jsuikit.modifiers.UIKitUtility
import dev.inmo.jsuikit.modifiers.builder import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultContentColumn
import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultBox
import dev.inmo.kmppscriptbuilder.core.ui.utils.Drawer import dev.inmo.kmppscriptbuilder.core.ui.utils.Drawer
import dev.inmo.kmppscriptbuilder.core.ui.utils.NoTransform import dev.inmo.kmppscriptbuilder.core.ui.utils.NoTransform
import org.jetbrains.compose.web.dom.Div
actual class ListViewDrawer<T> : Drawer<ListView<T>> { actual class ListViewDrawer<T> : Drawer<ListView<T>> {
@Composable @Composable
override fun ListView<T>.draw() { override fun ListView<T>.draw() {
itemsList.forEach { item -> itemsList.forEach { item ->
DefaultBox { DefaultContentColumn {
buildView(item) buildView(item)
DefaultButton(removeItemText, UIKitButton.Type.Default, UIKitMargin.Small, UIKitUtility.NoTransform, UIKitUtility.Border.Rounded) { DefaultButton(removeItemText, UIKitButton.Type.Default, UIKitMargin.Small, UIKitUtility.NoTransform, UIKitUtility.Border.Rounded) {
itemsList.remove(item) itemsList.remove(item)

View File

@ -121,7 +121,7 @@ actual fun DefaultSmallVerticalMargin() {
} }
@Composable @Composable
actual fun DefaultBox(block: @Composable () -> Unit) { actual fun DefaultContentColumn(block: @Composable () -> Unit) {
Div(attrsBuilder(UIKitMargin.Small.Horizontal, UIKitMargin.Small.Vertical)) { Div(attrsBuilder(UIKitMargin.Small.Horizontal, UIKitMargin.Small.Vertical)) {
block() block()
} }

View File

@ -1,6 +1,5 @@
package dev.inmo.kmppscriptbuilder.core.ui package dev.inmo.kmppscriptbuilder.core.ui
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.Button import androidx.compose.material.Button
import androidx.compose.material.OutlinedButton import androidx.compose.material.OutlinedButton
@ -8,14 +7,14 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import dev.inmo.kmppscriptbuilder.core.ui.utils.CommonText import dev.inmo.kmppscriptbuilder.core.ui.utils.CommonText
import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultBox import dev.inmo.kmppscriptbuilder.core.ui.utils.DefaultContentColumn
import dev.inmo.kmppscriptbuilder.core.ui.utils.Drawer import dev.inmo.kmppscriptbuilder.core.ui.utils.Drawer
actual class ListViewDrawer<T> : Drawer<ListView<T>> { actual class ListViewDrawer<T> : Drawer<ListView<T>> {
@Composable @Composable
override fun ListView<T>.draw() { override fun ListView<T>.draw() {
itemsList.forEach { item -> itemsList.forEach { item ->
DefaultBox { DefaultContentColumn {
buildView(item) buildView(item)
OutlinedButton({ itemsList.remove(item) }, Modifier.padding(8.dp)) { OutlinedButton({ itemsList.remove(item) }, Modifier.padding(8.dp)) {
CommonText(removeItemText,) CommonText(removeItemText,)

View File

@ -106,7 +106,7 @@ actual fun DefaultSmallVerticalMargin() {
} }
@Composable @Composable
actual fun DefaultBox(block: @Composable () -> Unit) { actual fun DefaultContentColumn(block: @Composable () -> Unit) {
Column(Modifier.padding(8.dp)) { Column(Modifier.padding(8.dp)) {
block() block()
} }