-
Notifications
You must be signed in to change notification settings - Fork 576
/
Copy pathutils.jsx
110 lines (100 loc) · 2.41 KB
/
utils.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/* @flow */
/** @jsx node */
/* eslint max-lines: 0 */
import { node, dom } from "@krakenjs/jsx-pragmatic/src";
import { create, type ZoidComponent } from "@krakenjs/zoid/src";
import { inlineMemoize, noop } from "@krakenjs/belter/src";
import {
getCSPNonce,
getClientID,
getSDKMeta,
getPayPalDomainRegex,
} from "@paypal/sdk-client/src";
import { Overlay } from "../ui/overlay/three-domain-secure";
import type { TDSProps } from "./types";
export type TDSComponent = ZoidComponent<TDSProps>;
export function getThreeDS(): TDSComponent {
return inlineMemoize(getThreeDS, () => {
const component = create({
tag: "fastlane-threeds",
url: ({ props }) => props.payerActionUrl,
attributes: {
iframe: {
scrolling: "no",
},
},
containerTemplate: ({
context,
focus,
close,
frame,
prerenderFrame,
doc,
event,
props,
}) => {
return (
<Overlay
context={context}
// $FlowFixMe
close={props.onCancel || close}
focus={focus}
event={event}
frame={frame}
prerenderFrame={prerenderFrame}
content={props.content}
nonce={props.nonce}
/>
).render(dom({ doc }));
},
domain: getPayPalDomainRegex(),
props: {
payerActionUrl: {
type: "string",
},
clientID: {
type: "string",
value: getClientID,
queryParam: true,
},
onSuccess: {
type: "function",
alias: "onContingencyResult",
decorate: ({ value, onError }) => {
return (err, result) => {
if (err) {
return onError(err);
}
return value(result);
};
},
},
content: {
type: "object",
required: false,
},
nonce: {
type: "string",
default: getCSPNonce,
},
onCancel: {
type: "function",
required: false,
},
sdkMeta: {
type: "string",
queryParam: true,
sendToChild: false,
value: getSDKMeta,
},
},
});
if (component.isChild()) {
window.xchild = {
props: component.xprops,
close: noop,
};
}
return component;
});
}