From c5c239abe6ba593b04a68a713534c6954cee60c2 Mon Sep 17 00:00:00 2001 From: Mervin Choun <38122192+mchoun@users.noreply.github.com> Date: Fri, 24 May 2024 11:03:28 -0400 Subject: [PATCH] handle 3DS success = false scenario for CardFields (#98) * remove onError call when success is false * fix: ensure cardfield flow rejects only when err is not null * fix: flow type issue * handle missing props use case * temporary console logs for alpha release test * eslint disables for alpha testing * remove console logs and coerce hasError to boolean --- src/three-domain-secure/component.jsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/three-domain-secure/component.jsx b/src/three-domain-secure/component.jsx index 18af40cd..78fb4bad 100644 --- a/src/three-domain-secure/component.jsx +++ b/src/three-domain-secure/component.jsx @@ -115,9 +115,18 @@ export function getThreeDomainSecureComponent(): TDSComponent { onSuccess: { type: "function", alias: "onContingencyResult", - decorate: ({ value, onError }) => { + decorate: ({ props, value, onError }) => { return (err, result) => { - if (err || (result && !result.success)) { + const isCardFieldFlow = props?.userType === "UNBRANDED_GUEST"; + + // HostedFields ONLY rejects when the err object is not null. The below implementation ensures that CardFields follows the same pattern. + + const hasError = isCardFieldFlow + ? Boolean(err) + : // $FlowFixMe[incompatible-use] + Boolean(err) || result?.success === false; + + if (hasError) { return onError(err); }