Files
super-app/App/Container/Navi-Insurance/network/QuotePageApi.ts
Kshitij Pramod Ghongadi 6d8f1b2933 TP-74032 | Journey Revamp Phase 1 | API Endpoint Changes (#11865)
Co-authored-by: Prajjaval Verma <prajjaval.verma@navi.com>
2024-09-24 17:36:55 +00:00

155 lines
4.9 KiB
TypeScript

import { AxiosRequestConfig } from "axios";
import { Dispatch, SetStateAction } from "react";
import { getXTargetHeaderInfo } from "../../../../network/ApiClient";
import { GZIP } from "../../../../network/NetworkConstant";
import { get, patch, post } from "../../../../network/NetworkService";
import { ActionMetaData } from "../../../common/actions/GenericAction";
import {
AnalyticsFlowNameConstant,
AnalyticsMethodNameConstant,
BASE_SCREEN,
} from "../../../common/constants";
import { GI } from "../../../common/constants/NavigationHandlerConstants";
import { sendAsAnalyticsEvent } from "../../../common/hooks/useAnalyticsEvent";
import { CtaData } from "../../../common/interface";
import { ScreenData } from "../../../common/interface/widgets/screenData/ScreenData";
import { ScreenState } from "../../../common/screen/BaseScreen";
import {
handleErrorData,
handleResponseData,
} from "../../../common/screen/ScreenActionHandler";
import { ScreenActionTypes } from "../../../common/screen/ScreenActionTypes";
export interface SumInsuredRequestData {
sumInsured: string;
planId?: string;
applicationId?: string | null;
}
export const createQuote = async (
screenData: ScreenData | null | undefined,
screenMetaData: ActionMetaData,
setScreenData: Dispatch<SetStateAction<ScreenData | null>>,
navigation: any,
) => {
const url = "v4/quotes";
const data = screenMetaData.data;
const requestConfig: AxiosRequestConfig = {
headers: {
"Accept-Encoding": GZIP,
"X-Target": GI.toLocaleUpperCase(),
},
};
return post<ApiResponse<CtaData>>(url, screenMetaData.data, requestConfig)
.then(response => {
if (screenData?.screenState) {
setScreenData({
...screenData,
screenState: ScreenState.LOADING,
});
}
if (response) {
const updatedScreenData: ScreenData = {
...(response.data as ScreenData),
screenState: ScreenState.LOADED,
};
// If redirectionCta is present and screenWidgets is not present then navigate to Base screen to get routed to specific screenName based on Cta
const { redirectionCta, analyticsEvent } =
updatedScreenData.screenMetaData || {};
// If redirectionCta exists and screenWidgets is absent, navigate to Base screen
if (redirectionCta && !updatedScreenData.screenWidgets) {
handleRedirection(navigation, redirectionCta);
} else {
if (analyticsEvent) {
sendAsAnalyticsEvent(analyticsEvent);
}
setScreenData(updatedScreenData);
}
}
})
.catch(error => {
handleErrorData(
error,
setScreenData,
screenMetaData,
AnalyticsFlowNameConstant.GI_RN_QUOTE,
AnalyticsMethodNameConstant.FETCH_QUOTE_V4,
ScreenActionTypes.FETCH_QUOTE_V4,
);
});
};
const handleRedirection = (navigation: any, redirectionCta: any) => {
if (redirectionCta.analyticsEventProperties) {
sendAsAnalyticsEvent(redirectionCta.analyticsEventProperties);
}
navigation.navigate(BASE_SCREEN, { ctaData: redirectionCta });
};
export const getQuotePageData = async (
setScreenData: Dispatch<SetStateAction<ScreenData | null>>,
screenMetaData: ActionMetaData,
) => {
let quoteId = screenMetaData.data.quoteId;
const requestConfig: AxiosRequestConfig = {
headers: {
"X-Target": GI.toLocaleUpperCase(),
},
};
const url = `v3/quotes/${quoteId}`;
return get<ApiResponse<CtaData>>(url, requestConfig, screenMetaData.data)
.then(response => {
handleResponseData(setScreenData, response);
})
.catch(error => {
handleErrorData(
error,
setScreenData,
screenMetaData,
AnalyticsFlowNameConstant.GI_RN_QUOTE,
AnalyticsMethodNameConstant.FETCH_INSURANCE_QUOTE_PAGE_FROM_BACKEND,
ScreenActionTypes.FETCH_INSURANCE_QUOTE_PAGE_FROM_BACKEND,
);
});
};
export const updateSumInsuredData = async (
data: SumInsuredRequestData,
quoteId: string,
) => {
const url = `v3/quotes/${quoteId}`;
return patch<ApiResponse<ScreenData>>(
url,
data,
getXTargetHeaderInfo(GI.toLocaleUpperCase()),
);
};
export const fetchComparisonPlanList = async (
screenMetaData: ActionMetaData,
setScreenData: Dispatch<SetStateAction<ScreenData | null>>,
) => {
return post<ApiResponse<CtaData>>(
"quotes/compare-plans",
screenMetaData.data,
getXTargetHeaderInfo(GI.toLocaleUpperCase()),
)
.then(response => {
const updatedScreenData: ScreenData = {
...(response.data as ScreenData),
screenState: ScreenState.LOADED,
};
setScreenData(updatedScreenData);
})
.catch(error => {
handleErrorData(
error,
setScreenData,
screenMetaData,
AnalyticsFlowNameConstant.GI_RN_QUOTE,
AnalyticsMethodNameConstant.COMPARE_PLAN_LIST,
ScreenActionTypes.FETCH_COMPARE_PLAN_LIST,
);
});
};