Updated on 2026-08-14

This commit is contained in:
Tangem 2023-04-25 16:40:06 +08:00
parent 4690bf2e6c
commit 3718b9e42f
12 changed files with 876 additions and 42 deletions

View file

@ -13,7 +13,7 @@ interface DataConverterVisitor<Data, Result> {
interface FieldDataConverter<Result> : DataConverterVisitor<FieldData, Result>
abstract class BaseFieldDataConverter<Result> : FieldDataConverter<Result> {
protected val collectIds: List<FieldId>
private val collectIds: List<FieldId>
get() = getIdToCollect()
protected val collectedData: MutableMap<FieldId, Any?> = mutableMapOf()
@ -31,7 +31,7 @@ abstract class BaseFieldDataConverter<Result> : FieldDataConverter<Result> {
class FieldToJsonConverter(
private val fieldsToConvert: List<FieldId> = listOf(),
protected val jsonConverter: MoshiJsonConverter,
private val jsonConverter: MoshiJsonConverter,
) : BaseFieldDataConverter<String>() {
override fun getConvertedData(): String = jsonConverter.toJson(collectedData, " ")

View file

@ -16,16 +16,14 @@ import timber.log.Timber
interface CustomTokenValidator<T> : Validator<T, AddCustomTokenError>
class StringIsEmptyValidator : CustomTokenValidator<String> {
override fun validate(data: String?): AddCustomTokenError? = when {
data == null || data.isEmpty() -> null
else -> AddCustomTokenError.FieldIsNotEmpty
override fun validate(data: String?): AddCustomTokenError? {
return if (data.isNullOrEmpty()) null else AddCustomTokenError.FieldIsNotEmpty
}
}
class StringIsNotEmptyValidator : CustomTokenValidator<String> {
override fun validate(data: String?): AddCustomTokenError? = when {
data == null || data.isEmpty() -> AddCustomTokenError.FieldIsEmpty
else -> null
override fun validate(data: String?): AddCustomTokenError? {
return if (data.isNullOrEmpty()) AddCustomTokenError.FieldIsEmpty else null
}
}
@ -46,12 +44,10 @@ class TokenContractAddressValidator : CustomTokenValidator<String> {
}
override fun validate(data: String?): AddCustomTokenError? {
if (data == null || data.isEmpty()) return AddCustomTokenError.FieldIsEmpty
return if (getAddressService().validate(data)) {
null
} else {
AddCustomTokenError.InvalidContractAddress
return when {
data.isNullOrEmpty() -> AddCustomTokenError.FieldIsEmpty
getAddressService().validate(data) -> null
else -> AddCustomTokenError.InvalidContractAddress
}
}
@ -74,9 +70,11 @@ class TokenContractAddressValidator : CustomTokenValidator<String> {
}
class TokenNetworkValidator : CustomTokenValidator<Blockchain> {
override fun validate(data: Blockchain?): AddCustomTokenError? = when (data) {
null, Blockchain.Unknown -> AddCustomTokenError.NetworkIsNotSelected
else -> null
override fun validate(data: Blockchain?): AddCustomTokenError? {
return when (data) {
null, Blockchain.Unknown -> AddCustomTokenError.NetworkIsNotSelected
else -> null
}
}
}
@ -88,14 +86,14 @@ class TokenSymbolValidator : CustomTokenValidator<String> {
override fun validate(data: String?): AddCustomTokenError? = StringIsNotEmptyValidator().validate(data)
}
@Suppress("MagicNumber")
class TokenDecimalsValidator : CustomTokenValidator<String> {
override fun validate(data: String?): AddCustomTokenError? {
val decimal = data?.toIntOrNull() ?: return AddCustomTokenError.FieldIsEmpty
return when {
decimal > 30 -> AddCustomTokenError.InvalidDecimalsCount
else -> null
}
return if (decimal > INVALID_DECIMALS_COUNT) AddCustomTokenError.InvalidDecimalsCount else null
}
private companion object {
const val INVALID_DECIMALS_COUNT = 30
}
}

View file

@ -125,7 +125,7 @@ internal class AddCustomTokenHub : BaseStoreHub<AddCustomTokenState>("AddCustomT
}
}
}
else -> {}
else -> Unit
}
}
@ -532,21 +532,24 @@ internal class AddCustomTokenHub : BaseStoreHub<AddCustomTokenState>("AddCustomT
}
private fun CustomTokenFieldId.validateValue(value: Any): AddCustomTokenError? {
val state = hubState
val contractAddressValidator: TokenContractAddressValidator = state.getValidator(ContractAddress)
val nameValidator: TokenNameValidator = state.getValidator(Name)
val symbolValidator: TokenSymbolValidator = state.getValidator(Symbol)
val decimalsValidator: TokenDecimalsValidator = state.getValidator(Decimals)
val networkValidator: TokenNetworkValidator = state.getValidator(Network)
return when (this) {
ContractAddress -> {
val contractAddressValidator: TokenContractAddressValidator = hubState.getValidator(ContractAddress)
contractAddressValidator.nextValidationFor(Network.getFieldValue())
contractAddressValidator.validate(value as String)
}
Network, DerivationPath -> networkValidator.validate(value as Blockchain)
Name -> nameValidator.validate(value as String)
Symbol -> symbolValidator.validate(value as String)
Decimals -> decimalsValidator.validate(value as String)
Network, DerivationPath -> {
hubState.getValidator<TokenNetworkValidator>(Network).validate(value as Blockchain)
}
Name -> {
hubState.getValidator<TokenNameValidator>(Name).validate(value as String)
}
Symbol -> {
hubState.getValidator<TokenSymbolValidator>(Symbol).validate(value as String)
}
Decimals -> {
hubState.getValidator<TokenDecimalsValidator>(Decimals).validate(value as String)
}
}
}

View file

@ -159,10 +159,6 @@ data class AddCustomTokenState(
.getConvertedData()
}
fun getNetworks(card: CardDTO, type: CustomTokenType): List<Blockchain> {
return getNetworksList(card, type)
}
companion object {
/**