From 68d20a76c66fddcd1cc6614f34b6344a1a4aa8a2 Mon Sep 17 00:00:00 2001 From: Kshitij Pramod Ghongadi Date: Tue, 11 Jun 2024 23:24:34 +0530 Subject: [PATCH] TP-62888 | Feature | Market benefit comparison (#10870) --- App/Container/Navi-Insurance/index.ts | 3 +- .../MarketBenefitCompareScreen.tsx | 224 ++++++++++++++++++ .../MarketBenefitCompareScreenStyles.ts | 22 ++ .../constants/AnalyticsEventsConstant.ts | 5 +- App/common/constants/ModalNameConstants.ts | 14 +- App/common/constants/ScreenNameConstants.ts | 3 +- App/common/constants/WidgetNameConstants.ts | 3 +- App/common/hooks/useBottomSheet.tsx | 4 +- App/common/interface/index.ts | 1 + ...itleSubtitleWithDropdownBottomSheetData.ts | 38 +++ .../widgetData/FooterWithCardWidgetData.ts | 2 +- .../widgetData/HeroSectionWidgetData.ts | 26 ++ .../widgets/widgetData/TableWidgetData.ts | 29 ++- .../widgetData/TitleWithAssetsWidgetData.ts | 2 +- .../interface/widgets/widgetData/index.ts | 4 + App/common/modals/modalViewResolver.tsx | 39 ++- App/common/screen/BaseScreen.tsx | 23 +- App/common/screen/ScreenActionHandler.tsx | 19 ++ App/common/screen/ScreenActionTypes.ts | 1 + .../screen/screen-mappers/GIScreenMapper.tsx | 18 +- .../styles/BaseBottomSheetComponentStyles.ts | 1 + .../widget-actions/WidgetActionTypes.ts | 2 +- App/common/widgets/widgetResolver.tsx | 33 ++- .../bottomsheet/BaseBottomSheetComponent.tsx | 1 + .../PolicyAmountBottomSheet.tsx | 8 +- .../TitleSubtitleWithDropdownBottomSheet.tsx | 164 +++++++++++++ ...leSubtitleWithDropdownBottomSheetStyles.ts | 80 +++++++ .../TitleWithFeedBackBottomSheet.tsx | 13 +- .../TitleWithLeftRightButtonsBottomSheet.tsx | 26 +- ...tleWithLeftRightButtonsBottomSheetStyle.ts | 6 +- .../TitleWithListBottomSheet.tsx | 7 +- .../TitleWithStepsBottomSheet.tsx | 5 +- .../reusable/cta-button/CtaButtonStyle.ts | 5 +- .../FooterWithCardWidget.tsx | 14 +- .../hero-section-widget/HeroSectionWidget.tsx | 41 ++++ .../HeroSectionWidgetStyles.ts | 20 ++ components/widgets/index.tsx | 2 + components/widgets/table-widget/Table.tsx | 88 +++++-- .../widgets/title-widget/TitleWidget.tsx | 14 +- package.json | 4 +- 40 files changed, 888 insertions(+), 126 deletions(-) create mode 100644 App/Container/Navi-Insurance/screen/market-benefit-compare-screen/MarketBenefitCompareScreen.tsx create mode 100644 App/Container/Navi-Insurance/screen/market-benefit-compare-screen/MarketBenefitCompareScreenStyles.ts create mode 100644 App/common/interface/widgets/modalData/TitleSubtitleWithDropdownBottomSheetData.ts create mode 100644 App/common/interface/widgets/widgetData/HeroSectionWidgetData.ts create mode 100644 components/bottomsheet/title-subtitle-with-dropdown-bottom-sheet/TitleSubtitleWithDropdownBottomSheet.tsx create mode 100644 components/bottomsheet/title-subtitle-with-dropdown-bottom-sheet/TitleSubtitleWithDropdownBottomSheetStyles.ts create mode 100644 components/widgets/hero-section-widget/HeroSectionWidget.tsx create mode 100644 components/widgets/hero-section-widget/HeroSectionWidgetStyles.ts diff --git a/App/Container/Navi-Insurance/index.ts b/App/Container/Navi-Insurance/index.ts index b7d077af08..fd15e3fb37 100644 --- a/App/Container/Navi-Insurance/index.ts +++ b/App/Container/Navi-Insurance/index.ts @@ -1,5 +1,6 @@ export { default as QuoteOfferScreen } from "./screen/quote-offer-screen/QuoteOfferScreen"; export { default as QuoteApologyScreen } from "./screen/quote-apology-screen/QuoteApologyScreen"; export { default as ComparePlanScreen } from "./screen/compare-plan-screen/ComparePlanScreen"; +export { default as MarketBenefitCompareScreen } from "./screen/market-benefit-compare-screen/MarketBenefitCompareScreen"; export { default as GenericShimmerScreen } from "./screen/generic-shimmer-screen/GenericShimmerScreen"; -export { default as GenericErrorScreen } from "./screen/generic-error-screen/GenericErrorScreen"; \ No newline at end of file +export { default as GenericErrorScreen } from "./screen/generic-error-screen/GenericErrorScreen"; diff --git a/App/Container/Navi-Insurance/screen/market-benefit-compare-screen/MarketBenefitCompareScreen.tsx b/App/Container/Navi-Insurance/screen/market-benefit-compare-screen/MarketBenefitCompareScreen.tsx new file mode 100644 index 0000000000..dab0f0d926 --- /dev/null +++ b/App/Container/Navi-Insurance/screen/market-benefit-compare-screen/MarketBenefitCompareScreen.tsx @@ -0,0 +1,224 @@ +import { useNavigation } from "@react-navigation/native"; +import React, { useEffect } from "react"; +import { + BackHandler, + NativeScrollEvent, + NativeSyntheticEvent, + View, +} from "react-native"; +import Animated, { + useAnimatedStyle, + useSharedValue, +} from "react-native-reanimated"; +import BaseWidget from "../../../../../components/widgets/BaseWidget"; +import { + BaseActionTypes, + GenericActionPayload, +} from "../../../../common/actions/GenericAction"; +import { + AnalyticsEventNameConstants, + ConstantCta, +} from "../../../../common/constants"; +import { sendAsAnalyticsEvent } from "../../../../common/hooks/useAnalyticsEvent"; +import { logToSentry } from "../../../../common/hooks/useSentryLogging"; +import { AnalyticsEvent, CtaData, CtaType } from "../../../../common/interface"; +import { Widget } from "../../../../common/interface/widgets/Widget"; +import { ScreenData } from "../../../../common/interface/widgets/screenData/ScreenData"; +import { NativeDeeplinkNavigatorModule } from "../../../../common/native-module/NativeModules"; +import { + CtaNavigator, + extractCtaParameters, +} from "../../../../common/navigator/NavigationRouter"; +import { ScreenState } from "../../../../common/screen/BaseScreen"; +import { ScreenActionTypes } from "../../../../common/screen/ScreenActionTypes"; +import GenericShimmerScreen from "../generic-shimmer-screen/GenericShimmerScreen"; +import QuoteOfferErrorScreen from "../quote-offer-screen/error-screen/QuoteOfferErrorScreen"; +import styles from "./MarketBenefitCompareScreenStyles"; +const MarketBenefitCompareScreen = ({ + ctaData, + screenData, + handleActions, +}: { + ctaData: CtaData; + screenData: ScreenData | null; + handleActions: (screenPayload?: GenericActionPayload) => void; +}) => { + const navigation = useNavigation(); + const y = useSharedValue(0); + const onScroll = (event: NativeSyntheticEvent) => { + y.value = event.nativeEvent.contentOffset.y; + }; + const handleClick = (cta?: CtaData) => { + if (!cta) { + logToSentry( + `Navigation cta is missing or invalid: ${cta} | MethodName: handleClick}`, + ); + return; + } + + const { navigatorType } = extractCtaParameters(cta); + + try { + switch (cta.type) { + case CtaType.DEEP_LINK: + case CtaType.USE_ROOT_DEEPLINK_NAVIGATOR: + NativeDeeplinkNavigatorModule.navigateToNaviInsuranceDeeplinkNavigator( + JSON.stringify(cta), + ); + break; + case CtaType.RN_NAVIGATOR: + CtaNavigator.performNavigation(navigation, navigatorType, cta); + break; + case CtaType.GO_BACK: + if (navigation.canGoBack()) { + navigation.goBack(); + } else { + BackHandler.exitApp(); + } + break; + default: + NativeDeeplinkNavigatorModule.navigateToNaviDeeplinkNavigator( + JSON.stringify(cta), + ); + break; + } + } catch (error) { + logToSentry( + `Error while navigating to deep link with CTA: ${cta} | MethodName: handleClick}`, + ); + } + }; + + useEffect(() => { + handleActions({ + baseActionType: BaseActionTypes.SCREEN_ACTION, + metaData: [ + { + actionType: ScreenActionTypes.FETCH_BENEFIT_COMPARE_LIST, + data: ctaData?.data, + }, + ], + }); + }, [ctaData]); + + const headerStyle = useAnimatedStyle(() => { + return { + shadowColor: y.value > 1 ? "black" : "transparent", + shadowOpacity: y.value > 1 ? 1 : 0, + shadowRadius: y.value > 1 ? 8 : 0, + elevation: y.value > 1 ? 32 : 0, + }; + }); + + const Header = () => { + return ( + + {getWidgetViews( + screenData?.screenWidgets?.headerWidgets, + handleActions, + screenData?.screenState, + handleClick, + )} + + ); + }; + + const ContentWidgets = () => { + return getWidgetViews( + screenData?.screenWidgets?.contentWidgets, + handleActions, + screenData?.screenState, + handleClick, + ); + }; + + const Footer = () => { + return ( + + {getWidgetViews( + screenData?.screenWidgets?.footerWidgets, + handleActions, + screenData?.screenState, + handleClick, + )} + + ); + }; + + useEffect(() => { + switch (screenData?.screenState) { + case ScreenState.LOADED: + const initEvent: AnalyticsEvent = { + name: AnalyticsEventNameConstants.HI_RN_BENEFIT_COMPARE_PAGE_INIT, + }; + sendAsAnalyticsEvent(initEvent); + break; + case ScreenState.ERROR: + const errorEvent: AnalyticsEvent = { + name: AnalyticsEventNameConstants.HI_RN_BENEFIT_COMPARE_PAGE_ERROR_VIEW, + }; + sendAsAnalyticsEvent(errorEvent); + break; + default: + break; + } + }, [screenData?.screenState]); + + if (screenData?.screenState === ScreenState.LOADING) { + return ; + } + + if (screenData?.screenState === ScreenState.ERROR) { + return ( + + ); + } + return ( + +
+ + + +