From e7bc0141af98648bf0187af301f8f8ee86589daf Mon Sep 17 00:00:00 2001
From: pipenunezb <80793937+pipenunezb@users.noreply.github.com>
Date: Fri, 30 Aug 2024 08:34:40 -0500
Subject: [PATCH] MYB-2071 send message to RN (#32)
* MYB-2071 send message to RN
* MYB-2071 send unauthorized error message to RN
* MYB-2071 change validation of window
* MYB-2071 test error
* MYB-2071 test error 2
* MYB-2071 test error 3
* MYB-2071 test error 4
* MYB-2071 test error 5
---
components/BackButton/BackButton.tsx | 14 ++++++++++++--
global.d.ts | 9 +++++++++
lib/axiosClient.ts | 29 ++++++++++++++++++++--------
utils/sendMessageToRN.ts | 6 ++++++
4 files changed, 48 insertions(+), 10 deletions(-)
create mode 100644 global.d.ts
create mode 100644 utils/sendMessageToRN.ts
diff --git a/components/BackButton/BackButton.tsx b/components/BackButton/BackButton.tsx
index 923d68b3b..242ec2288 100644
--- a/components/BackButton/BackButton.tsx
+++ b/components/BackButton/BackButton.tsx
@@ -1,9 +1,19 @@
'use client';
import Image from 'next/image';
-import { useRouter } from 'next/navigation';
+import { useRouter, usePathname } from 'next/navigation';
import BackArrow from 'public/images/backArrow.svg';
+import { sendMessageToRN } from 'utils/sendMessageToRN';
export const BackButton = () => {
+ const pathname = usePathname();
const router = useRouter();
- return ;
+
+ const handleClick = () => {
+ if (pathname === '/') {
+ sendMessageToRN('close-view');
+ } else {
+ router.back();
+ }
+ };
+ return ;
};
diff --git a/global.d.ts b/global.d.ts
new file mode 100644
index 000000000..e4f268666
--- /dev/null
+++ b/global.d.ts
@@ -0,0 +1,9 @@
+declare global {
+ interface Window {
+ ReactNativeWebView?: {
+ postMessage: (message: string) => void;
+ };
+ }
+}
+
+export {};
diff --git a/lib/axiosClient.ts b/lib/axiosClient.ts
index c87f4c403..e4b36f58c 100644
--- a/lib/axiosClient.ts
+++ b/lib/axiosClient.ts
@@ -1,4 +1,5 @@
import axios from 'axios';
+import { sendMessageToRN } from 'utils/sendMessageToRN';
const apiClient = axios.create({
baseURL: process.env.NEXT_PUBLIC_API_URL,
@@ -8,15 +9,27 @@ const apiClient = axios.create({
},
});
-apiClient.interceptors.request.use(config => {
- const token = localStorage.getItem('token')
- if (token) {
- config.headers['Authorization'] = `Bearer ${token}`;
+apiClient.interceptors.request.use(
+ (config) => {
+ const token = localStorage.getItem('token');
+ if (token) {
+ config.headers['Authorization'] = `Bearer ${token}`;
+ }
+
+ return config;
+ },
+ (error) => {
+ return Promise.reject(error);
}
+);
- return config;
-}, error => {
- return Promise.reject(error);
-});
+apiClient.interceptors.response.use(
+ (response) => response,
+ (error) => {
+ if (error.response.status === 401) {
+ sendMessageToRN('unauthorized');
+ }
+ }
+);
export default apiClient;
diff --git a/utils/sendMessageToRN.ts b/utils/sendMessageToRN.ts
new file mode 100644
index 000000000..2c93169f4
--- /dev/null
+++ b/utils/sendMessageToRN.ts
@@ -0,0 +1,6 @@
+export function sendMessageToRN(text: string) {
+ if (typeof window === 'undefined') return;
+ if (window.ReactNativeWebView) {
+ window.ReactNativeWebView.postMessage(text);
+ }
+}