TP-48264 User is not able to select/edit a number at a specific place in the monthly income input field (#234)

This commit is contained in:
Aparna Vadlamani
2023-11-09 16:41:19 +05:30
committed by GitHub
parent cd83965ab8
commit 2406bfcabe
4 changed files with 47 additions and 5 deletions

View File

@@ -2,12 +2,16 @@ package com.uitron.demo.dazzledesignsystem.network
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import java.util.concurrent.TimeUnit
class HttpClient {
val httpClientBuilder: OkHttpClient.Builder
get() {
val okHttpClientBuilder = OkHttpClient.Builder()
with(okHttpClientBuilder) {
connectTimeout(60, TimeUnit.SECONDS)
writeTimeout(60, TimeUnit.SECONDS)
readTimeout(60, TimeUnit.SECONDS)
addInterceptor(loggingInterceptor())
}
return okHttpClientBuilder

View File

@@ -320,7 +320,8 @@ enum class InputTransformationType {
DOB_TO_READABLE_STRING,
MONEY_WITH_RUPEE_SYMBOL,
ALL_CAPS,
DATE_FORMAT
DATE_FORMAT,
MONTHLY_INCOME
}
enum class GravityType {

View File

@@ -387,6 +387,10 @@ fun transformInput(
InputTransformationType.DATE_FORMAT.name -> {
changeDateFormat(valueTransformation, inputText)
}
InputTransformationType.MONTHLY_INCOME.name -> {
if (inputText.isEmpty()) return inputText
inputText.toDoubleWithSafe().toLong().toString()
}
else -> inputText
}

View File

@@ -14,18 +14,45 @@ import androidx.compose.ui.text.input.VisualTransformation
import toDoubleWithSafe
class NumberCommaTransformation : VisualTransformation {
override fun filter(text: AnnotatedString): TransformedText {
return TransformedText(text = AnnotatedString(moneyFormat(text.text)),
offsetMapping = object : OffsetMapping {
val transformation = reformat(text.text)
return TransformedText(AnnotatedString(transformation.formatted ?: ""),
object : OffsetMapping {
override fun originalToTransformed(offset: Int): Int {
return moneyFormat(text.text).length
return transformation.originalToTransformed[offset]
}
override fun transformedToOriginal(offset: Int): Int {
return text.length
return transformation.transformedToOriginal[offset]
}
})
}
private fun reformat(original: String): Transformation {
var formatted = original
if (original.isNotEmpty()) {
formatted = moneyFormat(original)
}
val originalToTransformed = mutableListOf<Int>()
val transformedToOriginal = mutableListOf<Int>()
var specialCharsCount = 0
formatted.forEachIndexed { index, char ->
if (char.equals(',', true)) {
specialCharsCount++
} else {
originalToTransformed.add(index)
}
transformedToOriginal.add(index - specialCharsCount)
}
originalToTransformed.add(originalToTransformed.maxOrNull()?.plus(1) ?: 0)
transformedToOriginal.add(transformedToOriginal.maxOrNull()?.plus(1) ?: 0)
return Transformation(formatted, originalToTransformed, transformedToOriginal)
}
}
fun moneyFormat(value: String): String {
@@ -45,3 +72,9 @@ fun moneyFormat(value: String): String {
}
return result + lastDigit
}
data class Transformation(
val formatted: String?,
val originalToTransformed: List<Int>,
val transformedToOriginal: List<Int>,
)