diff --git a/RN-UI-LIB b/RN-UI-LIB index b10108d9..9f4a3ae2 160000 --- a/RN-UI-LIB +++ b/RN-UI-LIB @@ -1 +1 @@ -Subproject commit b10108d97c70125e17d9781654f7a4cf01b3f2da +Subproject commit 9f4a3ae2675e913bbbbe3326d49c52ab987b3339 diff --git a/android/app/build.gradle b/android/app/build.gradle index a36fe82e..0b4a2be9 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -313,7 +313,7 @@ dependencies { implementation "com.github.anrwatchdog:anrwatchdog:1.4.0" - implementation 'com.navi.medici:alfred:v1.0.1' + implementation 'com.navi.medici:alfred:v1.0.2' //noinspection GradleDynamicVersion implementation "com.facebook.react:react-native:+" // From node_modules diff --git a/android/app/src/main/java/com/avapp/DeviceUtilsModule.java b/android/app/src/main/java/com/avapp/DeviceUtilsModule.java index 25f585fc..ad4fd9fe 100644 --- a/android/app/src/main/java/com/avapp/DeviceUtilsModule.java +++ b/android/app/src/main/java/com/avapp/DeviceUtilsModule.java @@ -21,6 +21,9 @@ import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.uimanager.NativeViewHierarchyManager; +import com.facebook.react.uimanager.UIBlock; +import com.facebook.react.uimanager.UIManagerModule; import com.navi.alfred.AlfredManager; import android.content.pm.PackageInfo; @@ -156,16 +159,29 @@ public class DeviceUtilsModule extends ReactContextBaseJavaModule { } @ReactMethod - public void sendBottomSheetOpenSignal(Boolean isBottomSheetOpen) { - if (isBottomSheetOpen) { - View bottomSheetScreen = LayoutInflater.from(RNContext).inflate(R.layout.bottom_sheet_screen, null); - AlfredManager.INSTANCE.measureInflatedView(bottomSheetScreen, 1080, 540); - AlfredManager.INSTANCE.setCosmosBottomSheet(bottomSheetScreen); - } else { - AlfredManager.INSTANCE.setCosmosBottomSheet(null); + public void setBottomSheetView(Integer refID) { + if (refID != null) { + UIManagerModule uiManagerModule = RNContext.getNativeModule(UIManagerModule.class); + if (uiManagerModule != null) { + try { + uiManagerModule.addUIBlock(nativeViewHierarchyManager -> { + Log.d("Alfred", "setBottomSheetView nativeViewHierarchyManager:" + nativeViewHierarchyManager); + View view = nativeViewHierarchyManager.resolveView(refID); + Log.d("Alfred", "setBottomSheetView view:" + view); + AlfredManager.INSTANCE.setBottomSheetView(view); + }); + } catch (Exception error) { + Log.d("Alfred", "setBottomSheetView error:" + error); + } + } } - return; } + + @ReactMethod + public void clearBottomSheet() { + AlfredManager.INSTANCE.clearBottomSheetView(); + } + private static File convertBase64ToFile(Context context,String base64Data) { try { byte[] decodedBytes = Base64.decode(base64Data, Base64.DEFAULT); diff --git a/src/common/BottomSheetWrapper.tsx b/src/common/BottomSheetWrapper.tsx index 01d9561d..15ecb14c 100644 --- a/src/common/BottomSheetWrapper.tsx +++ b/src/common/BottomSheetWrapper.tsx @@ -2,24 +2,28 @@ import React from 'react'; import BottomSheet, { BottomSheetProps, } from '../../RN-UI-LIB/src/components/bottom_sheet/BottomSheet'; -import { sendBottomSheetOpenSignal } from '../components/utlis/DeviceUtils'; -import { NativeSyntheticEvent } from 'react-native'; +import { clearBottomSheet, setBottomSheetView } from '../components/utlis/DeviceUtils'; interface IBottomSheetWrapperProps extends BottomSheetProps {} const BottomSheetWrapper: React.FC = (props) => { const { children, onShow, onSwipeDownClose, onClose, ...restProps } = props; const onCloseHandler = () => { - sendBottomSheetOpenSignal(false); + clearBottomSheet(); if (typeof onClose === 'function') onClose(); }; - const onShowHandler = (event: NativeSyntheticEvent) => { - sendBottomSheetOpenSignal(true); - if (typeof onShow === 'function') onShow(event); + const onAnimationEndHandler = (id: number | null) => { + if (!id) return; + setBottomSheetView(id); }; return ( - + {children} ); diff --git a/src/common/DropDownWrapper.tsx b/src/common/DropDownWrapper.tsx index e3ba6f4b..97f20582 100644 --- a/src/common/DropDownWrapper.tsx +++ b/src/common/DropDownWrapper.tsx @@ -1,19 +1,27 @@ import React from 'react'; import Dropdown, { IDropdown } from '../../RN-UI-LIB/src/components/dropdown/Dropdown'; -import { sendBottomSheetOpenSignal } from '../components/utlis/DeviceUtils'; +import { + clearBottomSheet, + sendBottomSheetOpenSignal, + setBottomSheetView, +} from '../components/utlis/DeviceUtils'; const DropDownWrapper: React.FC = (props) => { - const { onShow, onClose, children, ...remainingProps } = props; - const onShowHandler = () => { - if (typeof onShow === 'function') onShow(); - sendBottomSheetOpenSignal(true); - }; + const { onShow, onClose, onAnimationEnd, children, ...remainingProps } = props; + const onCloseHandler = () => { if (typeof onClose === 'function') onClose(); - sendBottomSheetOpenSignal(false); + clearBottomSheet(); }; + + const onAnimationEndHandler = (id: number | null) => { + if (!id) return; + console.log('dropdown opened', id); + setBottomSheetView(id); + }; + return ( - + {children} ); diff --git a/src/common/ModalWrapperForAlfredV2.tsx b/src/common/ModalWrapperForAlfredV2.tsx new file mode 100644 index 00000000..4577809f --- /dev/null +++ b/src/common/ModalWrapperForAlfredV2.tsx @@ -0,0 +1,45 @@ +import React, { useEffect } from 'react'; +import { Modal, NativeSyntheticEvent, View, findNodeHandle } from 'react-native'; +import { IModalWrapper } from '../../RN-UI-LIB/src/components/modalWrapper/ModalWrapper'; +import { + clearBottomSheet, + sendBottomSheetOpenSignal, + setBottomSheetView, +} from '../components/utlis/DeviceUtils'; +import { GenericStyles } from '@rn-ui-lib/styles'; + +const ModalWrapperForAlfredV2: React.FC = ({ children, ...props }) => { + const { onRequestClose, onShow, visible } = props; + const modalRef = React.useRef(null); + const lastSent = React.useRef(visible); + const onRequestCloseHandler = (event: NativeSyntheticEvent) => { + if (typeof onRequestClose === 'function') onRequestClose(event); + clearBottomSheet(); + }; + const onShowHandler = (event: NativeSyntheticEvent) => { + if (typeof onShow === 'function') onShow(event); + const nodeId = findNodeHandle(modalRef.current); + lastSent.current = true; + setBottomSheetView(nodeId); + }; + + return ( + + + {children} + + + ); +}; + +export default ModalWrapperForAlfredV2; diff --git a/src/components/utlis/DeviceUtils.ts b/src/components/utlis/DeviceUtils.ts index 28ad745d..dacfb45a 100644 --- a/src/components/utlis/DeviceUtils.ts +++ b/src/components/utlis/DeviceUtils.ts @@ -29,6 +29,10 @@ export const alfredSetUserId = (userId: string) => DeviceUtilsModule.setUserId(u export const sendBottomSheetOpenSignal = (e: boolean) => DeviceUtilsModule.sendBottomSheetOpenSignal(e); +export const setBottomSheetView = (id: number | null) => DeviceUtilsModule.setBottomSheetView(id); + +export const clearBottomSheet = () => DeviceUtilsModule.clearBottomSheet(); + export const alfredSetEmailId = (emailId: string) => DeviceUtilsModule.setEmailId(emailId); // sends feedback data to whatsapp. diff --git a/src/screens/allCases/CasesList.tsx b/src/screens/allCases/CasesList.tsx index 502f938d..71f1f819 100644 --- a/src/screens/allCases/CasesList.tsx +++ b/src/screens/allCases/CasesList.tsx @@ -56,6 +56,7 @@ import BottomSheetWrapper from '../../common/BottomSheetWrapper'; import { toast } from '../../../RN-UI-LIB/src/components/toast'; import { setFilteredListToast } from '../../reducer/allCasesSlice'; import { getFilterCount, getSelectedFilters } from '../Dashboard/utils'; +import ModalWrapperForAlfredV2 from '@common/ModalWrapperForAlfredV2'; export const getItem = (item: Array, index: number) => item[index]; export const ESTIMATED_ITEM_SIZE = 250; // Average height of List item @@ -354,7 +355,7 @@ const CasesList: React.FC = ({ {listEmptyComponent} )} - { @@ -370,7 +371,7 @@ const CasesList: React.FC = ({ isVisitPlan={isVisitPlan} isAgentDashboard={isAgentDashboard} /> - + (