155 lines
4.9 KiB
TypeScript
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,
|
|
);
|
|
});
|
|
};
|