@spare-technologies/spare-link 0.1.0-beta.0 → 1.0.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 +119 -81
- package/lib/commonjs/core/models/payment-return-params.js +245 -20
- package/lib/commonjs/core/models/payment-return-params.js.map +1 -1
- package/lib/commonjs/core/models/pending-session-record.js +2 -0
- package/lib/commonjs/core/models/pending-session-record.js.map +1 -0
- package/lib/commonjs/core/services/hosted-flow-controller.js +333 -0
- package/lib/commonjs/core/services/hosted-flow-controller.js.map +1 -0
- package/lib/commonjs/core/services/hosted-flow-state.js +96 -0
- package/lib/commonjs/core/services/hosted-flow-state.js.map +1 -0
- package/lib/commonjs/index.js +42 -164
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/internal/hosted/bridge-message.js +107 -0
- package/lib/commonjs/internal/hosted/bridge-message.js.map +1 -0
- package/lib/commonjs/internal/hosted/hosted-url.js +41 -0
- package/lib/commonjs/internal/hosted/hosted-url.js.map +1 -0
- package/lib/commonjs/internal/index.js +0 -7
- package/lib/commonjs/internal/index.js.map +1 -1
- package/lib/commonjs/internal/redact-uri.js +59 -15
- package/lib/commonjs/internal/redact-uri.js.map +1 -1
- package/lib/commonjs/internal/secure-store-pending-session-store.js +20 -25
- package/lib/commonjs/internal/secure-store-pending-session-store.js.map +1 -1
- package/lib/commonjs/internal/url-parts.js +145 -0
- package/lib/commonjs/internal/url-parts.js.map +1 -0
- package/lib/commonjs/public/index.js +0 -37
- package/lib/commonjs/public/index.js.map +1 -1
- package/lib/commonjs/public/payment-result.js +16 -4
- package/lib/commonjs/public/payment-result.js.map +1 -1
- package/lib/commonjs/public/recovery-result.js +7 -18
- package/lib/commonjs/public/recovery-result.js.map +1 -1
- package/lib/commonjs/public/spare-link-config.js +41 -16
- package/lib/commonjs/public/spare-link-config.js.map +1 -1
- package/lib/commonjs/public/spare-link-event.js +27 -33
- package/lib/commonjs/public/spare-link-event.js.map +1 -1
- package/lib/commonjs/public/spare-link-instance.js +67 -77
- package/lib/commonjs/public/spare-link-instance.js.map +1 -1
- package/lib/commonjs/public/spare-link-session.js +2 -9
- package/lib/commonjs/public/spare-link-session.js.map +1 -1
- package/lib/commonjs/public/spare-link.js +0 -12
- package/lib/commonjs/public/spare-link.js.map +1 -1
- package/lib/commonjs/ui/hooks/{use-payment-flow-state.js → use-hosted-flow-state.js} +4 -4
- package/lib/commonjs/ui/hooks/use-hosted-flow-state.js.map +1 -0
- package/lib/commonjs/ui/hosted/hosted-payment-page.js +177 -0
- package/lib/commonjs/ui/hosted/hosted-payment-page.js.map +1 -0
- package/lib/commonjs/ui/hosted/hosted-payment-webview.js +168 -0
- package/lib/commonjs/ui/hosted/hosted-payment-webview.js.map +1 -0
- package/lib/commonjs/ui/screens/index.js +3 -17
- package/lib/commonjs/ui/screens/index.js.map +1 -1
- package/lib/commonjs/ui/screens/page-unavailable-screen.js +101 -0
- package/lib/commonjs/ui/screens/page-unavailable-screen.js.map +1 -0
- package/lib/commonjs/ui/spare-link-host.js +220 -234
- package/lib/commonjs/ui/spare-link-host.js.map +1 -1
- package/lib/commonjs/ui/widgets/index.js +3 -10
- package/lib/commonjs/ui/widgets/index.js.map +1 -1
- package/lib/commonjs/version.js +7 -5
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/core/models/payment-return-params.js +235 -20
- package/lib/module/core/models/payment-return-params.js.map +1 -1
- package/lib/module/core/models/pending-session-record.js +2 -0
- package/lib/module/core/models/pending-session-record.js.map +1 -0
- package/lib/module/core/services/hosted-flow-controller.js +328 -0
- package/lib/module/core/services/hosted-flow-controller.js.map +1 -0
- package/lib/module/core/services/hosted-flow-state.js +91 -0
- package/lib/module/core/services/hosted-flow-state.js.map +1 -0
- package/lib/module/index.js +8 -22
- package/lib/module/index.js.map +1 -1
- package/lib/module/internal/hosted/bridge-message.js +104 -0
- package/lib/module/internal/hosted/bridge-message.js.map +1 -0
- package/lib/module/internal/hosted/hosted-url.js +36 -0
- package/lib/module/internal/hosted/hosted-url.js.map +1 -0
- package/lib/module/internal/index.js +0 -1
- package/lib/module/internal/index.js.map +1 -1
- package/lib/module/internal/redact-uri.js +59 -15
- package/lib/module/internal/redact-uri.js.map +1 -1
- package/lib/module/internal/secure-store-pending-session-store.js +20 -25
- package/lib/module/internal/secure-store-pending-session-store.js.map +1 -1
- package/lib/module/internal/url-parts.js +139 -0
- package/lib/module/internal/url-parts.js.map +1 -0
- package/lib/module/public/index.js +2 -3
- package/lib/module/public/index.js.map +1 -1
- package/lib/module/public/payment-result.js +16 -4
- package/lib/module/public/payment-result.js.map +1 -1
- package/lib/module/public/recovery-result.js +7 -17
- package/lib/module/public/recovery-result.js.map +1 -1
- package/lib/module/public/spare-link-config.js +42 -15
- package/lib/module/public/spare-link-config.js.map +1 -1
- package/lib/module/public/spare-link-event.js +27 -33
- package/lib/module/public/spare-link-event.js.map +1 -1
- package/lib/module/public/spare-link-instance.js +68 -72
- package/lib/module/public/spare-link-instance.js.map +1 -1
- package/lib/module/public/spare-link-session.js +2 -9
- package/lib/module/public/spare-link-session.js.map +1 -1
- package/lib/module/public/spare-link.js +1 -1
- package/lib/module/public/spare-link.js.map +1 -1
- package/lib/module/ui/hooks/{use-payment-flow-state.js → use-hosted-flow-state.js} +3 -3
- package/lib/module/ui/hooks/use-hosted-flow-state.js.map +1 -0
- package/lib/module/ui/hosted/hosted-payment-page.js +175 -0
- package/lib/module/ui/hosted/hosted-payment-page.js.map +1 -0
- package/lib/module/ui/hosted/hosted-payment-webview.js +163 -0
- package/lib/module/ui/hosted/hosted-payment-webview.js.map +1 -0
- package/lib/module/ui/screens/index.js +1 -3
- package/lib/module/ui/screens/index.js.map +1 -1
- package/lib/module/ui/screens/page-unavailable-screen.js +97 -0
- package/lib/module/ui/screens/page-unavailable-screen.js.map +1 -0
- package/lib/module/ui/spare-link-host.js +221 -236
- package/lib/module/ui/spare-link-host.js.map +1 -1
- package/lib/module/ui/widgets/index.js +1 -2
- package/lib/module/ui/widgets/index.js.map +1 -1
- package/lib/module/version.js +7 -5
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/commonjs/core/models/index.d.ts +1 -123
- package/lib/typescript/commonjs/core/models/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/core/models/payment-return-params.d.ts +91 -8
- package/lib/typescript/commonjs/core/models/payment-return-params.d.ts.map +1 -1
- package/lib/typescript/commonjs/core/models/pending-session-record.d.ts +11 -0
- package/lib/typescript/commonjs/core/models/pending-session-record.d.ts.map +1 -0
- package/lib/typescript/commonjs/core/services/hosted-flow-controller.d.ts +119 -0
- package/lib/typescript/commonjs/core/services/hosted-flow-controller.d.ts.map +1 -0
- package/lib/typescript/commonjs/core/services/hosted-flow-state.d.ts +75 -0
- package/lib/typescript/commonjs/core/services/hosted-flow-state.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +5 -14
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/internal/hosted/bridge-message.d.ts +44 -0
- package/lib/typescript/commonjs/internal/hosted/bridge-message.d.ts.map +1 -0
- package/lib/typescript/commonjs/internal/hosted/hosted-url.d.ts +30 -0
- package/lib/typescript/commonjs/internal/hosted/hosted-url.d.ts.map +1 -0
- package/lib/typescript/commonjs/internal/index.d.ts +0 -1
- package/lib/typescript/commonjs/internal/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/internal/redact-uri.d.ts +21 -1
- package/lib/typescript/commonjs/internal/redact-uri.d.ts.map +1 -1
- package/lib/typescript/commonjs/internal/secure-store-pending-session-store.d.ts +3 -2
- package/lib/typescript/commonjs/internal/secure-store-pending-session-store.d.ts.map +1 -1
- package/lib/typescript/commonjs/internal/url-parts.d.ts +46 -0
- package/lib/typescript/commonjs/internal/url-parts.d.ts.map +1 -0
- package/lib/typescript/commonjs/public/index.d.ts +4 -6
- package/lib/typescript/commonjs/public/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/payment-result.d.ts +50 -12
- package/lib/typescript/commonjs/public/payment-result.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/recovery-result.d.ts +11 -20
- package/lib/typescript/commonjs/public/recovery-result.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/spare-link-config.d.ts +13 -31
- package/lib/typescript/commonjs/public/spare-link-config.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/spare-link-event.d.ts +29 -31
- package/lib/typescript/commonjs/public/spare-link-event.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/spare-link-host-api.d.ts +1 -12
- package/lib/typescript/commonjs/public/spare-link-host-api.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/spare-link-instance.d.ts +26 -20
- package/lib/typescript/commonjs/public/spare-link-instance.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/spare-link-session.d.ts +3 -8
- package/lib/typescript/commonjs/public/spare-link-session.d.ts.map +1 -1
- package/lib/typescript/commonjs/public/spare-link.d.ts +1 -1
- package/lib/typescript/commonjs/public/spare-link.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/use-hosted-flow-state.d.ts +9 -0
- package/lib/typescript/commonjs/ui/hooks/use-hosted-flow-state.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hosted/hosted-payment-page.d.ts +17 -0
- package/lib/typescript/commonjs/ui/hosted/hosted-payment-page.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hosted/hosted-payment-webview.d.ts +43 -0
- package/lib/typescript/commonjs/ui/hosted/hosted-payment-webview.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/screens/index.d.ts +1 -3
- package/lib/typescript/commonjs/ui/screens/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/page-unavailable-screen.d.ts +18 -0
- package/lib/typescript/commonjs/ui/screens/page-unavailable-screen.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/spare-link-host.d.ts +4 -5
- package/lib/typescript/commonjs/ui/spare-link-host.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/widgets/index.d.ts +1 -2
- package/lib/typescript/commonjs/ui/widgets/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/version.d.ts +7 -5
- package/lib/typescript/commonjs/version.d.ts.map +1 -1
- package/lib/typescript/module/core/models/index.d.ts +1 -123
- package/lib/typescript/module/core/models/index.d.ts.map +1 -1
- package/lib/typescript/module/core/models/payment-return-params.d.ts +91 -8
- package/lib/typescript/module/core/models/payment-return-params.d.ts.map +1 -1
- package/lib/typescript/module/core/models/pending-session-record.d.ts +11 -0
- package/lib/typescript/module/core/models/pending-session-record.d.ts.map +1 -0
- package/lib/typescript/module/core/services/hosted-flow-controller.d.ts +119 -0
- package/lib/typescript/module/core/services/hosted-flow-controller.d.ts.map +1 -0
- package/lib/typescript/module/core/services/hosted-flow-state.d.ts +75 -0
- package/lib/typescript/module/core/services/hosted-flow-state.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +5 -14
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/internal/hosted/bridge-message.d.ts +44 -0
- package/lib/typescript/module/internal/hosted/bridge-message.d.ts.map +1 -0
- package/lib/typescript/module/internal/hosted/hosted-url.d.ts +30 -0
- package/lib/typescript/module/internal/hosted/hosted-url.d.ts.map +1 -0
- package/lib/typescript/module/internal/index.d.ts +0 -1
- package/lib/typescript/module/internal/index.d.ts.map +1 -1
- package/lib/typescript/module/internal/redact-uri.d.ts +21 -1
- package/lib/typescript/module/internal/redact-uri.d.ts.map +1 -1
- package/lib/typescript/module/internal/secure-store-pending-session-store.d.ts +3 -2
- package/lib/typescript/module/internal/secure-store-pending-session-store.d.ts.map +1 -1
- package/lib/typescript/module/internal/url-parts.d.ts +46 -0
- package/lib/typescript/module/internal/url-parts.d.ts.map +1 -0
- package/lib/typescript/module/public/index.d.ts +4 -6
- package/lib/typescript/module/public/index.d.ts.map +1 -1
- package/lib/typescript/module/public/payment-result.d.ts +50 -12
- package/lib/typescript/module/public/payment-result.d.ts.map +1 -1
- package/lib/typescript/module/public/recovery-result.d.ts +11 -20
- package/lib/typescript/module/public/recovery-result.d.ts.map +1 -1
- package/lib/typescript/module/public/spare-link-config.d.ts +13 -31
- package/lib/typescript/module/public/spare-link-config.d.ts.map +1 -1
- package/lib/typescript/module/public/spare-link-event.d.ts +29 -31
- package/lib/typescript/module/public/spare-link-event.d.ts.map +1 -1
- package/lib/typescript/module/public/spare-link-host-api.d.ts +1 -12
- package/lib/typescript/module/public/spare-link-host-api.d.ts.map +1 -1
- package/lib/typescript/module/public/spare-link-instance.d.ts +26 -20
- package/lib/typescript/module/public/spare-link-instance.d.ts.map +1 -1
- package/lib/typescript/module/public/spare-link-session.d.ts +3 -8
- package/lib/typescript/module/public/spare-link-session.d.ts.map +1 -1
- package/lib/typescript/module/public/spare-link.d.ts +1 -1
- package/lib/typescript/module/public/spare-link.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/use-hosted-flow-state.d.ts +9 -0
- package/lib/typescript/module/ui/hooks/use-hosted-flow-state.d.ts.map +1 -0
- package/lib/typescript/module/ui/hosted/hosted-payment-page.d.ts +17 -0
- package/lib/typescript/module/ui/hosted/hosted-payment-page.d.ts.map +1 -0
- package/lib/typescript/module/ui/hosted/hosted-payment-webview.d.ts +43 -0
- package/lib/typescript/module/ui/hosted/hosted-payment-webview.d.ts.map +1 -0
- package/lib/typescript/module/ui/screens/index.d.ts +1 -3
- package/lib/typescript/module/ui/screens/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/page-unavailable-screen.d.ts +18 -0
- package/lib/typescript/module/ui/screens/page-unavailable-screen.d.ts.map +1 -0
- package/lib/typescript/module/ui/spare-link-host.d.ts +4 -5
- package/lib/typescript/module/ui/spare-link-host.d.ts.map +1 -1
- package/lib/typescript/module/ui/widgets/index.d.ts +1 -2
- package/lib/typescript/module/ui/widgets/index.d.ts.map +1 -1
- package/lib/typescript/module/version.d.ts +7 -5
- package/lib/typescript/module/version.d.ts.map +1 -1
- package/package.json +24 -23
- package/plugins/with-spare-link.js +6 -26
- package/src/core/models/index.ts +1 -139
- package/src/core/models/payment-return-params.ts +269 -21
- package/src/core/models/pending-session-record.ts +10 -0
- package/src/core/services/hosted-flow-controller.ts +374 -0
- package/src/core/services/hosted-flow-state.ts +123 -0
- package/src/index.ts +20 -89
- package/src/internal/hosted/bridge-message.ts +106 -0
- package/src/internal/hosted/hosted-url.ts +33 -0
- package/src/internal/index.ts +0 -1
- package/src/internal/redact-uri.ts +69 -15
- package/src/internal/secure-store-pending-session-store.ts +28 -49
- package/src/internal/url-parts.ts +134 -0
- package/src/public/index.ts +2 -24
- package/src/public/payment-result.ts +50 -12
- package/src/public/recovery-result.ts +16 -25
- package/src/public/spare-link-config.ts +56 -43
- package/src/public/spare-link-event.ts +33 -42
- package/src/public/spare-link-host-api.ts +1 -14
- package/src/public/spare-link-instance.ts +57 -65
- package/src/public/spare-link-session.ts +4 -16
- package/src/public/spare-link.ts +1 -1
- package/src/ui/hooks/use-hosted-flow-state.ts +16 -0
- package/src/ui/hosted/hosted-payment-page.tsx +178 -0
- package/src/ui/hosted/hosted-payment-webview.tsx +164 -0
- package/src/ui/screens/index.ts +4 -6
- package/src/ui/screens/page-unavailable-screen.tsx +94 -0
- package/src/ui/spare-link-host.tsx +227 -247
- package/src/ui/widgets/index.ts +1 -2
- package/src/version.ts +7 -5
- package/CHANGELOG.md +0 -66
- package/lib/commonjs/core/client/link-api-client.js +0 -297
- package/lib/commonjs/core/client/link-api-client.js.map +0 -1
- package/lib/commonjs/core/errors/payment-api-error.js +0 -35
- package/lib/commonjs/core/errors/payment-api-error.js.map +0 -1
- package/lib/commonjs/core/models/link-session-status.js +0 -14
- package/lib/commonjs/core/models/link-session-status.js.map +0 -1
- package/lib/commonjs/core/models/payment-type.js +0 -45
- package/lib/commonjs/core/models/payment-type.js.map +0 -1
- package/lib/commonjs/core/models/wire-mappers.js +0 -277
- package/lib/commonjs/core/models/wire-mappers.js.map +0 -1
- package/lib/commonjs/core/services/consent-presenter.js +0 -150
- package/lib/commonjs/core/services/consent-presenter.js.map +0 -1
- package/lib/commonjs/core/services/execute-resume-if-needed.js +0 -216
- package/lib/commonjs/core/services/execute-resume-if-needed.js.map +0 -1
- package/lib/commonjs/core/services/multi-payment-rules-presenter.js +0 -151
- package/lib/commonjs/core/services/multi-payment-rules-presenter.js.map +0 -1
- package/lib/commonjs/core/services/payment-flow-controller.js +0 -547
- package/lib/commonjs/core/services/payment-flow-controller.js.map +0 -1
- package/lib/commonjs/core/services/payment-flow-state.js +0 -110
- package/lib/commonjs/core/services/payment-flow-state.js.map +0 -1
- package/lib/commonjs/core/services/payment-result-mapper.js +0 -49
- package/lib/commonjs/core/services/payment-result-mapper.js.map +0 -1
- package/lib/commonjs/core/services/presentation-utils.js +0 -11
- package/lib/commonjs/core/services/presentation-utils.js.map +0 -1
- package/lib/commonjs/core/services/redirect-buffer.js +0 -40
- package/lib/commonjs/core/services/redirect-buffer.js.map +0 -1
- package/lib/commonjs/core/services/user-friendly-messages.js +0 -46
- package/lib/commonjs/core/services/user-friendly-messages.js.map +0 -1
- package/lib/commonjs/internal/telemetry-collector.js +0 -80
- package/lib/commonjs/internal/telemetry-collector.js.map +0 -1
- package/lib/commonjs/public/constants.js +0 -21
- package/lib/commonjs/public/constants.js.map +0 -1
- package/lib/commonjs/public/spare-link-callbacks.js +0 -6
- package/lib/commonjs/public/spare-link-callbacks.js.map +0 -1
- package/lib/commonjs/ui/consent/charge-bearer-display.js +0 -99
- package/lib/commonjs/ui/consent/charge-bearer-display.js.map +0 -1
- package/lib/commonjs/ui/consent/consent-accordion.js +0 -94
- package/lib/commonjs/ui/consent/consent-accordion.js.map +0 -1
- package/lib/commonjs/ui/consent/consent-summary-section.js +0 -27
- package/lib/commonjs/ui/consent/consent-summary-section.js.map +0 -1
- package/lib/commonjs/ui/consent/cop-information.js +0 -168
- package/lib/commonjs/ui/consent/cop-information.js.map +0 -1
- package/lib/commonjs/ui/consent/international-payment-summary.js +0 -98
- package/lib/commonjs/ui/consent/international-payment-summary.js.map +0 -1
- package/lib/commonjs/ui/consent/label-value-rows.js +0 -59
- package/lib/commonjs/ui/consent/label-value-rows.js.map +0 -1
- package/lib/commonjs/ui/consent/multi-payment-rules-list.js +0 -130
- package/lib/commonjs/ui/consent/multi-payment-rules-list.js.map +0 -1
- package/lib/commonjs/ui/consent/multi-payment-summary.js +0 -99
- package/lib/commonjs/ui/consent/multi-payment-summary.js.map +0 -1
- package/lib/commonjs/ui/consent/single-payment-summary.js +0 -158
- package/lib/commonjs/ui/consent/single-payment-summary.js.map +0 -1
- package/lib/commonjs/ui/consent/terms-link.js +0 -35
- package/lib/commonjs/ui/consent/terms-link.js.map +0 -1
- package/lib/commonjs/ui/hooks/use-payment-flow-state.js.map +0 -1
- package/lib/commonjs/ui/payment-flow-page.js +0 -235
- package/lib/commonjs/ui/payment-flow-page.js.map +0 -1
- package/lib/commonjs/ui/screens/bank-selection-screen.js +0 -215
- package/lib/commonjs/ui/screens/bank-selection-screen.js.map +0 -1
- package/lib/commonjs/ui/screens/consent-details-screen.js +0 -124
- package/lib/commonjs/ui/screens/consent-details-screen.js.map +0 -1
- package/lib/commonjs/ui/screens/mandate-setup-success-screen.js +0 -79
- package/lib/commonjs/ui/screens/mandate-setup-success-screen.js.map +0 -1
- package/lib/commonjs/ui/widgets/layout-w-header.js +0 -106
- package/lib/commonjs/ui/widgets/layout-w-header.js.map +0 -1
- package/lib/commonjs/ui/widgets/stepper.js +0 -124
- package/lib/commonjs/ui/widgets/stepper.js.map +0 -1
- package/lib/module/core/client/link-api-client.js +0 -292
- package/lib/module/core/client/link-api-client.js.map +0 -1
- package/lib/module/core/errors/payment-api-error.js +0 -29
- package/lib/module/core/errors/payment-api-error.js.map +0 -1
- package/lib/module/core/models/link-session-status.js +0 -10
- package/lib/module/core/models/link-session-status.js.map +0 -1
- package/lib/module/core/models/payment-type.js +0 -36
- package/lib/module/core/models/payment-type.js.map +0 -1
- package/lib/module/core/models/wire-mappers.js +0 -263
- package/lib/module/core/models/wire-mappers.js.map +0 -1
- package/lib/module/core/services/consent-presenter.js +0 -140
- package/lib/module/core/services/consent-presenter.js.map +0 -1
- package/lib/module/core/services/execute-resume-if-needed.js +0 -211
- package/lib/module/core/services/execute-resume-if-needed.js.map +0 -1
- package/lib/module/core/services/multi-payment-rules-presenter.js +0 -146
- package/lib/module/core/services/multi-payment-rules-presenter.js.map +0 -1
- package/lib/module/core/services/payment-flow-controller.js +0 -544
- package/lib/module/core/services/payment-flow-controller.js.map +0 -1
- package/lib/module/core/services/payment-flow-state.js +0 -106
- package/lib/module/core/services/payment-flow-state.js.map +0 -1
- package/lib/module/core/services/payment-result-mapper.js +0 -45
- package/lib/module/core/services/payment-result-mapper.js.map +0 -1
- package/lib/module/core/services/presentation-utils.js +0 -7
- package/lib/module/core/services/presentation-utils.js.map +0 -1
- package/lib/module/core/services/redirect-buffer.js +0 -33
- package/lib/module/core/services/redirect-buffer.js.map +0 -1
- package/lib/module/core/services/user-friendly-messages.js +0 -42
- package/lib/module/core/services/user-friendly-messages.js.map +0 -1
- package/lib/module/internal/telemetry-collector.js +0 -75
- package/lib/module/internal/telemetry-collector.js.map +0 -1
- package/lib/module/public/constants.js +0 -17
- package/lib/module/public/constants.js.map +0 -1
- package/lib/module/public/spare-link-callbacks.js +0 -4
- package/lib/module/public/spare-link-callbacks.js.map +0 -1
- package/lib/module/ui/consent/charge-bearer-display.js +0 -95
- package/lib/module/ui/consent/charge-bearer-display.js.map +0 -1
- package/lib/module/ui/consent/consent-accordion.js +0 -90
- package/lib/module/ui/consent/consent-accordion.js.map +0 -1
- package/lib/module/ui/consent/consent-summary-section.js +0 -23
- package/lib/module/ui/consent/consent-summary-section.js.map +0 -1
- package/lib/module/ui/consent/cop-information.js +0 -165
- package/lib/module/ui/consent/cop-information.js.map +0 -1
- package/lib/module/ui/consent/international-payment-summary.js +0 -94
- package/lib/module/ui/consent/international-payment-summary.js.map +0 -1
- package/lib/module/ui/consent/label-value-rows.js +0 -55
- package/lib/module/ui/consent/label-value-rows.js.map +0 -1
- package/lib/module/ui/consent/multi-payment-rules-list.js +0 -125
- package/lib/module/ui/consent/multi-payment-rules-list.js.map +0 -1
- package/lib/module/ui/consent/multi-payment-summary.js +0 -95
- package/lib/module/ui/consent/multi-payment-summary.js.map +0 -1
- package/lib/module/ui/consent/single-payment-summary.js +0 -154
- package/lib/module/ui/consent/single-payment-summary.js.map +0 -1
- package/lib/module/ui/consent/terms-link.js +0 -31
- package/lib/module/ui/consent/terms-link.js.map +0 -1
- package/lib/module/ui/hooks/use-payment-flow-state.js.map +0 -1
- package/lib/module/ui/payment-flow-page.js +0 -232
- package/lib/module/ui/payment-flow-page.js.map +0 -1
- package/lib/module/ui/screens/bank-selection-screen.js +0 -211
- package/lib/module/ui/screens/bank-selection-screen.js.map +0 -1
- package/lib/module/ui/screens/consent-details-screen.js +0 -120
- package/lib/module/ui/screens/consent-details-screen.js.map +0 -1
- package/lib/module/ui/screens/mandate-setup-success-screen.js +0 -75
- package/lib/module/ui/screens/mandate-setup-success-screen.js.map +0 -1
- package/lib/module/ui/widgets/layout-w-header.js +0 -102
- package/lib/module/ui/widgets/layout-w-header.js.map +0 -1
- package/lib/module/ui/widgets/stepper.js +0 -120
- package/lib/module/ui/widgets/stepper.js.map +0 -1
- package/lib/typescript/commonjs/core/client/link-api-client.d.ts +0 -70
- package/lib/typescript/commonjs/core/client/link-api-client.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/errors/payment-api-error.d.ts +0 -15
- package/lib/typescript/commonjs/core/errors/payment-api-error.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/models/link-session-status.d.ts +0 -6
- package/lib/typescript/commonjs/core/models/link-session-status.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/models/payment-type.d.ts +0 -18
- package/lib/typescript/commonjs/core/models/payment-type.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/models/wire-mappers.d.ts +0 -19
- package/lib/typescript/commonjs/core/models/wire-mappers.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/consent-presenter.d.ts +0 -67
- package/lib/typescript/commonjs/core/services/consent-presenter.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/execute-resume-if-needed.d.ts +0 -32
- package/lib/typescript/commonjs/core/services/execute-resume-if-needed.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/multi-payment-rules-presenter.d.ts +0 -9
- package/lib/typescript/commonjs/core/services/multi-payment-rules-presenter.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/payment-flow-controller.d.ts +0 -146
- package/lib/typescript/commonjs/core/services/payment-flow-controller.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/payment-flow-state.d.ts +0 -64
- package/lib/typescript/commonjs/core/services/payment-flow-state.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/payment-result-mapper.d.ts +0 -5
- package/lib/typescript/commonjs/core/services/payment-result-mapper.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/presentation-utils.d.ts +0 -5
- package/lib/typescript/commonjs/core/services/presentation-utils.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/redirect-buffer.d.ts +0 -6
- package/lib/typescript/commonjs/core/services/redirect-buffer.d.ts.map +0 -1
- package/lib/typescript/commonjs/core/services/user-friendly-messages.d.ts +0 -6
- package/lib/typescript/commonjs/core/services/user-friendly-messages.d.ts.map +0 -1
- package/lib/typescript/commonjs/internal/telemetry-collector.d.ts +0 -2
- package/lib/typescript/commonjs/internal/telemetry-collector.d.ts.map +0 -1
- package/lib/typescript/commonjs/public/constants.d.ts +0 -12
- package/lib/typescript/commonjs/public/constants.d.ts.map +0 -1
- package/lib/typescript/commonjs/public/spare-link-callbacks.d.ts +0 -14
- package/lib/typescript/commonjs/public/spare-link-callbacks.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/charge-bearer-display.d.ts +0 -5
- package/lib/typescript/commonjs/ui/consent/charge-bearer-display.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/consent-accordion.d.ts +0 -10
- package/lib/typescript/commonjs/ui/consent/consent-accordion.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/consent-summary-section.d.ts +0 -6
- package/lib/typescript/commonjs/ui/consent/consent-summary-section.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/cop-information.d.ts +0 -6
- package/lib/typescript/commonjs/ui/consent/cop-information.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/international-payment-summary.d.ts +0 -6
- package/lib/typescript/commonjs/ui/consent/international-payment-summary.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/label-value-rows.d.ts +0 -10
- package/lib/typescript/commonjs/ui/consent/label-value-rows.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/multi-payment-rules-list.d.ts +0 -15
- package/lib/typescript/commonjs/ui/consent/multi-payment-rules-list.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/multi-payment-summary.d.ts +0 -6
- package/lib/typescript/commonjs/ui/consent/multi-payment-summary.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/single-payment-summary.d.ts +0 -6
- package/lib/typescript/commonjs/ui/consent/single-payment-summary.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/consent/terms-link.d.ts +0 -2
- package/lib/typescript/commonjs/ui/consent/terms-link.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/hooks/use-payment-flow-state.d.ts +0 -9
- package/lib/typescript/commonjs/ui/hooks/use-payment-flow-state.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/payment-flow-page.d.ts +0 -20
- package/lib/typescript/commonjs/ui/payment-flow-page.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/bank-selection-screen.d.ts +0 -15
- package/lib/typescript/commonjs/ui/screens/bank-selection-screen.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/consent-details-screen.d.ts +0 -13
- package/lib/typescript/commonjs/ui/screens/consent-details-screen.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/screens/mandate-setup-success-screen.d.ts +0 -10
- package/lib/typescript/commonjs/ui/screens/mandate-setup-success-screen.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/widgets/layout-w-header.d.ts +0 -20
- package/lib/typescript/commonjs/ui/widgets/layout-w-header.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/widgets/stepper.d.ts +0 -15
- package/lib/typescript/commonjs/ui/widgets/stepper.d.ts.map +0 -1
- package/lib/typescript/module/core/client/link-api-client.d.ts +0 -70
- package/lib/typescript/module/core/client/link-api-client.d.ts.map +0 -1
- package/lib/typescript/module/core/errors/payment-api-error.d.ts +0 -15
- package/lib/typescript/module/core/errors/payment-api-error.d.ts.map +0 -1
- package/lib/typescript/module/core/models/link-session-status.d.ts +0 -6
- package/lib/typescript/module/core/models/link-session-status.d.ts.map +0 -1
- package/lib/typescript/module/core/models/payment-type.d.ts +0 -18
- package/lib/typescript/module/core/models/payment-type.d.ts.map +0 -1
- package/lib/typescript/module/core/models/wire-mappers.d.ts +0 -19
- package/lib/typescript/module/core/models/wire-mappers.d.ts.map +0 -1
- package/lib/typescript/module/core/services/consent-presenter.d.ts +0 -67
- package/lib/typescript/module/core/services/consent-presenter.d.ts.map +0 -1
- package/lib/typescript/module/core/services/execute-resume-if-needed.d.ts +0 -32
- package/lib/typescript/module/core/services/execute-resume-if-needed.d.ts.map +0 -1
- package/lib/typescript/module/core/services/multi-payment-rules-presenter.d.ts +0 -9
- package/lib/typescript/module/core/services/multi-payment-rules-presenter.d.ts.map +0 -1
- package/lib/typescript/module/core/services/payment-flow-controller.d.ts +0 -146
- package/lib/typescript/module/core/services/payment-flow-controller.d.ts.map +0 -1
- package/lib/typescript/module/core/services/payment-flow-state.d.ts +0 -64
- package/lib/typescript/module/core/services/payment-flow-state.d.ts.map +0 -1
- package/lib/typescript/module/core/services/payment-result-mapper.d.ts +0 -5
- package/lib/typescript/module/core/services/payment-result-mapper.d.ts.map +0 -1
- package/lib/typescript/module/core/services/presentation-utils.d.ts +0 -5
- package/lib/typescript/module/core/services/presentation-utils.d.ts.map +0 -1
- package/lib/typescript/module/core/services/redirect-buffer.d.ts +0 -6
- package/lib/typescript/module/core/services/redirect-buffer.d.ts.map +0 -1
- package/lib/typescript/module/core/services/user-friendly-messages.d.ts +0 -6
- package/lib/typescript/module/core/services/user-friendly-messages.d.ts.map +0 -1
- package/lib/typescript/module/internal/telemetry-collector.d.ts +0 -2
- package/lib/typescript/module/internal/telemetry-collector.d.ts.map +0 -1
- package/lib/typescript/module/public/constants.d.ts +0 -12
- package/lib/typescript/module/public/constants.d.ts.map +0 -1
- package/lib/typescript/module/public/spare-link-callbacks.d.ts +0 -14
- package/lib/typescript/module/public/spare-link-callbacks.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/charge-bearer-display.d.ts +0 -5
- package/lib/typescript/module/ui/consent/charge-bearer-display.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/consent-accordion.d.ts +0 -10
- package/lib/typescript/module/ui/consent/consent-accordion.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/consent-summary-section.d.ts +0 -6
- package/lib/typescript/module/ui/consent/consent-summary-section.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/cop-information.d.ts +0 -6
- package/lib/typescript/module/ui/consent/cop-information.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/international-payment-summary.d.ts +0 -6
- package/lib/typescript/module/ui/consent/international-payment-summary.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/label-value-rows.d.ts +0 -10
- package/lib/typescript/module/ui/consent/label-value-rows.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/multi-payment-rules-list.d.ts +0 -15
- package/lib/typescript/module/ui/consent/multi-payment-rules-list.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/multi-payment-summary.d.ts +0 -6
- package/lib/typescript/module/ui/consent/multi-payment-summary.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/single-payment-summary.d.ts +0 -6
- package/lib/typescript/module/ui/consent/single-payment-summary.d.ts.map +0 -1
- package/lib/typescript/module/ui/consent/terms-link.d.ts +0 -2
- package/lib/typescript/module/ui/consent/terms-link.d.ts.map +0 -1
- package/lib/typescript/module/ui/hooks/use-payment-flow-state.d.ts +0 -9
- package/lib/typescript/module/ui/hooks/use-payment-flow-state.d.ts.map +0 -1
- package/lib/typescript/module/ui/payment-flow-page.d.ts +0 -20
- package/lib/typescript/module/ui/payment-flow-page.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/bank-selection-screen.d.ts +0 -15
- package/lib/typescript/module/ui/screens/bank-selection-screen.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/consent-details-screen.d.ts +0 -13
- package/lib/typescript/module/ui/screens/consent-details-screen.d.ts.map +0 -1
- package/lib/typescript/module/ui/screens/mandate-setup-success-screen.d.ts +0 -10
- package/lib/typescript/module/ui/screens/mandate-setup-success-screen.d.ts.map +0 -1
- package/lib/typescript/module/ui/widgets/layout-w-header.d.ts +0 -20
- package/lib/typescript/module/ui/widgets/layout-w-header.d.ts.map +0 -1
- package/lib/typescript/module/ui/widgets/stepper.d.ts +0 -15
- package/lib/typescript/module/ui/widgets/stepper.d.ts.map +0 -1
- package/src/core/client/link-api-client.ts +0 -414
- package/src/core/errors/payment-api-error.ts +0 -35
- package/src/core/models/link-session-status.ts +0 -7
- package/src/core/models/payment-type.ts +0 -54
- package/src/core/models/wire-mappers.ts +0 -315
- package/src/core/services/consent-presenter.ts +0 -213
- package/src/core/services/execute-resume-if-needed.ts +0 -243
- package/src/core/services/multi-payment-rules-presenter.ts +0 -158
- package/src/core/services/payment-flow-controller.ts +0 -607
- package/src/core/services/payment-flow-state.ts +0 -124
- package/src/core/services/payment-result-mapper.ts +0 -41
- package/src/core/services/presentation-utils.ts +0 -4
- package/src/core/services/redirect-buffer.ts +0 -34
- package/src/core/services/user-friendly-messages.ts +0 -39
- package/src/internal/telemetry-collector.ts +0 -90
- package/src/public/constants.ts +0 -14
- package/src/public/spare-link-callbacks.ts +0 -20
- package/src/ui/consent/charge-bearer-display.tsx +0 -68
- package/src/ui/consent/consent-accordion.tsx +0 -89
- package/src/ui/consent/consent-summary-section.tsx +0 -19
- package/src/ui/consent/cop-information.tsx +0 -121
- package/src/ui/consent/international-payment-summary.tsx +0 -83
- package/src/ui/consent/label-value-rows.tsx +0 -50
- package/src/ui/consent/multi-payment-rules-list.tsx +0 -138
- package/src/ui/consent/multi-payment-summary.tsx +0 -82
- package/src/ui/consent/single-payment-summary.tsx +0 -123
- package/src/ui/consent/terms-link.tsx +0 -27
- package/src/ui/hooks/use-payment-flow-state.ts +0 -16
- package/src/ui/payment-flow-page.tsx +0 -254
- package/src/ui/screens/bank-selection-screen.tsx +0 -209
- package/src/ui/screens/consent-details-screen.tsx +0 -106
- package/src/ui/screens/mandate-setup-success-screen.tsx +0 -72
- package/src/ui/widgets/layout-w-header.tsx +0 -89
- package/src/ui/widgets/stepper.tsx +0 -126
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
import { useEffect, useRef, useState } from 'react';
|
|
2
|
-
import { ActivityIndicator, StyleSheet, View } from 'react-native';
|
|
3
|
-
import { Text } from 'react-native';
|
|
4
|
-
import { isMultiPayment, resolvedPaymentType } from '../core/models/payment-type';
|
|
5
|
-
import { summaryFromState } from '../core/services/consent-presenter';
|
|
6
|
-
import {
|
|
7
|
-
buildMultiPaymentRules,
|
|
8
|
-
rulesSectionTitle,
|
|
9
|
-
} from '../core/services/multi-payment-rules-presenter';
|
|
10
|
-
import type { PaymentFlowController } from '../core/services/payment-flow-controller';
|
|
11
|
-
import { userFriendlyMessageFor } from '../core/services/user-friendly-messages';
|
|
12
|
-
import { DEFAULT_AWAITING_CALLBACK_POLL_MS } from '../public/constants';
|
|
13
|
-
import type { SpareLinkCallbacks } from '../public/spare-link-callbacks';
|
|
14
|
-
import { usePaymentFlowState } from './hooks/use-payment-flow-state';
|
|
15
|
-
import { BankSelectionScreen } from './screens/bank-selection-screen';
|
|
16
|
-
import { ConsentDetailsScreen } from './screens/consent-details-screen';
|
|
17
|
-
import { MandateSetupSuccessScreen } from './screens/mandate-setup-success-screen';
|
|
18
|
-
import { RedirectHandoffScreen } from './screens/redirect-handoff-screen';
|
|
19
|
-
import { ResultScreen } from './screens/result-screen';
|
|
20
|
-
import { ResumeProcessingScreen } from './screens/resume-processing-screen';
|
|
21
|
-
import { Colors, Typography } from './theme';
|
|
22
|
-
|
|
23
|
-
export interface PaymentFlowPageProps {
|
|
24
|
-
controller: PaymentFlowController;
|
|
25
|
-
/** Called when the flow resolves to a terminal phase. Hosts the Modal close. */
|
|
26
|
-
onResolved: () => void;
|
|
27
|
-
callbacks?: SpareLinkCallbacks;
|
|
28
|
-
/**
|
|
29
|
-
* Bank redirect launcher. Defaults to a noop in tests (the SDK substitutes
|
|
30
|
-
* the real `BankRedirect.launch` in {@link SpareLinkHost}). Receives the
|
|
31
|
-
* consent's `authorizationUrl` (+ optional bank `mobileAppUrl`) and returns
|
|
32
|
-
* once the system has handed off to the bank.
|
|
33
|
-
*/
|
|
34
|
-
launchBankRedirect?: (args: { authorizationUrl: string; mobileAppUrl?: string }) => Promise<void>;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export function PaymentFlowPage(props: PaymentFlowPageProps): JSX.Element {
|
|
38
|
-
const { controller, onResolved, launchBankRedirect } = props;
|
|
39
|
-
const state = usePaymentFlowState(controller);
|
|
40
|
-
const [processing, setProcessing] = useState(false);
|
|
41
|
-
const [mandateAcknowledged, setMandateAcknowledged] = useState(false);
|
|
42
|
-
const hydratedRef = useRef(false);
|
|
43
|
-
const terminalFiredRef = useRef(false);
|
|
44
|
-
const mandateClosedRef = useRef(false);
|
|
45
|
-
|
|
46
|
-
useEffect(() => {
|
|
47
|
-
if (hydratedRef.current) return;
|
|
48
|
-
hydratedRef.current = true;
|
|
49
|
-
// Recovery parks at awaitingCallback before mount (Flutter parity) — GET /link
|
|
50
|
-
// is one-time and must not be called again on resume.
|
|
51
|
-
if (controller.state.phase !== 'idle') return;
|
|
52
|
-
void controller.hydrate().catch(() => {
|
|
53
|
-
// hydrate already setStates failed — callback will fire below.
|
|
54
|
-
});
|
|
55
|
-
}, [controller]);
|
|
56
|
-
|
|
57
|
-
// Launch bank redirect once we hit `redirecting`.
|
|
58
|
-
useEffect(() => {
|
|
59
|
-
if (state.phase !== 'redirecting' || !state.consent) return;
|
|
60
|
-
const consent = state.consent;
|
|
61
|
-
let cancelled = false;
|
|
62
|
-
(async () => {
|
|
63
|
-
try {
|
|
64
|
-
await launchBankRedirect?.({
|
|
65
|
-
authorizationUrl: consent.redirectUrl,
|
|
66
|
-
...(consent.mobileAppUrl ? { mobileAppUrl: consent.mobileAppUrl } : {}),
|
|
67
|
-
});
|
|
68
|
-
if (cancelled) return;
|
|
69
|
-
controller.fireEvent('redirectToBank');
|
|
70
|
-
controller.setAwaitingCallbackState({
|
|
71
|
-
...(state.selectedProvider ? { providerName: state.selectedProvider.name } : {}),
|
|
72
|
-
});
|
|
73
|
-
} catch {
|
|
74
|
-
if (!cancelled) {
|
|
75
|
-
void controller.reportError('bank_launch_failed');
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
})();
|
|
79
|
-
return () => {
|
|
80
|
-
cancelled = true;
|
|
81
|
-
};
|
|
82
|
-
}, [state.phase, state.consent, state.selectedProvider, launchBankRedirect, controller]);
|
|
83
|
-
|
|
84
|
-
// Poll /link/status while waiting for the bank — production and sandbox.
|
|
85
|
-
useEffect(() => {
|
|
86
|
-
if (state.phase !== 'awaitingCallback') return;
|
|
87
|
-
const id = setInterval(() => {
|
|
88
|
-
void controller.pollStatus();
|
|
89
|
-
}, DEFAULT_AWAITING_CALLBACK_POLL_MS);
|
|
90
|
-
return () => clearInterval(id);
|
|
91
|
-
}, [state.phase, controller]);
|
|
92
|
-
|
|
93
|
-
// Fire terminal callbacks exactly once.
|
|
94
|
-
// or re-delivered terminal state (e.g. a duplicate callback) can't fire
|
|
95
|
-
// onSuccess/onEvent twice — integrators treat onSuccess as fire-once
|
|
96
|
-
// (navigate, capture funds, record analytics).
|
|
97
|
-
useEffect(() => {
|
|
98
|
-
const phase = state.phase;
|
|
99
|
-
if (phase !== 'succeeded' && phase !== 'failed' && phase !== 'cancelled') return;
|
|
100
|
-
if (terminalFiredRef.current) return;
|
|
101
|
-
if (phase === 'succeeded') {
|
|
102
|
-
const request = state.session?.request;
|
|
103
|
-
if (request && isMultiPayment(request) && !mandateAcknowledged) return;
|
|
104
|
-
}
|
|
105
|
-
terminalFiredRef.current = true;
|
|
106
|
-
if (phase === 'succeeded') {
|
|
107
|
-
props.callbacks?.onSuccess?.(state.exchangeCode, state.linkSessionId);
|
|
108
|
-
props.callbacks?.onEvent?.('succeeded');
|
|
109
|
-
} else if (phase === 'failed') {
|
|
110
|
-
props.callbacks?.onEvent?.('failed');
|
|
111
|
-
} else {
|
|
112
|
-
props.callbacks?.onEvent?.('cancelled');
|
|
113
|
-
}
|
|
114
|
-
}, [
|
|
115
|
-
state.phase,
|
|
116
|
-
state.exchangeCode,
|
|
117
|
-
state.linkSessionId,
|
|
118
|
-
state.session,
|
|
119
|
-
mandateAcknowledged,
|
|
120
|
-
props.callbacks,
|
|
121
|
-
]);
|
|
122
|
-
|
|
123
|
-
useEffect(() => {
|
|
124
|
-
if (state.phase !== 'succeeded' || !mandateAcknowledged || mandateClosedRef.current) return;
|
|
125
|
-
const request = state.session?.request;
|
|
126
|
-
if (!request || !isMultiPayment(request)) return;
|
|
127
|
-
mandateClosedRef.current = true;
|
|
128
|
-
onResolved();
|
|
129
|
-
}, [state.phase, state.session, mandateAcknowledged, onResolved]);
|
|
130
|
-
|
|
131
|
-
switch (state.phase) {
|
|
132
|
-
case 'idle':
|
|
133
|
-
case 'hydrating':
|
|
134
|
-
return <LoadingState />;
|
|
135
|
-
|
|
136
|
-
case 'bankSelection':
|
|
137
|
-
return (
|
|
138
|
-
<BankSelectionScreen
|
|
139
|
-
providers={state.providers}
|
|
140
|
-
isProcessing={processing}
|
|
141
|
-
onSelected={async (bankId) => {
|
|
142
|
-
setProcessing(true);
|
|
143
|
-
try {
|
|
144
|
-
controller.selectBank(bankId);
|
|
145
|
-
} finally {
|
|
146
|
-
setProcessing(false);
|
|
147
|
-
}
|
|
148
|
-
}}
|
|
149
|
-
onCancel={async () => {
|
|
150
|
-
setProcessing(true);
|
|
151
|
-
try {
|
|
152
|
-
await controller.cancel();
|
|
153
|
-
} finally {
|
|
154
|
-
setProcessing(false);
|
|
155
|
-
}
|
|
156
|
-
}}
|
|
157
|
-
/>
|
|
158
|
-
);
|
|
159
|
-
|
|
160
|
-
case 'consentDetails': {
|
|
161
|
-
const summary = summaryFromState(state);
|
|
162
|
-
if (!summary) return <LoadingState />;
|
|
163
|
-
return (
|
|
164
|
-
<ConsentDetailsScreen
|
|
165
|
-
display={summary}
|
|
166
|
-
isProcessing={processing}
|
|
167
|
-
{...(state.isCopLoading ? { isCopLoading: true } : {})}
|
|
168
|
-
onContinue={async () => {
|
|
169
|
-
setProcessing(true);
|
|
170
|
-
try {
|
|
171
|
-
await controller.confirmConsent();
|
|
172
|
-
} catch {
|
|
173
|
-
// controller already setStates failed
|
|
174
|
-
} finally {
|
|
175
|
-
setProcessing(false);
|
|
176
|
-
}
|
|
177
|
-
}}
|
|
178
|
-
onCancel={async () => {
|
|
179
|
-
setProcessing(true);
|
|
180
|
-
try {
|
|
181
|
-
await controller.cancel();
|
|
182
|
-
} finally {
|
|
183
|
-
setProcessing(false);
|
|
184
|
-
}
|
|
185
|
-
}}
|
|
186
|
-
/>
|
|
187
|
-
);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
case 'redirecting':
|
|
191
|
-
return <RedirectHandoffScreen />;
|
|
192
|
-
|
|
193
|
-
case 'awaitingCallback':
|
|
194
|
-
return (
|
|
195
|
-
<ResumeProcessingScreen
|
|
196
|
-
{...(controller.awaitingCallbackStartedAtMs !== undefined
|
|
197
|
-
? { awaitingCallbackStartedAtMs: controller.awaitingCallbackStartedAtMs }
|
|
198
|
-
: {})}
|
|
199
|
-
onCancel={async () => {
|
|
200
|
-
await controller.cancel();
|
|
201
|
-
}}
|
|
202
|
-
/>
|
|
203
|
-
);
|
|
204
|
-
|
|
205
|
-
case 'succeeded': {
|
|
206
|
-
const request = state.session?.request;
|
|
207
|
-
if (request && isMultiPayment(request) && !mandateAcknowledged) {
|
|
208
|
-
const paymentType = resolvedPaymentType(request);
|
|
209
|
-
return (
|
|
210
|
-
<MandateSetupSuccessScreen
|
|
211
|
-
rulesTitle={rulesSectionTitle(paymentType)}
|
|
212
|
-
rules={buildMultiPaymentRules(paymentType, request.instructions)}
|
|
213
|
-
paymentType={paymentType}
|
|
214
|
-
onDone={() => setMandateAcknowledged(true)}
|
|
215
|
-
/>
|
|
216
|
-
);
|
|
217
|
-
}
|
|
218
|
-
return <ResultScreen title="Your payment was successful." isSuccess onDone={onResolved} />;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
case 'failed':
|
|
222
|
-
return (
|
|
223
|
-
<ResultScreen
|
|
224
|
-
title={userFriendlyMessageFor(state.errorCode ?? 'unknown_error')}
|
|
225
|
-
isSuccess={false}
|
|
226
|
-
onDone={onResolved}
|
|
227
|
-
/>
|
|
228
|
-
);
|
|
229
|
-
|
|
230
|
-
case 'cancelled':
|
|
231
|
-
return (
|
|
232
|
-
<ResultScreen title="The payment was cancelled." isSuccess={false} onDone={onResolved} />
|
|
233
|
-
);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
function LoadingState(): JSX.Element {
|
|
238
|
-
return (
|
|
239
|
-
<View style={styles.loading} testID="payment-flow-loading">
|
|
240
|
-
<ActivityIndicator size="large" color={Colors.spareBlue} />
|
|
241
|
-
<Text style={Typography.bodyMuted}>Loading…</Text>
|
|
242
|
-
</View>
|
|
243
|
-
);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
const styles = StyleSheet.create({
|
|
247
|
-
loading: {
|
|
248
|
-
flex: 1,
|
|
249
|
-
alignItems: 'center',
|
|
250
|
-
justifyContent: 'center',
|
|
251
|
-
gap: 12,
|
|
252
|
-
backgroundColor: Colors.surfacePage,
|
|
253
|
-
},
|
|
254
|
-
});
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
import { Ionicons } from '@expo/vector-icons';
|
|
2
|
-
import { useMemo, useState } from 'react';
|
|
3
|
-
import { Image, Pressable, StyleSheet, Text, TextInput, View } from 'react-native';
|
|
4
|
-
import type { ProviderSummary } from '../../core/models';
|
|
5
|
-
import { Colors, FONT_FAMILY, Spacing } from '../theme';
|
|
6
|
-
import { Footer, LayoutWHeader } from '../widgets';
|
|
7
|
-
|
|
8
|
-
export interface BankSelectionScreenProps {
|
|
9
|
-
providers: ProviderSummary[];
|
|
10
|
-
onSelected: (bankId: string) => void;
|
|
11
|
-
onCancel: () => void;
|
|
12
|
-
isProcessing?: boolean;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* CBUAE-approved bank picker. Port of Flutter `bank_selection_screen.dart`:
|
|
17
|
-
* "Choose your bank" inside a white card with a search field and logo rows
|
|
18
|
-
* (blue-outline selection), wrapped in the shared {@link LayoutWHeader} stepper
|
|
19
|
-
* chrome with a "Proceed using Altareq" footer.
|
|
20
|
-
*/
|
|
21
|
-
export function BankSelectionScreen(props: BankSelectionScreenProps): JSX.Element {
|
|
22
|
-
const [query, setQuery] = useState('');
|
|
23
|
-
const [selectedId, setSelectedId] = useState<string | undefined>(undefined);
|
|
24
|
-
|
|
25
|
-
const trimmed = query.trim().toLowerCase();
|
|
26
|
-
const filtered = useMemo(
|
|
27
|
-
() =>
|
|
28
|
-
trimmed
|
|
29
|
-
? props.providers.filter((p) => p.name.toLowerCase().includes(trimmed))
|
|
30
|
-
: props.providers,
|
|
31
|
-
[props.providers, trimmed],
|
|
32
|
-
);
|
|
33
|
-
|
|
34
|
-
const isBankSelected = !!selectedId;
|
|
35
|
-
|
|
36
|
-
return (
|
|
37
|
-
<LayoutWHeader
|
|
38
|
-
progress={0}
|
|
39
|
-
onBackPress={props.onCancel}
|
|
40
|
-
{...(props.isProcessing ? { backDisabled: true } : {})}
|
|
41
|
-
>
|
|
42
|
-
<View style={styles.container} testID="bank-selection-screen">
|
|
43
|
-
<View style={styles.card}>
|
|
44
|
-
<Text style={styles.cardTitle} testID="bank-selection-title">
|
|
45
|
-
Choose your bank
|
|
46
|
-
</Text>
|
|
47
|
-
<View style={styles.searchRow}>
|
|
48
|
-
<TextInput
|
|
49
|
-
accessibilityLabel="Search account providers"
|
|
50
|
-
testID="bank-selection-search"
|
|
51
|
-
value={query}
|
|
52
|
-
onChangeText={setQuery}
|
|
53
|
-
placeholder="Enter account provider..."
|
|
54
|
-
placeholderTextColor={Colors.textMuted}
|
|
55
|
-
style={styles.searchInput}
|
|
56
|
-
/>
|
|
57
|
-
{query.length > 0 ? (
|
|
58
|
-
<Pressable
|
|
59
|
-
accessibilityRole="button"
|
|
60
|
-
testID="bank-selection-search-clear"
|
|
61
|
-
onPress={() => setQuery('')}
|
|
62
|
-
hitSlop={8}
|
|
63
|
-
>
|
|
64
|
-
<Ionicons name="close" size={18} color={Colors.textMuted} />
|
|
65
|
-
</Pressable>
|
|
66
|
-
) : (
|
|
67
|
-
<Ionicons name="search" size={18} color={Colors.textMuted} />
|
|
68
|
-
)}
|
|
69
|
-
</View>
|
|
70
|
-
|
|
71
|
-
{filtered.length === 0 ? (
|
|
72
|
-
<Text testID="bank-selection-empty" style={styles.empty}>
|
|
73
|
-
{trimmed ? `No banks match "${query.trim()}"` : 'No banks available'}
|
|
74
|
-
</Text>
|
|
75
|
-
) : (
|
|
76
|
-
filtered.map((provider) => (
|
|
77
|
-
<BankRow
|
|
78
|
-
key={provider.id}
|
|
79
|
-
provider={provider}
|
|
80
|
-
isSelected={provider.id === selectedId}
|
|
81
|
-
onPress={() => setSelectedId(provider.id)}
|
|
82
|
-
/>
|
|
83
|
-
))
|
|
84
|
-
)}
|
|
85
|
-
</View>
|
|
86
|
-
|
|
87
|
-
<View style={styles.spacer} />
|
|
88
|
-
|
|
89
|
-
<Footer
|
|
90
|
-
continueButtonText="Proceed using Altareq"
|
|
91
|
-
continueTestID="bank-selection-continue-btn"
|
|
92
|
-
cancelTestID="bank-selection-cancel-btn"
|
|
93
|
-
onCancel={props.onCancel}
|
|
94
|
-
disabledContinueButton={!isBankSelected}
|
|
95
|
-
{...(isBankSelected ? { onContinue: () => props.onSelected(selectedId as string) } : {})}
|
|
96
|
-
{...(props.isProcessing ? { isLoading: true } : {})}
|
|
97
|
-
/>
|
|
98
|
-
</View>
|
|
99
|
-
</LayoutWHeader>
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function BankRow(props: {
|
|
104
|
-
provider: ProviderSummary;
|
|
105
|
-
isSelected: boolean;
|
|
106
|
-
onPress: () => void;
|
|
107
|
-
}): JSX.Element {
|
|
108
|
-
const { provider, isSelected } = props;
|
|
109
|
-
const [logoFailed, setLogoFailed] = useState(false);
|
|
110
|
-
const showLogo = !!provider.logoUrl && !logoFailed;
|
|
111
|
-
return (
|
|
112
|
-
<Pressable
|
|
113
|
-
testID={`bank-row-${provider.code}`}
|
|
114
|
-
accessibilityRole="button"
|
|
115
|
-
onPress={props.onPress}
|
|
116
|
-
style={[styles.row, isSelected && styles.rowSelected]}
|
|
117
|
-
>
|
|
118
|
-
{showLogo ? (
|
|
119
|
-
<Image
|
|
120
|
-
source={{ uri: provider.logoUrl }}
|
|
121
|
-
style={styles.logo}
|
|
122
|
-
resizeMode="contain"
|
|
123
|
-
onError={() => setLogoFailed(true)}
|
|
124
|
-
/>
|
|
125
|
-
) : (
|
|
126
|
-
<View style={[styles.logo, styles.logoFallback]}>
|
|
127
|
-
<Ionicons name="business-outline" size={20} color={Colors.textMuted} />
|
|
128
|
-
</View>
|
|
129
|
-
)}
|
|
130
|
-
<Text style={[styles.rowName, isSelected && styles.rowNameSelected]} numberOfLines={1}>
|
|
131
|
-
{provider.name}
|
|
132
|
-
</Text>
|
|
133
|
-
</Pressable>
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const styles = StyleSheet.create({
|
|
138
|
-
container: { flex: 1 },
|
|
139
|
-
card: {
|
|
140
|
-
backgroundColor: Colors.surfaceCard,
|
|
141
|
-
borderRadius: 12,
|
|
142
|
-
paddingHorizontal: 12,
|
|
143
|
-
paddingVertical: 16,
|
|
144
|
-
borderWidth: StyleSheet.hairlineWidth,
|
|
145
|
-
borderColor: Colors.divider,
|
|
146
|
-
shadowColor: '#000000',
|
|
147
|
-
shadowOpacity: 0.06,
|
|
148
|
-
shadowRadius: 6,
|
|
149
|
-
shadowOffset: { width: 0, height: 2 },
|
|
150
|
-
elevation: 2,
|
|
151
|
-
},
|
|
152
|
-
cardTitle: {
|
|
153
|
-
fontFamily: FONT_FAMILY,
|
|
154
|
-
fontSize: 16,
|
|
155
|
-
fontWeight: '700',
|
|
156
|
-
color: Colors.textPrimary,
|
|
157
|
-
marginBottom: 12,
|
|
158
|
-
},
|
|
159
|
-
searchRow: {
|
|
160
|
-
flexDirection: 'row',
|
|
161
|
-
alignItems: 'center',
|
|
162
|
-
borderWidth: StyleSheet.hairlineWidth,
|
|
163
|
-
borderColor: Colors.divider,
|
|
164
|
-
borderRadius: 12,
|
|
165
|
-
paddingHorizontal: 12,
|
|
166
|
-
height: 44,
|
|
167
|
-
marginBottom: Spacing.md,
|
|
168
|
-
},
|
|
169
|
-
searchInput: {
|
|
170
|
-
flex: 1,
|
|
171
|
-
fontFamily: FONT_FAMILY,
|
|
172
|
-
fontSize: 14,
|
|
173
|
-
color: Colors.textPrimary,
|
|
174
|
-
paddingVertical: 0,
|
|
175
|
-
},
|
|
176
|
-
empty: {
|
|
177
|
-
fontFamily: FONT_FAMILY,
|
|
178
|
-
fontSize: 14,
|
|
179
|
-
color: Colors.textMuted,
|
|
180
|
-
textAlign: 'center',
|
|
181
|
-
paddingVertical: Spacing.xl,
|
|
182
|
-
},
|
|
183
|
-
row: {
|
|
184
|
-
flexDirection: 'row',
|
|
185
|
-
alignItems: 'center',
|
|
186
|
-
paddingHorizontal: 12,
|
|
187
|
-
paddingVertical: 10,
|
|
188
|
-
marginVertical: 4,
|
|
189
|
-
borderRadius: 10,
|
|
190
|
-
borderWidth: 1.5,
|
|
191
|
-
borderColor: 'transparent',
|
|
192
|
-
},
|
|
193
|
-
rowSelected: { borderColor: Colors.spareBlue },
|
|
194
|
-
logo: { width: 36, height: 36, borderRadius: 4 },
|
|
195
|
-
logoFallback: {
|
|
196
|
-
backgroundColor: Colors.surfaceMuted,
|
|
197
|
-
alignItems: 'center',
|
|
198
|
-
justifyContent: 'center',
|
|
199
|
-
},
|
|
200
|
-
rowName: {
|
|
201
|
-
flex: 1,
|
|
202
|
-
marginLeft: 12,
|
|
203
|
-
fontFamily: FONT_FAMILY,
|
|
204
|
-
fontSize: 14,
|
|
205
|
-
color: Colors.textPrimary,
|
|
206
|
-
},
|
|
207
|
-
rowNameSelected: { color: Colors.spareBlue, fontWeight: '600' },
|
|
208
|
-
spacer: { flex: 1, minHeight: Spacing.xl },
|
|
209
|
-
});
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { ScrollView, StyleSheet, Text, View } from 'react-native';
|
|
2
|
-
import type { ConsentSummaryData } from '../../core/services/consent-presenter';
|
|
3
|
-
import { ConsentSummarySection } from '../consent/consent-summary-section';
|
|
4
|
-
import { present } from '../consent/label-value-rows';
|
|
5
|
-
import { Colors, FONT_FAMILY, Spacing } from '../theme';
|
|
6
|
-
import { Footer, LayoutWHeader } from '../widgets';
|
|
7
|
-
|
|
8
|
-
export interface ConsentDetailsScreenProps {
|
|
9
|
-
display: ConsentSummaryData;
|
|
10
|
-
onContinue: () => void;
|
|
11
|
-
onCancel: () => void;
|
|
12
|
-
isProcessing?: boolean;
|
|
13
|
-
isCopLoading?: boolean;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* CBUAE-approved consent screen. Port of Flutter `consent_details_screen.dart`.
|
|
18
|
-
*/
|
|
19
|
-
export function ConsentDetailsScreen(props: ConsentDetailsScreenProps): JSX.Element {
|
|
20
|
-
const { display, onContinue, onCancel, isProcessing, isCopLoading } = props;
|
|
21
|
-
const bankName = present(display.bankName, 'your bank');
|
|
22
|
-
const disableContinue =
|
|
23
|
-
isCopLoading ?? (display.variant === 'singlePayment' ? display.isCopLoading : false);
|
|
24
|
-
const backDisabled = !!isProcessing;
|
|
25
|
-
return (
|
|
26
|
-
<LayoutWHeader progress={0.5} onBackPress={onCancel} backDisabled={backDisabled}>
|
|
27
|
-
<ScrollView
|
|
28
|
-
style={styles.scroll}
|
|
29
|
-
contentContainerStyle={styles.content}
|
|
30
|
-
testID="consent-details-screen"
|
|
31
|
-
>
|
|
32
|
-
<Text style={styles.title} testID="consent-details-title">
|
|
33
|
-
Permission to make a payment
|
|
34
|
-
</Text>
|
|
35
|
-
<Text style={styles.intro} testID="consent-details-intro">
|
|
36
|
-
To make a payment we need your permission to securely initiate payment order from{' '}
|
|
37
|
-
{bankName}.
|
|
38
|
-
</Text>
|
|
39
|
-
|
|
40
|
-
<ConsentSummarySection data={display} />
|
|
41
|
-
|
|
42
|
-
{display.variant === 'multiPayment' ? (
|
|
43
|
-
<View style={styles.balancePermission} testID="consent-balance-permission">
|
|
44
|
-
<Text style={styles.title}>Permission to check balance</Text>
|
|
45
|
-
<Text style={styles.balanceIntro}>
|
|
46
|
-
You also allow us to check the available funds before making a payment
|
|
47
|
-
</Text>
|
|
48
|
-
</View>
|
|
49
|
-
) : null}
|
|
50
|
-
|
|
51
|
-
<View style={styles.footerWrap}>
|
|
52
|
-
<Footer
|
|
53
|
-
onContinue={onContinue}
|
|
54
|
-
continueButtonText="Pay using Altareq"
|
|
55
|
-
continueTestID="consent-proceed-btn"
|
|
56
|
-
showCancelButton={false}
|
|
57
|
-
disabledContinueButton={disableContinue}
|
|
58
|
-
{...(isProcessing ? { isLoading: true } : {})}
|
|
59
|
-
/>
|
|
60
|
-
</View>
|
|
61
|
-
|
|
62
|
-
<Text style={styles.disclaimer} testID="consent-details-disclaimer">
|
|
63
|
-
We will securely transfer you to{' '}
|
|
64
|
-
<Text style={styles.disclaimerBold}>{display.bankName}</Text> to authorize and make the
|
|
65
|
-
payment.
|
|
66
|
-
</Text>
|
|
67
|
-
</ScrollView>
|
|
68
|
-
</LayoutWHeader>
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const styles = StyleSheet.create({
|
|
73
|
-
scroll: { flex: 1 },
|
|
74
|
-
content: { paddingBottom: Spacing.xl },
|
|
75
|
-
title: {
|
|
76
|
-
fontFamily: FONT_FAMILY,
|
|
77
|
-
fontSize: 18,
|
|
78
|
-
fontWeight: '700',
|
|
79
|
-
color: Colors.textPrimary,
|
|
80
|
-
},
|
|
81
|
-
intro: {
|
|
82
|
-
fontFamily: FONT_FAMILY,
|
|
83
|
-
fontSize: 14,
|
|
84
|
-
color: Colors.textMuted,
|
|
85
|
-
lineHeight: 22,
|
|
86
|
-
marginTop: 10,
|
|
87
|
-
marginBottom: 20,
|
|
88
|
-
},
|
|
89
|
-
balancePermission: { marginTop: 20 },
|
|
90
|
-
balanceIntro: {
|
|
91
|
-
fontFamily: FONT_FAMILY,
|
|
92
|
-
fontSize: 14,
|
|
93
|
-
color: Colors.textMuted,
|
|
94
|
-
lineHeight: 22,
|
|
95
|
-
marginTop: Spacing.sm,
|
|
96
|
-
},
|
|
97
|
-
footerWrap: { marginTop: 20 },
|
|
98
|
-
disclaimer: {
|
|
99
|
-
fontFamily: FONT_FAMILY,
|
|
100
|
-
fontSize: 14,
|
|
101
|
-
color: Colors.textMuted,
|
|
102
|
-
lineHeight: 22,
|
|
103
|
-
marginTop: Spacing.md,
|
|
104
|
-
},
|
|
105
|
-
disclaimerBold: { fontWeight: '700', color: Colors.textMuted },
|
|
106
|
-
});
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { ScrollView, StyleSheet, Text, View } from 'react-native';
|
|
2
|
-
import type { PaymentType } from '../../core/models/payment-type';
|
|
3
|
-
import type { LabelValueRow } from '../../core/services/multi-payment-rules-presenter';
|
|
4
|
-
import { MultiPaymentRulesList } from '../consent/multi-payment-rules-list';
|
|
5
|
-
import { Colors, FONT_FAMILY, Spacing } from '../theme';
|
|
6
|
-
import { Footer } from '../widgets';
|
|
7
|
-
|
|
8
|
-
export interface MandateSetupSuccessScreenProps {
|
|
9
|
-
rulesTitle: string;
|
|
10
|
-
rules: LabelValueRow[];
|
|
11
|
-
paymentType: PaymentType;
|
|
12
|
-
onDone: () => void;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export function MandateSetupSuccessScreen(props: MandateSetupSuccessScreenProps): JSX.Element {
|
|
16
|
-
return (
|
|
17
|
-
<View style={styles.root} testID="mandate-setup-success-screen">
|
|
18
|
-
<Text style={styles.title}>Setup successful</Text>
|
|
19
|
-
<Text style={styles.subtitle}>Successfully set up your payment method</Text>
|
|
20
|
-
<ScrollView style={styles.scroll} contentContainerStyle={styles.scrollContent}>
|
|
21
|
-
<View style={styles.card}>
|
|
22
|
-
<MultiPaymentRulesList
|
|
23
|
-
rulesTitle={props.rulesTitle}
|
|
24
|
-
rules={props.rules}
|
|
25
|
-
paymentType={props.paymentType}
|
|
26
|
-
/>
|
|
27
|
-
</View>
|
|
28
|
-
</ScrollView>
|
|
29
|
-
<Footer
|
|
30
|
-
onContinue={props.onDone}
|
|
31
|
-
continueButtonText="Done"
|
|
32
|
-
continueTestID="mandate-success-done-btn"
|
|
33
|
-
showCancelButton={false}
|
|
34
|
-
/>
|
|
35
|
-
</View>
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const styles = StyleSheet.create({
|
|
40
|
-
root: {
|
|
41
|
-
flex: 1,
|
|
42
|
-
backgroundColor: Colors.surfacePage,
|
|
43
|
-
paddingHorizontal: 24,
|
|
44
|
-
paddingTop: 32,
|
|
45
|
-
paddingBottom: Spacing.lg,
|
|
46
|
-
},
|
|
47
|
-
title: {
|
|
48
|
-
fontFamily: FONT_FAMILY,
|
|
49
|
-
fontSize: 22,
|
|
50
|
-
fontWeight: '700',
|
|
51
|
-
color: Colors.textPrimary,
|
|
52
|
-
textAlign: 'center',
|
|
53
|
-
},
|
|
54
|
-
subtitle: {
|
|
55
|
-
fontFamily: FONT_FAMILY,
|
|
56
|
-
fontSize: 14,
|
|
57
|
-
color: Colors.textMuted,
|
|
58
|
-
textAlign: 'center',
|
|
59
|
-
marginTop: 12,
|
|
60
|
-
marginBottom: 24,
|
|
61
|
-
},
|
|
62
|
-
scroll: { flex: 1 },
|
|
63
|
-
scrollContent: { paddingBottom: Spacing.md },
|
|
64
|
-
card: {
|
|
65
|
-
backgroundColor: Colors.cardMutedBg,
|
|
66
|
-
borderRadius: 16,
|
|
67
|
-
paddingVertical: 16,
|
|
68
|
-
paddingHorizontal: 20,
|
|
69
|
-
borderWidth: StyleSheet.hairlineWidth,
|
|
70
|
-
borderColor: Colors.divider,
|
|
71
|
-
},
|
|
72
|
-
});
|