webview-message-handler.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { OneSignal } from 'react-native-onesignal';
  2. import { WebViewHandlers } from "../types/webview-handlers-type";
  3. /**
  4. * Handles messages received from WebView injected JS.
  5. */
  6. export const handleWebViewMessage =
  7. (handlers: WebViewHandlers) =>
  8. (event: any) => {
  9. let oMsgData;
  10. try {
  11. oMsgData = JSON.parse(event.nativeEvent.data);
  12. } catch (err) {
  13. console.warn("Failed to parse message from WebView:", err);
  14. }
  15. console.info(oMsgData);
  16. // --- LOGGED IN STATE ---
  17. if (typeof oMsgData.loggedin !== "undefined") {
  18. handlers.setLoggedIn(oMsgData.loggedin);
  19. handlers.setData?.(oMsgData);
  20. handlers.setLoading?.(false);
  21. }
  22. // --- PUSH TAGS / ONESIGNAL ---
  23. if (oMsgData.loggedin && oMsgData.push_tags && oMsgData.push_tags !== false) {
  24. const tags = oMsgData.push_tags;
  25. if (tags.user?.length) {
  26. console.log("User ID: " + JSON.stringify(tags.user));
  27. OneSignal.login(tags.user);
  28. }
  29. if (tags.email?.length) {
  30. OneSignal.User.addEmail(tags.email);
  31. delete tags.email;
  32. delete tags.email_hash;
  33. }
  34. OneSignal.User.addTags(tags);
  35. }
  36. if (oMsgData.loggedin === false) {
  37. OneSignal.logout();
  38. }
  39. // --- STOP LOADING ---
  40. if (oMsgData.stop_loading) {
  41. handlers.setLoading?.(false);
  42. }
  43. // --- VIDEO CALLS ---
  44. if (oMsgData.video_call_start) {
  45. handlers.onVideoCallStart?.(
  46. oMsgData.video_call_start.uri,
  47. typeof oMsgData.video_call_start.audio === "undefined"
  48. ? false
  49. : oMsgData.video_call_start.audio
  50. );
  51. }
  52. if (oMsgData.video_call_stop) {
  53. handlers.endVideoCall?.();
  54. }
  55. // --- PURCHASE / SUBSCRIPTION ---
  56. if (oMsgData.request_purchase) {
  57. handlers.onRequestPurchase?.(oMsgData.request_purchase);
  58. }
  59. if (oMsgData.request_subscription) {
  60. handlers.onRequestSubscription?.(oMsgData.request_subscription);
  61. }
  62. // --- NAVIGATION ---
  63. if (oMsgData.goto_home) {
  64. handlers.onHomeMenu?.();
  65. }
  66. if (oMsgData.reload) {
  67. handlers.reload?.();
  68. }
  69. };