|
1 |
| -import { useCallback, useRef } from "react"; |
| 1 | +import { RefObject, useCallback } from "react"; |
2 | 2 | import type WebView from "react-native-webview";
|
3 | 3 | import type { WebViewMessageEvent, WebViewProps } from "react-native-webview";
|
4 | 4 | import { TO_WEB_EVENT_KEY } from "../constants";
|
@@ -28,23 +28,25 @@ export const buildEmitToWebView = <T>(
|
28 | 28 | export const useWebViewMessage = <T>(
|
29 | 29 | onSubscribe: (message: WebViewMessage<T>) => void
|
30 | 30 | ) => {
|
31 |
| - const ref = useRef<WebView>(null); |
32 |
| - const onMessage: WebViewProps["onMessage"] = useCallback( |
33 |
| - (event: WebViewMessageEvent) => { |
| 31 | + return useCallback( |
| 32 | + ((event: WebViewMessageEvent) => { |
34 | 33 | try {
|
35 | 34 | const res = JSON.parse(event.nativeEvent.data);
|
36 | 35 | onSubscribe({ type: res.type, data: res.data });
|
37 | 36 | } catch (e) {
|
38 | 37 | // NOP
|
39 | 38 | }
|
40 |
| - }, |
| 39 | + }) satisfies WebViewProps["onMessage"], |
41 | 40 | [onSubscribe]
|
42 | 41 | );
|
43 |
| - const emit = useCallback( |
44 |
| - (message: ReactNativeMessage<T>) => { |
45 |
| - ref.current?.injectJavaScript(buildEmitToWebView(message)); |
46 |
| - }, |
47 |
| - [ref] |
48 |
| - ); |
49 |
| - return { ref, onMessage, emit }; |
| 42 | +}; |
| 43 | + |
| 44 | +/** |
| 45 | + * A function to send a message to WebView. |
| 46 | + */ |
| 47 | +export const emit = <T>( |
| 48 | + ref: RefObject<WebView>, |
| 49 | + message: ReactNativeMessage<T> |
| 50 | +) => { |
| 51 | + ref.current?.injectJavaScript(buildEmitToWebView(message)); |
50 | 52 | };
|
0 commit comments