Skip to content

Commit

Permalink
chore: wip
Browse files Browse the repository at this point in the history
  • Loading branch information
boilsquid committed May 13, 2024
1 parent 550cc99 commit 28d4a48
Show file tree
Hide file tree
Showing 11 changed files with 48 additions and 288 deletions.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ import com.evervault.sdk.input.model.CreditCardType
@Immutable
data class PaymentCard(
val type: CreditCardType? = null,
val number: String = "",
val bin: String = "",
val lastFour: String = "",
val cvc: String = "",
val expMonth: String = "",
val expYear: String = "",
var number: String = "",
var bin: String = "",
var lastFour: String = "",
var cvc: String = "",
var expMonth: String = "",
var expYear: String = "",
)
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,5 @@ data class PaymentCardData(
val isEmpty: Boolean = true,
val error: PaymentCardError? = null,
)


Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.evervault.sdk.input.model
package com.evervault.sdk.input.model.card

import com.evervault.sdk.input.model.CreditCardType
import com.evervault.sdk.input.utils.CreditCardExpirationDateValidator
import com.evervault.sdk.input.utils.CreditCardFormatter
import com.evervault.sdk.input.utils.CreditCardValidator
Expand Down Expand Up @@ -41,7 +42,7 @@ fun createPaymentCardData(number: String, cvc: String, expiry: String): PaymentC

val error = when {
!isPotentiallyValid -> PaymentCardError.InvalidPan
!isExpiryDateValid -> PaymentCardError.InvalidMonth
!isExpiryDateValid -> PaymentCardError.InvalidExpirationDate
else -> null
}

