@primer-io/react-native 2.46.0 → 3.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +3 -1
- package/android/src/main/java/com/primerioreactnative/DefaultNativePrimerModule.kt +64 -0
- package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt +36 -2
- package/android/src/main/java/com/primerioreactnative/PrimerSdkPackage.kt +2 -0
- package/android/src/main/java/com/primerioreactnative/PrimerViewUtilsImpl.kt +33 -0
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/billingAddress/PrimerRNAddress.kt +29 -0
- package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/card/PrimerRNCardData.kt +3 -0
- package/android/src/main/java/com/primerioreactnative/components/manager/asset/PrimerRNHeadlessUniversalCheckoutAssetManager.kt +49 -0
- package/android/src/main/java/com/primerioreactnative/components/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManager.kt +61 -3
- package/android/src/main/java/com/primerioreactnative/components/manager/vault/PrimerRNHeadlessUniversalCheckoutVaultManager.kt +6 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerClientSessionRN.kt +7 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +1 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +2 -1
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerClientSession.kt +14 -10
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodOptionsRN.kt +3 -10
- package/android/src/main/java/com/primerioreactnative/utils/AnalyticsEventMapper.kt +115 -0
- package/android/src/newarch/java/com/primerioreactnative/NativePrimerModule.kt +28 -0
- package/android/src/newarch/java/com/primerioreactnative/PrimerViewUtilsModule.kt +24 -0
- package/android/src/oldarch/java/com/primerioreactnative/NativePrimerModule.kt +32 -0
- package/android/src/oldarch/java/com/primerioreactnative/PrimerViewUtilsModule.kt +27 -0
- package/android/src/test/java/com/primerioreactnative/utils/AnalyticsEventMapperTest.kt +351 -0
- package/ios/Sources/DataModels/PrimerAddress+Extension.swift +35 -0
- package/ios/Sources/DataModels/PrimerCardData+Extension.swift +9 -1
- package/ios/Sources/DataModels/PrimerSettings+Extensions.swift +2 -16
- package/ios/Sources/Headless Universal Checkout/Managers/Assets Manager/RNTAssetsManager.m +7 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Assets Manager/RNTAssetsManager.swift +46 -13
- package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNPrimerHeadlessUniversalCheckoutVaultManager.m +2 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNPrimerHeadlessUniversalCheckoutVaultManager.swift +12 -1
- package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTRawDataManager.m +2 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Payment Method Managers/RNTRawDataManager.swift +45 -2
- package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +61 -3
- package/ios/Sources/NativePrimer/RCTNativePrimer.mm +47 -1
- package/ios/Sources/PrimerViewUtils/RCTPrimerViewUtils.h +10 -0
- package/ios/Sources/PrimerViewUtils/RCTPrimerViewUtils.mm +41 -0
- package/ios/Sources/PrimerViewUtils/RNTPrimerViewUtils.swift +23 -0
- package/ios/Sources/RNTPrimer.swift +88 -3
- package/ios/Sources/version.swift +1 -1
- package/lib/module/Components/PrimerAcceptedCardNetworks.js +73 -0
- package/lib/module/Components/PrimerAcceptedCardNetworks.js.map +1 -0
- package/lib/module/Components/PrimerBillingAddressForm.js +167 -0
- package/lib/module/Components/PrimerBillingAddressForm.js.map +1 -0
- package/lib/module/Components/PrimerCardForm.js +97 -0
- package/lib/module/Components/PrimerCardForm.js.map +1 -0
- package/lib/module/Components/PrimerCardNetworkSelector.js +164 -0
- package/lib/module/Components/PrimerCardNetworkSelector.js.map +1 -0
- package/lib/module/Components/PrimerCheckoutProvider.js +1059 -0
- package/lib/module/Components/PrimerCheckoutProvider.js.map +1 -0
- package/lib/module/Components/PrimerCheckoutSheet.js +28 -0
- package/lib/module/Components/PrimerCheckoutSheet.js.map +1 -0
- package/lib/module/Components/PrimerPaymentMethodList.js +80 -0
- package/lib/module/Components/PrimerPaymentMethodList.js.map +1 -0
- package/lib/module/Components/PrimerVaultedPaymentMethod.js +234 -0
- package/lib/module/Components/PrimerVaultedPaymentMethod.js.map +1 -0
- package/lib/module/Components/analytics.js +18 -0
- package/lib/module/Components/analytics.js.map +1 -0
- package/lib/module/Components/hooks/useCardNetworkDescriptor.js +25 -0
- package/lib/module/Components/hooks/useCardNetworkDescriptor.js.map +1 -0
- package/lib/module/Components/hooks/useCardNetworkIcons.js +44 -0
- package/lib/module/Components/hooks/useCardNetworkIcons.js.map +1 -0
- package/lib/module/Components/hooks/usePrimerBillingAddressForm.js +27 -0
- package/lib/module/Components/hooks/usePrimerBillingAddressForm.js.map +1 -0
- package/lib/module/Components/hooks/usePrimerCardForm.js +44 -0
- package/lib/module/Components/hooks/usePrimerCardForm.js.map +1 -0
- package/lib/module/Components/hooks/usePrimerCardNetwork.js +70 -0
- package/lib/module/Components/hooks/usePrimerCardNetwork.js.map +1 -0
- package/lib/module/Components/hooks/usePrimerCardNetworkSelection.js +70 -0
- package/lib/module/Components/hooks/usePrimerCardNetworkSelection.js.map +1 -0
- package/lib/module/Components/hooks/usePrimerCheckout.js +12 -0
- package/lib/module/Components/hooks/usePrimerCheckout.js.map +1 -0
- package/lib/module/Components/hooks/usePrimerPaymentMethod.js +94 -0
- package/lib/module/Components/hooks/usePrimerPaymentMethod.js.map +1 -0
- package/lib/module/Components/hooks/usePrimerPaymentMethods.js +159 -0
- package/lib/module/Components/hooks/usePrimerPaymentMethods.js.map +1 -0
- package/lib/module/Components/hooks/usePrimerVaultManager.js +85 -0
- package/lib/module/Components/hooks/usePrimerVaultManager.js.map +1 -0
- package/lib/module/Components/index.js +22 -0
- package/lib/module/Components/index.js.map +1 -0
- package/lib/module/Components/inputs/CountrySelectorRow.js +117 -0
- package/lib/module/Components/inputs/CountrySelectorRow.js.map +1 -0
- package/lib/module/Components/inputs/PrimerCVVInput.js +51 -0
- package/lib/module/Components/inputs/PrimerCVVInput.js.map +1 -0
- package/lib/module/Components/inputs/PrimerCardNumberInput.js +134 -0
- package/lib/module/Components/inputs/PrimerCardNumberInput.js.map +1 -0
- package/lib/module/Components/inputs/PrimerCardholderNameInput.js +33 -0
- package/lib/module/Components/inputs/PrimerCardholderNameInput.js.map +1 -0
- package/lib/module/Components/inputs/PrimerExpiryDateInput.js +92 -0
- package/lib/module/Components/inputs/PrimerExpiryDateInput.js.map +1 -0
- package/lib/module/Components/inputs/PrimerTextInput.js +182 -0
- package/lib/module/Components/inputs/PrimerTextInput.js.map +1 -0
- package/lib/module/Components/inputs/caret.js +37 -0
- package/lib/module/Components/inputs/caret.js.map +1 -0
- package/lib/module/Components/inputs/dimensions.js +18 -0
- package/lib/module/Components/inputs/dimensions.js.map +1 -0
- package/lib/module/Components/inputs/index.js +9 -0
- package/lib/module/Components/inputs/index.js.map +1 -0
- package/lib/module/Components/internal/CardNetworkBadge.js +113 -0
- package/lib/module/Components/internal/CardNetworkBadge.js.map +1 -0
- package/lib/module/Components/internal/Popover.js +85 -0
- package/lib/module/Components/internal/Popover.js.map +1 -0
- package/lib/module/Components/internal/PrimerCheckoutContext.js +5 -0
- package/lib/module/Components/internal/PrimerCheckoutContext.js.map +1 -0
- package/lib/module/Components/internal/applePay.js +14 -0
- package/lib/module/Components/internal/applePay.js.map +1 -0
- package/lib/module/Components/internal/billingAddressOptions.js +29 -0
- package/lib/module/Components/internal/billingAddressOptions.js.map +1 -0
- package/lib/module/Components/internal/cardFormat.js +41 -0
- package/lib/module/Components/internal/cardFormat.js.map +1 -0
- package/lib/module/Components/internal/cardNetwork.js +85 -0
- package/lib/module/Components/internal/cardNetwork.js.map +1 -0
- package/lib/module/Components/internal/cardNetworkIcons.js +28 -0
- package/lib/module/Components/internal/cardNetworkIcons.js.map +1 -0
- package/lib/module/Components/internal/checkout-flow/CheckoutFlow.js +129 -0
- package/lib/module/Components/internal/checkout-flow/CheckoutFlow.js.map +1 -0
- package/lib/module/Components/internal/checkout-flow/CheckoutFlowContext.js +12 -0
- package/lib/module/Components/internal/checkout-flow/CheckoutFlowContext.js.map +1 -0
- package/lib/module/Components/internal/checkout-flow/index.js +4 -0
- package/lib/module/Components/internal/checkout-flow/index.js.map +1 -0
- package/lib/module/Components/internal/checkout-sheet/CheckoutSheet.js +280 -0
- package/lib/module/Components/internal/checkout-sheet/CheckoutSheet.js.map +1 -0
- package/lib/module/Components/internal/checkout-sheet/SheetHeightContext.js +12 -0
- package/lib/module/Components/internal/checkout-sheet/SheetHeightContext.js.map +1 -0
- package/lib/module/Components/internal/checkout-sheet/index.js +5 -0
- package/lib/module/Components/internal/checkout-sheet/index.js.map +1 -0
- package/lib/module/Components/internal/checkout-sheet/types.js +4 -0
- package/lib/module/Components/internal/checkout-sheet/types.js.map +1 -0
- package/lib/module/Components/internal/countries.js +795 -0
- package/lib/module/Components/internal/countries.js.map +1 -0
- package/lib/module/Components/internal/currency/currencies.json +1 -0
- package/lib/module/Components/internal/currency/currency-metadata.js +52 -0
- package/lib/module/Components/internal/currency/currency-metadata.js.map +1 -0
- package/lib/module/Components/internal/currency/formatting.js +28 -0
- package/lib/module/Components/internal/currency/formatting.js.map +1 -0
- package/lib/module/Components/internal/currency/index.js +5 -0
- package/lib/module/Components/internal/currency/index.js.map +1 -0
- package/lib/module/Components/internal/debug.js +15 -0
- package/lib/module/Components/internal/debug.js.map +1 -0
- package/lib/module/Components/internal/flags.js +19 -0
- package/lib/module/Components/internal/flags.js.map +1 -0
- package/lib/module/Components/internal/form-state/BillingAddressFormStateProvider.js +221 -0
- package/lib/module/Components/internal/form-state/BillingAddressFormStateProvider.js.map +1 -0
- package/lib/module/Components/internal/form-state/CardFormStateProvider.js +271 -0
- package/lib/module/Components/internal/form-state/CardFormStateProvider.js.map +1 -0
- package/lib/module/Components/internal/form-state/index.js +5 -0
- package/lib/module/Components/internal/form-state/index.js.map +1 -0
- package/lib/module/Components/internal/googlePay.js +15 -0
- package/lib/module/Components/internal/googlePay.js.map +1 -0
- package/lib/module/Components/internal/localization/index.js +6 -0
- package/lib/module/Components/internal/localization/index.js.map +1 -0
- package/lib/module/Components/internal/localization/interpolation.js +13 -0
- package/lib/module/Components/internal/localization/interpolation.js.map +1 -0
- package/lib/module/Components/internal/localization/locale-resolver.js +40 -0
- package/lib/module/Components/internal/localization/locale-resolver.js.map +1 -0
- package/lib/module/Components/internal/localization/strings/ar.json +227 -0
- package/lib/module/Components/internal/localization/strings/az.json +227 -0
- package/lib/module/Components/internal/localization/strings/bg.json +227 -0
- package/lib/module/Components/internal/localization/strings/bs.json +227 -0
- package/lib/module/Components/internal/localization/strings/ca.json +227 -0
- package/lib/module/Components/internal/localization/strings/cs.json +227 -0
- package/lib/module/Components/internal/localization/strings/da.json +227 -0
- package/lib/module/Components/internal/localization/strings/de.json +227 -0
- package/lib/module/Components/internal/localization/strings/el.json +227 -0
- package/lib/module/Components/internal/localization/strings/en.json +256 -0
- package/lib/module/Components/internal/localization/strings/es-AR.json +227 -0
- package/lib/module/Components/internal/localization/strings/es-MX.json +227 -0
- package/lib/module/Components/internal/localization/strings/es.json +227 -0
- package/lib/module/Components/internal/localization/strings/et.json +227 -0
- package/lib/module/Components/internal/localization/strings/fa.json +227 -0
- package/lib/module/Components/internal/localization/strings/fi.json +227 -0
- package/lib/module/Components/internal/localization/strings/fil.json +227 -0
- package/lib/module/Components/internal/localization/strings/fr.json +227 -0
- package/lib/module/Components/internal/localization/strings/he.json +227 -0
- package/lib/module/Components/internal/localization/strings/hi.json +227 -0
- package/lib/module/Components/internal/localization/strings/hr.json +227 -0
- package/lib/module/Components/internal/localization/strings/hu.json +227 -0
- package/lib/module/Components/internal/localization/strings/hy.json +227 -0
- package/lib/module/Components/internal/localization/strings/id.json +227 -0
- package/lib/module/Components/internal/localization/strings/index.js +68 -0
- package/lib/module/Components/internal/localization/strings/index.js.map +1 -0
- package/lib/module/Components/internal/localization/strings/it.json +227 -0
- package/lib/module/Components/internal/localization/strings/ja.json +227 -0
- package/lib/module/Components/internal/localization/strings/ka.json +227 -0
- package/lib/module/Components/internal/localization/strings/kk.json +227 -0
- package/lib/module/Components/internal/localization/strings/ko.json +227 -0
- package/lib/module/Components/internal/localization/strings/ku.json +227 -0
- package/lib/module/Components/internal/localization/strings/ky.json +227 -0
- package/lib/module/Components/internal/localization/strings/lt.json +227 -0
- package/lib/module/Components/internal/localization/strings/lv.json +227 -0
- package/lib/module/Components/internal/localization/strings/mk.json +227 -0
- package/lib/module/Components/internal/localization/strings/ms.json +227 -0
- package/lib/module/Components/internal/localization/strings/nb.json +227 -0
- package/lib/module/Components/internal/localization/strings/nl-BE.json +227 -0
- package/lib/module/Components/internal/localization/strings/nl.json +227 -0
- package/lib/module/Components/internal/localization/strings/pl.json +227 -0
- package/lib/module/Components/internal/localization/strings/pt-BR.json +227 -0
- package/lib/module/Components/internal/localization/strings/pt.json +227 -0
- package/lib/module/Components/internal/localization/strings/ro.json +227 -0
- package/lib/module/Components/internal/localization/strings/ru.json +227 -0
- package/lib/module/Components/internal/localization/strings/sk.json +227 -0
- package/lib/module/Components/internal/localization/strings/sl.json +227 -0
- package/lib/module/Components/internal/localization/strings/sq.json +227 -0
- package/lib/module/Components/internal/localization/strings/sr.json +227 -0
- package/lib/module/Components/internal/localization/strings/sv.json +227 -0
- package/lib/module/Components/internal/localization/strings/th.json +227 -0
- package/lib/module/Components/internal/localization/strings/tr.json +227 -0
- package/lib/module/Components/internal/localization/strings/uk.json +227 -0
- package/lib/module/Components/internal/localization/strings/ur-PK.json +227 -0
- package/lib/module/Components/internal/localization/strings/uz.json +227 -0
- package/lib/module/Components/internal/localization/strings/vi.json +227 -0
- package/lib/module/Components/internal/localization/strings/zh-CN.json +227 -0
- package/lib/module/Components/internal/localization/strings/zh-HK.json +227 -0
- package/lib/module/Components/internal/localization/strings/zh-TW.json +227 -0
- package/lib/module/Components/internal/localization/translate.js +28 -0
- package/lib/module/Components/internal/localization/translate.js.map +1 -0
- package/lib/module/Components/internal/localization/types.js +2 -0
- package/lib/module/Components/internal/localization/types.js.map +1 -0
- package/lib/module/Components/internal/localization/usePrimerLocalization.js +22 -0
- package/lib/module/Components/internal/localization/usePrimerLocalization.js.map +1 -0
- package/lib/module/Components/internal/navigation/NavigationContainer.js +180 -0
- package/lib/module/Components/internal/navigation/NavigationContainer.js.map +1 -0
- package/lib/module/Components/internal/navigation/NavigationContext.js +6 -0
- package/lib/module/Components/internal/navigation/NavigationContext.js.map +1 -0
- package/lib/module/Components/internal/navigation/NavigationHeader.js +185 -0
- package/lib/module/Components/internal/navigation/NavigationHeader.js.map +1 -0
- package/lib/module/Components/internal/navigation/NavigationProvider.js +92 -0
- package/lib/module/Components/internal/navigation/NavigationProvider.js.map +1 -0
- package/lib/module/Components/internal/navigation/index.js +9 -0
- package/lib/module/Components/internal/navigation/index.js.map +1 -0
- package/lib/module/Components/internal/navigation/navigationReducer.js +52 -0
- package/lib/module/Components/internal/navigation/navigationReducer.js.map +1 -0
- package/lib/module/Components/internal/navigation/types.js +17 -0
- package/lib/module/Components/internal/navigation/types.js.map +1 -0
- package/lib/module/Components/internal/navigation/useNavigation.js +19 -0
- package/lib/module/Components/internal/navigation/useNavigation.js.map +1 -0
- package/lib/module/Components/internal/navigation/useRoute.js +17 -0
- package/lib/module/Components/internal/navigation/useRoute.js.map +1 -0
- package/lib/module/Components/internal/routeMethodSelection.js +30 -0
- package/lib/module/Components/internal/routeMethodSelection.js.map +1 -0
- package/lib/module/Components/internal/screens/CardFormScreen.js +226 -0
- package/lib/module/Components/internal/screens/CardFormScreen.js.map +1 -0
- package/lib/module/Components/internal/screens/CountrySelectorScreen.js +252 -0
- package/lib/module/Components/internal/screens/CountrySelectorScreen.js.map +1 -0
- package/lib/module/Components/internal/screens/ErrorScreen.js +75 -0
- package/lib/module/Components/internal/screens/ErrorScreen.js.map +1 -0
- package/lib/module/Components/internal/screens/LoadingScreen.js +41 -0
- package/lib/module/Components/internal/screens/LoadingScreen.js.map +1 -0
- package/lib/module/Components/internal/screens/MethodSelectionScreen.js +252 -0
- package/lib/module/Components/internal/screens/MethodSelectionScreen.js.map +1 -0
- package/lib/module/Components/internal/screens/SuccessScreen.js +49 -0
- package/lib/module/Components/internal/screens/SuccessScreen.js.map +1 -0
- package/lib/module/Components/internal/screens/VaultedMethodsScreen.js +525 -0
- package/lib/module/Components/internal/screens/VaultedMethodsScreen.js.map +1 -0
- package/lib/module/Components/internal/screens/assets/check-circle-large.png +0 -0
- package/lib/module/Components/internal/screens/assets/check-circle-large@2x.png +0 -0
- package/lib/module/Components/internal/screens/assets/check-circle-large@3x.png +0 -0
- package/lib/module/Components/internal/screens/assets/check.png +0 -0
- package/lib/module/Components/internal/screens/assets/check@2x.png +0 -0
- package/lib/module/Components/internal/screens/assets/check@3x.png +0 -0
- package/lib/module/Components/internal/screens/assets/chevron-down.png +0 -0
- package/lib/module/Components/internal/screens/assets/chevron-down@2x.png +0 -0
- package/lib/module/Components/internal/screens/assets/chevron-down@3x.png +0 -0
- package/lib/module/Components/internal/screens/assets/close.png +0 -0
- package/lib/module/Components/internal/screens/assets/close@2x.png +0 -0
- package/lib/module/Components/internal/screens/assets/close@3x.png +0 -0
- package/lib/module/Components/internal/screens/assets/done.png +0 -0
- package/lib/module/Components/internal/screens/assets/done@2x.png +0 -0
- package/lib/module/Components/internal/screens/assets/done@3x.png +0 -0
- package/lib/module/Components/internal/screens/assets/edit.png +0 -0
- package/lib/module/Components/internal/screens/assets/edit@2x.png +0 -0
- package/lib/module/Components/internal/screens/assets/edit@3x.png +0 -0
- package/lib/module/Components/internal/screens/assets/error-large.png +0 -0
- package/lib/module/Components/internal/screens/assets/error-large@2x.png +0 -0
- package/lib/module/Components/internal/screens/assets/error-large@3x.png +0 -0
- package/lib/module/Components/internal/screens/assets/lock.png +0 -0
- package/lib/module/Components/internal/screens/assets/lock@2x.png +0 -0
- package/lib/module/Components/internal/screens/assets/lock@3x.png +0 -0
- package/lib/module/Components/internal/screens/constants.js +4 -0
- package/lib/module/Components/internal/screens/constants.js.map +1 -0
- package/lib/module/Components/internal/screens/index.js +8 -0
- package/lib/module/Components/internal/screens/index.js.map +1 -0
- package/lib/module/Components/internal/screens/useBottomSafeArea.js +20 -0
- package/lib/module/Components/internal/screens/useBottomSafeArea.js.map +1 -0
- package/lib/module/Components/internal/screens/useKeyboardHeight.js +32 -0
- package/lib/module/Components/internal/screens/useKeyboardHeight.js.map +1 -0
- package/lib/module/Components/internal/screens/useKeyboardPadding.js +28 -0
- package/lib/module/Components/internal/screens/useKeyboardPadding.js.map +1 -0
- package/lib/module/Components/internal/screens/useStatusScreenHeight.js +14 -0
- package/lib/module/Components/internal/screens/useStatusScreenHeight.js.map +1 -0
- package/lib/module/Components/internal/theme/ThemeContext.js +5 -0
- package/lib/module/Components/internal/theme/ThemeContext.js.map +1 -0
- package/lib/module/Components/internal/theme/index.js +6 -0
- package/lib/module/Components/internal/theme/index.js.map +1 -0
- package/lib/module/Components/internal/theme/merge.js +39 -0
- package/lib/module/Components/internal/theme/merge.js.map +1 -0
- package/lib/module/Components/internal/theme/tokens/dark.js +108 -0
- package/lib/module/Components/internal/theme/tokens/dark.js.map +1 -0
- package/lib/module/Components/internal/theme/tokens/index.js +5 -0
- package/lib/module/Components/internal/theme/tokens/index.js.map +1 -0
- package/lib/module/Components/internal/theme/tokens/light.js +138 -0
- package/lib/module/Components/internal/theme/tokens/light.js.map +1 -0
- package/lib/module/Components/internal/theme/types.js +2 -0
- package/lib/module/Components/internal/theme/types.js.map +1 -0
- package/lib/module/Components/internal/theme/usePrimerTheme.js +14 -0
- package/lib/module/Components/internal/theme/usePrimerTheme.js.map +1 -0
- package/lib/module/Components/internal/ui/CheckoutButton.js +89 -0
- package/lib/module/Components/internal/ui/CheckoutButton.js.map +1 -0
- package/lib/module/Components/internal/ui/PaymentMethodButton.js +169 -0
- package/lib/module/Components/internal/ui/PaymentMethodButton.js.map +1 -0
- package/lib/module/Components/internal/ui/VaultedCardCvvRow.js +110 -0
- package/lib/module/Components/internal/ui/VaultedCardCvvRow.js.map +1 -0
- package/lib/module/Components/internal/ui/index.js +5 -0
- package/lib/module/Components/internal/ui/index.js.map +1 -0
- package/lib/module/Components/internal/utils/errors.js +12 -0
- package/lib/module/Components/internal/utils/errors.js.map +1 -0
- package/lib/module/Components/internal/utils/formatting.js +30 -0
- package/lib/module/Components/internal/utils/formatting.js.map +1 -0
- package/lib/module/Components/status/PrimerErrorScreen.js +69 -0
- package/lib/module/Components/status/PrimerErrorScreen.js.map +1 -0
- package/lib/module/Components/status/PrimerLoadingScreen.js +48 -0
- package/lib/module/Components/status/PrimerLoadingScreen.js.map +1 -0
- package/lib/module/Components/status/PrimerStatusScreenLayout.js +85 -0
- package/lib/module/Components/status/PrimerStatusScreenLayout.js.map +1 -0
- package/lib/module/Components/status/PrimerSuccessScreen.js +43 -0
- package/lib/module/Components/status/PrimerSuccessScreen.js.map +1 -0
- package/lib/module/Components/status/index.js +7 -0
- package/lib/module/Components/status/index.js.map +1 -0
- package/lib/module/Components/types/BillingAddressFormTypes.js +4 -0
- package/lib/module/Components/types/BillingAddressFormTypes.js.map +1 -0
- package/lib/module/Components/types/CardFormTypes.js +4 -0
- package/lib/module/Components/types/CardFormTypes.js.map +1 -0
- package/lib/module/Components/types/CardInputTypes.js +4 -0
- package/lib/module/Components/types/CardInputTypes.js.map +1 -0
- package/lib/module/Components/types/CardNetworkSelection.js +4 -0
- package/lib/module/Components/types/CardNetworkSelection.js.map +1 -0
- package/lib/module/Components/types/PaymentMethodTypes.js +4 -0
- package/lib/module/Components/types/PaymentMethodTypes.js.map +1 -0
- package/lib/module/Components/types/PrimerCardFormTypes.js +4 -0
- package/lib/module/Components/types/PrimerCardFormTypes.js.map +1 -0
- package/lib/module/Components/types/PrimerCheckoutProviderTypes.js +4 -0
- package/lib/module/Components/types/PrimerCheckoutProviderTypes.js.map +1 -0
- package/lib/module/Components/types/PrimerPaymentMethodListTypes.js +4 -0
- package/lib/module/Components/types/PrimerPaymentMethodListTypes.js.map +1 -0
- package/lib/module/Components/types/PrimerPaymentMethodTypes.js +4 -0
- package/lib/module/Components/types/PrimerPaymentMethodTypes.js.map +1 -0
- package/lib/module/Components/types/VaultedPaymentMethodTypes.js +4 -0
- package/lib/module/Components/types/VaultedPaymentMethodTypes.js.map +1 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js +22 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js +6 -6
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +6 -6
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +23 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/VaultManager.js +11 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/VaultManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +6 -6
- package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -1
- package/lib/module/Primer.js +11 -11
- package/lib/module/Primer.js.map +1 -1
- package/lib/module/RNPrimer.js +41 -0
- package/lib/module/RNPrimer.js.map +1 -1
- package/lib/module/assets/images/ic-card-placeholder.png +0 -0
- package/lib/module/assets/images/ic-card-placeholder@2x.png +0 -0
- package/lib/module/assets/images/ic-card-placeholder@3x.png +0 -0
- package/lib/module/assets/images/ic-cvv-hint.png +0 -0
- package/lib/module/assets/images/ic-cvv-hint@2x.png +0 -0
- package/lib/module/assets/images/ic-cvv-hint@3x.png +0 -0
- package/lib/module/assets/images/ic-expiry-calendar.png +0 -0
- package/lib/module/assets/images/ic-expiry-calendar@2x.png +0 -0
- package/lib/module/assets/images/ic-expiry-calendar@3x.png +0 -0
- package/lib/module/index.js +24 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/PrimerCheckoutData.js.map +1 -1
- package/lib/module/specs/NativePrimer.js.map +1 -1
- package/lib/module/specs/NativePrimerViewUtils.js +5 -0
- package/lib/module/specs/NativePrimerViewUtils.js.map +1 -0
- package/lib/module/utils/debounce.js +31 -0
- package/lib/module/utils/debounce.js.map +1 -0
- package/lib/typescript/src/Components/PrimerAcceptedCardNetworks.d.ts +9 -0
- package/lib/typescript/src/Components/PrimerAcceptedCardNetworks.d.ts.map +1 -0
- package/lib/typescript/src/Components/PrimerBillingAddressForm.d.ts +3 -0
- package/lib/typescript/src/Components/PrimerBillingAddressForm.d.ts.map +1 -0
- package/lib/typescript/src/Components/PrimerCardForm.d.ts +3 -0
- package/lib/typescript/src/Components/PrimerCardForm.d.ts.map +1 -0
- package/lib/typescript/src/Components/PrimerCardNetworkSelector.d.ts +5 -0
- package/lib/typescript/src/Components/PrimerCardNetworkSelector.d.ts.map +1 -0
- package/lib/typescript/src/Components/PrimerCheckoutProvider.d.ts +3 -0
- package/lib/typescript/src/Components/PrimerCheckoutProvider.d.ts.map +1 -0
- package/lib/typescript/src/Components/PrimerCheckoutSheet.d.ts +18 -0
- package/lib/typescript/src/Components/PrimerCheckoutSheet.d.ts.map +1 -0
- package/lib/typescript/src/Components/PrimerPaymentMethodList.d.ts +3 -0
- package/lib/typescript/src/Components/PrimerPaymentMethodList.d.ts.map +1 -0
- package/lib/typescript/src/Components/PrimerVaultedPaymentMethod.d.ts +5 -0
- package/lib/typescript/src/Components/PrimerVaultedPaymentMethod.d.ts.map +1 -0
- package/lib/typescript/src/Components/analytics.d.ts +7 -0
- package/lib/typescript/src/Components/analytics.d.ts.map +1 -0
- package/lib/typescript/src/Components/hooks/useCardNetworkDescriptor.d.ts +8 -0
- package/lib/typescript/src/Components/hooks/useCardNetworkDescriptor.d.ts.map +1 -0
- package/lib/typescript/src/Components/hooks/useCardNetworkIcons.d.ts +19 -0
- package/lib/typescript/src/Components/hooks/useCardNetworkIcons.d.ts.map +1 -0
- package/lib/typescript/src/Components/hooks/usePrimerBillingAddressForm.d.ts +13 -0
- package/lib/typescript/src/Components/hooks/usePrimerBillingAddressForm.d.ts.map +1 -0
- package/lib/typescript/src/Components/hooks/usePrimerCardForm.d.ts +12 -0
- package/lib/typescript/src/Components/hooks/usePrimerCardForm.d.ts.map +1 -0
- package/lib/typescript/src/Components/hooks/usePrimerCardNetwork.d.ts +21 -0
- package/lib/typescript/src/Components/hooks/usePrimerCardNetwork.d.ts.map +1 -0
- package/lib/typescript/src/Components/hooks/usePrimerCardNetworkSelection.d.ts +3 -0
- package/lib/typescript/src/Components/hooks/usePrimerCardNetworkSelection.d.ts.map +1 -0
- package/lib/typescript/src/Components/hooks/usePrimerCheckout.d.ts +3 -0
- package/lib/typescript/src/Components/hooks/usePrimerCheckout.d.ts.map +1 -0
- package/lib/typescript/src/Components/hooks/usePrimerPaymentMethod.d.ts +9 -0
- package/lib/typescript/src/Components/hooks/usePrimerPaymentMethod.d.ts.map +1 -0
- package/lib/typescript/src/Components/hooks/usePrimerPaymentMethods.d.ts +3 -0
- package/lib/typescript/src/Components/hooks/usePrimerPaymentMethods.d.ts.map +1 -0
- package/lib/typescript/src/Components/hooks/usePrimerVaultManager.d.ts +3 -0
- package/lib/typescript/src/Components/hooks/usePrimerVaultManager.d.ts.map +1 -0
- package/lib/typescript/src/Components/index.d.ts +36 -0
- package/lib/typescript/src/Components/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/inputs/CountrySelectorRow.d.ts +21 -0
- package/lib/typescript/src/Components/inputs/CountrySelectorRow.d.ts.map +1 -0
- package/lib/typescript/src/Components/inputs/PrimerCVVInput.d.ts +3 -0
- package/lib/typescript/src/Components/inputs/PrimerCVVInput.d.ts.map +1 -0
- package/lib/typescript/src/Components/inputs/PrimerCardNumberInput.d.ts +3 -0
- package/lib/typescript/src/Components/inputs/PrimerCardNumberInput.d.ts.map +1 -0
- package/lib/typescript/src/Components/inputs/PrimerCardholderNameInput.d.ts +3 -0
- package/lib/typescript/src/Components/inputs/PrimerCardholderNameInput.d.ts.map +1 -0
- package/lib/typescript/src/Components/inputs/PrimerExpiryDateInput.d.ts +3 -0
- package/lib/typescript/src/Components/inputs/PrimerExpiryDateInput.d.ts.map +1 -0
- package/lib/typescript/src/Components/inputs/PrimerTextInput.d.ts +4 -0
- package/lib/typescript/src/Components/inputs/PrimerTextInput.d.ts.map +1 -0
- package/lib/typescript/src/Components/inputs/caret.d.ts +5 -0
- package/lib/typescript/src/Components/inputs/caret.d.ts.map +1 -0
- package/lib/typescript/src/Components/inputs/dimensions.d.ts +7 -0
- package/lib/typescript/src/Components/inputs/dimensions.d.ts.map +1 -0
- package/lib/typescript/src/Components/inputs/index.d.ts +8 -0
- package/lib/typescript/src/Components/inputs/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/CardNetworkBadge.d.ts +7 -0
- package/lib/typescript/src/Components/internal/CardNetworkBadge.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/Popover.d.ts +15 -0
- package/lib/typescript/src/Components/internal/Popover.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/PrimerCheckoutContext.d.ts +3 -0
- package/lib/typescript/src/Components/internal/PrimerCheckoutContext.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/applePay.d.ts +11 -0
- package/lib/typescript/src/Components/internal/applePay.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/billingAddressOptions.d.ts +9 -0
- package/lib/typescript/src/Components/internal/billingAddressOptions.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/cardFormat.d.ts +20 -0
- package/lib/typescript/src/Components/internal/cardFormat.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/cardNetwork.d.ts +55 -0
- package/lib/typescript/src/Components/internal/cardNetwork.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/cardNetworkIcons.d.ts +10 -0
- package/lib/typescript/src/Components/internal/cardNetworkIcons.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/checkout-flow/CheckoutFlow.d.ts +5 -0
- package/lib/typescript/src/Components/internal/checkout-flow/CheckoutFlow.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/checkout-flow/CheckoutFlowContext.d.ts +7 -0
- package/lib/typescript/src/Components/internal/checkout-flow/CheckoutFlowContext.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/checkout-flow/index.d.ts +2 -0
- package/lib/typescript/src/Components/internal/checkout-flow/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/checkout-sheet/CheckoutSheet.d.ts +3 -0
- package/lib/typescript/src/Components/internal/checkout-sheet/CheckoutSheet.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/checkout-sheet/SheetHeightContext.d.ts +14 -0
- package/lib/typescript/src/Components/internal/checkout-sheet/SheetHeightContext.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/checkout-sheet/index.d.ts +5 -0
- package/lib/typescript/src/Components/internal/checkout-sheet/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/checkout-sheet/types.d.ts +21 -0
- package/lib/typescript/src/Components/internal/checkout-sheet/types.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/countries.d.ts +751 -0
- package/lib/typescript/src/Components/internal/countries.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/currency/currency-metadata.d.ts +7 -0
- package/lib/typescript/src/Components/internal/currency/currency-metadata.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/currency/formatting.d.ts +10 -0
- package/lib/typescript/src/Components/internal/currency/formatting.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/currency/index.d.ts +3 -0
- package/lib/typescript/src/Components/internal/currency/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/debug.d.ts +3 -0
- package/lib/typescript/src/Components/internal/debug.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/flags.d.ts +2 -0
- package/lib/typescript/src/Components/internal/flags.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/form-state/BillingAddressFormStateProvider.d.ts +13 -0
- package/lib/typescript/src/Components/internal/form-state/BillingAddressFormStateProvider.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/form-state/CardFormStateProvider.d.ts +16 -0
- package/lib/typescript/src/Components/internal/form-state/CardFormStateProvider.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/form-state/index.d.ts +3 -0
- package/lib/typescript/src/Components/internal/form-state/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/googlePay.d.ts +12 -0
- package/lib/typescript/src/Components/internal/googlePay.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/localization/index.d.ts +6 -0
- package/lib/typescript/src/Components/internal/localization/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/localization/interpolation.d.ts +3 -0
- package/lib/typescript/src/Components/internal/localization/interpolation.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/localization/locale-resolver.d.ts +3 -0
- package/lib/typescript/src/Components/internal/localization/locale-resolver.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/localization/strings/index.d.ts +4 -0
- package/lib/typescript/src/Components/internal/localization/strings/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/localization/translate.d.ts +3 -0
- package/lib/typescript/src/Components/internal/localization/translate.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/localization/types.d.ts +7 -0
- package/lib/typescript/src/Components/internal/localization/types.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/localization/usePrimerLocalization.d.ts +9 -0
- package/lib/typescript/src/Components/internal/localization/usePrimerLocalization.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/navigation/NavigationContainer.d.ts +8 -0
- package/lib/typescript/src/Components/internal/navigation/NavigationContainer.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/navigation/NavigationContext.d.ts +12 -0
- package/lib/typescript/src/Components/internal/navigation/NavigationContext.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/navigation/NavigationHeader.d.ts +16 -0
- package/lib/typescript/src/Components/internal/navigation/NavigationHeader.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/navigation/NavigationProvider.d.ts +10 -0
- package/lib/typescript/src/Components/internal/navigation/NavigationProvider.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/navigation/index.d.ts +9 -0
- package/lib/typescript/src/Components/internal/navigation/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/navigation/navigationReducer.d.ts +3 -0
- package/lib/typescript/src/Components/internal/navigation/navigationReducer.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/navigation/types.d.ts +79 -0
- package/lib/typescript/src/Components/internal/navigation/types.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/navigation/useNavigation.d.ts +9 -0
- package/lib/typescript/src/Components/internal/navigation/useNavigation.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/navigation/useRoute.d.ts +6 -0
- package/lib/typescript/src/Components/internal/navigation/useRoute.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/routeMethodSelection.d.ts +17 -0
- package/lib/typescript/src/Components/internal/routeMethodSelection.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/CardFormScreen.d.ts +2 -0
- package/lib/typescript/src/Components/internal/screens/CardFormScreen.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/CountrySelectorScreen.d.ts +2 -0
- package/lib/typescript/src/Components/internal/screens/CountrySelectorScreen.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/ErrorScreen.d.ts +2 -0
- package/lib/typescript/src/Components/internal/screens/ErrorScreen.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/LoadingScreen.d.ts +2 -0
- package/lib/typescript/src/Components/internal/screens/LoadingScreen.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/MethodSelectionScreen.d.ts +2 -0
- package/lib/typescript/src/Components/internal/screens/MethodSelectionScreen.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/SuccessScreen.d.ts +2 -0
- package/lib/typescript/src/Components/internal/screens/SuccessScreen.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/VaultedMethodsScreen.d.ts +2 -0
- package/lib/typescript/src/Components/internal/screens/VaultedMethodsScreen.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/constants.d.ts +2 -0
- package/lib/typescript/src/Components/internal/screens/constants.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/index.d.ts +6 -0
- package/lib/typescript/src/Components/internal/screens/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/useBottomSafeArea.d.ts +2 -0
- package/lib/typescript/src/Components/internal/screens/useBottomSafeArea.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/useKeyboardHeight.d.ts +3 -0
- package/lib/typescript/src/Components/internal/screens/useKeyboardHeight.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/useKeyboardPadding.d.ts +2 -0
- package/lib/typescript/src/Components/internal/screens/useKeyboardPadding.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/screens/useStatusScreenHeight.d.ts +2 -0
- package/lib/typescript/src/Components/internal/screens/useStatusScreenHeight.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/theme/ThemeContext.d.ts +8 -0
- package/lib/typescript/src/Components/internal/theme/ThemeContext.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/theme/index.d.ts +3 -0
- package/lib/typescript/src/Components/internal/theme/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/theme/merge.d.ts +5 -0
- package/lib/typescript/src/Components/internal/theme/merge.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/theme/tokens/dark.d.ts +3 -0
- package/lib/typescript/src/Components/internal/theme/tokens/dark.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/theme/tokens/index.d.ts +3 -0
- package/lib/typescript/src/Components/internal/theme/tokens/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/theme/tokens/light.d.ts +3 -0
- package/lib/typescript/src/Components/internal/theme/tokens/light.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/theme/types.d.ts +83 -0
- package/lib/typescript/src/Components/internal/theme/types.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/theme/usePrimerTheme.d.ts +3 -0
- package/lib/typescript/src/Components/internal/theme/usePrimerTheme.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/ui/CheckoutButton.d.ts +9 -0
- package/lib/typescript/src/Components/internal/ui/CheckoutButton.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/ui/PaymentMethodButton.d.ts +4 -0
- package/lib/typescript/src/Components/internal/ui/PaymentMethodButton.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/ui/VaultedCardCvvRow.d.ts +13 -0
- package/lib/typescript/src/Components/internal/ui/VaultedCardCvvRow.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/ui/index.d.ts +5 -0
- package/lib/typescript/src/Components/internal/ui/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/utils/errors.d.ts +8 -0
- package/lib/typescript/src/Components/internal/utils/errors.d.ts.map +1 -0
- package/lib/typescript/src/Components/internal/utils/formatting.d.ts +18 -0
- package/lib/typescript/src/Components/internal/utils/formatting.d.ts.map +1 -0
- package/lib/typescript/src/Components/status/PrimerErrorScreen.d.ts +12 -0
- package/lib/typescript/src/Components/status/PrimerErrorScreen.d.ts.map +1 -0
- package/lib/typescript/src/Components/status/PrimerLoadingScreen.d.ts +9 -0
- package/lib/typescript/src/Components/status/PrimerLoadingScreen.d.ts.map +1 -0
- package/lib/typescript/src/Components/status/PrimerStatusScreenLayout.d.ts +9 -0
- package/lib/typescript/src/Components/status/PrimerStatusScreenLayout.d.ts.map +1 -0
- package/lib/typescript/src/Components/status/PrimerSuccessScreen.d.ts +10 -0
- package/lib/typescript/src/Components/status/PrimerSuccessScreen.d.ts.map +1 -0
- package/lib/typescript/src/Components/status/index.d.ts +9 -0
- package/lib/typescript/src/Components/status/index.d.ts.map +1 -0
- package/lib/typescript/src/Components/types/BillingAddressFormTypes.d.ts +59 -0
- package/lib/typescript/src/Components/types/BillingAddressFormTypes.d.ts.map +1 -0
- package/lib/typescript/src/Components/types/CardFormTypes.d.ts +71 -0
- package/lib/typescript/src/Components/types/CardFormTypes.d.ts.map +1 -0
- package/lib/typescript/src/Components/types/CardInputTypes.d.ts +82 -0
- package/lib/typescript/src/Components/types/CardInputTypes.d.ts.map +1 -0
- package/lib/typescript/src/Components/types/CardNetworkSelection.d.ts +62 -0
- package/lib/typescript/src/Components/types/CardNetworkSelection.d.ts.map +1 -0
- package/lib/typescript/src/Components/types/PaymentMethodTypes.d.ts +37 -0
- package/lib/typescript/src/Components/types/PaymentMethodTypes.d.ts.map +1 -0
- package/lib/typescript/src/Components/types/PrimerCardFormTypes.d.ts +19 -0
- package/lib/typescript/src/Components/types/PrimerCardFormTypes.d.ts.map +1 -0
- package/lib/typescript/src/Components/types/PrimerCheckoutProviderTypes.d.ts +149 -0
- package/lib/typescript/src/Components/types/PrimerCheckoutProviderTypes.d.ts.map +1 -0
- package/lib/typescript/src/Components/types/PrimerPaymentMethodListTypes.d.ts +23 -0
- package/lib/typescript/src/Components/types/PrimerPaymentMethodListTypes.d.ts.map +1 -0
- package/lib/typescript/src/Components/types/PrimerPaymentMethodTypes.d.ts +51 -0
- package/lib/typescript/src/Components/types/PrimerPaymentMethodTypes.d.ts.map +1 -0
- package/lib/typescript/src/Components/types/VaultedPaymentMethodTypes.d.ts +71 -0
- package/lib/typescript/src/Components/types/VaultedPaymentMethodTypes.d.ts.map +1 -0
- package/lib/typescript/src/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts +17 -2
- package/lib/typescript/src/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts.map +1 -1
- package/lib/typescript/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.d.ts +2 -0
- package/lib/typescript/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.d.ts.map +1 -1
- package/lib/typescript/src/HeadlessUniversalCheckout/Managers/VaultManager.d.ts +1 -0
- package/lib/typescript/src/HeadlessUniversalCheckout/Managers/VaultManager.d.ts.map +1 -1
- package/lib/typescript/src/RNPrimer.d.ts +4 -0
- package/lib/typescript/src/RNPrimer.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +39 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/models/PrimerCheckoutData.d.ts +2 -0
- package/lib/typescript/src/models/PrimerCheckoutData.d.ts.map +1 -1
- package/lib/typescript/src/models/PrimerClientSession.d.ts +20 -0
- package/lib/typescript/src/models/PrimerClientSession.d.ts.map +1 -1
- package/lib/typescript/src/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts +4 -2
- package/lib/typescript/src/models/PrimerHeadlessUniversalCheckoutPaymentMethod.d.ts.map +1 -1
- package/lib/typescript/src/models/PrimerRawData.d.ts +1 -0
- package/lib/typescript/src/models/PrimerRawData.d.ts.map +1 -1
- package/lib/typescript/src/models/PrimerSettings.d.ts +1 -3
- package/lib/typescript/src/models/PrimerSettings.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativePrimer.d.ts +4 -0
- package/lib/typescript/src/specs/NativePrimer.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativePrimerViewUtils.d.ts +7 -0
- package/lib/typescript/src/specs/NativePrimerViewUtils.d.ts.map +1 -0
- package/lib/typescript/src/utils/debounce.d.ts +6 -0
- package/lib/typescript/src/utils/debounce.d.ts.map +1 -0
- package/package.json +14 -28
- package/primer-io-react-native.podspec +1 -1
- package/src/Components/PrimerAcceptedCardNetworks.tsx +73 -0
- package/src/Components/PrimerBillingAddressForm.tsx +195 -0
- package/src/Components/PrimerCardForm.tsx +102 -0
- package/src/Components/PrimerCardNetworkSelector.tsx +164 -0
- package/src/Components/PrimerCheckoutProvider.tsx +1092 -0
- package/src/Components/PrimerCheckoutSheet.tsx +37 -0
- package/src/Components/PrimerPaymentMethodList.tsx +82 -0
- package/src/Components/PrimerVaultedPaymentMethod.tsx +234 -0
- package/src/Components/analytics.ts +19 -0
- package/src/Components/hooks/useCardNetworkDescriptor.ts +27 -0
- package/src/Components/hooks/useCardNetworkIcons.ts +57 -0
- package/src/Components/hooks/usePrimerBillingAddressForm.ts +37 -0
- package/src/Components/hooks/usePrimerCardForm.ts +50 -0
- package/src/Components/hooks/usePrimerCardNetwork.ts +74 -0
- package/src/Components/hooks/usePrimerCardNetworkSelection.ts +85 -0
- package/src/Components/hooks/usePrimerCheckout.ts +14 -0
- package/src/Components/hooks/usePrimerPaymentMethod.ts +91 -0
- package/src/Components/hooks/usePrimerPaymentMethods.ts +172 -0
- package/src/Components/hooks/usePrimerVaultManager.ts +114 -0
- package/src/Components/index.ts +77 -0
- package/src/Components/inputs/CountrySelectorRow.tsx +127 -0
- package/src/Components/inputs/PrimerCVVInput.tsx +53 -0
- package/src/Components/inputs/PrimerCardNumberInput.tsx +146 -0
- package/src/Components/inputs/PrimerCardholderNameInput.tsx +30 -0
- package/src/Components/inputs/PrimerExpiryDateInput.tsx +101 -0
- package/src/Components/inputs/PrimerTextInput.tsx +201 -0
- package/src/Components/inputs/caret.ts +37 -0
- package/src/Components/inputs/dimensions.ts +15 -0
- package/src/Components/inputs/index.ts +7 -0
- package/src/Components/internal/CardNetworkBadge.tsx +124 -0
- package/src/Components/internal/Popover.tsx +95 -0
- package/src/Components/internal/PrimerCheckoutContext.ts +4 -0
- package/src/Components/internal/applePay.ts +12 -0
- package/src/Components/internal/billingAddressOptions.ts +47 -0
- package/src/Components/internal/cardFormat.ts +39 -0
- package/src/Components/internal/cardNetwork.ts +128 -0
- package/src/Components/internal/cardNetworkIcons.ts +27 -0
- package/src/Components/internal/checkout-flow/CheckoutFlow.tsx +124 -0
- package/src/Components/internal/checkout-flow/CheckoutFlowContext.ts +16 -0
- package/src/Components/internal/checkout-flow/index.ts +1 -0
- package/src/Components/internal/checkout-sheet/CheckoutSheet.tsx +301 -0
- package/src/Components/internal/checkout-sheet/SheetHeightContext.ts +24 -0
- package/src/Components/internal/checkout-sheet/index.ts +4 -0
- package/src/Components/internal/checkout-sheet/types.ts +27 -0
- package/src/Components/internal/countries.ts +302 -0
- package/src/Components/internal/currency/currencies.json +1 -0
- package/src/Components/internal/currency/currency-metadata.ts +57 -0
- package/src/Components/internal/currency/formatting.ts +26 -0
- package/src/Components/internal/currency/index.ts +2 -0
- package/src/Components/internal/debug.ts +12 -0
- package/src/Components/internal/flags.ts +20 -0
- package/src/Components/internal/form-state/BillingAddressFormStateProvider.tsx +283 -0
- package/src/Components/internal/form-state/CardFormStateProvider.tsx +302 -0
- package/src/Components/internal/form-state/index.ts +2 -0
- package/src/Components/internal/googlePay.ts +13 -0
- package/src/Components/internal/localization/index.ts +5 -0
- package/src/Components/internal/localization/interpolation.ts +13 -0
- package/src/Components/internal/localization/locale-resolver.ts +37 -0
- package/src/Components/internal/localization/strings/ar.json +227 -0
- package/src/Components/internal/localization/strings/az.json +227 -0
- package/src/Components/internal/localization/strings/bg.json +227 -0
- package/src/Components/internal/localization/strings/bs.json +227 -0
- package/src/Components/internal/localization/strings/ca.json +227 -0
- package/src/Components/internal/localization/strings/cs.json +227 -0
- package/src/Components/internal/localization/strings/da.json +227 -0
- package/src/Components/internal/localization/strings/de.json +227 -0
- package/src/Components/internal/localization/strings/el.json +227 -0
- package/src/Components/internal/localization/strings/en.json +256 -0
- package/src/Components/internal/localization/strings/es-AR.json +227 -0
- package/src/Components/internal/localization/strings/es-MX.json +227 -0
- package/src/Components/internal/localization/strings/es.json +227 -0
- package/src/Components/internal/localization/strings/et.json +227 -0
- package/src/Components/internal/localization/strings/fa.json +227 -0
- package/src/Components/internal/localization/strings/fi.json +227 -0
- package/src/Components/internal/localization/strings/fil.json +227 -0
- package/src/Components/internal/localization/strings/fr.json +227 -0
- package/src/Components/internal/localization/strings/he.json +227 -0
- package/src/Components/internal/localization/strings/hi.json +227 -0
- package/src/Components/internal/localization/strings/hr.json +227 -0
- package/src/Components/internal/localization/strings/hu.json +227 -0
- package/src/Components/internal/localization/strings/hy.json +227 -0
- package/src/Components/internal/localization/strings/id.json +227 -0
- package/src/Components/internal/localization/strings/index.ts +69 -0
- package/src/Components/internal/localization/strings/it.json +227 -0
- package/src/Components/internal/localization/strings/ja.json +227 -0
- package/src/Components/internal/localization/strings/ka.json +227 -0
- package/src/Components/internal/localization/strings/kk.json +227 -0
- package/src/Components/internal/localization/strings/ko.json +227 -0
- package/src/Components/internal/localization/strings/ku.json +227 -0
- package/src/Components/internal/localization/strings/ky.json +227 -0
- package/src/Components/internal/localization/strings/lt.json +227 -0
- package/src/Components/internal/localization/strings/lv.json +227 -0
- package/src/Components/internal/localization/strings/mk.json +227 -0
- package/src/Components/internal/localization/strings/ms.json +227 -0
- package/src/Components/internal/localization/strings/nb.json +227 -0
- package/src/Components/internal/localization/strings/nl-BE.json +227 -0
- package/src/Components/internal/localization/strings/nl.json +227 -0
- package/src/Components/internal/localization/strings/pl.json +227 -0
- package/src/Components/internal/localization/strings/pt-BR.json +227 -0
- package/src/Components/internal/localization/strings/pt.json +227 -0
- package/src/Components/internal/localization/strings/ro.json +227 -0
- package/src/Components/internal/localization/strings/ru.json +227 -0
- package/src/Components/internal/localization/strings/sk.json +227 -0
- package/src/Components/internal/localization/strings/sl.json +227 -0
- package/src/Components/internal/localization/strings/sq.json +227 -0
- package/src/Components/internal/localization/strings/sr.json +227 -0
- package/src/Components/internal/localization/strings/sv.json +227 -0
- package/src/Components/internal/localization/strings/th.json +227 -0
- package/src/Components/internal/localization/strings/tr.json +227 -0
- package/src/Components/internal/localization/strings/uk.json +227 -0
- package/src/Components/internal/localization/strings/ur-PK.json +227 -0
- package/src/Components/internal/localization/strings/uz.json +227 -0
- package/src/Components/internal/localization/strings/vi.json +227 -0
- package/src/Components/internal/localization/strings/zh-CN.json +227 -0
- package/src/Components/internal/localization/strings/zh-HK.json +227 -0
- package/src/Components/internal/localization/strings/zh-TW.json +227 -0
- package/src/Components/internal/localization/translate.ts +28 -0
- package/src/Components/internal/localization/types.ts +8 -0
- package/src/Components/internal/localization/usePrimerLocalization.ts +27 -0
- package/src/Components/internal/navigation/NavigationContainer.tsx +176 -0
- package/src/Components/internal/navigation/NavigationContext.ts +21 -0
- package/src/Components/internal/navigation/NavigationHeader.tsx +182 -0
- package/src/Components/internal/navigation/NavigationProvider.tsx +94 -0
- package/src/Components/internal/navigation/index.ts +8 -0
- package/src/Components/internal/navigation/navigationReducer.ts +47 -0
- package/src/Components/internal/navigation/types.ts +48 -0
- package/src/Components/internal/navigation/useNavigation.ts +18 -0
- package/src/Components/internal/navigation/useRoute.ts +18 -0
- package/src/Components/internal/routeMethodSelection.ts +35 -0
- package/src/Components/internal/screens/CardFormScreen.tsx +223 -0
- package/src/Components/internal/screens/CountrySelectorScreen.tsx +253 -0
- package/src/Components/internal/screens/ErrorScreen.tsx +57 -0
- package/src/Components/internal/screens/LoadingScreen.tsx +43 -0
- package/src/Components/internal/screens/MethodSelectionScreen.tsx +251 -0
- package/src/Components/internal/screens/SuccessScreen.tsx +32 -0
- package/src/Components/internal/screens/VaultedMethodsScreen.tsx +528 -0
- package/src/Components/internal/screens/assets/check-circle-large.png +0 -0
- package/src/Components/internal/screens/assets/check-circle-large@2x.png +0 -0
- package/src/Components/internal/screens/assets/check-circle-large@3x.png +0 -0
- package/src/Components/internal/screens/assets/check.png +0 -0
- package/src/Components/internal/screens/assets/check@2x.png +0 -0
- package/src/Components/internal/screens/assets/check@3x.png +0 -0
- package/src/Components/internal/screens/assets/chevron-down.png +0 -0
- package/src/Components/internal/screens/assets/chevron-down@2x.png +0 -0
- package/src/Components/internal/screens/assets/chevron-down@3x.png +0 -0
- package/src/Components/internal/screens/assets/close.png +0 -0
- package/src/Components/internal/screens/assets/close@2x.png +0 -0
- package/src/Components/internal/screens/assets/close@3x.png +0 -0
- package/src/Components/internal/screens/assets/done.png +0 -0
- package/src/Components/internal/screens/assets/done@2x.png +0 -0
- package/src/Components/internal/screens/assets/done@3x.png +0 -0
- package/src/Components/internal/screens/assets/edit.png +0 -0
- package/src/Components/internal/screens/assets/edit@2x.png +0 -0
- package/src/Components/internal/screens/assets/edit@3x.png +0 -0
- package/src/Components/internal/screens/assets/error-large.png +0 -0
- package/src/Components/internal/screens/assets/error-large@2x.png +0 -0
- package/src/Components/internal/screens/assets/error-large@3x.png +0 -0
- package/src/Components/internal/screens/assets/lock.png +0 -0
- package/src/Components/internal/screens/assets/lock@2x.png +0 -0
- package/src/Components/internal/screens/assets/lock@3x.png +0 -0
- package/src/Components/internal/screens/constants.ts +1 -0
- package/src/Components/internal/screens/index.ts +5 -0
- package/src/Components/internal/screens/useBottomSafeArea.ts +22 -0
- package/src/Components/internal/screens/useKeyboardHeight.ts +33 -0
- package/src/Components/internal/screens/useKeyboardPadding.ts +29 -0
- package/src/Components/internal/screens/useStatusScreenHeight.ts +11 -0
- package/src/Components/internal/theme/ThemeContext.ts +9 -0
- package/src/Components/internal/theme/index.ts +12 -0
- package/src/Components/internal/theme/merge.ts +27 -0
- package/src/Components/internal/theme/tokens/dark.ts +89 -0
- package/src/Components/internal/theme/tokens/index.ts +2 -0
- package/src/Components/internal/theme/tokens/light.ts +88 -0
- package/src/Components/internal/theme/types.ts +89 -0
- package/src/Components/internal/theme/usePrimerTheme.ts +15 -0
- package/src/Components/internal/ui/CheckoutButton.tsx +84 -0
- package/src/Components/internal/ui/PaymentMethodButton.tsx +132 -0
- package/src/Components/internal/ui/VaultedCardCvvRow.tsx +114 -0
- package/src/Components/internal/ui/index.ts +4 -0
- package/src/Components/internal/utils/errors.ts +9 -0
- package/src/Components/internal/utils/formatting.ts +32 -0
- package/src/Components/status/PrimerErrorScreen.tsx +77 -0
- package/src/Components/status/PrimerLoadingScreen.tsx +43 -0
- package/src/Components/status/PrimerStatusScreenLayout.tsx +77 -0
- package/src/Components/status/PrimerSuccessScreen.tsx +39 -0
- package/src/Components/status/index.ts +8 -0
- package/src/Components/types/BillingAddressFormTypes.ts +77 -0
- package/src/Components/types/CardFormTypes.ts +83 -0
- package/src/Components/types/CardInputTypes.ts +90 -0
- package/src/Components/types/CardNetworkSelection.ts +64 -0
- package/src/Components/types/PaymentMethodTypes.ts +51 -0
- package/src/Components/types/PrimerCardFormTypes.ts +19 -0
- package/src/Components/types/PrimerCheckoutProviderTypes.ts +168 -0
- package/src/Components/types/PrimerPaymentMethodListTypes.ts +24 -0
- package/src/Components/types/PrimerPaymentMethodTypes.ts +55 -0
- package/src/Components/types/VaultedPaymentMethodTypes.ts +74 -0
- package/src/HeadlessUniversalCheckout/Managers/AssetsManager.ts +38 -2
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.ts +6 -6
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.ts +6 -6
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.ts +31 -0
- package/src/HeadlessUniversalCheckout/Managers/VaultManager.ts +12 -0
- package/src/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.ts +6 -6
- package/src/Primer.ts +11 -11
- package/src/RNPrimer.ts +45 -0
- package/src/assets/images/ic-card-placeholder.png +0 -0
- package/src/assets/images/ic-card-placeholder@2x.png +0 -0
- package/src/assets/images/ic-card-placeholder@3x.png +0 -0
- package/src/assets/images/ic-cvv-hint.png +0 -0
- package/src/assets/images/ic-cvv-hint@2x.png +0 -0
- package/src/assets/images/ic-cvv-hint@3x.png +0 -0
- package/src/assets/images/ic-expiry-calendar.png +0 -0
- package/src/assets/images/ic-expiry-calendar@2x.png +0 -0
- package/src/assets/images/ic-expiry-calendar@3x.png +0 -0
- package/src/index.tsx +102 -2
- package/src/models/PrimerCheckoutData.ts +3 -0
- package/src/models/PrimerClientSession.ts +30 -0
- package/src/models/PrimerHeadlessUniversalCheckoutPaymentMethod.ts +5 -2
- package/src/models/PrimerRawData.ts +1 -0
- package/src/models/PrimerSettings.ts +1 -4
- package/src/specs/NativePrimer.ts +6 -0
- package/src/specs/NativePrimerViewUtils.ts +8 -0
- package/src/utils/debounce.ts +33 -0
- package/android/src/test/java/com/primerioreactnative/extensions/PrimerGooglePayOptionsRNTest.kt +0 -68
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { Image, StyleSheet, Text, View } from 'react-native';
|
|
3
|
+
import { usePrimerTheme } from './theme';
|
|
4
|
+
import { getNetworkAbbreviation } from './cardNetwork';
|
|
5
|
+
import { PLACEHOLDER_ICON_HEIGHT, PLACEHOLDER_ICON_WIDTH } from '../inputs/dimensions';
|
|
6
|
+
import PrimerHeadlessUniversalCheckoutAssetsManager from '../../HeadlessUniversalCheckout/Managers/AssetsManager';
|
|
7
|
+
|
|
8
|
+
const LOG = '[CardNetworkBadge]';
|
|
9
|
+
const placeholderSource = require('../../assets/images/ic-card-placeholder.png');
|
|
10
|
+
|
|
11
|
+
const assetsManager = new PrimerHeadlessUniversalCheckoutAssetsManager();
|
|
12
|
+
const iconCache = new Map<string, Promise<string>>();
|
|
13
|
+
|
|
14
|
+
function getCardNetworkIconURL(identifier: string): Promise<string> {
|
|
15
|
+
const key = identifier.toUpperCase();
|
|
16
|
+
const existing = iconCache.get(key);
|
|
17
|
+
if (existing) return existing;
|
|
18
|
+
const promise = assetsManager.getCardNetworkImageURL(key).catch((err) => {
|
|
19
|
+
iconCache.delete(key);
|
|
20
|
+
throw err;
|
|
21
|
+
});
|
|
22
|
+
iconCache.set(key, promise);
|
|
23
|
+
return promise;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function useNetworkIconUri(identifier: string | null): string | null {
|
|
27
|
+
const [uri, setUri] = useState<string | null>(null);
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
setUri(null);
|
|
30
|
+
if (!identifier || identifier.toUpperCase() === 'OTHER') return;
|
|
31
|
+
let cancelled = false;
|
|
32
|
+
getCardNetworkIconURL(identifier)
|
|
33
|
+
.then((u) => {
|
|
34
|
+
if (!cancelled) setUri(u);
|
|
35
|
+
})
|
|
36
|
+
.catch((err) => {
|
|
37
|
+
console.warn(`${LOG} icon fetch failed ${identifier}: ${String(err)}`);
|
|
38
|
+
if (!cancelled) setUri(null);
|
|
39
|
+
});
|
|
40
|
+
return () => {
|
|
41
|
+
cancelled = true;
|
|
42
|
+
};
|
|
43
|
+
}, [identifier]);
|
|
44
|
+
return uri;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface CardNetworkBadgeProps {
|
|
48
|
+
identifier: string;
|
|
49
|
+
testID?: string;
|
|
50
|
+
marginLeft?: number;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Renders the icon for a given card network identifier. Falls back to an
|
|
54
|
+
// abbreviation chip (e.g. "CB" for Cartes Bancaires) when no asset exists,
|
|
55
|
+
// then to a generic placeholder. Shared by PrimerCardNumberInput trailing content
|
|
56
|
+
// and the multi-network selector.
|
|
57
|
+
export function CardNetworkBadge({ identifier, testID, marginLeft }: CardNetworkBadgeProps) {
|
|
58
|
+
const tokens = usePrimerTheme();
|
|
59
|
+
const uri = useNetworkIconUri(identifier);
|
|
60
|
+
const baseStyle = marginLeft != null ? { marginLeft } : null;
|
|
61
|
+
|
|
62
|
+
if (uri) {
|
|
63
|
+
return (
|
|
64
|
+
<Image
|
|
65
|
+
source={{ uri }}
|
|
66
|
+
style={[
|
|
67
|
+
styles.chipImage,
|
|
68
|
+
baseStyle,
|
|
69
|
+
{ backgroundColor: tokens.colors.surface, borderRadius: tokens.radii.xsmall },
|
|
70
|
+
]}
|
|
71
|
+
resizeMode="contain"
|
|
72
|
+
testID={testID}
|
|
73
|
+
/>
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
const abbreviation = getNetworkAbbreviation(identifier);
|
|
77
|
+
if (abbreviation) {
|
|
78
|
+
return (
|
|
79
|
+
<View
|
|
80
|
+
style={[
|
|
81
|
+
styles.chip,
|
|
82
|
+
baseStyle,
|
|
83
|
+
{
|
|
84
|
+
backgroundColor: tokens.colors.surface,
|
|
85
|
+
borderColor: tokens.colors.border,
|
|
86
|
+
borderRadius: tokens.radii.xsmall,
|
|
87
|
+
borderWidth: tokens.borders.input,
|
|
88
|
+
},
|
|
89
|
+
]}
|
|
90
|
+
testID={testID}
|
|
91
|
+
>
|
|
92
|
+
<Text
|
|
93
|
+
style={{
|
|
94
|
+
color: tokens.colors.textPrimary,
|
|
95
|
+
fontFamily: tokens.typography.fontFamily,
|
|
96
|
+
fontSize: tokens.typography.bodySmall.fontSize,
|
|
97
|
+
}}
|
|
98
|
+
>
|
|
99
|
+
{abbreviation}
|
|
100
|
+
</Text>
|
|
101
|
+
</View>
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
return (
|
|
105
|
+
<Image source={placeholderSource} style={[styles.placeholder, baseStyle]} resizeMode="contain" testID={testID} />
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const styles = StyleSheet.create({
|
|
110
|
+
chip: {
|
|
111
|
+
alignItems: 'center',
|
|
112
|
+
height: PLACEHOLDER_ICON_HEIGHT,
|
|
113
|
+
justifyContent: 'center',
|
|
114
|
+
width: PLACEHOLDER_ICON_WIDTH,
|
|
115
|
+
},
|
|
116
|
+
chipImage: {
|
|
117
|
+
height: PLACEHOLDER_ICON_HEIGHT,
|
|
118
|
+
width: PLACEHOLDER_ICON_WIDTH,
|
|
119
|
+
},
|
|
120
|
+
placeholder: {
|
|
121
|
+
height: PLACEHOLDER_ICON_HEIGHT,
|
|
122
|
+
width: PLACEHOLDER_ICON_WIDTH,
|
|
123
|
+
},
|
|
124
|
+
});
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Modal, Pressable, StyleSheet, useWindowDimensions, View } from 'react-native';
|
|
2
|
+
import { usePrimerTheme } from './theme';
|
|
3
|
+
|
|
4
|
+
export interface PopoverAnchor {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface PopoverProps {
|
|
12
|
+
visible: boolean;
|
|
13
|
+
onDismiss: () => void;
|
|
14
|
+
children: React.ReactNode;
|
|
15
|
+
anchor?: PopoverAnchor | null;
|
|
16
|
+
testID?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const POPOVER_WIDTH = 250;
|
|
20
|
+
const ANCHOR_GAP = 4;
|
|
21
|
+
const SCREEN_EDGE_PADDING = 16;
|
|
22
|
+
|
|
23
|
+
// Anchored popover: full-screen Modal with a transparent dismiss backdrop and
|
|
24
|
+
// a positioned card. When `anchor` is provided the card is placed immediately
|
|
25
|
+
// below the anchor and right-aligned with it; otherwise it falls back to a
|
|
26
|
+
// screen-centered card.
|
|
27
|
+
export function Popover({ visible, onDismiss, children, anchor, testID }: PopoverProps) {
|
|
28
|
+
const tokens = usePrimerTheme();
|
|
29
|
+
const screen = useWindowDimensions();
|
|
30
|
+
|
|
31
|
+
const positionStyle = anchor
|
|
32
|
+
? {
|
|
33
|
+
position: 'absolute' as const,
|
|
34
|
+
top: anchor.y + anchor.height + ANCHOR_GAP,
|
|
35
|
+
left: Math.max(
|
|
36
|
+
SCREEN_EDGE_PADDING,
|
|
37
|
+
Math.min(anchor.x + anchor.width - POPOVER_WIDTH, screen.width - POPOVER_WIDTH - SCREEN_EDGE_PADDING)
|
|
38
|
+
),
|
|
39
|
+
}
|
|
40
|
+
: null;
|
|
41
|
+
|
|
42
|
+
const wrapperStyle = [styles.shadowWrapper, { borderRadius: tokens.radii.medium }, positionStyle];
|
|
43
|
+
const cardStyle = [
|
|
44
|
+
styles.card,
|
|
45
|
+
{
|
|
46
|
+
backgroundColor: tokens.colors.background,
|
|
47
|
+
borderColor: tokens.colors.border,
|
|
48
|
+
borderRadius: tokens.radii.medium,
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<Modal
|
|
54
|
+
transparent
|
|
55
|
+
statusBarTranslucent
|
|
56
|
+
visible={visible}
|
|
57
|
+
onRequestClose={onDismiss}
|
|
58
|
+
animationType="fade"
|
|
59
|
+
testID={testID}
|
|
60
|
+
>
|
|
61
|
+
<View style={styles.root} pointerEvents="box-none">
|
|
62
|
+
<Pressable
|
|
63
|
+
style={StyleSheet.absoluteFill}
|
|
64
|
+
onPress={onDismiss}
|
|
65
|
+
testID={testID ? `${testID}-backdrop` : undefined}
|
|
66
|
+
/>
|
|
67
|
+
<View style={wrapperStyle}>
|
|
68
|
+
<Pressable onPress={() => undefined} style={cardStyle}>
|
|
69
|
+
<View>{children}</View>
|
|
70
|
+
</Pressable>
|
|
71
|
+
</View>
|
|
72
|
+
</View>
|
|
73
|
+
</Modal>
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const styles = StyleSheet.create({
|
|
78
|
+
card: {
|
|
79
|
+
borderWidth: StyleSheet.hairlineWidth,
|
|
80
|
+
overflow: 'hidden',
|
|
81
|
+
width: '100%',
|
|
82
|
+
},
|
|
83
|
+
root: {
|
|
84
|
+
flex: 1,
|
|
85
|
+
},
|
|
86
|
+
// eslint-disable-next-line react-native/no-color-literals
|
|
87
|
+
shadowWrapper: {
|
|
88
|
+
elevation: 8,
|
|
89
|
+
shadowColor: '#000',
|
|
90
|
+
shadowOffset: { width: 0, height: 8 },
|
|
91
|
+
shadowOpacity: 0.18,
|
|
92
|
+
shadowRadius: 24,
|
|
93
|
+
width: POPOVER_WIDTH,
|
|
94
|
+
},
|
|
95
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
|
|
3
|
+
/** The Apple Pay payment-method type. */
|
|
4
|
+
export const APPLE_PAY = 'APPLE_PAY';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Whether Apple Pay can be presented. The iOS SDK already filters APPLE_PAY out of the
|
|
8
|
+
* available-methods list when the device can't present it, so list membership on iOS is
|
|
9
|
+
* sufficient; gate on Platform.OS so merchants need no platform branch in their render path.
|
|
10
|
+
*/
|
|
11
|
+
export const isApplePaySupported = (methods: ReadonlyArray<{ paymentMethodType: string }>): boolean =>
|
|
12
|
+
Platform.OS === 'ios' && methods.some((m) => m.paymentMethodType === APPLE_PAY);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { PrimerClientSession } from '../../models/PrimerClientSession';
|
|
2
|
+
import type { BillingAddressField } from '../types/BillingAddressFormTypes';
|
|
3
|
+
|
|
4
|
+
const BILLING_ADDRESS_FIELDS: ReadonlyArray<BillingAddressField> = [
|
|
5
|
+
'firstName',
|
|
6
|
+
'lastName',
|
|
7
|
+
'addressLine1',
|
|
8
|
+
'addressLine2',
|
|
9
|
+
'city',
|
|
10
|
+
'state',
|
|
11
|
+
'postalCode',
|
|
12
|
+
'countryCode',
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
export type BillingAddressVisibility = Record<BillingAddressField, boolean>;
|
|
16
|
+
|
|
17
|
+
export interface BillingAddressVisibilityResult {
|
|
18
|
+
fields: BillingAddressVisibility;
|
|
19
|
+
sectionVisible: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const ALL_HIDDEN: BillingAddressVisibility = {
|
|
23
|
+
firstName: false,
|
|
24
|
+
lastName: false,
|
|
25
|
+
addressLine1: false,
|
|
26
|
+
addressLine2: false,
|
|
27
|
+
city: false,
|
|
28
|
+
state: false,
|
|
29
|
+
postalCode: false,
|
|
30
|
+
countryCode: false,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export function getBillingAddressVisibility(
|
|
34
|
+
session: PrimerClientSession | null | undefined
|
|
35
|
+
): BillingAddressVisibilityResult {
|
|
36
|
+
const module = session?.checkoutModules?.find((m) => m.type === 'BILLING_ADDRESS');
|
|
37
|
+
const options = module?.options ?? {};
|
|
38
|
+
const fields = BILLING_ADDRESS_FIELDS.reduce<BillingAddressVisibility>(
|
|
39
|
+
(acc, f) => {
|
|
40
|
+
acc[f] = options[f] === true;
|
|
41
|
+
return acc;
|
|
42
|
+
},
|
|
43
|
+
{ ...ALL_HIDDEN }
|
|
44
|
+
);
|
|
45
|
+
const sectionVisible = Object.values(fields).some(Boolean);
|
|
46
|
+
return { fields, sectionVisible };
|
|
47
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure formatting + length helpers for the card-number input. Reads the network
|
|
3
|
+
* descriptor (defined in `cardNetwork.ts`) and answers questions about display
|
|
4
|
+
* length and gap placement; no I/O, no React.
|
|
5
|
+
*/
|
|
6
|
+
import type { CardNetworkDescriptor } from './cardNetwork';
|
|
7
|
+
|
|
8
|
+
/** Max PAN digit count across all accepted lengths for the descriptor's network. */
|
|
9
|
+
export function maxPanDigits(descriptor: CardNetworkDescriptor): number {
|
|
10
|
+
// Guard against native ever handing back an empty array — `Math.max()` on `[]`
|
|
11
|
+
// is `-Infinity`, which silently breaks `maxLength` on the TextInput.
|
|
12
|
+
if (descriptor.panLengths.length === 0) return 19;
|
|
13
|
+
return Math.max(...descriptor.panLengths);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Max formatted length (digits + gaps that fall within that digit count). Used
|
|
18
|
+
* as the TextInput `maxLength` so the input won't accept more characters than
|
|
19
|
+
* the longest valid formatted PAN for this network.
|
|
20
|
+
*/
|
|
21
|
+
export function maxFormattedCardNumberLength(descriptor: CardNetworkDescriptor): number {
|
|
22
|
+
const digits = maxPanDigits(descriptor);
|
|
23
|
+
const gapsWithin = descriptor.gapPattern.filter((g) => g > 0 && g < digits).length;
|
|
24
|
+
return digits + gapsWithin;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Insert spaces into a raw digit string according to a gap pattern.
|
|
29
|
+
* Example: `formatDigitsWithGaps("4242424242424242", [4,8,12])` → `"4242 4242 4242 4242"`.
|
|
30
|
+
*/
|
|
31
|
+
export function formatDigitsWithGaps(digits: string, gapPattern: readonly number[]): string {
|
|
32
|
+
if (digits.length === 0) return '';
|
|
33
|
+
let out = '';
|
|
34
|
+
for (let i = 0; i < digits.length; i++) {
|
|
35
|
+
if (i > 0 && gapPattern.includes(i)) out += ' ';
|
|
36
|
+
out += digits[i];
|
|
37
|
+
}
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Card-network descriptor: PAN lengths, gap pattern, CVV length, CVV label.
|
|
3
|
+
*
|
|
4
|
+
* Traits are fetched asynchronously from the native SDK via `fetchCardNetworkDescriptor`
|
|
5
|
+
* and cached per network id for the session. `DEFAULT_DESCRIPTOR` is the safe fallback
|
|
6
|
+
* for unknown/loading networks and the networks native reports without validation data.
|
|
7
|
+
*
|
|
8
|
+
* Source of truth:
|
|
9
|
+
* - iOS: `PrimerHeadlessUniversalCheckout.AssetsManager.getCardNetworkTraits(cardNetworkString:)`
|
|
10
|
+
* - Android: `CardNetwork.lookupByCardNetwork(cardNetwork)` via the RN asset bridge
|
|
11
|
+
*/
|
|
12
|
+
import type { ImageSourcePropType } from 'react-native';
|
|
13
|
+
import PrimerHeadlessUniversalCheckoutAssetsManager from '../../HeadlessUniversalCheckout/Managers/AssetsManager';
|
|
14
|
+
|
|
15
|
+
/** Upper-cased network identifier; matches `binData.preferred.network` from native. */
|
|
16
|
+
export type CardNetworkId =
|
|
17
|
+
| 'VISA'
|
|
18
|
+
| 'MASTERCARD'
|
|
19
|
+
| 'AMEX'
|
|
20
|
+
| 'DINERS_CLUB'
|
|
21
|
+
| 'DISCOVER'
|
|
22
|
+
| 'JCB'
|
|
23
|
+
| 'UNIONPAY'
|
|
24
|
+
| 'MAESTRO'
|
|
25
|
+
| 'ELO'
|
|
26
|
+
| 'MIR'
|
|
27
|
+
| 'HIPER'
|
|
28
|
+
| 'HIPERCARD'
|
|
29
|
+
| 'DANKORT'
|
|
30
|
+
| 'BANCONTACT'
|
|
31
|
+
| 'CARTES_BANCAIRES'
|
|
32
|
+
| 'EFTPOS'
|
|
33
|
+
| 'OTHER';
|
|
34
|
+
|
|
35
|
+
/** CVV label variants emitted by native (iOS: per-network; Android: per-network after ACC-7168). */
|
|
36
|
+
export type CvvLabel = 'CVV' | 'CVC' | 'CID' | 'CVN' | 'CVE' | 'CVP2';
|
|
37
|
+
|
|
38
|
+
export interface CardNetworkDescriptor {
|
|
39
|
+
/** Upper-cased network identifier. */
|
|
40
|
+
id: CardNetworkId;
|
|
41
|
+
/** Human-readable name for UI (e.g. "American Express"). */
|
|
42
|
+
displayName: string;
|
|
43
|
+
/** Allowed PAN digit counts (unformatted, no spaces). */
|
|
44
|
+
panLengths: readonly number[];
|
|
45
|
+
/**
|
|
46
|
+
* Zero-indexed digit positions *before which* a space is inserted when formatting.
|
|
47
|
+
* Example: `[4, 8, 12]` → `4242 4242 4242 4242`; `[4, 10]` → `3782 822463 10005`.
|
|
48
|
+
*/
|
|
49
|
+
gapPattern: readonly number[];
|
|
50
|
+
/** CVV digit count. */
|
|
51
|
+
cvvLength: 3 | 4;
|
|
52
|
+
/** Label shown next to the CVV field (iOS-style: matches the physical card). */
|
|
53
|
+
cvvLabel: CvvLabel;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Used when the network is `null`, `OTHER`, or the native bridge hasn't resolved traits yet. */
|
|
57
|
+
export const DEFAULT_DESCRIPTOR: CardNetworkDescriptor = {
|
|
58
|
+
id: 'OTHER',
|
|
59
|
+
displayName: 'Card',
|
|
60
|
+
panLengths: [16, 17, 18, 19],
|
|
61
|
+
gapPattern: [4, 8, 12],
|
|
62
|
+
cvvLength: 3,
|
|
63
|
+
cvvLabel: 'CVV',
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const assetsManager = new PrimerHeadlessUniversalCheckoutAssetsManager();
|
|
67
|
+
|
|
68
|
+
// Promise cache keyed by upper-cased network id. Dedupes in-flight calls and persists
|
|
69
|
+
// resolved descriptors across hook instances so switching back to a previously seen
|
|
70
|
+
// network is instantaneous — mirrors the icon-cache pattern in usePrimerCardNetwork.
|
|
71
|
+
const descriptorCache = new Map<string, Promise<CardNetworkDescriptor>>();
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Fetch the descriptor for a network from the native SDK. Falls back to DEFAULT_DESCRIPTOR
|
|
75
|
+
* when native reports null (iOS: bancontact/cartesBancaires/eftpos/unknown) or OTHER
|
|
76
|
+
* (Android's fallback for unrecognised names). Bridge errors also resolve to defaults
|
|
77
|
+
* so the UI never gets stuck on a rejected promise.
|
|
78
|
+
*/
|
|
79
|
+
export function fetchCardNetworkDescriptor(network: string): Promise<CardNetworkDescriptor> {
|
|
80
|
+
const key = network.toUpperCase();
|
|
81
|
+
const existing = descriptorCache.get(key);
|
|
82
|
+
if (existing) return existing;
|
|
83
|
+
const promise = assetsManager
|
|
84
|
+
.getCardNetworkTraits(key)
|
|
85
|
+
.then((traits): CardNetworkDescriptor => {
|
|
86
|
+
if (!traits || traits.cardNetwork === 'OTHER') return DEFAULT_DESCRIPTOR;
|
|
87
|
+
return {
|
|
88
|
+
id: traits.cardNetwork as CardNetworkId,
|
|
89
|
+
displayName: traits.displayName,
|
|
90
|
+
panLengths: traits.panLengths,
|
|
91
|
+
gapPattern: traits.gapPattern,
|
|
92
|
+
cvvLength: traits.cvvLength as 3 | 4,
|
|
93
|
+
cvvLabel: traits.cvvLabel as CvvLabel,
|
|
94
|
+
};
|
|
95
|
+
})
|
|
96
|
+
.catch((err) => {
|
|
97
|
+
descriptorCache.delete(key);
|
|
98
|
+
console.warn(`[cardNetwork] fetchCardNetworkDescriptor failed for ${key}: ${String(err)}`);
|
|
99
|
+
return DEFAULT_DESCRIPTOR;
|
|
100
|
+
});
|
|
101
|
+
descriptorCache.set(key, promise);
|
|
102
|
+
return promise;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** Narrow `ImageSourcePropType | null` when a hook consumer wants to render the network icon. */
|
|
106
|
+
export type CardNetworkIconSource = ImageSourcePropType | null;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Two-letter abbreviation for the bordered fallback chip when a network has no icon
|
|
110
|
+
* asset (Bancontact, Cartes Bancaires, EFTPOS) or the asset fetch failed.
|
|
111
|
+
*
|
|
112
|
+
* Accepts the raw network string from native (`usePrimerCardNetwork().network`) since natives
|
|
113
|
+
* can report ids outside the known union. Underscored ids → first letter of each word;
|
|
114
|
+
* single-word ids → first two letters. `OTHER` and empty input return empty string —
|
|
115
|
+
* callers should render nothing in that case.
|
|
116
|
+
*/
|
|
117
|
+
export function getNetworkAbbreviation(network: string): string {
|
|
118
|
+
const id = network.toUpperCase();
|
|
119
|
+
if (!id || id === 'OTHER') return '';
|
|
120
|
+
if (id.includes('_')) {
|
|
121
|
+
return id
|
|
122
|
+
.split('_')
|
|
123
|
+
.map((word) => word.charAt(0))
|
|
124
|
+
.join('')
|
|
125
|
+
.slice(0, 2);
|
|
126
|
+
}
|
|
127
|
+
return id.slice(0, 2);
|
|
128
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { NativeModules } from 'react-native';
|
|
2
|
+
|
|
3
|
+
const { RNTPrimerHeadlessUniversalCheckoutAssetsManager } = NativeModules;
|
|
4
|
+
|
|
5
|
+
const iconUrlCache = new Map<string, Promise<string>>();
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Module-level promise cache for card-network icon URIs.
|
|
9
|
+
*
|
|
10
|
+
* Calls the native module directly rather than `AssetsManager.getCardNetworkImageURL`,
|
|
11
|
+
* which logs every rejection via `console.error` (LogBox red box in dev). Unknown
|
|
12
|
+
* networks legitimately have no asset — the chip row falls back to the abbreviation —
|
|
13
|
+
* so the rejection is expected, not an error worth surfacing.
|
|
14
|
+
*/
|
|
15
|
+
export function getCardNetworkIconURL(network: string): Promise<string> {
|
|
16
|
+
const key = network.toUpperCase();
|
|
17
|
+
const existing = iconUrlCache.get(key);
|
|
18
|
+
if (existing) return existing;
|
|
19
|
+
const promise = RNTPrimerHeadlessUniversalCheckoutAssetsManager.getCardNetworkImage(key)
|
|
20
|
+
.then((data: { cardNetworkImageURL: string }) => data.cardNetworkImageURL)
|
|
21
|
+
.catch((err: Error) => {
|
|
22
|
+
iconUrlCache.delete(key);
|
|
23
|
+
throw err;
|
|
24
|
+
});
|
|
25
|
+
iconUrlCache.set(key, promise);
|
|
26
|
+
return promise;
|
|
27
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import React, { useContext, useEffect, useMemo, useRef } from 'react';
|
|
2
|
+
import { NavigationProvider } from '../navigation/NavigationProvider';
|
|
3
|
+
import { NavigationContainer } from '../navigation/NavigationContainer';
|
|
4
|
+
import { useNavigation } from '../navigation/useNavigation';
|
|
5
|
+
import { CheckoutRoute } from '../navigation/types';
|
|
6
|
+
import type { CheckoutRoute as CheckoutRouteType } from '../navigation/types';
|
|
7
|
+
import { usePrimerCheckout } from '../../hooks/usePrimerCheckout';
|
|
8
|
+
import { LoadingScreen } from '../screens/LoadingScreen';
|
|
9
|
+
import { MethodSelectionScreen } from '../screens/MethodSelectionScreen';
|
|
10
|
+
import { CardFormScreen } from '../screens/CardFormScreen';
|
|
11
|
+
import { CountrySelectorScreen } from '../screens/CountrySelectorScreen';
|
|
12
|
+
import { ErrorScreen } from '../screens/ErrorScreen';
|
|
13
|
+
import { SuccessScreen } from '../screens/SuccessScreen';
|
|
14
|
+
import { VaultedMethodsScreen } from '../screens/VaultedMethodsScreen';
|
|
15
|
+
import { PrimerCardFormProvider, BillingAddressFormStateProvider } from '../form-state';
|
|
16
|
+
import { CheckoutFlowContext } from './CheckoutFlowContext';
|
|
17
|
+
|
|
18
|
+
const SUCCESS_AUTO_DISMISS_MS = 3000;
|
|
19
|
+
|
|
20
|
+
function CheckoutSuccessScreen() {
|
|
21
|
+
const flow = useContext(CheckoutFlowContext);
|
|
22
|
+
const { clearPaymentOutcome } = usePrimerCheckout();
|
|
23
|
+
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
const t = setTimeout(() => {
|
|
26
|
+
clearPaymentOutcome();
|
|
27
|
+
flow?.onCancel();
|
|
28
|
+
}, SUCCESS_AUTO_DISMISS_MS);
|
|
29
|
+
return () => clearTimeout(t);
|
|
30
|
+
}, [flow, clearPaymentOutcome]);
|
|
31
|
+
|
|
32
|
+
return <SuccessScreen />;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const screenMap: Partial<Record<CheckoutRouteType, React.ComponentType>> = {
|
|
36
|
+
[CheckoutRoute.splash]: LoadingScreen,
|
|
37
|
+
[CheckoutRoute.methodSelection]: MethodSelectionScreen,
|
|
38
|
+
[CheckoutRoute.cardForm]: CardFormScreen,
|
|
39
|
+
[CheckoutRoute.countrySelector]: CountrySelectorScreen,
|
|
40
|
+
[CheckoutRoute.processing]: LoadingScreen,
|
|
41
|
+
[CheckoutRoute.success]: CheckoutSuccessScreen,
|
|
42
|
+
[CheckoutRoute.error]: ErrorScreen,
|
|
43
|
+
[CheckoutRoute.vaultedMethods]: VaultedMethodsScreen,
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
function ReadinessTransitioner() {
|
|
47
|
+
const { isReady, isLoadingResources, error } = usePrimerCheckout();
|
|
48
|
+
const { replace } = useNavigation();
|
|
49
|
+
const hasTransitioned = useRef(false);
|
|
50
|
+
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (hasTransitioned.current) return;
|
|
53
|
+
|
|
54
|
+
if (error) {
|
|
55
|
+
hasTransitioned.current = true;
|
|
56
|
+
replace(CheckoutRoute.error, { error });
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (isReady && !isLoadingResources) {
|
|
61
|
+
hasTransitioned.current = true;
|
|
62
|
+
replace(CheckoutRoute.methodSelection);
|
|
63
|
+
}
|
|
64
|
+
}, [isReady, isLoadingResources, error, replace]);
|
|
65
|
+
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function PaymentOutcomeTransitioner() {
|
|
70
|
+
const { paymentOutcome, settings, clearPaymentOutcome } = usePrimerCheckout();
|
|
71
|
+
const { replace } = useNavigation();
|
|
72
|
+
const flow = useContext(CheckoutFlowContext);
|
|
73
|
+
const lastOutcomeRef = useRef<typeof paymentOutcome>(null);
|
|
74
|
+
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
// Guard against re-fires when unrelated context fields change.
|
|
77
|
+
if (paymentOutcome === lastOutcomeRef.current) return;
|
|
78
|
+
lastOutcomeRef.current = paymentOutcome;
|
|
79
|
+
|
|
80
|
+
if (!paymentOutcome) return;
|
|
81
|
+
|
|
82
|
+
const uiOptions = settings?.uiOptions;
|
|
83
|
+
|
|
84
|
+
if (paymentOutcome.status === 'success') {
|
|
85
|
+
if (uiOptions?.isSuccessScreenEnabled === false) {
|
|
86
|
+
clearPaymentOutcome();
|
|
87
|
+
flow?.onCancel();
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
replace(CheckoutRoute.success, { checkoutData: paymentOutcome.data });
|
|
91
|
+
} else {
|
|
92
|
+
if (uiOptions?.isErrorScreenEnabled === false) {
|
|
93
|
+
clearPaymentOutcome();
|
|
94
|
+
flow?.onCancel();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
replace(CheckoutRoute.error, { error: paymentOutcome.error });
|
|
98
|
+
}
|
|
99
|
+
}, [paymentOutcome, settings, replace, clearPaymentOutcome, flow]);
|
|
100
|
+
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface CheckoutFlowProps {
|
|
105
|
+
onCancel?: () => void;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function CheckoutFlow({ onCancel }: CheckoutFlowProps = {}) {
|
|
109
|
+
const contextValue = useMemo(() => ({ onCancel: onCancel ?? (() => {}) }), [onCancel]);
|
|
110
|
+
|
|
111
|
+
return (
|
|
112
|
+
<CheckoutFlowContext.Provider value={contextValue}>
|
|
113
|
+
<NavigationProvider initialRoute={CheckoutRoute.splash}>
|
|
114
|
+
<ReadinessTransitioner />
|
|
115
|
+
<PaymentOutcomeTransitioner />
|
|
116
|
+
<PrimerCardFormProvider>
|
|
117
|
+
<BillingAddressFormStateProvider>
|
|
118
|
+
<NavigationContainer screenMap={screenMap} />
|
|
119
|
+
</BillingAddressFormStateProvider>
|
|
120
|
+
</PrimerCardFormProvider>
|
|
121
|
+
</NavigationProvider>
|
|
122
|
+
</CheckoutFlowContext.Provider>
|
|
123
|
+
);
|
|
124
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface CheckoutFlowContextValue {
|
|
4
|
+
/** Called when the user requests to cancel/close the checkout flow */
|
|
5
|
+
onCancel: () => void;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const CheckoutFlowContext = createContext<CheckoutFlowContextValue | null>(null);
|
|
9
|
+
|
|
10
|
+
export function useCheckoutFlow(): CheckoutFlowContextValue {
|
|
11
|
+
const context = useContext(CheckoutFlowContext);
|
|
12
|
+
if (!context) {
|
|
13
|
+
throw new Error('useCheckoutFlow must be used within a CheckoutFlow');
|
|
14
|
+
}
|
|
15
|
+
return context;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { CheckoutFlow } from './CheckoutFlow';
|