From d81cb1c086c27e279fff67fdbf9b82159c080cb9 Mon Sep 17 00:00:00 2001 From: Wahyu Date: Thu, 13 Oct 2022 15:14:54 +0700 Subject: [PATCH 1/2] refactor optimize code --- .../creditcard/CreditCardActivity.kt | 63 +++++--------- .../creditcard/SavedCardActivity.kt | 12 +-- .../view/SnapCreditCardDetailListItem.kt | 87 +++---------------- 3 files changed, 38 insertions(+), 124 deletions(-) diff --git a/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/presentation/creditcard/CreditCardActivity.kt b/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/presentation/creditcard/CreditCardActivity.kt index ad27489f3..b0ac71d6b 100644 --- a/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/presentation/creditcard/CreditCardActivity.kt +++ b/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/presentation/creditcard/CreditCardActivity.kt @@ -44,7 +44,6 @@ import io.reactivex.android.schedulers.AndroidSchedulers import java.util.concurrent.TimeUnit import javax.inject.Inject -//TODO: refactor, state on value change listener is not required, compose will do the magic internal class CreditCardActivity : BaseActivity() { @Inject @@ -122,7 +121,7 @@ internal class CreditCardActivity : BaseActivity() { } .ifEmpty { null }?.toMutableStateList() //For testing purpose: uncomment below to force non save card -// null + //null } private val noPromo by lazy { @@ -254,25 +253,6 @@ internal class CreditCardActivity : BaseActivity() { bankCodeState = bankCodeId, remainingTimeState = remainingTimeState, onExpand = { isExpanding = it }, - onCardNumberValueChange = { - - state.cardNumber = it - var cardNumberWithoutSpace = SnapCreditCardUtil.getCardNumberFromTextField(it) - viewModel?.getPromosData(binNumber = cardNumberWithoutSpace) - if (cardNumberWithoutSpace.length >= SnapCreditCardUtil.SUPPORTED_MAX_BIN_NUMBER) { - var eightDigitNumber = cardNumberWithoutSpace.substring( - 0, - SnapCreditCardUtil.SUPPORTED_MAX_BIN_NUMBER - ) - if (eightDigitNumber != previousEightDigitNumber) { - previousEightDigitNumber = eightDigitNumber - viewModel?.getBankIconImage(binNumber = eightDigitNumber) - } - } else { - viewModel?.setBankIconToNull() - previousEightDigitNumber = cardNumberWithoutSpace - } - }, onClick = { if (selectedFormData == null) { viewModel?.chargeUsingCreditCard( @@ -301,6 +281,23 @@ internal class CreditCardActivity : BaseActivity() { promoState = promoState, onSavedCardRadioSelected = { selectedFormData = it } ) + state.cardNumber.let { + var cardNumberWithoutSpace = SnapCreditCardUtil.getCardNumberFromTextField(it) + viewModel?.getPromosData(binNumber = cardNumberWithoutSpace) + if (cardNumberWithoutSpace.length >= SnapCreditCardUtil.SUPPORTED_MAX_BIN_NUMBER) { + var eightDigitNumber = cardNumberWithoutSpace.substring( + 0, + SnapCreditCardUtil.SUPPORTED_MAX_BIN_NUMBER + ) + if (eightDigitNumber != previousEightDigitNumber) { + previousEightDigitNumber = eightDigitNumber + viewModel?.getBankIconImage(binNumber = eightDigitNumber) + } + } else { + viewModel?.setBankIconToNull() + previousEightDigitNumber = cardNumberWithoutSpace + } + } } val errorState by errorTypeState errorState?.let { @@ -368,7 +365,6 @@ internal class CreditCardActivity : BaseActivity() { bankCodeState: Int?, remainingTimeState: State, onExpand: (Boolean) -> Unit, - onCardNumberValueChange: (TextFieldValue) -> Unit, onSavedCardRadioSelected: (item: FormData?) -> Unit, onClick: () -> Unit ) { @@ -421,7 +417,6 @@ internal class CreditCardActivity : BaseActivity() { state = state, savedTokenListState = it, bankCodeId = bankCodeState, - onCardNumberValueChange = onCardNumberValueChange, onSavedCardRadioSelected = onSavedCardRadioSelected ) } @@ -429,8 +424,7 @@ internal class CreditCardActivity : BaseActivity() { normalCardFormLayout( state = state, creditCard = creditCard, - bankCodeState = bankCodeState, - onCardNumberValueChange = onCardNumberValueChange + bankCodeState = bankCodeState ) } @@ -468,23 +462,16 @@ internal class CreditCardActivity : BaseActivity() { state: CardItemState, bankCodeState: Int?, creditCard: CreditCard?, - onCardNumberValueChange: (TextFieldValue) -> Unit ){ NormalCardItem( state = state, bankIcon = bankCodeState, creditCard = creditCard, - onCardNumberValueChange = { - onCardNumberValueChange(it) - }, - onExpiryDateValueChange = { state.expiry = it }, - onCvvValueChange = { state.cvv = it }, onCardTextFieldFocusedChange = { state.isCardTexFieldFocused = it }, onExpiryTextFieldFocusedChange = { state.isExpiryTextFieldFocused = it }, - onCvvTextFieldFocusedChange = { state.isCvvTextFieldFocused = it }, - onSavedCardCheckedChange = { state.isSavedCardChecked = it } + onCvvTextFieldFocusedChange = { state.isCvvTextFieldFocused = it } ) } @@ -571,7 +558,6 @@ internal class CreditCardActivity : BaseActivity() { state: CardItemState, savedTokenListState: SnapshotStateList, bankCodeId: Int?, - onCardNumberValueChange: (TextFieldValue) -> Unit, onSavedCardRadioSelected: (item: FormData?) -> Unit ){ SnapSavedCardRadioGroup( @@ -585,14 +571,7 @@ internal class CreditCardActivity : BaseActivity() { viewModel?.deleteSavedCard(snapToken = snapToken, maskedCard = it.displayedMaskedCard) savedTokenListState.remove(it) }, - onCardNumberOtherCardValueChange = onCardNumberValueChange, - onExpiryOtherCardValueChange = {state.expiry = it}, - onSavedCardRadioSelected = onSavedCardRadioSelected, - onIsCvvSavedCardInvalidValueChange = { state.isCvvInvalid = it }, - onCvvValueChange = { - state.cvv = it - }, - onSavedCardCheckedChange = { state.isSavedCardChecked = it } + onSavedCardRadioSelected = onSavedCardRadioSelected ) } diff --git a/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/presentation/creditcard/SavedCardActivity.kt b/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/presentation/creditcard/SavedCardActivity.kt index 5a8e653d5..7184a8ef3 100644 --- a/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/presentation/creditcard/SavedCardActivity.kt +++ b/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/presentation/creditcard/SavedCardActivity.kt @@ -91,11 +91,11 @@ class SavedCardActivity: BaseActivity() { DaggerUiKitComponent.builder().applicationContext(this.applicationContext).build().inject(this) initTransactionResultScreenObserver() setContent { - CreditCardPage( + /* CreditCardPage( totalAmount = totalAmount, orderId = transactionDetails?.orderId.toString(), customerDetail = customerDetail - ) + )*/ } } @@ -146,7 +146,7 @@ class SavedCardActivity: BaseActivity() { return "**** **** **** $lastFourDigit" } - @Composable + /* @Composable private fun CreditCardPage( totalAmount: String, orderId: String, @@ -340,7 +340,7 @@ class SavedCardActivity: BaseActivity() { ) } } - } + }*/ private fun checkIsPayButtonEnabled( selectedFormData: FormData?, isSelectedSavedCardCvvInvalid: Boolean, @@ -375,7 +375,7 @@ class SavedCardActivity: BaseActivity() { @Preview @Composable private fun Preview() { - CreditCardPage( + /* CreditCardPage( totalAmount = "10000", orderId = "Order ID #34345445554", customerDetail = CustomerInfo( @@ -383,6 +383,6 @@ class SavedCardActivity: BaseActivity() { "087788778212", listOf("Jl. ABC", "Rumah DEF") ) - ) + )*/ } } \ No newline at end of file diff --git a/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/view/SnapCreditCardDetailListItem.kt b/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/view/SnapCreditCardDetailListItem.kt index a5aea9468..302162f4a 100644 --- a/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/view/SnapCreditCardDetailListItem.kt +++ b/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/view/SnapCreditCardDetailListItem.kt @@ -37,9 +37,6 @@ import java.text.SimpleDateFormat import java.util.* import kotlin.math.min -object CreditCardDetailListItem { -} - @Composable fun SnapCCDetailListItem( @DrawableRes startIconId: Int?, @@ -48,16 +45,8 @@ fun SnapCCDetailListItem( itemTitle: String, shouldReveal: Boolean, inputTitle: String, - isInputError: Boolean, - errorTitle: String, - onValueChange: (String) -> Unit, onEndIconClicked: () -> Unit, - onCardNumberValueChange: (TextFieldValue) -> Unit, - onExpiryDateValueChange: (TextFieldValue) -> Unit, onCvvValueChange: (TextFieldValue) -> Unit, - onCardTextFieldFocusedChange: (Boolean) -> Unit, - onExpiryTextFieldFocusedChange: (Boolean) -> Unit, - onCvvTextFieldFocusedChange: (Boolean) -> Unit, onIsCvvInvalidValueChange: (Boolean) -> Unit ) { Column { @@ -151,14 +140,7 @@ fun InputNewCardItem( shouldReveal: Boolean, state: CardItemState, bankIconState: Int?, - creditCard: CreditCard?, - onCardNumberValueChange: (TextFieldValue) -> Unit, - onExpiryDateValueChange: (TextFieldValue) -> Unit, - onCvvValueChange: (TextFieldValue) -> Unit, - onCardTextFieldFocusedChange: (Boolean) -> Unit, - onExpiryTextFieldFocusedChange: (Boolean) -> Unit, - onCvvTextFieldFocusedChange: (Boolean) -> Unit, - onSavedCardCheckedChange: (Boolean) -> Unit + creditCard: CreditCard? ) { Column( verticalArrangement = Arrangement.spacedBy(space = 16.dp) @@ -179,23 +161,11 @@ fun InputNewCardItem( state = state, bankIcon = bankIconState, creditCard = creditCard, - onCardNumberValueChange = { - onCardNumberValueChange(it) - }, - onExpiryDateValueChange = { - onExpiryDateValueChange(it) - }, - onCvvValueChange = { - onCvvValueChange(it) - }, onCardTextFieldFocusedChange = { state.isCardTexFieldFocused = it }, onExpiryTextFieldFocusedChange = { state.isExpiryTextFieldFocused = it }, - onCvvTextFieldFocusedChange = { state.isCvvTextFieldFocused = it }, - onSavedCardCheckedChange = { - onSavedCardCheckedChange(it) - } + onCvvTextFieldFocusedChange = { state.isCvvTextFieldFocused = it } ) } } @@ -244,13 +214,7 @@ fun SnapSavedCardRadioGroup( cardItemState: CardItemState, onItemRemoveClicked: (item: SavedCreditCardFormData) -> Unit, creditCard: CreditCard?, - onCardNumberOtherCardValueChange: (TextFieldValue) -> Unit, - onExpiryOtherCardValueChange: (TextFieldValue) -> Unit, - onCvvValueChange: (TextFieldValue) -> Unit, onSavedCardRadioSelected: (item: FormData?) -> Unit, - onIsCvvSavedCardInvalidValueChange: (Boolean) -> Unit, - onSavedCardCheckedChange: (Boolean) -> Unit, - onCvvSavedCardValueChange: ((TextFieldValue) -> Unit)? = null //Todo: delete later ) { val (selectedOption, onOptionSelected) = remember { mutableStateOf(listStates[0].identifier) } @@ -277,7 +241,7 @@ fun SnapSavedCardRadioGroup( cvvSavedCardTextFieldValue = formatCvvTextFieldBasedOnTokenType(item.tokenType) cardItemState.cvv = cvvSavedCardTextFieldValue - onCardNumberOtherCardValueChange(TextFieldValue(item.maskedCardNumber)) + cardItemState.cardNumber = TextFieldValue(item.maskedCardNumber) onSavedCardRadioSelected(item) cardItemType = CardItemState.CardItemType.SAVED_CARD } @@ -285,12 +249,10 @@ fun SnapSavedCardRadioGroup( cvvSavedCardTextFieldValue = TextFieldValue("") cardItemState.cvv = newCvvTextFieldValue cardItemState.cardNumber = newCardNumberTextFieldValue - onCardNumberOtherCardValueChange(newCardNumberTextFieldValue) onSavedCardRadioSelected(null) cardItemType = CardItemState.CardItemType.NORMAL_CARD } } - onCvvValueChange(cardItemState.cvv) }, role = Role.RadioButton ), @@ -313,21 +275,13 @@ fun SnapSavedCardRadioGroup( shouldReveal = item.savedCardIdentifier == selectedOption, inputTitle = item.inputTitle, cvvTextField = cvvSavedCardTextFieldValue, - isInputError = errorText.isNotBlank(), - errorTitle = errorText, - onValueChange = {}, onEndIconClicked = { onItemRemoveClicked(item) }, - onCardNumberValueChange = {}, - onExpiryDateValueChange = {}, onCvvValueChange = { cvvSavedCardTextFieldValue = it - onCvvValueChange(cvvSavedCardTextFieldValue) + cardItemState.cvv = cvvSavedCardTextFieldValue }, - onCardTextFieldFocusedChange = {}, - onExpiryTextFieldFocusedChange = {}, - onCvvTextFieldFocusedChange = {}, onIsCvvInvalidValueChange = { - onIsCvvSavedCardInvalidValueChange(it) + cardItemState.isCvvInvalid = it } ) } @@ -337,22 +291,7 @@ fun SnapSavedCardRadioGroup( shouldReveal = item.identifier == selectedOption, state = cardItemState, creditCard = creditCard, - bankIconState = bankIconState, - onCardNumberValueChange = { - newCardNumberTextFieldValue = it - onCardNumberOtherCardValueChange(it) - }, - onExpiryDateValueChange = { onExpiryOtherCardValueChange(it) }, - onCvvValueChange = { - newCvvTextFieldValue = it - onCvvValueChange(it) - }, - onCardTextFieldFocusedChange = {}, - onExpiryTextFieldFocusedChange = {}, - onCvvTextFieldFocusedChange = {}, - onSavedCardCheckedChange = { - onSavedCardCheckedChange(it) - } + bankIconState = bankIconState ) } } @@ -387,7 +326,7 @@ class NewCardFormData( open class FormData( - public val identifier: String + val identifier: String ) class CardItemState( @@ -483,13 +422,9 @@ fun NormalCardItem( state: CardItemState, bankIcon: Int?, creditCard: CreditCard?, - onCardNumberValueChange: (TextFieldValue) -> Unit, - onExpiryDateValueChange: (TextFieldValue) -> Unit, - onCvvValueChange: (TextFieldValue) -> Unit, onCardTextFieldFocusedChange: (Boolean) -> Unit, onExpiryTextFieldFocusedChange: (Boolean) -> Unit, onCvvTextFieldFocusedChange: (Boolean) -> Unit, - onSavedCardCheckedChange: (Boolean) -> Unit ) { var isBinBlocked by remember { mutableStateOf(false) } Column( @@ -542,7 +477,7 @@ fun NormalCardItem( cardLength != SnapCreditCardUtil.FORMATTED_MAX_CARD_NUMBER_LENGTH || !SnapCreditCardUtil.isValidCardNumber(SnapCreditCardUtil.getCardNumberFromTextField(it)) || isBinBlocked - onCardNumberValueChange(formatCreditCard(it)) + state.cardNumber = formatCreditCard(it) }, isFocused = state.isCardTexFieldFocused, onFocusChange = { @@ -593,7 +528,7 @@ fun NormalCardItem( hint = stringResource(id = R.string.cc_dc_main_screen_placeholder_expiry), value = state.expiry, onValueChange = { - onExpiryDateValueChange(formatExpiryDate(it)) + state.expiry = formatExpiryDate(it) if (formatExpiryDate(it).text.length == 5) { isCardExpired = checkIsCardExpired(formatExpiryDate(it).text) } @@ -638,7 +573,7 @@ fun NormalCardItem( value = state.cvv, hint = stringResource(id = R.string.cc_dc_main_screen_placeholder_cvv), onValueChange = { - onCvvValueChange(formatCVV(it)) + state.cvv = formatCVV(it) state.isCvvInvalid = formatCVV(it).text.length < SnapCreditCardUtil.FORMATTED_MIN_CVV_LENGTH }, isError = state.isCvvInvalid, @@ -672,7 +607,7 @@ fun NormalCardItem( ) { LabelledCheckBox( checked = state.isSavedCardChecked, - onCheckedChange = { onSavedCardCheckedChange(it) }, + onCheckedChange = { state.isSavedCardChecked = it }, label = stringResource(id = R.string.cc_dc_main_screen_save_this_card) ) } From efc32079e70722c88ef4a0fcd0306cc34b2e0302 Mon Sep 17 00:00:00 2001 From: Wahyu Date: Thu, 13 Oct 2022 16:20:35 +0700 Subject: [PATCH 2/2] refactor optimize code --- .../creditcard/CreditCardActivity.kt | 7 +------ .../view/SnapCreditCardDetailListItem.kt | 19 +++++++------------ 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/presentation/creditcard/CreditCardActivity.kt b/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/presentation/creditcard/CreditCardActivity.kt index b0ac71d6b..5aebf7e0f 100644 --- a/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/presentation/creditcard/CreditCardActivity.kt +++ b/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/presentation/creditcard/CreditCardActivity.kt @@ -466,12 +466,7 @@ internal class CreditCardActivity : BaseActivity() { NormalCardItem( state = state, bankIcon = bankCodeState, - creditCard = creditCard, - onCardTextFieldFocusedChange = { state.isCardTexFieldFocused = it }, - onExpiryTextFieldFocusedChange = { - state.isExpiryTextFieldFocused = it - }, - onCvvTextFieldFocusedChange = { state.isCvvTextFieldFocused = it } + creditCard = creditCard ) } diff --git a/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/view/SnapCreditCardDetailListItem.kt b/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/view/SnapCreditCardDetailListItem.kt index 302162f4a..b9d987ef7 100644 --- a/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/view/SnapCreditCardDetailListItem.kt +++ b/ui/src/main/kotlin/com/midtrans/sdk/uikit/internal/view/SnapCreditCardDetailListItem.kt @@ -160,12 +160,7 @@ fun InputNewCardItem( NormalCardItem( state = state, bankIcon = bankIconState, - creditCard = creditCard, - onCardTextFieldFocusedChange = { - state.isCardTexFieldFocused = it - }, - onExpiryTextFieldFocusedChange = { state.isExpiryTextFieldFocused = it }, - onCvvTextFieldFocusedChange = { state.isCvvTextFieldFocused = it } + creditCard = creditCard ) } } @@ -422,9 +417,9 @@ fun NormalCardItem( state: CardItemState, bankIcon: Int?, creditCard: CreditCard?, - onCardTextFieldFocusedChange: (Boolean) -> Unit, - onExpiryTextFieldFocusedChange: (Boolean) -> Unit, - onCvvTextFieldFocusedChange: (Boolean) -> Unit, +// onCardTextFieldFocusedChange: (Boolean) -> Unit, +// onExpiryTextFieldFocusedChange: (Boolean) -> Unit, +// onCvvTextFieldFocusedChange: (Boolean) -> Unit, ) { var isBinBlocked by remember { mutableStateOf(false) } Column( @@ -481,7 +476,7 @@ fun NormalCardItem( }, isFocused = state.isCardTexFieldFocused, onFocusChange = { - onCardTextFieldFocusedChange(it) + state.isCardTexFieldFocused = it }, trailingIcon = bankIcon?.let { { @@ -540,7 +535,7 @@ fun NormalCardItem( isError = state.isExpiryInvalid, isFocused = state.isExpiryTextFieldFocused, onFocusChange = { - onExpiryTextFieldFocusedChange(it) + state.isExpiryTextFieldFocused = it }, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number) ) @@ -579,7 +574,7 @@ fun NormalCardItem( isError = state.isCvvInvalid, isFocused = state.isCvvTextFieldFocused, onFocusChange = { - onCvvTextFieldFocusedChange(it) + state.isCvvTextFieldFocused = it }, visualTransformation = PasswordVisualTransformation(), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number)