Files
super-app/App/common/screen/ScreenActionHandler.tsx
Prajjaval Verma 0cc95f8027 NTP-8444 | NAP Phase 2 | OE for GI (#13693)
Co-authored-by: shrihari-raju_navi <shrihari.raju@navi.com>
Co-authored-by: Kshitij Pramod Ghongadi <kshitij.pramod@navi.com>
2024-11-20 16:37:33 +00:00

125 lines
3.8 KiB
TypeScript

import { Dispatch, SetStateAction } from "react";
import {
createQuote,
fetchComparisonPlanList,
getBenefitPageData,
getMarketBenefitComparePageData,
getQuotePageData,
getWaitingPeriodScreenData,
} from "../../Container/Navi-Insurance/network";
import { ActionMetaData, BaseActionTypes } from "../actions/GenericAction";
import {
AnalyticsEventNameConstants,
AnalyticsModuleNameConstant,
EVENT_NAMES,
} from "../constants";
import {
sendAsAnalyticsEvent,
sendAsGlobalErrorEvent,
} from "../hooks/useAnalyticsEvent";
import { ScreenData } from "../interface/widgets/screenData/ScreenData";
import {
getErrorTitleFromError,
getErrorTypeFromStatusCode,
} from "../utilities/ErrorUtils";
import { ScreenState } from "./BaseScreen";
import { ScreenActionTypes } from "./ScreenActionTypes";
export const ScreenActionHandler = {
handleScreenAction: (
screenMetaData: ActionMetaData,
setScreenData: Dispatch<SetStateAction<ScreenData | null>>,
screenData?: ScreenData | null,
navigation?: any,
) => {
switch (screenMetaData.actionType) {
case ScreenActionTypes.FETCH_INSURANCE_QUOTE_PAGE_FROM_BACKEND: {
return getQuotePageData(setScreenData, screenMetaData);
}
case ScreenActionTypes.FETCH_COMPARE_PLAN_LIST: {
return fetchComparisonPlanList(screenMetaData, setScreenData);
}
case ScreenActionTypes.FETCH_QUOTE_V4: {
return createQuote(screenMetaData, setScreenData, navigation);
}
case ScreenActionTypes.FETCH_BENEFIT_COMPARE_LIST: {
return getMarketBenefitComparePageData(screenMetaData, setScreenData);
}
case ScreenActionTypes.FETCH_WAITING_PERIOD_SCREEN: {
return getWaitingPeriodScreenData(screenMetaData, setScreenData);
}
case ScreenActionTypes.FETCH_BENEFIT_LIST: {
return getBenefitPageData(screenMetaData, setScreenData);
}
case ScreenActionTypes.SHOW_LOADER: {
const updatedScreenData: ScreenData = {
...screenData,
screenState: ScreenState.LOADING,
};
setScreenData(updatedScreenData);
return;
}
default:
return;
}
},
};
export const handleResponseData = (
setScreenData: Dispatch<SetStateAction<ScreenData | null>>,
response: any,
) => {
const updatedScreenData: ScreenData = {
...(response.data as ScreenData),
screenState: ScreenState.LOADED,
};
setScreenData(updatedScreenData);
};
export const handleErrorData = (
error: any,
setScreenData: Dispatch<SetStateAction<ScreenData | null>>,
screenMetaData: ActionMetaData,
flowName: string,
methodName: string,
startTime: number,
) => {
sendAsAnalyticsEvent({
name: AnalyticsEventNameConstants.HI_RN_INVALID_DATA_ERROR,
properties: {
errorType: EVENT_NAMES.API_NO_RESPONSE_ERROR,
error: `${error}`,
methodName: "handleScreenAction",
},
});
const latency = Date.now() - startTime;
const errorEvent: GlobalErrorData = {
reason: `${error.message}, axiosError: ${error.axiosCode}`,
source: screenMetaData.screenName || "",
statusCode: error.statusCode,
moduleName: AnalyticsModuleNameConstant.GI,
flowName,
methodName: methodName,
globalErrorType: getErrorTypeFromStatusCode(error.statusCode || -1),
isAppDowntimeEvent: false,
errorCode: error.axiosCode,
errorTitle: getErrorTitleFromError(error.statusCode || -1),
latency: latency,
};
sendAsGlobalErrorEvent(errorEvent);
const updatedScreenData: ScreenData = {
screenState: ScreenState.ERROR,
errorMetaData: {
baseActionType: BaseActionTypes.SCREEN_ACTION,
metaData: [
{
actionType: ScreenActionTypes.SHOW_LOADER,
},
screenMetaData,
],
errorStatusCode: error.statusCode,
},
};
setScreenData(updatedScreenData);
};