Expand All @@ -65,11 +66,3 @@ fun PaymentCardData.updateCvc(cvc: String): PaymentCardData {
fun PaymentCardData.updateExpiry(expiry: String): PaymentCardData {
return createPaymentCardData(this.card.number, this.card.cvc, expiry)
}

@Deprecated(message = "Use the other PaymentCardError.description in com.evervault.sdk.input.model.card")
val PaymentCardError.description: String
get() = when (this) {
is PaymentCardError.InvalidPan -> "The credit card number you entered was invalid"
is PaymentCardError.InvalidMonth -> "The expiration date you entered was invalid" // The object will be renamed in the future as it is a breaking change
is PaymentCardError.EncryptionFailed -> "Encryption failed: $message"
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,11 @@ import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.TextFieldValue
import com.evervault.sdk.Evervault
import com.evervault.sdk.input.model.CreditCardType
import com.evervault.sdk.input.model.PaymentCardData
import com.evervault.sdk.input.model.PaymentCardError
import com.evervault.sdk.input.model.expiry
import com.evervault.sdk.input.model.updateCvc
import com.evervault.sdk.input.model.updateExpiry
import com.evervault.sdk.input.model.updateNumber
import com.evervault.sdk.input.model.card.PaymentCardData
import com.evervault.sdk.input.model.card.PaymentCardError
import com.evervault.sdk.input.model.card.updateNumber
import com.evervault.sdk.input.model.card.updateCvc
import com.evervault.sdk.input.model.card.updateExpiry
import com.evervault.sdk.input.utils.CreditCardExpirationDateCursorCalculator
import com.evervault.sdk.input.utils.CreditCardExpirationDateFormatter
import com.evervault.sdk.input.utils.CreditCardValidator
Expand Down Expand Up @@ -119,7 +118,11 @@ fun PaymentCardInput(
}
}

LaunchedEffect(rawCardData.expiry) {
LaunchedEffect(rawCardData.card.expMonth) {
updateCardData()
}

LaunchedEffect(rawCardData.card.expYear) {
updateCardData()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@ package com.evervault.sdk.input.ui.card

import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.text.TextStyle
import com.evervault.sdk.input.mapper.PaymentCardDataMapper
import androidx.compose.ui.text.input.TextFieldValue
import com.evervault.sdk.input.model.card.PaymentCardData
import com.evervault.sdk.input.ui.PaymentCardInput
import com.evervault.sdk.input.ui.PaymentCardInputScope
import com.evervault.sdk.input.model.PaymentCardData as OldPaymentCardData
import com.evervault.sdk.input.ui.PaymentCardInputScopeImpl
import com.evervault.sdk.inputs.R

/**
* Represents the customizable card input form with no predefined layout.
Expand Down Expand Up @@ -36,21 +39,29 @@ fun PaymentCard(
onDataChange: (PaymentCardData) -> Unit = {},
content: @Composable PaymentCardInputScope.(modifier: Modifier) -> Unit
) {
/**
Temporarily mapping the to map [OldPaymentCardData] to the new [PaymentCardData]
It will be removed when we remove the old constructor for [PaymentCardInput], change its
internal implementation to return already mapped data, and all the data logic has been extracted from it.
*/
val paymentCardDataMapper = PaymentCardDataMapper()
val mapCardDataOldAndReturnResult: (OldPaymentCardData) -> Unit = { paymentCardDataOld ->
onDataChange(paymentCardDataMapper.apply(paymentCardDataOld))
}
// Initialize the state and other dependencies needed for the PaymentCardInputScope
val cardNumber = remember { mutableStateOf(TextFieldValue()) }
val expiryDate = remember { mutableStateOf(TextFieldValue()) }
val cvc = remember { mutableStateOf(TextFieldValue()) }
val cardNumberRequester = remember { FocusRequester() }
val expiryRequester = remember { FocusRequester() }
val cvcRequester = remember { FocusRequester() }

PaymentCardInput(
modifier = modifier,

// Create an instance of PaymentCardInputScope
val paymentCardInputScope = PaymentCardInputScopeImpl(
textStyle = textStyle,
placeholderTextStyle = placeholderTextStyle,
layout = content,
onDataChange = mapCardDataOldAndReturnResult
cardImageResource = R.drawable.ic_credit_card, // Replace with actual resource ID
creditCardNumber = cardNumber,
creditCardRequester = cardNumberRequester,
expiryDate = expiryDate,
expiryRequester = expiryRequester,
cvc = cvc,
cvcRequester = cvcRequester
)

// Use the content lambda to allow the caller to define the custom layout
paymentCardInputScope.content(modifier)

}
Original file line number Diff line number Diff line change
@@ -1,33 +1,22 @@
package com.evervault.sampleapplication.navigation

import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import com.evervault.sampleapplication.sample.PaymentCardCustomLayoutWithNewComponents
import com.evervault.sampleapplication.sample.PaymentCardCustomLayoutWithNewComponentsWithoutLabels
import com.evervault.sampleapplication.ui.views.BasicEncryptionView
import com.evervault.sampleapplication.ui.views.CreditCardInputView
import com.evervault.sampleapplication.ui.views.EnclaveView
import com.evervault.sampleapplication.ui.views.FileEncryptionView
import com.evervault.sampleapplication.ui.views.MainScreen
import com.evervault.sampleapplication.ui.views.PaymentCardView
import com.evervault.sampleapplication.ui.views.component.CustomTheme
import com.evervault.sampleapplication.ui.views.component.customPlaceholderTexts
import com.evervault.sampleapplication.ui.views.layout.customPaymentCardInputLayout
import com.evervault.sdk.input.ui.PaymentCardInput
import com.evervault.sdk.input.ui.card.InlinePaymentCard
import com.evervault.sdk.input.ui.card.PaymentCard
import com.evervault.sdk.input.ui.card.RowsPaymentCard
import com.evervault.sdk.input.ui.inlinePaymentCardInputLayout
import com.evervault.sdk.input.ui.rowsPaymentCardInputLayout

@Composable
fun NavigationGraph(navController: NavHostController) {
Expand All @@ -48,66 +37,6 @@ fun NavigationGraph(navController: NavHostController) {
FileEncryptionView()
}

composable(Route.CreditCardInput.route) {
CreditCardInputView {
PaymentCardInput(onDataChange = it)
}
}

composable(Route.CreditCardInputWithPlaceholders.route) {
CreditCardInputView {
PaymentCardInput(
layout = inlinePaymentCardInputLayout(
placeholderTexts = customPlaceholderTexts()
),
onDataChange = it
)
}
}

composable(Route.CreditCardInputCustom.route) {
CreditCardInputView {
CustomTheme {
PaymentCardInput(
modifier = Modifier
.clip(RoundedCornerShape(8.dp)),
textStyle = TextStyle.Default.copy(fontSize = 16.sp),
layout = inlinePaymentCardInputLayout(
placeholderTexts = customPlaceholderTexts()
),
onDataChange = it
)
}
}
}

composable(Route.CreditCardInputRows.route) {
CreditCardInputView {
PaymentCardInput(
layout = rowsPaymentCardInputLayout(),
onDataChange = it,
)
}
}

composable(Route.CreditCardInputRowsWithPlaceholders.route) {
CreditCardInputView {
PaymentCardInput(
layout = rowsPaymentCardInputLayout(placeholderTexts = customPlaceholderTexts()),
onDataChange = it,
)
}
}

composable(Route.CreditCardInputCustomStyle.route) {
CreditCardInputView {
PaymentCardInput(
layout = customPaymentCardInputLayout(),
onDataChange = it
)
}
}

composable(Route.InlinePaymentCard.route) {
PaymentCardView { onDataChange ->
InlinePaymentCard(onDataChange = onDataChange)
Expand Down
Loading

0 comments on commit 28d4a48

Please sign in to comment.