2024-03-27 20:36:03 +05:30
|
|
|
import { Dispatch, SetStateAction } from "react";
|
|
|
|
|
import {
|
|
|
|
|
SumInsuredRequestData,
|
2024-12-24 16:30:57 +05:30
|
|
|
handlePatchRenewalQuote,
|
2024-03-27 20:36:03 +05:30
|
|
|
updateSumInsuredData,
|
2024-12-24 16:30:57 +05:30
|
|
|
} from "../../../Container/Navi-Insurance/network";
|
|
|
|
|
|
2024-03-27 20:36:03 +05:30
|
|
|
import {
|
|
|
|
|
ActionMetaData,
|
|
|
|
|
GenericActionPayload,
|
|
|
|
|
TargetWidgetPayload,
|
|
|
|
|
} from "../../actions/GenericAction";
|
2024-12-05 16:59:28 +05:30
|
|
|
import { ApiMethod } from "../../constants";
|
2024-04-01 18:40:47 +05:30
|
|
|
import {
|
2024-05-20 11:18:06 +05:30
|
|
|
AnalyticsEventNameConstants,
|
2024-04-01 18:40:47 +05:30
|
|
|
AnalyticsFlowNameConstant,
|
|
|
|
|
AnalyticsMethodNameConstant,
|
|
|
|
|
AnalyticsModuleNameConstant,
|
2024-10-24 16:38:07 +05:30
|
|
|
EVENT_NAMES,
|
2024-04-01 18:40:47 +05:30
|
|
|
} from "../../constants/AnalyticsEventsConstant";
|
2024-05-20 11:18:06 +05:30
|
|
|
import {
|
|
|
|
|
sendAsAnalyticsEvent,
|
|
|
|
|
sendAsGlobalErrorEvent,
|
|
|
|
|
} from "../../hooks/useAnalyticsEvent";
|
|
|
|
|
import { AnalyticsEvent, CtaData } from "../../interface";
|
2024-04-07 21:37:04 +05:30
|
|
|
import { ScreenData } from "../../interface/widgets/screenData/ScreenData";
|
|
|
|
|
import { FinalPatchCallRequestBody } from "../../interface/widgets/widgetData/FooterWithCardWidgetData";
|
|
|
|
|
import { ScreenState } from "../../screen/BaseScreen";
|
2024-08-06 14:56:17 +05:30
|
|
|
import {
|
2024-09-24 23:06:55 +05:30
|
|
|
getApplicationFromScreenMetaData,
|
|
|
|
|
getApplicationIdFromCta,
|
2024-08-06 14:56:17 +05:30
|
|
|
getQuoteIdFromCta,
|
|
|
|
|
getQuoteIdFromScreenMetaData,
|
|
|
|
|
} from "../../utilities/CtaParamsUtils";
|
2024-09-20 15:31:18 +05:30
|
|
|
import { getErrorTypeFromStatusCode } from "../../utilities/ErrorUtils";
|
2024-04-07 21:37:04 +05:30
|
|
|
import { updateValueByKeyPath } from "../../utilities/MiscUtils";
|
2024-12-24 16:30:57 +05:30
|
|
|
import { globalHandleClick } from "../../utilities/NavigationUtil";
|
2024-04-07 21:37:04 +05:30
|
|
|
import { parseValue } from "../../utilities/SerializerUtil";
|
|
|
|
|
import { WidgetActionTypes } from "./WidgetActionTypes";
|
2024-03-27 20:36:03 +05:30
|
|
|
|
|
|
|
|
const WidgetActionHandler = {
|
|
|
|
|
handleWidgetAction: (
|
|
|
|
|
widgetMetaData: ActionMetaData,
|
|
|
|
|
setScreenData: Dispatch<SetStateAction<ScreenData | null>>,
|
|
|
|
|
setErrorMetaData:
|
|
|
|
|
| Dispatch<SetStateAction<ActionMetaData[] | null>>
|
|
|
|
|
| undefined,
|
|
|
|
|
screenData?: ScreenData | null,
|
|
|
|
|
ctaData?: CtaData,
|
2024-05-14 23:40:14 +05:30
|
|
|
navigation?: any,
|
2024-03-27 20:36:03 +05:30
|
|
|
) => {
|
|
|
|
|
switch (widgetMetaData.actionType) {
|
|
|
|
|
case WidgetActionTypes.UPDATE_WIDGET_DATA: {
|
|
|
|
|
if (!!screenData) {
|
|
|
|
|
const updatedScreenData = { ...screenData } as ScreenData;
|
|
|
|
|
widgetMetaData?.data?.forEach(
|
|
|
|
|
(targetWidgetPayload: any, _: number) => {
|
|
|
|
|
if (
|
|
|
|
|
(targetWidgetPayload as TargetWidgetPayload).valueType ===
|
|
|
|
|
undefined
|
|
|
|
|
) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const { widgetId, keyPath, newValue, valueType } =
|
|
|
|
|
targetWidgetPayload;
|
|
|
|
|
let widgetIdFound = false;
|
|
|
|
|
updatedScreenData?.screenWidgets?.contentWidgets?.forEach(
|
2024-05-14 23:40:14 +05:30
|
|
|
widget => {
|
2024-03-27 20:36:03 +05:30
|
|
|
if (widget.widgetId === widgetId && keyPath === "") {
|
|
|
|
|
if (newValue === "false") {
|
|
|
|
|
widget.widgetVisibility = false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
widget.widgetVisibility = true;
|
|
|
|
|
}
|
|
|
|
|
if (widget?.widgetId === widgetId && !!keyPath) {
|
|
|
|
|
updateValueByKeyPath(
|
|
|
|
|
widget.widgetData,
|
|
|
|
|
keyPath,
|
2024-05-14 23:40:14 +05:30
|
|
|
parseValue(newValue, valueType),
|
2024-03-27 20:36:03 +05:30
|
|
|
);
|
|
|
|
|
setScreenData(updatedScreenData);
|
|
|
|
|
widgetIdFound = true;
|
|
|
|
|
return;
|
|
|
|
|
}
|
2024-05-14 23:40:14 +05:30
|
|
|
},
|
2024-03-27 20:36:03 +05:30
|
|
|
);
|
|
|
|
|
!widgetIdFound
|
|
|
|
|
? updatedScreenData?.screenWidgets?.footerWidgets?.forEach(
|
2024-05-14 23:40:14 +05:30
|
|
|
widget => {
|
2024-03-27 20:36:03 +05:30
|
|
|
if (widget.widgetId === widgetId && keyPath === "") {
|
|
|
|
|
if (newValue === "false") {
|
|
|
|
|
widget.widgetVisibility = false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
widget.widgetVisibility = true;
|
|
|
|
|
}
|
|
|
|
|
if (widget?.widgetId === widgetId && !!keyPath) {
|
|
|
|
|
updateValueByKeyPath(
|
|
|
|
|
widget.widgetData,
|
|
|
|
|
keyPath,
|
2024-05-14 23:40:14 +05:30
|
|
|
parseValue(newValue, valueType),
|
2024-03-27 20:36:03 +05:30
|
|
|
);
|
|
|
|
|
setScreenData(updatedScreenData);
|
|
|
|
|
return;
|
|
|
|
|
}
|
2024-05-14 23:40:14 +05:30
|
|
|
},
|
2024-03-27 20:36:03 +05:30
|
|
|
)
|
|
|
|
|
: {};
|
|
|
|
|
!widgetIdFound
|
|
|
|
|
? updatedScreenData?.screenWidgets?.headerWidgets?.forEach(
|
2024-05-14 23:40:14 +05:30
|
|
|
widget => {
|
2024-03-27 20:36:03 +05:30
|
|
|
if (widget.widgetId === widgetId && keyPath === "") {
|
|
|
|
|
if (newValue === "false") {
|
|
|
|
|
widget.widgetVisibility = false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
widget.widgetVisibility = true;
|
|
|
|
|
}
|
|
|
|
|
if (widget?.widgetId === widgetId && !!keyPath) {
|
|
|
|
|
updateValueByKeyPath(
|
|
|
|
|
widget.widgetData,
|
|
|
|
|
keyPath,
|
2024-05-14 23:40:14 +05:30
|
|
|
parseValue(newValue, valueType),
|
2024-03-27 20:36:03 +05:30
|
|
|
);
|
|
|
|
|
setScreenData(updatedScreenData);
|
|
|
|
|
return;
|
|
|
|
|
}
|
2024-05-14 23:40:14 +05:30
|
|
|
},
|
2024-03-27 20:36:03 +05:30
|
|
|
)
|
|
|
|
|
: {};
|
2024-05-14 23:40:14 +05:30
|
|
|
},
|
2024-03-27 20:36:03 +05:30
|
|
|
);
|
|
|
|
|
setScreenData(updatedScreenData);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case WidgetActionTypes.PATCH_QUOTE_V2: {
|
2024-08-06 14:56:17 +05:30
|
|
|
let quoteId =
|
|
|
|
|
getQuoteIdFromCta(ctaData) ??
|
|
|
|
|
getQuoteIdFromScreenMetaData(screenData?.screenMetaData);
|
2024-09-24 23:06:55 +05:30
|
|
|
let applicationId =
|
|
|
|
|
getApplicationIdFromCta(ctaData) ??
|
|
|
|
|
getApplicationFromScreenMetaData(screenData?.screenMetaData);
|
2024-03-27 20:36:03 +05:30
|
|
|
const requestData: SumInsuredRequestData = widgetMetaData.data;
|
2024-09-24 23:06:55 +05:30
|
|
|
requestData.applicationId = applicationId;
|
2024-07-19 01:01:24 +05:30
|
|
|
return updateSumInsuredData(requestData, quoteId!!)
|
2024-08-06 14:56:17 +05:30
|
|
|
.then(response => {})
|
|
|
|
|
.catch(error => {
|
2024-07-19 01:01:24 +05:30
|
|
|
const errorEvent: AnalyticsEvent = {
|
2024-08-06 14:56:17 +05:30
|
|
|
name: AnalyticsEventNameConstants.PATCH_QUOTE_V2,
|
2024-07-19 01:01:24 +05:30
|
|
|
};
|
|
|
|
|
sendAsAnalyticsEvent(errorEvent);
|
2024-05-04 07:46:04 -07:00
|
|
|
});
|
2024-03-27 20:36:03 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case WidgetActionTypes.FINAL_PATCH_CALL: {
|
|
|
|
|
setScreenData({
|
|
|
|
|
...screenData,
|
|
|
|
|
screenState: ScreenState.OVERLAY,
|
|
|
|
|
});
|
2024-08-06 14:56:17 +05:30
|
|
|
let quoteId =
|
|
|
|
|
getQuoteIdFromCta(ctaData) ??
|
|
|
|
|
getQuoteIdFromScreenMetaData(screenData?.screenMetaData);
|
2024-09-24 23:06:55 +05:30
|
|
|
let applicationId =
|
|
|
|
|
getApplicationIdFromCta(ctaData) ??
|
|
|
|
|
getApplicationFromScreenMetaData(screenData?.screenMetaData);
|
2024-03-27 20:36:03 +05:30
|
|
|
const requestData: SumInsuredRequestData = (
|
|
|
|
|
widgetMetaData?.data as FinalPatchCallRequestBody
|
|
|
|
|
).requestData;
|
|
|
|
|
const nextPageCta: CtaData = (
|
|
|
|
|
widgetMetaData?.data as FinalPatchCallRequestBody
|
|
|
|
|
).nextPageCta;
|
2024-09-24 23:06:55 +05:30
|
|
|
requestData.applicationId = applicationId;
|
2024-12-05 16:59:28 +05:30
|
|
|
const url = `v3/quotes/${quoteId}`;
|
2024-08-06 14:56:17 +05:30
|
|
|
return updateSumInsuredData(requestData, quoteId!!)
|
|
|
|
|
.then(response => {
|
|
|
|
|
handleResponseData(nextPageCta, setScreenData, screenData);
|
|
|
|
|
})
|
|
|
|
|
.catch(error => {
|
|
|
|
|
handleErrorData(
|
|
|
|
|
error,
|
|
|
|
|
setScreenData,
|
|
|
|
|
widgetMetaData,
|
|
|
|
|
AnalyticsMethodNameConstant.FINAL_PATCH_CALL,
|
2024-12-24 16:30:57 +05:30
|
|
|
AnalyticsFlowNameConstant.GI_RN_QUOTE,
|
2024-08-06 14:56:17 +05:30
|
|
|
screenData,
|
2024-12-05 16:59:28 +05:30
|
|
|
url,
|
|
|
|
|
ApiMethod.PATCH,
|
2024-08-06 14:56:17 +05:30
|
|
|
);
|
|
|
|
|
});
|
2024-03-27 20:36:03 +05:30
|
|
|
}
|
|
|
|
|
|
2024-12-24 16:30:57 +05:30
|
|
|
case WidgetActionTypes.PATCH_RENEWAL_QUOTE: {
|
|
|
|
|
handlePatchRenewalQuote({
|
|
|
|
|
widgetMetaData,
|
|
|
|
|
ctaData,
|
|
|
|
|
setScreenData,
|
|
|
|
|
setErrorMetaData,
|
|
|
|
|
navigation,
|
|
|
|
|
screenData,
|
|
|
|
|
});
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-27 20:36:03 +05:30
|
|
|
case WidgetActionTypes.SHOW_LOADER: {
|
|
|
|
|
const updatedScreenData: ScreenData = {
|
|
|
|
|
...screenData,
|
|
|
|
|
screenState: ScreenState.LOADING,
|
|
|
|
|
};
|
|
|
|
|
setScreenData(updatedScreenData);
|
|
|
|
|
return;
|
|
|
|
|
}
|
2024-05-14 23:40:14 +05:30
|
|
|
case WidgetActionTypes.ANALYTIC_ACTION: {
|
2024-08-06 14:56:17 +05:30
|
|
|
widgetMetaData?.analyticsEventProperties &&
|
|
|
|
|
sendAsAnalyticsEvent(widgetMetaData?.analyticsEventProperties);
|
|
|
|
|
return;
|
2024-05-14 23:40:14 +05:30
|
|
|
}
|
2024-03-27 20:36:03 +05:30
|
|
|
|
|
|
|
|
default: {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
getTargetWidgetActionPayload: (
|
|
|
|
|
value: any | undefined | null,
|
2024-05-14 23:40:14 +05:30
|
|
|
actionPayloadList: GenericActionPayload | undefined,
|
2024-03-27 20:36:03 +05:30
|
|
|
): GenericActionPayload | undefined => {
|
|
|
|
|
if (!actionPayloadList) {
|
|
|
|
|
return undefined;
|
|
|
|
|
}
|
|
|
|
|
let updatedActionPayload: GenericActionPayload = {
|
|
|
|
|
...actionPayloadList,
|
2024-05-14 23:40:14 +05:30
|
|
|
metaData: actionPayloadList.metaData?.map(actionPayload => {
|
2024-03-27 20:36:03 +05:30
|
|
|
let updatedList = actionPayload?.data?.map(
|
|
|
|
|
(targetWidgetPayload: any) => {
|
|
|
|
|
if (
|
|
|
|
|
(targetWidgetPayload as TargetWidgetPayload).valueType ===
|
|
|
|
|
undefined
|
|
|
|
|
) {
|
|
|
|
|
return targetWidgetPayload;
|
|
|
|
|
}
|
|
|
|
|
let newValue = value;
|
|
|
|
|
if (
|
|
|
|
|
typeof value === "object" &&
|
|
|
|
|
value !== null &&
|
|
|
|
|
!Array.isArray(value) &&
|
|
|
|
|
targetWidgetPayload?.actionId &&
|
|
|
|
|
value[targetWidgetPayload.actionId]
|
|
|
|
|
) {
|
|
|
|
|
newValue = value[targetWidgetPayload.actionId];
|
|
|
|
|
}
|
|
|
|
|
return {
|
|
|
|
|
...targetWidgetPayload,
|
|
|
|
|
newValue: newValue,
|
|
|
|
|
};
|
2024-05-14 23:40:14 +05:30
|
|
|
},
|
2024-03-27 20:36:03 +05:30
|
|
|
);
|
|
|
|
|
const widgetActionMeta: ActionMetaData = {
|
|
|
|
|
actionType: actionPayload.actionType,
|
|
|
|
|
data: updatedList,
|
|
|
|
|
};
|
|
|
|
|
return widgetActionMeta;
|
|
|
|
|
}),
|
|
|
|
|
};
|
|
|
|
|
return updatedActionPayload;
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
2024-12-24 16:30:57 +05:30
|
|
|
export const handleResponseData = (
|
2024-05-04 07:46:04 -07:00
|
|
|
nextPageCta: CtaData,
|
|
|
|
|
setScreenData: Dispatch<SetStateAction<ScreenData | null>>,
|
2024-08-06 14:56:17 +05:30
|
|
|
screenData?: ScreenData | null,
|
2024-12-24 16:30:57 +05:30
|
|
|
navigation?: any,
|
2024-05-04 07:46:04 -07:00
|
|
|
) => {
|
|
|
|
|
const updatedNextPageCta: CtaData = {
|
|
|
|
|
...nextPageCta,
|
|
|
|
|
finish: nextPageCta.finish ? nextPageCta.finish : false,
|
|
|
|
|
};
|
2024-12-24 16:30:57 +05:30
|
|
|
globalHandleClick(navigation, updatedNextPageCta);
|
2024-05-04 07:46:04 -07:00
|
|
|
setScreenData({
|
|
|
|
|
...screenData,
|
|
|
|
|
screenState: ScreenState.LOADED,
|
|
|
|
|
});
|
|
|
|
|
return;
|
|
|
|
|
};
|
|
|
|
|
|
2024-12-24 16:30:57 +05:30
|
|
|
export const handleErrorData = (
|
2024-05-04 07:46:04 -07:00
|
|
|
error: any,
|
|
|
|
|
setScreenData: Dispatch<SetStateAction<ScreenData | null>>,
|
|
|
|
|
widgetMetaData: ActionMetaData,
|
|
|
|
|
methodName: string,
|
2024-12-24 16:30:57 +05:30
|
|
|
flowName: string,
|
2024-08-06 14:56:17 +05:30
|
|
|
screenData?: ScreenData | null,
|
2024-12-05 16:59:28 +05:30
|
|
|
apiUrl?: string,
|
|
|
|
|
apiMethod?: string,
|
2024-05-04 07:46:04 -07:00
|
|
|
) => {
|
2024-10-24 16:38:07 +05:30
|
|
|
sendAsAnalyticsEvent({
|
|
|
|
|
name: AnalyticsEventNameConstants.HI_RN_INVALID_DATA_ERROR,
|
|
|
|
|
properties: {
|
|
|
|
|
errorType: EVENT_NAMES.API_NO_RESPONSE_ERROR,
|
|
|
|
|
error: `${widgetMetaData.actionType}`,
|
|
|
|
|
methodName: "handleWidgetAction",
|
|
|
|
|
},
|
|
|
|
|
});
|
2024-05-04 07:46:04 -07:00
|
|
|
const errorEvent: GlobalErrorData = {
|
2024-05-17 19:49:56 +05:30
|
|
|
reason: `${error.message}, axiosError: ${error.axiosCode}`,
|
2024-09-05 21:49:32 +05:30
|
|
|
source: widgetMetaData.screenName || "",
|
2024-05-17 19:49:56 +05:30
|
|
|
statusCode: error.statusCode,
|
2024-05-04 07:46:04 -07:00
|
|
|
moduleName: AnalyticsModuleNameConstant.GI,
|
2024-12-24 16:30:57 +05:30
|
|
|
flowName: flowName,
|
2024-05-04 07:46:04 -07:00
|
|
|
methodName: methodName,
|
2025-01-13 19:49:39 +05:30
|
|
|
globalErrorType: getErrorTypeFromStatusCode(error.statusCode),
|
2024-09-05 21:49:32 +05:30
|
|
|
isAppDowntimeEvent: false,
|
2024-12-05 16:59:28 +05:30
|
|
|
isNae: false,
|
|
|
|
|
apiUrl: apiUrl,
|
|
|
|
|
apiMethod: apiMethod,
|
2024-05-04 07:46:04 -07:00
|
|
|
};
|
|
|
|
|
sendAsGlobalErrorEvent(errorEvent);
|
|
|
|
|
setScreenData({
|
|
|
|
|
...screenData,
|
|
|
|
|
screenState: ScreenState.LOADED,
|
|
|
|
|
});
|
|
|
|
|
return;
|
|
|
|
|
};
|
|
|
|
|
|
2024-03-27 20:36:03 +05:30
|
|
|
export default WidgetActionHandler;
|