Files
super-app/App/common/navigator/NavigationRouter.ts
Mayank Singh 9527976c41 TP-64336 | Multi plan feature (#10813)
Co-authored-by: sangaraboinarishvik <rishvik.vardhan@navi.com>
2024-05-14 18:10:14 +00:00

120 lines
3.4 KiB
TypeScript

import {
BaseNavigator,
NavigationType,
CtaParameter,
ParameterType,
} from "../interface";
import { BASE_SCREEN } from "../constants/ScreenNameConstants";
import {
BaseActionTypes,
GenericActionPayload,
ActionMetaData,
} from "../actions/GenericAction";
import WidgetActionHandler from "../widgets/widget-actions/WidgetActionHandler";
import { ScreenActionHandler } from "../screen/ScreenActionHandler";
import { logToSentry } from "../hooks/useSentryLogging";
export const CtaNavigator: BaseNavigator = {
navigate: (navigationRef, ctaData) => {
navigationRef?.navigate(BASE_SCREEN, { ctaData });
},
goBack: navigationRef => {
navigationRef?.goBack();
},
push: (navigationRef, ctaData) => {
navigationRef?.push(BASE_SCREEN, { ctaData });
},
performNavigation: (navigation, type, ctaData) => {
switch (type) {
case NavigationType.NAVIGATE:
CtaNavigator.navigate(navigation, ctaData);
break;
case NavigationType.GO_BACK:
CtaNavigator.goBack(navigation);
break;
case NavigationType.PUSH:
CtaNavigator.navigate(navigation, ctaData);
break;
default:
CtaNavigator.push(navigation, ctaData);
break;
}
},
};
export const extractCtaParameters = (
ctaData: any,
): {
preQuoteId?: string | undefined | null;
quoteId?: string | undefined | null;
navigatorType?: string | undefined | null;
} => {
let preQuoteId: string | undefined | null = undefined;
let quoteId: string | undefined | null = undefined;
let navigatorType: string | undefined | null = undefined;
ctaData?.parameters?.forEach((item: CtaParameter) => {
switch (item.key) {
case ParameterType.PRE_QUOTE_ID:
preQuoteId = item.value;
break;
case ParameterType.QUOTE_ID:
quoteId = item.value;
break;
case ParameterType.NAVIGATOR_TYPE:
navigatorType = item.value;
break;
default:
break;
}
});
return { preQuoteId, quoteId, navigatorType };
};
export const Router = {
handleAction(actionPayload: GenericActionPayload, navigation?: any): void {
switch (actionPayload.baseActionType) {
case BaseActionTypes.WIDGET_ACTION: {
actionPayload.metaData?.forEach(
(widgetMetaData: ActionMetaData, _: number) => {
if (!!actionPayload.setScreenData) {
WidgetActionHandler.handleWidgetAction(
!!widgetMetaData ? widgetMetaData : {},
actionPayload.setScreenData,
actionPayload.setErrorMetaData,
actionPayload.screenData,
actionPayload.ctaData,
navigation,
);
}
},
);
break;
}
case BaseActionTypes.SCREEN_ACTION: {
actionPayload.metaData?.forEach(
(screenMetaData: ActionMetaData, _: number) => {
if (!!actionPayload.setScreenData) {
ScreenActionHandler.handleScreenAction(
!!screenMetaData ? screenMetaData : {},
actionPayload.setScreenData,
actionPayload.screenData,
navigation,
);
}
},
);
break;
}
default: {
logToSentry(
`Invalid baseActionType ${actionPayload.baseActionType} | MethodName: Router.handleAction`,
);
break;
}
}
},
};