feat(components): Stripe ACH payment method (ORC-7701)#402
Conversation
Shared native-error unwrap also applied to Klarna and bank-redirect managers.
Generated by 🚫 Danger Swift against 446be83 |
Generated by 🚫 Danger Kotlin against 446be83 |
There was a problem hiding this comment.
1 issue found.
About Unblocked
Unblocked has been set up to automatically review your team's pull requests to identify genuine bugs and issues.
📖 Documentation — Learn more in our docs.
💬 Ask questions — Mention @unblocked to request a review or summary, or ask follow-up questions.
👍 Give feedback — React to comments with 👍 or 👎 to help us improve.
⚙️ Customize — Adjust settings in your preferences.
|
Appetize iOS link: https://appetize.io/app/tatv7rvjvi2bmerm2lnlzpimsy |
|
Appetize Android link: https://appetize.io/app/oly6mr47e5fn4qedzwr4k3cwca |
Type had a singular error the wire never sends (it sends errors: [...]); read like onInvalid.
Also correct decline/isValid docs and add coverage for the mandate transitioner, pending outcome routing, and submit-rejection recovery.
|
| info.collectorViewController, animated: true, completion: nil) | ||
| // Present over the top-most VC — root is already presenting the CC sheet modal. | ||
| var presenter = rootViewController | ||
| while let presented = presenter.presentedViewController { |
There was a problem hiding this comment.
Curious, why while here and not if?
There was a problem hiding this comment.
We don't know how many view controllers are presented, or which level our CC sheet itself is mounted at, so instead of assuming one level with if we just walk to the top-most one and present there. Presenting on a VC that's already presenting no-ops anyway.


Summary
stripeAchkind on Checkout Components: user-details form → native Stripe bank collector → mandate → pending outcome (iOS + Android).StripeAchUserDetailsScreen(first/last name + email, native per-keystroke validation, keyboard-aware footer + content-fit sheet),StripeAchMandateScreen(accept/decline),PendingScreen(authorized, awaiting settlement).startAch/setAch*/submitAchDetails/acceptAchMandate/declineAchMandate/stopAch); the mandate arrives flow-level viaAchMandateTransitioner.'pending'payment outcome (ACH authorizes now, settles later) routed toPendingScreen; other methods keep mapping non-FAILED → success.unwrapNativeErrorhelper normalizes the native{ errors: [...] }/{ error }envelopes — also applied to the Klarna and bank-redirect managers, which were forwarding bank errors to merchants shapeless.stopAchdefers while native work is in flight so a global back can't tear down mid-submit.Jira
ORC-7701
Test plan
yarn typecheck/yarn lint/yarn testgreen (376 tests)