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 4e59f2cad..931c67302 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 @@ -7,10 +7,7 @@ import android.os.Bundle import androidx.activity.compose.setContent import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll @@ -46,7 +43,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 @@ -262,26 +258,6 @@ internal class CreditCardActivity : BaseActivity() { cardIssuerBank = cardIssuerBank.value, remainingTimeState = remainingTimeState, onExpand = { isExpanding = it }, - onCardNumberValueChange = { - - state.cardNumber = it - val cardNumberWithoutSpace = SnapCreditCardUtil.getCardNumberFromTextField(it) - viewModel?.getPromosData(binNumber = cardNumberWithoutSpace) - if (cardNumberWithoutSpace.length >= SnapCreditCardUtil.SUPPORTED_MAX_BIN_NUMBER) { - val eightDigitNumber = cardNumberWithoutSpace.substring( - 0, - SnapCreditCardUtil.SUPPORTED_MAX_BIN_NUMBER - ) - if (eightDigitNumber != previousEightDigitNumber) { - previousEightDigitNumber = eightDigitNumber - viewModel?.getBinData(binNumber = eightDigitNumber) - onPromoReset.invoke() - } - } else { - viewModel?.resetCardNumberAttribute() - previousEightDigitNumber = cardNumberWithoutSpace - } - }, onClick = { if (selectedFormData == null) { viewModel?.chargeUsingCreditCard( @@ -313,6 +289,24 @@ 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?.getBinData(binNumber = eightDigitNumber) + onPromoReset.invoke() + } + } else { + viewModel?.resetCardNumberAttribute() + previousEightDigitNumber = cardNumberWithoutSpace + } + } } val errorState by errorTypeState errorState?.let { @@ -393,7 +387,6 @@ internal class CreditCardActivity : BaseActivity() { cardIssuerBank: String?, remainingTimeState: State, onExpand: (Boolean) -> Unit, - onCardNumberValueChange: (TextFieldValue) -> Unit, onSavedCardRadioSelected: (item: FormData?) -> Unit, onInstallmentTermSelected: (String) -> Unit, onClick: () -> Unit @@ -449,7 +442,6 @@ internal class CreditCardActivity : BaseActivity() { state = state, savedTokenListState = it, bankCodeId = bankCodeState, - onCardNumberValueChange = onCardNumberValueChange, onSavedCardRadioSelected = onSavedCardRadioSelected ) } @@ -458,8 +450,7 @@ internal class CreditCardActivity : BaseActivity() { NormalCardFormLayout( state = state, creditCard = creditCard, - bankCodeState = bankCodeState, - onCardNumberValueChange = onCardNumberValueChange + bankCodeState = bankCodeState ) } @@ -529,23 +520,11 @@ 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 } + creditCard = creditCard ) } @@ -610,7 +589,6 @@ internal class CreditCardActivity : BaseActivity() { state: CardItemState, savedTokenListState: SnapshotStateList, bankCodeId: Int?, - onCardNumberValueChange: (TextFieldValue) -> Unit, onSavedCardRadioSelected: (item: FormData?) -> Unit ) { SnapSavedCardRadioGroup( @@ -627,14 +605,7 @@ internal class CreditCardActivity : BaseActivity() { ) 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 8298e0513..a5ca43a76 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, @@ -341,7 +341,7 @@ class SavedCardActivity: BaseActivity() { ) } } - } + }*/ private fun checkIsPayButtonEnabled( selectedFormData: FormData?, isSelectedSavedCardCvvInvalid: Boolean, @@ -376,7 +376,7 @@ class SavedCardActivity: BaseActivity() { @Preview @Composable private fun Preview() { - CreditCardPage( + /* CreditCardPage( totalAmount = "10000", orderId = "Order ID #34345445554", customerDetail = CustomerInfo( @@ -384,6 +384,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 b0c8d6bd6..e5c8bbe40 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 @@ -45,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 { @@ -148,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) @@ -175,24 +160,7 @@ fun InputNewCardItem( NormalCardItem( 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) - } + creditCard = creditCard ) } } @@ -240,13 +208,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) } @@ -271,7 +233,7 @@ fun SnapSavedCardRadioGroup( cvvSavedCardTextFieldValue = formatCvvTextFieldBasedOnTokenType(item.tokenType) cardItemState.cvv = cvvSavedCardTextFieldValue - onCardNumberOtherCardValueChange(TextFieldValue(item.maskedCardNumber)) + cardItemState.cardNumber = TextFieldValue(item.maskedCardNumber) onSavedCardRadioSelected(item) cardItemState.cardItemType = CardItemState.CardItemType.SAVED_CARD } @@ -279,12 +241,10 @@ fun SnapSavedCardRadioGroup( cvvSavedCardTextFieldValue = TextFieldValue("") cardItemState.cvv = newCvvTextFieldValue cardItemState.cardNumber = newCardNumberTextFieldValue - onCardNumberOtherCardValueChange(newCardNumberTextFieldValue) onSavedCardRadioSelected(null) cardItemState.cardItemType = CardItemState.CardItemType.NORMAL_CARD } } - onCvvValueChange(cardItemState.cvv) }, role = Role.RadioButton ), @@ -307,21 +267,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 } ) } @@ -331,22 +283,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 ) } } @@ -477,14 +414,7 @@ fun formatCVV(input: TextFieldValue): TextFieldValue { 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 + creditCard: CreditCard? ) { Column( verticalArrangement = Arrangement.spacedBy(space = 16.dp) @@ -533,11 +463,11 @@ fun NormalCardItem( cardLength != SnapCreditCardUtil.FORMATTED_MAX_CARD_NUMBER_LENGTH || !SnapCreditCardUtil.isValidCardNumber(SnapCreditCardUtil.getCardNumberFromTextField(it)) || state.isBinBlocked - onCardNumberValueChange(formatCreditCard(it)) + state.cardNumber = formatCreditCard(it) }, isFocused = state.isCardTexFieldFocused, onFocusChange = { - onCardTextFieldFocusedChange(it) + state.isCardTexFieldFocused = it }, trailingIcon = bankIcon?.let { { @@ -592,7 +522,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) } @@ -604,7 +534,7 @@ fun NormalCardItem( isError = state.isExpiryInvalid, isFocused = state.isExpiryTextFieldFocused, onFocusChange = { - onExpiryTextFieldFocusedChange(it) + state.isExpiryTextFieldFocused = it }, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number) ) @@ -637,13 +567,13 @@ 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, isFocused = state.isCvvTextFieldFocused, onFocusChange = { - onCvvTextFieldFocusedChange(it) + state.isCvvTextFieldFocused = it }, visualTransformation = PasswordVisualTransformation(), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number) @@ -670,7 +600,7 @@ fun NormalCardItem( Row { LabelledCheckBox( checked = state.isSavedCardChecked, - onCheckedChange = { onSavedCardCheckedChange(it) }, + onCheckedChange = { state.isSavedCardChecked = it }, label = stringResource(id = R.string.cc_dc_main_screen_save_this_card) ) }