Files
super-app/App/common/utilities/NavigationUtil.ts
2024-12-11 05:47:17 +00:00

64 lines
1.9 KiB
TypeScript

import { NavigationProp } from "@react-navigation/native";
import {
AnalyticsEventNameConstants,
AnalyticsMethodNameConstant,
NAVIGATION_ERROR,
} from "../constants";
import { sendAsAnalyticsEvent } from "../hooks/useAnalyticsEvent";
import { AnalyticsEvent, CtaData, CtaType } from "../interface";
import { NativeDeeplinkNavigatorModule } from "../native-module/NativeModules";
import { CtaNavigator } from "../navigator/NavigationRouter";
export const globalHandleClick = (
navigation: NavigationProp<any>,
cta?: CtaData,
screenName?: string,
) => {
if (!cta) {
const errorEvent: AnalyticsEvent = {
name: AnalyticsEventNameConstants.HI_INVALID_SCREEN_CTA,
properties: {
screenName: screenName || "",
methodName: AnalyticsMethodNameConstant.HANDLE_CTA_CLICK,
},
};
sendAsAnalyticsEvent(errorEvent);
return;
}
try {
switch (cta.type) {
case CtaType.DEEP_LINK:
case CtaType.USE_ROOT_DEEPLINK_NAVIGATOR:
NativeDeeplinkNavigatorModule.navigateToNaviInsuranceDeeplinkNavigator(
JSON.stringify(cta),
);
break;
case CtaType.RN_NAVIGATOR:
case CtaType.RN_PUSH:
CtaNavigator.push(navigation, cta);
break;
case CtaType.RN_NAVIGATE:
CtaNavigator.navigate(navigation, cta);
break;
case CtaType.GO_BACK:
CtaNavigator.goBack(navigation, cta);
break;
default:
NativeDeeplinkNavigatorModule.navigateToNaviDeeplinkNavigator(
JSON.stringify(cta),
);
break;
}
} catch (error) {
const errorEvent: AnalyticsEvent = {
name: AnalyticsEventNameConstants.HI_INVALID_SCREEN_CTA,
properties: {
screenName: screenName || "",
methodName: AnalyticsMethodNameConstant.HANDLE_CTA_CLICK,
reason: error?.toString() || NAVIGATION_ERROR,
},
};
sendAsAnalyticsEvent(errorEvent);
}
};