Skip to content

Commit a986dac

Browse files
Merge pull request #130 from mxenabled/wes/simplifyConnectWidget
Wes/simplify connect widget
2 parents 6e1a6ed + 909cc80 commit a986dac

File tree

3 files changed

+45
-29
lines changed

3 files changed

+45
-29
lines changed

example/src/app/connect.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useEffect, useState } from "react"
2-
import { StyleSheet } from "react-native"
2+
import { StyleSheet, useWindowDimensions } from "react-native"
33
import { SafeAreaView } from "react-native-safe-area-context"
44
import * as Linking from "expo-linking"
55

@@ -16,6 +16,8 @@ const styles = StyleSheet.create({
1616
export default function Connect() {
1717
const clientRedirectUrl = Linking.createURL("connect")
1818

19+
const { height, width } = useWindowDimensions()
20+
1921
const [url, setUrl] = useState<string | null>(null)
2022

2123
useEffect(() => {
@@ -25,7 +27,7 @@ export default function Connect() {
2527
}, [clientRedirectUrl])
2628

2729
return (
28-
<SafeAreaView style={styles.page}>
30+
<SafeAreaView style={{ ...styles.page, height, width }}>
2931
{url && (
3032
<ConnectWidget
3133
url={url}

src/components/ConnectWidgets.tsx

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,63 @@
1+
import React from "react"
12
import {
23
dispatchConnectLocationChangeEvent,
34
ConnectPostMessageCallbackProps,
45
ConnectOAuthRequestedPayload,
56
} from "@mxenabled/widget-post-message-definitions"
6-
7-
import { Type, SsoUrlProps, ConnectWidgetConfigurationProps } from "../sso"
87
import * as WebBrowser from "expo-web-browser"
9-
import { makeWidgetComponentWithDefaults } from "./make_component"
10-
import { StylingProps, useWidgetRenderer } from "./renderer"
8+
import { WebView, WebViewProps } from "react-native-webview"
9+
import { sdkVersion } from "../version"
10+
import { makeRequestInterceptor } from "./request_interceptor"
1111

12-
export type ConnectWidgetProps = SsoUrlProps &
13-
StylingProps &
14-
ConnectPostMessageCallbackProps<string> &
15-
ConnectWidgetConfigurationProps &
16-
JSX.IntrinsicAttributes
12+
interface ExtraProps {
13+
url: string
14+
webViewProps?: WebViewProps
15+
}
1716

18-
export const ConnectVerificationWidget = makeWidgetComponentWithDefaults(ConnectWidget, {
19-
mode: "verification",
20-
includeTransactions: false,
21-
})
17+
export type ConnectWidgetProps = ConnectPostMessageCallbackProps<string> & ExtraProps
2218

2319
export function ConnectWidget(props: ConnectWidgetProps) {
20+
const { url: webviewUrl, webViewProps, ...callbacks } = props
21+
2422
const onOAuthRequested = (payload: ConnectOAuthRequestedPayload) => {
2523
const { url } = payload
2624
WebBrowser.openAuthSessionAsync(url)
2725

2826
props.onOAuthRequested?.(payload)
2927
}
3028

31-
props = {
29+
const modifiedCallbacks = {
30+
...callbacks,
3231
onOAuthRequested,
33-
...props,
3432
}
3533

36-
const modifiedProps = {
37-
...props,
38-
onOAuthRequested,
39-
}
40-
41-
const elem = useWidgetRenderer(
42-
{ ...modifiedProps, widgetType: Type.ConnectWidget },
43-
dispatchConnectLocationChangeEvent,
34+
const handler = makeRequestInterceptor(webviewUrl, {
35+
onIntercept: (url) => {
36+
dispatchConnectLocationChangeEvent(url, modifiedCallbacks)
37+
},
38+
})
39+
40+
const setReactNativeSDKVersionOnWindow = `
41+
window.MXReactNativeSDKVersion = "${sdkVersion}";
42+
`
43+
44+
return (
45+
<WebView
46+
cacheMode="LOAD_NO_CACHE"
47+
domStorageEnabled={true}
48+
incognito={true}
49+
injectedJavaScriptBeforeContentLoaded={setReactNativeSDKVersionOnWindow}
50+
javaScriptEnabled={true}
51+
onOpenWindow={(event) => {
52+
WebBrowser.openBrowserAsync(event.nativeEvent.targetUrl)
53+
}}
54+
onShouldStartLoadWithRequest={handler}
55+
originWhitelist={["*"]}
56+
scrollEnabled={true}
57+
source={{ uri: webviewUrl }}
58+
testID="widget_webview"
59+
{...webViewProps}
60+
style={webViewProps?.style || { height: "100%", width: "100%" }}
61+
/>
4462
)
45-
46-
return elem
4763
}

src/components/widgets.test.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { act } from "react-test-renderer"
44

55
import { BudgetsWidget, MasterWidget } from "./MoneyMapWidgets"
66
import { PulseWidget, MiniPulseCarouselWidget } from "./PulseWidgets"
7-
import { ConnectVerificationWidget } from "./ConnectWidgets"
87
import { Props } from "./make_component"
98

109
import TestingErrorBoundary from "../../test/helpers/TestingErrorBoundary"
@@ -18,7 +17,6 @@ jest.mock("expo-web-browser", () => {
1817
})
1918

2019
describe("BudgetsWidget", () => fullWidgetComponentTestSuite(BudgetsWidget))
21-
describe("ConnectVerificationWidget", () => fullWidgetComponentTestSuite(ConnectVerificationWidget))
2220
describe("MasterWidget", () => fullWidgetComponentTestSuite(MasterWidget))
2321
describe("MiniPulseCarouselWidget", () => fullWidgetComponentTestSuite(MiniPulseCarouselWidget))
2422
describe("PulseWidget", () => fullWidgetComponentTestSuite(PulseWidget))

0 commit comments

Comments
 (0)