Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fix] Fixes #1812 CardField onCardChange not triggering in React Native Stripe #1820

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,13 @@ package com.reactnativestripesdk
import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
import com.facebook.react.uimanager.events.Event
import com.facebook.react.uimanager.events.RCTEventEmitter

internal class CardChangedEvent constructor(viewTag: Int, private val cardDetails: MutableMap<String, Any?>, private val postalCodeEnabled: Boolean, private val complete: Boolean, private val dangerouslyGetFullCardDetails: Boolean) : Event<CardChangedEvent>(viewTag) {
override fun getEventName(): String {
return EVENT_NAME
}

override fun dispatch(rctEventEmitter: RCTEventEmitter) {
rctEventEmitter.receiveEvent(viewTag, eventName, serializeEventData())
}
override fun getEventName() = EVENT_NAME

private fun serializeEventData(): WritableMap {
override fun getCoalescingKey(): Short = 0

override fun getEventData(): WritableMap {
val eventData = Arguments.createMap()
eventData.putString("brand", cardDetails["brand"]?.toString())
eventData.putString("last4", cardDetails["last4"]?.toString())
Expand Down
18 changes: 12 additions & 6 deletions android/src/main/java/com/reactnativestripesdk/CardFieldView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ import android.text.TextWatcher
import android.util.Log
import android.widget.FrameLayout
import androidx.core.os.LocaleListCompat
import com.facebook.react.bridge.ReactContext
import com.facebook.react.bridge.ReadableMap
import com.facebook.react.uimanager.PixelUtil
import com.facebook.react.uimanager.ThemedReactContext
import com.facebook.react.uimanager.UIManagerModule
import com.facebook.react.uimanager.UIManagerHelper
import com.facebook.react.uimanager.events.Event
import com.facebook.react.uimanager.events.EventDispatcher
import com.facebook.react.views.text.ReactTypefaceUtils
import com.google.android.material.shape.CornerFamily
Expand All @@ -37,7 +39,7 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
val cardDetails: MutableMap<String, Any?> = mutableMapOf("brand" to "", "last4" to "", "expiryMonth" to null, "expiryYear" to null, "postalCode" to "", "validNumber" to "Unknown", "validCVC" to "Unknown", "validExpiryDate" to "Unknown")
var cardParams: PaymentMethodCreateParams.Card? = null
var cardAddress: Address? = null
private var mEventDispatcher: EventDispatcher? = context.getNativeModule(UIManagerModule::class.java)?.eventDispatcher
private var mEventDispatcher: EventDispatcher? = UIManagerHelper.getEventDispatcherForReactTag(context as ReactContext, id)
private var dangerouslyGetFullCardDetails: Boolean = false
private var currentFocusedField: String? = null
private var isCardValid = false
Expand Down Expand Up @@ -81,8 +83,10 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
}

private fun onChangeFocus() {
mEventDispatcher?.dispatchEvent(
CardFocusEvent(id, currentFocusedField))
if (id != -1 ) {
val event: Event<CardFocusEvent> = CardFocusEvent(id, currentFocusedField);
mEventDispatcher?.dispatchEvent(event)
}
}

fun setCardStyle(value: ReadableMap) {
Expand Down Expand Up @@ -262,8 +266,10 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
}

private fun sendCardDetailsEvent() {
mEventDispatcher?.dispatchEvent(
CardChangedEvent(id, cardDetails, mCardWidget.postalCodeEnabled, isCardValid, dangerouslyGetFullCardDetails))
if (id != -1 ) {
val event: Event<CardChangedEvent> = CardChangedEvent(id, cardDetails, mCardWidget.postalCodeEnabled, isCardValid, dangerouslyGetFullCardDetails);
mEventDispatcher?.dispatchEvent(event)
}
}

private fun setListeners() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,15 @@
package com.reactnativestripesdk

import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.WritableMap
import com.facebook.react.uimanager.events.Event
import com.facebook.react.uimanager.events.RCTEventEmitter

internal class CardFocusEvent constructor(viewTag: Int, private val focusField: String?) : Event<CardFocusEvent>(viewTag) {
override fun getEventName(): String {
return EVENT_NAME
}
override fun getEventName() = EVENT_NAME

override fun dispatch(rctEventEmitter: RCTEventEmitter) {
rctEventEmitter.receiveEvent(viewTag, eventName, serializeEventData())
}
override fun getCoalescingKey(): Short = 0

private fun serializeEventData(): WritableMap {
override fun getEventData(): WritableMap {
val eventData = Arguments.createMap()
eventData.putString("focusedField", focusField)

Expand Down