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:
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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>,
|
||||
)
|
||||
Reference in New Issue
Block a user