diff --git a/android/app/build.gradle b/android/app/build.gradle index 99dec776..9e85e81a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -134,8 +134,8 @@ def reactNativeArchitectures() { return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] } -def VERSION_CODE = 165 -def VERSION_NAME = "2.10.11" +def VERSION_CODE = 166 +def VERSION_NAME = "2.11.0" android { ndkVersion rootProject.ext.ndkVersion diff --git a/package.json b/package.json index f28a8ee1..f514f213 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "AV_APP", - "version": "2.10.11", - "buildNumber": "165", + "version": "2.11.0", + "buildNumber": "166", "private": true, "scripts": { "android:dev": "yarn move:dev && react-native run-android", diff --git a/src/components/form/index.tsx b/src/components/form/index.tsx index 60ca0cc7..25435d0c 100644 --- a/src/components/form/index.tsx +++ b/src/components/form/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useRef, useState } from 'react'; +import React, {useCallback, useEffect, useRef, useState} from 'react'; import { useForm } from 'react-hook-form'; import { ScrollView, StyleSheet, View } from 'react-native'; import Geolocation from 'react-native-geolocation-service'; @@ -41,6 +41,7 @@ import NavigationHeader, { Icon } from '../../../RN-UI-LIB/src/components/Naviga import { CaseDetailStackEnum } from '@screens/caseDetails/CaseDetailStack'; import { useNavigation, useRoute } from '@react-navigation/native'; import { NUDGE_BOTTOM_SHEET_DEFAULT_STATE } from './constants'; +import {useBackHandler} from "@hooks/useBackHandler"; interface IWidget { route: { @@ -93,6 +94,20 @@ const Widget: React.FC = (props) => { setIsJourneyFirstScreen(isFirst); }, [templateData, name]); + const handleBackPress = useCallback(() => { + if (isSubmitting) { + toast({ + type: 'info', + text1: ToastMessages.FEEDBACK_SUBMISSION_UNDER_PROCESS, + }); + return true; + } + + return false; + }, [isSubmitting]); + + useBackHandler(handleBackPress); + const { control, setValue, @@ -220,6 +235,7 @@ const Widget: React.FC = (props) => { } const submitJourneyWithGeoLocation = (data: any, _: any, submitViaNudge?: boolean) => { + setIsSubmitting(true); addClickstreamEvent( submitViaNudge ? CLICKSTREAM_EVENT_NAMES.FA_SUBMIT_ANYWAYS_CLICKED @@ -234,6 +250,8 @@ const Widget: React.FC = (props) => { if (location) { return handleSubmitJourney(data, location); } + }).catch((err) => { + setIsSubmitting(false); }); }; @@ -273,7 +291,6 @@ const Widget: React.FC = (props) => { templateData, }); if (isOnline) { - setIsSubmitting(true); const unSyncedCase = getUnSyncedCase(updatedCase); const transformedPayload = await getTransformedCollectionCaseItem( unSyncedCase, @@ -310,6 +327,7 @@ const Widget: React.FC = (props) => { type: 'info', text1: ToastMessages.FEEDBACK_SUBMITTED_OFFLINE, }); + setIsSubmitting(false); } }; @@ -329,6 +347,14 @@ const Widget: React.FC = (props) => { }, []); const handleCloseIconPress = () => { + if (isSubmitting) { + toast({ + type: 'info', + text1: ToastMessages.FEEDBACK_SUBMISSION_UNDER_PROCESS, + }); + return; + } + addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.AV_FORM_CLOSE_CLICKED, { caseId, }); diff --git a/src/hooks/useBackHandler.tsx b/src/hooks/useBackHandler.tsx new file mode 100644 index 00000000..f4a660d9 --- /dev/null +++ b/src/hooks/useBackHandler.tsx @@ -0,0 +1,10 @@ +import { useEffect } from 'react' +import { BackHandler } from 'react-native' + +export const useBackHandler = (handler: () => boolean) => { + useEffect(() => { + BackHandler.addEventListener('hardwareBackPress', handler) + + return () => BackHandler.removeEventListener('hardwareBackPress', handler) + }, [handler]) +} diff --git a/src/screens/allCases/constants.ts b/src/screens/allCases/constants.ts index e660099d..aec499da 100644 --- a/src/screens/allCases/constants.ts +++ b/src/screens/allCases/constants.ts @@ -70,6 +70,7 @@ export const ToastMessages = { SUCCESS_COPYING_PAYMENT_LINK: 'Payment link has been copied to Clipboard', FILTERS_APPLIED_SUCCESSFULLY: 'Filters applied successfully', FEEDBACK_SUBMITTED_OFFLINE: "Feedback will be submitted automatically once you're back online", + FEEDBACK_SUBMISSION_UNDER_PROCESS: "Submitting feedback. You'll be redirected to customer details shortly.", OFFLINE_MESSAGE: 'You seem to be offline', PAYMENT_LINK_NOT_GENERATED: 'Payment link could not be generated', PAYMENT_LINK_RETRY: 'Please retry after an hour for this number',