@whop/elements-react-native 0.1.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/README.md +179 -0
- package/android/build.gradle +64 -0
- package/android/consumer-rules.pro +3 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/java/com/whop/elements/WhopAddressSuggestionsModule.kt +102 -0
- package/android/src/main/java/com/whop/elements/WhopAuthSessionModule.kt +126 -0
- package/android/src/main/java/com/whop/elements/WhopElementsPackage.kt +39 -0
- package/android/src/main/java/com/whop/elements/WhopPayButtonManager.kt +74 -0
- package/android/src/main/java/com/whop/elements/WhopPayButtonPressEvent.kt +17 -0
- package/android/src/main/java/com/whop/elements/WhopPayButtonView.kt +178 -0
- package/android/src/main/java/com/whop/elements/WhopPlatformPayModule.kt +212 -0
- package/assets/whop-wordmark-dark.png +0 -0
- package/assets/whop-wordmark-dark@2x.png +0 -0
- package/assets/whop-wordmark-dark@3x.png +0 -0
- package/assets/whop-wordmark-light.png +0 -0
- package/assets/whop-wordmark-light@2x.png +0 -0
- package/assets/whop-wordmark-light@3x.png +0 -0
- package/ios/Package.swift +59 -0
- package/ios/Sources/ElementsReactNative/WhopAddressSuggestionsImpl.swift +189 -0
- package/ios/Sources/ElementsReactNative/WhopAuthSessionImpl.swift +106 -0
- package/ios/Sources/ElementsReactNative/WhopPayButtonImpl.swift +89 -0
- package/ios/Sources/ElementsReactNative/WhopPlatformPayImpl.swift +181 -0
- package/ios/generated/WhopAddressSuggestionsModule.h +11 -0
- package/ios/generated/WhopAddressSuggestionsModule.mm +46 -0
- package/ios/generated/WhopAuthSessionModule.h +11 -0
- package/ios/generated/WhopAuthSessionModule.mm +45 -0
- package/ios/generated/WhopElementsShims.h +35 -0
- package/ios/generated/WhopPayButtonComponentView.h +12 -0
- package/ios/generated/WhopPayButtonComponentView.mm +82 -0
- package/ios/generated/WhopPlatformPayModule.h +11 -0
- package/ios/generated/WhopPlatformPayModule.mm +51 -0
- package/lib/module/api/client.js +139 -0
- package/lib/module/api/client.js.map +1 -0
- package/lib/module/api/client.test.js +137 -0
- package/lib/module/api/client.test.js.map +1 -0
- package/lib/module/api/types.js +2 -0
- package/lib/module/api/types.js.map +1 -0
- package/lib/module/controller/actions.js +148 -0
- package/lib/module/controller/actions.js.map +1 -0
- package/lib/module/controller/actions.test.js +102 -0
- package/lib/module/controller/actions.test.js.map +1 -0
- package/lib/module/controller/store.js +158 -0
- package/lib/module/controller/store.js.map +1 -0
- package/lib/module/core/address/country-data.js +1370 -0
- package/lib/module/core/address/country-data.js.map +1 -0
- package/lib/module/core/address/country-name.js +38 -0
- package/lib/module/core/address/country-name.js.map +1 -0
- package/lib/module/core/address/country-names.generated.js +249 -0
- package/lib/module/core/address/country-names.generated.js.map +1 -0
- package/lib/module/core/address/engine.js +245 -0
- package/lib/module/core/address/engine.js.map +1 -0
- package/lib/module/core/address/engine.test.js +216 -0
- package/lib/module/core/address/engine.test.js.map +1 -0
- package/lib/module/core/address/form-state.js +409 -0
- package/lib/module/core/address/form-state.js.map +1 -0
- package/lib/module/core/address/form-state.test.js +516 -0
- package/lib/module/core/address/form-state.test.js.map +1 -0
- package/lib/module/core/address/places.js +36 -0
- package/lib/module/core/address/places.js.map +1 -0
- package/lib/module/core/address/required-coverage.test.js +57 -0
- package/lib/module/core/address/required-coverage.test.js.map +1 -0
- package/lib/module/core/address/suggest.js +102 -0
- package/lib/module/core/address/suggest.js.map +1 -0
- package/lib/module/core/address/suggest.test.js +156 -0
- package/lib/module/core/address/suggest.test.js.map +1 -0
- package/lib/module/core/address/use-suggestions.js +33 -0
- package/lib/module/core/address/use-suggestions.js.map +1 -0
- package/lib/module/core/payments/address-change.js +91 -0
- package/lib/module/core/payments/address-change.js.map +1 -0
- package/lib/module/core/payments/billing-merge.js +62 -0
- package/lib/module/core/payments/billing-merge.js.map +1 -0
- package/lib/module/core/payments/browser-info.js +42 -0
- package/lib/module/core/payments/browser-info.js.map +1 -0
- package/lib/module/core/payments/bt.js +151 -0
- package/lib/module/core/payments/bt.js.map +1 -0
- package/lib/module/core/payments/bt.test.js +23 -0
- package/lib/module/core/payments/bt.test.js.map +1 -0
- package/lib/module/core/payments/currency.js +37 -0
- package/lib/module/core/payments/currency.js.map +1 -0
- package/lib/module/core/payments/detail.js +159 -0
- package/lib/module/core/payments/detail.js.map +1 -0
- package/lib/module/core/payments/detail.test.js +225 -0
- package/lib/module/core/payments/detail.test.js.map +1 -0
- package/lib/module/core/payments/errors.js +115 -0
- package/lib/module/core/payments/errors.js.map +1 -0
- package/lib/module/core/payments/mint.js +89 -0
- package/lib/module/core/payments/mint.js.map +1 -0
- package/lib/module/core/payments/plan.js +131 -0
- package/lib/module/core/payments/plan.js.map +1 -0
- package/lib/module/core/payments/refusals.js +17 -0
- package/lib/module/core/payments/refusals.js.map +1 -0
- package/lib/module/core/payments/secure-fields.js +87 -0
- package/lib/module/core/payments/secure-fields.js.map +1 -0
- package/lib/module/core/payments/tax-id-catalog.js +616 -0
- package/lib/module/core/payments/tax-id-catalog.js.map +1 -0
- package/lib/module/core/payments/wallet-contact.js +42 -0
- package/lib/module/core/payments/wallet-contact.js.map +1 -0
- package/lib/module/core/payments/wallet-contact.test.js +77 -0
- package/lib/module/core/payments/wallet-contact.test.js.map +1 -0
- package/lib/module/elements/address.js +467 -0
- package/lib/module/elements/address.js.map +1 -0
- package/lib/module/elements/branding.js +114 -0
- package/lib/module/elements/branding.js.map +1 -0
- package/lib/module/elements/card-fields/context.js +254 -0
- package/lib/module/elements/card-fields/context.js.map +1 -0
- package/lib/module/elements/card-fields/fields.js +309 -0
- package/lib/module/elements/card-fields/fields.js.map +1 -0
- package/lib/module/elements/card-fields/index.js +30 -0
- package/lib/module/elements/card-fields/index.js.map +1 -0
- package/lib/module/elements/card.js +107 -0
- package/lib/module/elements/card.js.map +1 -0
- package/lib/module/elements/email.js +84 -0
- package/lib/module/elements/email.js.map +1 -0
- package/lib/module/elements/payment/declared-fields.js +186 -0
- package/lib/module/elements/payment/declared-fields.js.map +1 -0
- package/lib/module/elements/payment/index.js +448 -0
- package/lib/module/elements/payment/index.js.map +1 -0
- package/lib/module/elements/payment/wallet.js +132 -0
- package/lib/module/elements/payment/wallet.js.map +1 -0
- package/lib/module/elements/tax-id.js +100 -0
- package/lib/module/elements/tax-id.js.map +1 -0
- package/lib/module/i18n/catalogs.js +103 -0
- package/lib/module/i18n/catalogs.js.map +1 -0
- package/lib/module/i18n/index.js +45 -0
- package/lib/module/i18n/index.js.map +1 -0
- package/lib/module/index.js +27 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/namespace.js +174 -0
- package/lib/module/namespace.js.map +1 -0
- package/lib/module/native/index.js +128 -0
- package/lib/module/native/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/provider.js +56 -0
- package/lib/module/provider.js.map +1 -0
- package/lib/module/specs/NativeWhopAddressSuggestions.js +6 -0
- package/lib/module/specs/NativeWhopAddressSuggestions.js.map +1 -0
- package/lib/module/specs/NativeWhopAuthSession.js +10 -0
- package/lib/module/specs/NativeWhopAuthSession.js.map +1 -0
- package/lib/module/specs/NativeWhopPlatformPay.js +10 -0
- package/lib/module/specs/NativeWhopPlatformPay.js.map +1 -0
- package/lib/module/specs/WhopPayButtonNativeComponent.ts +22 -0
- package/lib/module/theme/appearance.js +85 -0
- package/lib/module/theme/appearance.js.map +1 -0
- package/lib/module/theme/appearance.test.js +124 -0
- package/lib/module/theme/appearance.test.js.map +1 -0
- package/lib/module/theme/provider.js +25 -0
- package/lib/module/theme/provider.js.map +1 -0
- package/lib/module/theme/resolve.js +69 -0
- package/lib/module/theme/resolve.js.map +1 -0
- package/lib/module/theme/scales.generated.js +419 -0
- package/lib/module/theme/scales.generated.js.map +1 -0
- package/lib/module/ui/element-frame.js +83 -0
- package/lib/module/ui/element-frame.js.map +1 -0
- package/lib/module/ui/payment-method-icon.js +69 -0
- package/lib/module/ui/payment-method-icon.js.map +1 -0
- package/lib/module/ui/primitives.js +266 -0
- package/lib/module/ui/primitives.js.map +1 -0
- package/lib/module/ui/select.js +281 -0
- package/lib/module/ui/select.js.map +1 -0
- package/lib/module/ui/suggestions.js +71 -0
- package/lib/module/ui/suggestions.js.map +1 -0
- package/lib/module/ui/whop-logo.js +42 -0
- package/lib/module/ui/whop-logo.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/api/client.d.ts +87 -0
- package/lib/typescript/src/api/client.d.ts.map +1 -0
- package/lib/typescript/src/api/types.d.ts +175 -0
- package/lib/typescript/src/api/types.d.ts.map +1 -0
- package/lib/typescript/src/controller/actions.d.ts +42 -0
- package/lib/typescript/src/controller/actions.d.ts.map +1 -0
- package/lib/typescript/src/controller/store.d.ts +90 -0
- package/lib/typescript/src/controller/store.d.ts.map +1 -0
- package/lib/typescript/src/core/address/country-data.d.ts +4 -0
- package/lib/typescript/src/core/address/country-data.d.ts.map +1 -0
- package/lib/typescript/src/core/address/country-name.d.ts +2 -0
- package/lib/typescript/src/core/address/country-name.d.ts.map +1 -0
- package/lib/typescript/src/core/address/country-names.generated.d.ts +2 -0
- package/lib/typescript/src/core/address/country-names.generated.d.ts.map +1 -0
- package/lib/typescript/src/core/address/engine.d.ts +97 -0
- package/lib/typescript/src/core/address/engine.d.ts.map +1 -0
- package/lib/typescript/src/core/address/form-state.d.ts +144 -0
- package/lib/typescript/src/core/address/form-state.d.ts.map +1 -0
- package/lib/typescript/src/core/address/places.d.ts +23 -0
- package/lib/typescript/src/core/address/places.d.ts.map +1 -0
- package/lib/typescript/src/core/address/suggest.d.ts +47 -0
- package/lib/typescript/src/core/address/suggest.d.ts.map +1 -0
- package/lib/typescript/src/core/address/use-suggestions.d.ts +3 -0
- package/lib/typescript/src/core/address/use-suggestions.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/address-change.d.ts +52 -0
- package/lib/typescript/src/core/payments/address-change.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/billing-merge.d.ts +39 -0
- package/lib/typescript/src/core/payments/billing-merge.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/browser-info.d.ts +12 -0
- package/lib/typescript/src/core/payments/browser-info.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/bt.d.ts +55 -0
- package/lib/typescript/src/core/payments/bt.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/currency.d.ts +7 -0
- package/lib/typescript/src/core/payments/currency.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/detail.d.ts +53 -0
- package/lib/typescript/src/core/payments/detail.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/errors.d.ts +62 -0
- package/lib/typescript/src/core/payments/errors.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/mint.d.ts +74 -0
- package/lib/typescript/src/core/payments/mint.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/plan.d.ts +69 -0
- package/lib/typescript/src/core/payments/plan.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/refusals.d.ts +12 -0
- package/lib/typescript/src/core/payments/refusals.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/secure-fields.d.ts +33 -0
- package/lib/typescript/src/core/payments/secure-fields.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/tax-id-catalog.d.ts +481 -0
- package/lib/typescript/src/core/payments/tax-id-catalog.d.ts.map +1 -0
- package/lib/typescript/src/core/payments/wallet-contact.d.ts +40 -0
- package/lib/typescript/src/core/payments/wallet-contact.d.ts.map +1 -0
- package/lib/typescript/src/elements/address.d.ts +55 -0
- package/lib/typescript/src/elements/address.d.ts.map +1 -0
- package/lib/typescript/src/elements/branding.d.ts +18 -0
- package/lib/typescript/src/elements/branding.d.ts.map +1 -0
- package/lib/typescript/src/elements/card-fields/context.d.ts +67 -0
- package/lib/typescript/src/elements/card-fields/context.d.ts.map +1 -0
- package/lib/typescript/src/elements/card-fields/fields.d.ts +15 -0
- package/lib/typescript/src/elements/card-fields/fields.d.ts.map +1 -0
- package/lib/typescript/src/elements/card-fields/index.d.ts +21 -0
- package/lib/typescript/src/elements/card-fields/index.d.ts.map +1 -0
- package/lib/typescript/src/elements/card.d.ts +21 -0
- package/lib/typescript/src/elements/card.d.ts.map +1 -0
- package/lib/typescript/src/elements/email.d.ts +31 -0
- package/lib/typescript/src/elements/email.d.ts.map +1 -0
- package/lib/typescript/src/elements/payment/declared-fields.d.ts +43 -0
- package/lib/typescript/src/elements/payment/declared-fields.d.ts.map +1 -0
- package/lib/typescript/src/elements/payment/index.d.ts +37 -0
- package/lib/typescript/src/elements/payment/index.d.ts.map +1 -0
- package/lib/typescript/src/elements/payment/wallet.d.ts +39 -0
- package/lib/typescript/src/elements/payment/wallet.d.ts.map +1 -0
- package/lib/typescript/src/elements/tax-id.d.ts +41 -0
- package/lib/typescript/src/elements/tax-id.d.ts.map +1 -0
- package/lib/typescript/src/i18n/catalogs.d.ts +7 -0
- package/lib/typescript/src/i18n/catalogs.d.ts.map +1 -0
- package/lib/typescript/src/i18n/index.d.ts +17 -0
- package/lib/typescript/src/i18n/index.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +42 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/namespace.d.ts +36 -0
- package/lib/typescript/src/namespace.d.ts.map +1 -0
- package/lib/typescript/src/native/index.d.ts +62 -0
- package/lib/typescript/src/native/index.d.ts.map +1 -0
- package/lib/typescript/src/provider.d.ts +37 -0
- package/lib/typescript/src/provider.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeWhopAddressSuggestions.d.ts +13 -0
- package/lib/typescript/src/specs/NativeWhopAddressSuggestions.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeWhopAuthSession.d.ts +20 -0
- package/lib/typescript/src/specs/NativeWhopAuthSession.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeWhopPlatformPay.d.ts +24 -0
- package/lib/typescript/src/specs/NativeWhopPlatformPay.d.ts.map +1 -0
- package/lib/typescript/src/specs/WhopPayButtonNativeComponent.d.ts +21 -0
- package/lib/typescript/src/specs/WhopPayButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/theme/appearance.d.ts +71 -0
- package/lib/typescript/src/theme/appearance.d.ts.map +1 -0
- package/lib/typescript/src/theme/provider.d.ts +11 -0
- package/lib/typescript/src/theme/provider.d.ts.map +1 -0
- package/lib/typescript/src/theme/resolve.d.ts +19 -0
- package/lib/typescript/src/theme/resolve.d.ts.map +1 -0
- package/lib/typescript/src/theme/scales.generated.d.ts +18 -0
- package/lib/typescript/src/theme/scales.generated.d.ts.map +1 -0
- package/lib/typescript/src/ui/element-frame.d.ts +32 -0
- package/lib/typescript/src/ui/element-frame.d.ts.map +1 -0
- package/lib/typescript/src/ui/payment-method-icon.d.ts +21 -0
- package/lib/typescript/src/ui/payment-method-icon.d.ts.map +1 -0
- package/lib/typescript/src/ui/primitives.d.ts +94 -0
- package/lib/typescript/src/ui/primitives.d.ts.map +1 -0
- package/lib/typescript/src/ui/select.d.ts +25 -0
- package/lib/typescript/src/ui/select.d.ts.map +1 -0
- package/lib/typescript/src/ui/suggestions.d.ts +15 -0
- package/lib/typescript/src/ui/suggestions.d.ts.map +1 -0
- package/lib/typescript/src/ui/whop-logo.d.ts +4 -0
- package/lib/typescript/src/ui/whop-logo.d.ts.map +1 -0
- package/package.json +121 -0
- package/scripts/check-swift.sh +27 -0
- package/scripts/codegen-shims.mjs +409 -0
- package/scripts/gen-country-names.mjs +58 -0
- package/scripts/gen-theme.mjs +124 -0
- package/scripts/gen-wordmark.mjs +68 -0
- package/scripts/mirror.mjs +112 -0
- package/src/api/client.ts +202 -0
- package/src/api/types.ts +166 -0
- package/src/controller/actions.ts +197 -0
- package/src/controller/store.ts +201 -0
- package/src/core/address/country-data.ts +927 -0
- package/src/core/address/country-name.ts +36 -0
- package/src/core/address/country-names.generated.ts +246 -0
- package/src/core/address/engine.ts +349 -0
- package/src/core/address/form-state.ts +479 -0
- package/src/core/address/places.ts +39 -0
- package/src/core/address/suggest.ts +153 -0
- package/src/core/address/use-suggestions.ts +37 -0
- package/src/core/payments/address-change.ts +121 -0
- package/src/core/payments/billing-merge.ts +91 -0
- package/src/core/payments/browser-info.ts +43 -0
- package/src/core/payments/bt.ts +176 -0
- package/src/core/payments/currency.ts +54 -0
- package/src/core/payments/detail.ts +204 -0
- package/src/core/payments/errors.ts +171 -0
- package/src/core/payments/mint.ts +130 -0
- package/src/core/payments/plan.ts +198 -0
- package/src/core/payments/refusals.ts +24 -0
- package/src/core/payments/secure-fields.ts +85 -0
- package/src/core/payments/tax-id-catalog.ts +320 -0
- package/src/core/payments/wallet-contact.ts +56 -0
- package/src/elements/address.tsx +570 -0
- package/src/elements/branding.tsx +87 -0
- package/src/elements/card-fields/context.tsx +310 -0
- package/src/elements/card-fields/fields.tsx +281 -0
- package/src/elements/card-fields/index.tsx +37 -0
- package/src/elements/card.tsx +101 -0
- package/src/elements/email.tsx +100 -0
- package/src/elements/payment/declared-fields.tsx +238 -0
- package/src/elements/payment/index.tsx +497 -0
- package/src/elements/payment/wallet.tsx +155 -0
- package/src/elements/tax-id.tsx +143 -0
- package/src/i18n/catalogs.ts +100 -0
- package/src/i18n/index.tsx +46 -0
- package/src/index.ts +68 -0
- package/src/namespace.tsx +231 -0
- package/src/native/index.ts +173 -0
- package/src/provider.tsx +76 -0
- package/src/specs/NativeWhopAddressSuggestions.ts +14 -0
- package/src/specs/NativeWhopAuthSession.ts +21 -0
- package/src/specs/NativeWhopPlatformPay.ts +25 -0
- package/src/specs/WhopPayButtonNativeComponent.ts +22 -0
- package/src/theme/appearance.ts +150 -0
- package/src/theme/provider.tsx +28 -0
- package/src/theme/resolve.ts +68 -0
- package/src/theme/scales.generated.ts +427 -0
- package/src/ui/element-frame.tsx +94 -0
- package/src/ui/payment-method-icon.tsx +55 -0
- package/src/ui/primitives.tsx +269 -0
- package/src/ui/select.tsx +255 -0
- package/src/ui/suggestions.tsx +69 -0
- package/src/ui/whop-logo.tsx +37 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
import { mergeWalletContact, readSheetResult } from "./wallet-contact.js";
|
|
5
|
+
describe('readSheetResult', () => {
|
|
6
|
+
it('reads the envelope both native modules now send', () => {
|
|
7
|
+
const parsed = readSheetResult(JSON.stringify({
|
|
8
|
+
paymentData: '{"signature":"x"}',
|
|
9
|
+
email: 'buyer@example.com',
|
|
10
|
+
name: 'Ada Lovelace',
|
|
11
|
+
address: {
|
|
12
|
+
line1: '1 Main St',
|
|
13
|
+
city: 'Austin',
|
|
14
|
+
state: 'TX',
|
|
15
|
+
postal_code: '78701',
|
|
16
|
+
country: 'US'
|
|
17
|
+
}
|
|
18
|
+
}));
|
|
19
|
+
expect(parsed.paymentData).toBe('{"signature":"x"}');
|
|
20
|
+
expect(parsed.email).toBe('buyer@example.com');
|
|
21
|
+
expect(parsed.address?.postal_code).toBe('78701');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// An app that has not rebuilt its native side still returns a bare token. It must keep
|
|
25
|
+
// tokenizing — losing contacts is the old behaviour; failing to pay is not.
|
|
26
|
+
it('treats a bare Google Pay token as the payload', () => {
|
|
27
|
+
expect(readSheetResult('opaque-gateway-token')).toEqual({
|
|
28
|
+
paymentData: 'opaque-gateway-token'
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
it('treats JSON that is not an envelope as the payload', () => {
|
|
32
|
+
const raw = '{"signature":"x","version":"EC_v1"}';
|
|
33
|
+
expect(readSheetResult(raw)).toEqual({
|
|
34
|
+
paymentData: raw
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe('mergeWalletContact', () => {
|
|
39
|
+
const sheet = {
|
|
40
|
+
email: 'sheet@example.com',
|
|
41
|
+
name: 'Sheet Name',
|
|
42
|
+
address: {
|
|
43
|
+
line1: '1 Sheet St',
|
|
44
|
+
country: 'US'
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// The regression: with no EmailElement mounted the sheet collects the email, and validating
|
|
49
|
+
// before folding it in threw "billingDetails.email is required" on a buyer who had just typed it.
|
|
50
|
+
it('supplies the email when nothing else did', () => {
|
|
51
|
+
expect(mergeWalletContact(undefined, sheet).email).toBe('sheet@example.com');
|
|
52
|
+
});
|
|
53
|
+
it('never overrides what the caller or a mounted element supplied', () => {
|
|
54
|
+
const merged = mergeWalletContact({
|
|
55
|
+
email: 'explicit@example.com',
|
|
56
|
+
name: 'Explicit'
|
|
57
|
+
}, sheet);
|
|
58
|
+
expect(merged.email).toBe('explicit@example.com');
|
|
59
|
+
expect(merged.name).toBe('Explicit');
|
|
60
|
+
});
|
|
61
|
+
it('carries the address the sheet collected', () => {
|
|
62
|
+
expect(mergeWalletContact({
|
|
63
|
+
email: 'a@b.co'
|
|
64
|
+
}, sheet).address).toEqual({
|
|
65
|
+
line1: '1 Sheet St',
|
|
66
|
+
country: 'US'
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
it('adds nothing when the sheet collected nothing', () => {
|
|
70
|
+
expect(mergeWalletContact({
|
|
71
|
+
email: 'a@b.co'
|
|
72
|
+
}, {})).toEqual({
|
|
73
|
+
email: 'a@b.co'
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=wallet-contact.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","it","mergeWalletContact","readSheetResult","parsed","JSON","stringify","paymentData","email","name","address","line1","city","state","postal_code","country","toBe","toEqual","raw","sheet","undefined","merged"],"sourceRoot":"../../../../src","sources":["core/payments/wallet-contact.test.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react';
|
|
4
|
+
import { View } from 'react-native';
|
|
5
|
+
import { loadCountryCatalog, normalizeCountry, parseCountryFormat } from "../core/address/engine.js";
|
|
6
|
+
import { addressFormReducer, allowedCountryList, pairedGridRows, planFields, requiredFloorFor, seedAddressForm, snapshotAddressForm, placeAllowList } from "../core/address/form-state.js";
|
|
7
|
+
import { countryName } from "../core/address/country-name.js";
|
|
8
|
+
import { resolveSubdivision } from "../core/address/suggest.js";
|
|
9
|
+
import { useAddressSuggestions } from "../core/address/use-suggestions.js";
|
|
10
|
+
import { WhopAddressSuggestions } from "../native/index.js";
|
|
11
|
+
import { SuggestionList } from "../ui/suggestions.js";
|
|
12
|
+
import { detectIpCountry } from "../core/address/places.js";
|
|
13
|
+
import { useLocale, useT } from "../i18n/index.js";
|
|
14
|
+
import { usePaymentsState, usePaymentsStore } from "../namespace.js";
|
|
15
|
+
import { useTheme } from "../theme/provider.js";
|
|
16
|
+
import { ElementFrame } from "../ui/element-frame.js";
|
|
17
|
+
import { Field, FieldSkeleton, Row, Stack, TextButton } from "../ui/primitives.js";
|
|
18
|
+
import { Select } from "../ui/select.js";
|
|
19
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
20
|
+
/**
|
|
21
|
+
* Collects a postal address using the per-country format engine ported from the web element, so
|
|
22
|
+
* field order, labels, required-ness, postal validation, and the state lists are identical across
|
|
23
|
+
* the two surfaces for all 241 countries in the catalog.
|
|
24
|
+
*/
|
|
25
|
+
export function AddressElement({
|
|
26
|
+
mode = 'billing',
|
|
27
|
+
layout = 'full',
|
|
28
|
+
scope = 'full',
|
|
29
|
+
defaultValues,
|
|
30
|
+
detectCountry = true,
|
|
31
|
+
allowedCountries,
|
|
32
|
+
name = 'combined',
|
|
33
|
+
organization = 'none',
|
|
34
|
+
line2 = 'toggle',
|
|
35
|
+
autocomplete = true,
|
|
36
|
+
customFields,
|
|
37
|
+
countryHint = '',
|
|
38
|
+
style,
|
|
39
|
+
fallback,
|
|
40
|
+
onChange,
|
|
41
|
+
onReady,
|
|
42
|
+
onError
|
|
43
|
+
}) {
|
|
44
|
+
const t = useT();
|
|
45
|
+
const theme = useTheme();
|
|
46
|
+
const store = usePaymentsStore();
|
|
47
|
+
const methodCountries = usePaymentsState(s => s.methodCountries);
|
|
48
|
+
const [catalog, setCatalog] = useState(null);
|
|
49
|
+
const [detected, setDetected] = useState(undefined);
|
|
50
|
+
const [detecting, setDetecting] = useState(detectCountry);
|
|
51
|
+
const [failure, setFailure] = useState(null);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
let alive = true;
|
|
54
|
+
loadCountryCatalog().then(data => alive && setCatalog(data)).catch(err => alive && setFailure({
|
|
55
|
+
message: err.message,
|
|
56
|
+
code: 'ADDRESS_CATALOG_FAILED'
|
|
57
|
+
}));
|
|
58
|
+
return () => {
|
|
59
|
+
alive = false;
|
|
60
|
+
};
|
|
61
|
+
}, []);
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
if (!detectCountry) return;
|
|
64
|
+
let alive = true;
|
|
65
|
+
detectIpCountry().then(country => {
|
|
66
|
+
if (!alive) return;
|
|
67
|
+
setDetected(country);
|
|
68
|
+
setDetecting(false);
|
|
69
|
+
}).catch(() => alive && setDetecting(false));
|
|
70
|
+
return () => {
|
|
71
|
+
alive = false;
|
|
72
|
+
};
|
|
73
|
+
}, [detectCountry]);
|
|
74
|
+
|
|
75
|
+
// The method constraint NARROWS the consumer's allow list, never replaces it — replacing would
|
|
76
|
+
// let a tier's countries widen a restriction the integrator set deliberately.
|
|
77
|
+
const effectiveAllowed = useMemo(() => effectiveAllowedCountries(methodCountries ?? undefined, allowedCountries), [methodCountries, allowedCountries]);
|
|
78
|
+
const config = useMemo(() => ({
|
|
79
|
+
mode,
|
|
80
|
+
layout,
|
|
81
|
+
scope,
|
|
82
|
+
name,
|
|
83
|
+
organization,
|
|
84
|
+
line2,
|
|
85
|
+
autocomplete,
|
|
86
|
+
requiredFloor: requiredFloorFor(scope),
|
|
87
|
+
allowedCountries: effectiveAllowed,
|
|
88
|
+
customFields
|
|
89
|
+
}), [mode, layout, scope, name, organization, line2, autocomplete, effectiveAllowed, customFields]);
|
|
90
|
+
const ready = Boolean(catalog) && !detecting;
|
|
91
|
+
if (!catalog || detecting) {
|
|
92
|
+
return /*#__PURE__*/_jsx(ElementFrame, {
|
|
93
|
+
style: style,
|
|
94
|
+
fallback: fallback,
|
|
95
|
+
skeleton: /*#__PURE__*/_jsxs(Stack, {
|
|
96
|
+
children: [/*#__PURE__*/_jsx(FieldSkeleton, {}), /*#__PURE__*/_jsx(FieldSkeleton, {}), /*#__PURE__*/_jsx(FieldSkeleton, {})]
|
|
97
|
+
}),
|
|
98
|
+
ready: false,
|
|
99
|
+
error: failure,
|
|
100
|
+
onReady: onReady,
|
|
101
|
+
onError: onError,
|
|
102
|
+
children: /*#__PURE__*/_jsx(View, {})
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return /*#__PURE__*/_jsx(AddressForm, {
|
|
106
|
+
catalog: catalog,
|
|
107
|
+
config: config,
|
|
108
|
+
detected: detected,
|
|
109
|
+
countryHint: countryHint,
|
|
110
|
+
defaultValues: defaultValues,
|
|
111
|
+
ready: ready,
|
|
112
|
+
style: style,
|
|
113
|
+
fallback: fallback,
|
|
114
|
+
onChange: onChange,
|
|
115
|
+
onReady: onReady,
|
|
116
|
+
onError: onError,
|
|
117
|
+
store: store,
|
|
118
|
+
t: t,
|
|
119
|
+
spacing: theme.tokens.spacing
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** Intersection when both exist; a disjoint pair keeps the consumer's list rather than widening. */
|
|
124
|
+
export function effectiveAllowedCountries(methodCountries, allowedCountries) {
|
|
125
|
+
if (!methodCountries?.length) return allowedCountries;
|
|
126
|
+
if (!allowedCountries?.length) return methodCountries;
|
|
127
|
+
const consumerAllowed = new Set(allowedCountries.map(code => code.toLowerCase()));
|
|
128
|
+
const intersection = methodCountries.filter(code => consumerAllowed.has(code.toLowerCase()));
|
|
129
|
+
return intersection.length > 0 ? intersection : allowedCountries;
|
|
130
|
+
}
|
|
131
|
+
function AddressForm({
|
|
132
|
+
catalog,
|
|
133
|
+
config,
|
|
134
|
+
detected,
|
|
135
|
+
countryHint,
|
|
136
|
+
defaultValues,
|
|
137
|
+
ready,
|
|
138
|
+
style,
|
|
139
|
+
fallback,
|
|
140
|
+
onChange,
|
|
141
|
+
onReady,
|
|
142
|
+
onError,
|
|
143
|
+
store,
|
|
144
|
+
t,
|
|
145
|
+
spacing
|
|
146
|
+
}) {
|
|
147
|
+
const catalogCountries = useMemo(() => Object.keys(catalog), [catalog]);
|
|
148
|
+
const [state, rawDispatch] = useReducer(addressFormReducer, undefined, () => seedAddressForm(config, {
|
|
149
|
+
defaultValues,
|
|
150
|
+
detectedCountry: detected,
|
|
151
|
+
countryHint
|
|
152
|
+
}, catalogCountries));
|
|
153
|
+
const format = useMemo(() => parseCountryFormat(state.country, catalog[state.country]), [state.country, catalog]);
|
|
154
|
+
const plan = useMemo(() => planFields(config, format), [config, format]);
|
|
155
|
+
const snapshot = useMemo(() => snapshotAddressForm(config, format, state), [config, format, state]);
|
|
156
|
+
const locale = useLocale();
|
|
157
|
+
const countryOptions = useMemo(() => {
|
|
158
|
+
const allowed = allowedCountryList(config, catalogCountries);
|
|
159
|
+
return allowed.map(code => ({
|
|
160
|
+
value: code,
|
|
161
|
+
label: countryName(code, locale)
|
|
162
|
+
})).sort((a, b) => a.label.localeCompare(b.label));
|
|
163
|
+
}, [config, catalogCountries, locale]);
|
|
164
|
+
const latestChange = useRef(onChange);
|
|
165
|
+
latestChange.current = onChange;
|
|
166
|
+
|
|
167
|
+
// The address element is the billing source while it is mounted, so the controller reads its
|
|
168
|
+
// snapshot at confirm rather than the payment element's internal block.
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
store.patch({
|
|
171
|
+
addressLive: true
|
|
172
|
+
});
|
|
173
|
+
return () => store.patch({
|
|
174
|
+
addressLive: false,
|
|
175
|
+
addressCollected: undefined
|
|
176
|
+
});
|
|
177
|
+
}, [store]);
|
|
178
|
+
useEffect(() => {
|
|
179
|
+
store.patch({
|
|
180
|
+
addressCollected: {
|
|
181
|
+
complete: snapshot.complete,
|
|
182
|
+
address: snapshot.address,
|
|
183
|
+
custom: snapshot.custom
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
latestChange.current?.({
|
|
187
|
+
complete: snapshot.complete,
|
|
188
|
+
address: snapshot.address,
|
|
189
|
+
custom: snapshot.custom
|
|
190
|
+
});
|
|
191
|
+
}, [snapshot, store]);
|
|
192
|
+
const [line1Focused, setLine1Focused] = useState(false);
|
|
193
|
+
const suggestions = useAddressSuggestions(config.autocomplete, state.values.line1 ?? '');
|
|
194
|
+
const placeAllowed = useMemo(() => placeAllowList(config, catalogCountries), [config, catalogCountries]);
|
|
195
|
+
const showSuggestions = config.autocomplete && line1Focused && suggestions.length > 0;
|
|
196
|
+
|
|
197
|
+
// `apply-place` WHOLE-REPLACES the locality grid, so a resolve landing after the buyer moved on
|
|
198
|
+
// would silently rewrite line1, city, state and postal under them.
|
|
199
|
+
//
|
|
200
|
+
// The supersede is tracked with a counter bumped INSIDE dispatch rather than by reading the
|
|
201
|
+
// reducer's own `selecting` flag through a ref. A ref is only assigned during render, and an
|
|
202
|
+
// Android resolve is a cache hit that can settle before that render happens — which raced both
|
|
203
|
+
// ways: a fresh pick read a stale `false` and no-opped, and a superseding edit had not yet been
|
|
204
|
+
// seen, so a stale place still applied.
|
|
205
|
+
const pickSequence = useRef(0);
|
|
206
|
+
const dispatch = useCallback(action => {
|
|
207
|
+
if (action.type === 'edit' || action.type === 'set-country') pickSequence.current += 1;
|
|
208
|
+
rawDispatch(action);
|
|
209
|
+
}, []);
|
|
210
|
+
const pickSuggestion = suggestion => {
|
|
211
|
+
setLine1Focused(false);
|
|
212
|
+
const sequence = pickSequence.current + 1;
|
|
213
|
+
pickSequence.current = sequence;
|
|
214
|
+
dispatch({
|
|
215
|
+
type: 'begin-select'
|
|
216
|
+
});
|
|
217
|
+
void WhopAddressSuggestions.resolve(suggestion.id, state.country).then(parsed => {
|
|
218
|
+
if (pickSequence.current !== sequence) return;
|
|
219
|
+
if (!parsed) {
|
|
220
|
+
dispatch({
|
|
221
|
+
type: 'select-failed'
|
|
222
|
+
});
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
// The state Select is keyed on the catalog's sub_key, and a geocoder may answer with the
|
|
226
|
+
// display name instead, so an unresolved subdivision must not reach the form as-is.
|
|
227
|
+
dispatch({
|
|
228
|
+
type: 'apply-place',
|
|
229
|
+
parsed: {
|
|
230
|
+
...parsed,
|
|
231
|
+
state: resolveSubdivision(parsed.state, format.stateOptions)
|
|
232
|
+
},
|
|
233
|
+
allowed: placeAllowed
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
const showError = key => state.showAllErrors || state.touched[key] ? errorText(t, snapshot.errors[key]) : undefined;
|
|
238
|
+
const compact = config.layout === 'compact';
|
|
239
|
+
const textField = (key, label, extra) => /*#__PURE__*/_jsx(Field, {
|
|
240
|
+
label: compact ? undefined : label,
|
|
241
|
+
placeholder: compact ? label : undefined,
|
|
242
|
+
accessibilityLabel: label,
|
|
243
|
+
value: state.values[key] ?? '',
|
|
244
|
+
onChangeText: value => dispatch({
|
|
245
|
+
type: 'edit',
|
|
246
|
+
field: key,
|
|
247
|
+
value
|
|
248
|
+
}),
|
|
249
|
+
onBlur: () => dispatch({
|
|
250
|
+
type: 'blur',
|
|
251
|
+
field: key
|
|
252
|
+
}),
|
|
253
|
+
error: showError(key),
|
|
254
|
+
containerStyle: {
|
|
255
|
+
flex: 1
|
|
256
|
+
},
|
|
257
|
+
...extra
|
|
258
|
+
}, key);
|
|
259
|
+
const nameFields = config.name === 'none' ? null : config.name === 'split' ? /*#__PURE__*/_jsxs(Row, {
|
|
260
|
+
children: [textField('first_name', t('First name'), {
|
|
261
|
+
autoComplete: 'given-name',
|
|
262
|
+
textContentType: 'givenName'
|
|
263
|
+
}), textField('last_name', t('Last name'), {
|
|
264
|
+
autoComplete: 'family-name',
|
|
265
|
+
textContentType: 'familyName'
|
|
266
|
+
})]
|
|
267
|
+
}) : textField('name', t('Name'), {
|
|
268
|
+
autoComplete: 'name',
|
|
269
|
+
textContentType: 'name'
|
|
270
|
+
});
|
|
271
|
+
const organizationFields = config.organization === 'none' ? null : /*#__PURE__*/_jsxs(Stack, {
|
|
272
|
+
gap: spacing * 2,
|
|
273
|
+
children: [textField('organization', t('Organization'), {
|
|
274
|
+
autoComplete: 'organization'
|
|
275
|
+
}), config.organization === 'name_with_type' ? /*#__PURE__*/_jsx(Select, {
|
|
276
|
+
label: t('Organization type'),
|
|
277
|
+
value: state.organizationType || undefined,
|
|
278
|
+
options: [{
|
|
279
|
+
value: 'business',
|
|
280
|
+
label: t('Business')
|
|
281
|
+
}, {
|
|
282
|
+
value: 'individual',
|
|
283
|
+
label: t('Individual')
|
|
284
|
+
}],
|
|
285
|
+
onChange: value => dispatch({
|
|
286
|
+
type: 'set-organization-type',
|
|
287
|
+
value: value
|
|
288
|
+
})
|
|
289
|
+
}) : null]
|
|
290
|
+
});
|
|
291
|
+
const customAt = position => (config.customFields ?? []).filter(field => field.position === position).map(field => {
|
|
292
|
+
const key = `custom:${field.key}`;
|
|
293
|
+
const value = state.custom[field.key] ?? '';
|
|
294
|
+
const onChange = next => dispatch({
|
|
295
|
+
type: 'edit-custom',
|
|
296
|
+
key: field.key,
|
|
297
|
+
value: next
|
|
298
|
+
});
|
|
299
|
+
if (field.type === 'select') {
|
|
300
|
+
return /*#__PURE__*/_jsx(Select, {
|
|
301
|
+
label: compact ? undefined : field.label,
|
|
302
|
+
placeholder: compact ? field.label : undefined,
|
|
303
|
+
accessibilityLabel: field.label,
|
|
304
|
+
value: value || undefined,
|
|
305
|
+
options: (field.options ?? []).map(option => ({
|
|
306
|
+
value: option,
|
|
307
|
+
label: option
|
|
308
|
+
})),
|
|
309
|
+
onChange: onChange,
|
|
310
|
+
error: showError(key),
|
|
311
|
+
searchable: (field.options ?? []).length > 12
|
|
312
|
+
}, key);
|
|
313
|
+
}
|
|
314
|
+
return /*#__PURE__*/_jsx(Field, {
|
|
315
|
+
label: compact ? undefined : field.label,
|
|
316
|
+
placeholder: compact ? field.label : undefined,
|
|
317
|
+
accessibilityLabel: field.label,
|
|
318
|
+
value: value,
|
|
319
|
+
onChangeText: onChange,
|
|
320
|
+
onBlur: () => dispatch({
|
|
321
|
+
type: 'blur',
|
|
322
|
+
field: key
|
|
323
|
+
}),
|
|
324
|
+
error: showError(key),
|
|
325
|
+
keyboardType: field.type === 'phone' ? 'phone-pad' : 'default',
|
|
326
|
+
autoComplete: field.type === 'phone' ? 'tel' : undefined
|
|
327
|
+
}, key);
|
|
328
|
+
});
|
|
329
|
+
const gridRows = pairedGridRows(plan.gridFields);
|
|
330
|
+
return /*#__PURE__*/_jsx(ElementFrame, {
|
|
331
|
+
style: style,
|
|
332
|
+
fallback: fallback,
|
|
333
|
+
skeleton: /*#__PURE__*/_jsxs(Stack, {
|
|
334
|
+
children: [/*#__PURE__*/_jsx(FieldSkeleton, {}), /*#__PURE__*/_jsx(FieldSkeleton, {}), /*#__PURE__*/_jsx(FieldSkeleton, {})]
|
|
335
|
+
}),
|
|
336
|
+
ready: ready,
|
|
337
|
+
onReady: onReady,
|
|
338
|
+
onError: onError,
|
|
339
|
+
children: /*#__PURE__*/_jsxs(Stack, {
|
|
340
|
+
children: [nameFields, customAt('after_name'), organizationFields, customAt('after_organization'), customAt('before_country'), /*#__PURE__*/_jsx(Select, {
|
|
341
|
+
label: t('Country'),
|
|
342
|
+
value: state.country,
|
|
343
|
+
options: countryOptions,
|
|
344
|
+
onChange: country => dispatch({
|
|
345
|
+
type: 'set-country',
|
|
346
|
+
country: normalizeCountry(country) ?? country
|
|
347
|
+
}),
|
|
348
|
+
searchable: true,
|
|
349
|
+
partName: "whop-AddressCountrySelect"
|
|
350
|
+
}), plan.gridFields.includes('line1') ? /*#__PURE__*/_jsxs(View, {
|
|
351
|
+
children: [textField('line1', gridLabel(t, 'line1', format), {
|
|
352
|
+
...gridExtras('line1', format),
|
|
353
|
+
onFocus: () => setLine1Focused(true),
|
|
354
|
+
onBlur: () => {
|
|
355
|
+
setLine1Focused(false);
|
|
356
|
+
dispatch({
|
|
357
|
+
type: 'blur',
|
|
358
|
+
field: 'line1'
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
}), showSuggestions ? /*#__PURE__*/_jsx(SuggestionList, {
|
|
362
|
+
suggestions: suggestions,
|
|
363
|
+
onPick: pickSuggestion
|
|
364
|
+
}) : null]
|
|
365
|
+
}) : null, config.line2 === 'always' || state.line2Open ? textField('line2', t('Address line 2')) : null, gridRows.map(row => /*#__PURE__*/_jsx(Row, {
|
|
366
|
+
children: row.map(key => key === 'state' && format.stateOptions.length > 0 ? /*#__PURE__*/_jsx(View, {
|
|
367
|
+
style: {
|
|
368
|
+
flex: 1
|
|
369
|
+
},
|
|
370
|
+
children: /*#__PURE__*/_jsx(Select, {
|
|
371
|
+
label: compact ? undefined : stateLabel(t, format),
|
|
372
|
+
placeholder: compact ? stateLabel(t, format) : undefined,
|
|
373
|
+
accessibilityLabel: stateLabel(t, format),
|
|
374
|
+
value: state.values.state || undefined,
|
|
375
|
+
options: format.stateOptions.map(toOption),
|
|
376
|
+
onChange: value => dispatch({
|
|
377
|
+
type: 'edit',
|
|
378
|
+
field: 'state',
|
|
379
|
+
value
|
|
380
|
+
}),
|
|
381
|
+
error: showError('state'),
|
|
382
|
+
searchable: format.stateOptions.length > 12
|
|
383
|
+
})
|
|
384
|
+
}, key) : textField(key, gridLabel(t, key, format), gridExtras(key, format)))
|
|
385
|
+
}, row.join('-'))), customAt('after_address'), config.line2 === 'toggle' && !state.line2Open ? /*#__PURE__*/_jsx(TextButton, {
|
|
386
|
+
label: t('Add address line 2'),
|
|
387
|
+
onPress: () => dispatch({
|
|
388
|
+
type: 'toggle-line2'
|
|
389
|
+
})
|
|
390
|
+
}) : null]
|
|
391
|
+
})
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
function toOption(option) {
|
|
395
|
+
// The engine keys options by the catalog's own sub_key; `iso` is display metadata, not the value
|
|
396
|
+
// the format engine validates against.
|
|
397
|
+
return {
|
|
398
|
+
value: option.key,
|
|
399
|
+
label: option.name
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
function stateLabel(t, format) {
|
|
403
|
+
switch (format.stateLabel) {
|
|
404
|
+
case 'province':
|
|
405
|
+
return t('Province');
|
|
406
|
+
case 'emirate':
|
|
407
|
+
return t('Emirate');
|
|
408
|
+
case 'county':
|
|
409
|
+
return t('County');
|
|
410
|
+
case 'prefecture':
|
|
411
|
+
return t('Prefecture');
|
|
412
|
+
case 'island':
|
|
413
|
+
return t('Island');
|
|
414
|
+
case 'parish':
|
|
415
|
+
return t('Parish');
|
|
416
|
+
case 'department':
|
|
417
|
+
return t('Department');
|
|
418
|
+
case 'do_si':
|
|
419
|
+
return t('Province');
|
|
420
|
+
case 'oblast':
|
|
421
|
+
return t('Oblast');
|
|
422
|
+
case 'area':
|
|
423
|
+
return t('Area');
|
|
424
|
+
default:
|
|
425
|
+
return t('State');
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
function gridLabel(t, key, format) {
|
|
429
|
+
switch (key) {
|
|
430
|
+
case 'line1':
|
|
431
|
+
return t('Address line 1');
|
|
432
|
+
case 'city':
|
|
433
|
+
return t('City');
|
|
434
|
+
case 'state':
|
|
435
|
+
return stateLabel(t, format);
|
|
436
|
+
case 'postal_code':
|
|
437
|
+
return format.postalLabel === 'zip' ? t('ZIP code') : format.postalLabel === 'pin' ? t('PIN code') : t('Postal code');
|
|
438
|
+
default:
|
|
439
|
+
return key;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
function gridExtras(key, format) {
|
|
443
|
+
if (key === 'postal_code') {
|
|
444
|
+
const field = format.fields.find(f => f.type === 'postal_code');
|
|
445
|
+
return {
|
|
446
|
+
autoComplete: 'postal-code',
|
|
447
|
+
textContentType: 'postalCode',
|
|
448
|
+
autoCapitalize: 'characters',
|
|
449
|
+
placeholder: field?.postalPlaceholder
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
if (key === 'line1') return {
|
|
453
|
+
autoComplete: 'address-line1',
|
|
454
|
+
textContentType: 'streetAddressLine1'
|
|
455
|
+
};
|
|
456
|
+
if (key === 'city') return {
|
|
457
|
+
autoComplete: 'postal-address-locality',
|
|
458
|
+
textContentType: 'addressCity'
|
|
459
|
+
};
|
|
460
|
+
return {};
|
|
461
|
+
}
|
|
462
|
+
function errorText(t, code) {
|
|
463
|
+
if (code === 'required') return t('Required');
|
|
464
|
+
if (code === 'invalid') return t("That doesn't look right");
|
|
465
|
+
return undefined;
|
|
466
|
+
}
|
|
467
|
+
//# sourceMappingURL=address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useMemo","useReducer","useRef","useState","View","loadCountryCatalog","normalizeCountry","parseCountryFormat","addressFormReducer","allowedCountryList","pairedGridRows","planFields","requiredFloorFor","seedAddressForm","snapshotAddressForm","placeAllowList","countryName","resolveSubdivision","useAddressSuggestions","WhopAddressSuggestions","SuggestionList","detectIpCountry","useLocale","useT","usePaymentsState","usePaymentsStore","useTheme","ElementFrame","Field","FieldSkeleton","Row","Stack","TextButton","Select","jsx","_jsx","jsxs","_jsxs","AddressElement","mode","layout","scope","defaultValues","detectCountry","allowedCountries","name","organization","line2","autocomplete","customFields","countryHint","style","fallback","onChange","onReady","onError","t","theme","store","methodCountries","s","catalog","setCatalog","detected","setDetected","undefined","detecting","setDetecting","failure","setFailure","alive","then","data","catch","err","message","code","country","effectiveAllowed","effectiveAllowedCountries","config","requiredFloor","ready","Boolean","skeleton","children","error","AddressForm","spacing","tokens","length","consumerAllowed","Set","map","toLowerCase","intersection","filter","has","catalogCountries","Object","keys","state","rawDispatch","detectedCountry","format","plan","snapshot","locale","countryOptions","allowed","value","label","sort","a","b","localeCompare","latestChange","current","patch","addressLive","addressCollected","complete","address","custom","line1Focused","setLine1Focused","suggestions","values","line1","placeAllowed","showSuggestions","pickSequence","dispatch","action","type","pickSuggestion","suggestion","sequence","resolve","id","parsed","stateOptions","showError","key","showAllErrors","touched","errorText","errors","compact","textField","extra","placeholder","accessibilityLabel","onChangeText","field","onBlur","containerStyle","flex","nameFields","autoComplete","textContentType","organizationFields","gap","organizationType","options","customAt","position","next","option","searchable","keyboardType","gridRows","gridFields","partName","includes","gridLabel","gridExtras","onFocus","onPick","line2Open","row","stateLabel","toOption","join","onPress","postalLabel","fields","find","f","autoCapitalize","postalPlaceholder"],"sourceRoot":"../../../src","sources":["elements/address.tsx"],"mappings":"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","ignoreList":[]}
|