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 back button; + + const handleClick = () => { + if (pathname === '/') { + sendMessageToRN('close-view'); + } else { + router.back(); + } + }; + return back button; }; 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); + } +}