{"version":3,"file":"396-bundle.ffbf2c010e03e240e730.js","mappings":"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","sources":["webpack:///../src/common/images/icon-info-grey.svg","webpack:///../src/common/components/DescriptionWithCard/description-card.module.css","webpack:///../src/common/components/DescriptionWithCard/index.tsx","webpack:///../src/common/hooks/useFavicon.ts","webpack:///../src/common/hooks/useLanguageInPathName.ts","webpack:///../src/products/buy/Routes.tsx","webpack:///../src/products/buy/App.tsx","webpack:///../src/products/buy/connectedComponents/Tracking/connector.ts","webpack:///../src/products/buy/connectedComponents/Tracking/index.tsx","webpack:///../src/products/buy/connectedComponents/Customize/connector.ts","webpack:///../src/products/buy/connectedComponents/Customize/customize.module.css","webpack:///../src/products/buy/components/DropdownComponent/index.tsx","webpack:///../src/products/buy/components/PlusMinusComponent/index.tsx","webpack:///../src/products/buy/components/VolumeComponentWrapper/index.tsx","webpack:///../src/products/buy/components/Addon/index.tsx","webpack:///../src/products/buy/components/AddonsWrapper/index.tsx","webpack:///../src/products/buy/components/BasePlanSection/BasePlanSection.tsx","webpack:///../src/products/buy/connectedComponents/OrderSummary/connector.ts","webpack:///../src/products/buy/connectedComponents/OrderSummary/order-summary.module.css","webpack:///../src/products/buy/components/BaseLineSummary/BaseLineSummary.tsx","webpack:///../src/products/buy/components/AdditionalLinesSummary/AdditionalLinesSummary.tsx","webpack:///../src/products/buy/components/AddonsSummaryWrapper/index.tsx","webpack:///../src/products/buy/components/CouponDiscountSummary/index.tsx","webpack:///../src/products/buy/components/DiscountSummary/index.tsx","webpack:///../src/products/buy/components/TotalSummary/index.tsx","webpack:///../src/products/buy/components/BillingPeriodSwitch/index.tsx","webpack:///../src/products/buy/connectedComponents/PaymentFormInfo/payment-info.module.css","webpack:///../src/products/buy/connectedComponents/OrderSummary/index.tsx","webpack:///../src/products/buy/connectedComponents/Customize/index.tsx","webpack:///../src/products/buy/connectedComponents/FormatCurrency/connector.ts","webpack:///../src/products/buy/connectedComponents/FormatCurrency/FormatCurrency.tsx","webpack:///../src/products/buy/connectedComponents/FormatCurrency/FormatDecimalCurrency.tsx","webpack:///../src/products/buy/connectedComponents/CheckoutForm/connector.ts","webpack:///../src/products/buy/connectedComponents/CheckoutForm/checkout-form.module.css","webpack:///../src/products/buy/connectedComponents/CheckoutForm/index.tsx","webpack:///../src/common/constants/metrix.ts","webpack:///../src/products/buy/connectedComponents/CheckoutForm/index-onepay.tsx","webpack:///../src/products/buy/connectedComponents/CheckoutFormContainer/connector.ts","webpack:///../src/products/buy/connectedComponents/CheckoutFormContainer/index.tsx","webpack:///../src/products/buy/connectedComponents/AccountFormInfo/connector.ts","webpack:///../src/products/buy/components/PasswordValidation/password-validation.module.css","webpack:///../src/products/buy/components/PasswordValidation/index.tsx","webpack:///../src/products/buy/connectedComponents/AccountFormInfo/index.tsx","webpack:///../src/products/buy/connectedComponents/BillingFormInfo/connector.ts","webpack:///../src/products/buy/connectedComponents/BillingFormInfo/billing-info.module.css","webpack:///../src/products/buy/connectedComponents/BillingFormInfo/index.tsx","webpack:///../src/products/buy/connectedComponents/CheckoutFormSubmission/buy-checkout-form-submit.css","webpack:///../src/products/buy/connectedComponents/CheckoutFormSubmission/index.tsx","webpack:///../src/products/buy/connectedComponents/CheckoutFormSubmission/connector.ts","webpack:///../src/products/buy/connectedComponents/PaymentFormInfo/connector.ts","webpack:///../src/products/buy/connectedComponents/PaymentFormInfo/index.tsx","webpack:///../src/products/buy/hooks/useBuyTracking.ts","webpack:///../src/products/buy/hooks/useBillingPageTracking.ts","webpack:///../src/products/buy/hooks/useCheckoutFormPageTracking.ts","webpack:///../src/products/buy/hooks/useCustomizePageTracking.ts","webpack:///../src/products/buy/hooks/useConfirmationPageTracking.ts","webpack:///../src/products/buy/hooks/useCustomizeCart.ts","webpack:///../src/products/buy/hooks/validation/useTaxNumberValidation.ts","webpack:///../src/products/buy/connectedComponents/AccountFormInfo/account-info.module.css","webpack:///../src/products/buy/views/Billing/billing.module.css"],"sourcesContent":["var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgIconInfoGrey = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 20,\n height: 20\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CCC\",\n d: \"M11 7H9V5h2zm0 8H9V9h2zm-.99 5C15.53 20 20 15.52 20 10S15.53 0 10.01 0C4.48 0 0 4.48 0 10s4.48 10 10.01 10M10 2c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8 3.58-8 8-8\"\n})));\nexport { SvgIconInfoGrey as ReactComponent };\nexport default __webpack_public_path__ + \"img/icon-info-grey.006a67add0f2e1df3d7433597f4d66b0.svg\";","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"description-card-module__container\",\"disabled\":\"description-card-module__disabled\",\"header\":\"description-card-module__header\",\"header-text\":\"description-card-module__header-text\",\"header-img\":\"description-card-module__header-img\",\"content\":\"description-card-module__content\",\"card\":\"description-card-module__card\",\"card--selected\":\"description-card-module__card--selected\",\"card--no-desc\":\"description-card-module__card--no-desc\",\"card-description\":\"description-card-module__card-description\",\"card-header\":\"description-card-module__card-header\",\"card-checkbox\":\"description-card-module__card-checkbox\",\"card-checkbox--no-desc\":\"description-card-module__card-checkbox--no-desc\",\"card-checkbox-label\":\"description-card-module__card-checkbox-label\",\"checkbox__label--checked\":\"description-card-module__checkbox__label--checked\"};","import React, { FunctionComponent, ReactElement } from 'react'\r\nimport classNames from 'classnames'\r\nimport { Checkbox } from '@common/components'\r\n\r\nimport styles from './description-card.module.css'\r\n\r\nexport interface CardProps {\r\n icon?: string\r\n mainDescription?: string\r\n title?: string\r\n showCheckbox?: boolean\r\n cardTitle?: ReactElement | string\r\n cardDescription?: string\r\n onSelect?: (val: boolean) => void\r\n selected?: boolean\r\n id: string\r\n disabled: boolean\r\n}\r\n\r\nexport const DescriptionWithCard: FunctionComponent = ({\r\n icon,\r\n mainDescription,\r\n title,\r\n cardDescription,\r\n showCheckbox,\r\n cardTitle,\r\n onSelect,\r\n selected,\r\n id,\r\n disabled,\r\n}) => {\r\n const containerClassList = classNames({\r\n [styles.container]: true,\r\n [styles.disabled]: disabled,\r\n })\r\n\r\n const cardClassList = classNames({\r\n [styles.card]: true,\r\n [styles['card--selected']]: selected,\r\n [styles['card--no-desc']]: !cardDescription,\r\n })\r\n\r\n const checkboxClassList = classNames({\r\n [styles['card-checkbox']]: true,\r\n [styles['card-checkbox--no-desc']]: !cardDescription,\r\n })\r\n\r\n const onChangeFn = (event: React.ChangeEvent) => {\r\n if (onSelect) onSelect(event.target.checked)\r\n }\r\n\r\n return (\r\n
\r\n {title && (\r\n
\r\n {icon && \"addon-icon\"}\r\n\r\n

{title}

\r\n
\r\n )}\r\n\r\n {mainDescription &&
{mainDescription}
}\r\n\r\n
\r\n {showCheckbox && (\r\n \r\n )}\r\n
\r\n
{cardTitle}
\r\n {cardDescription &&
{cardDescription}
}\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import { useEffect } from 'react'\r\n\r\nexport const useFavicon = (favicon: string) => {\r\n const headLink = window.document.head.querySelector('link[rel=\"icon\"]')\r\n\r\n useEffect(() => {\r\n if (favicon) {\r\n headLink?.setAttribute('href', favicon)\r\n }\r\n }, [headLink, favicon])\r\n}\r\n","import { useEffect, useState } from 'react'\r\nimport { STORAGE_CONST, LANGUAGE_CODES } from '@common/constants'\r\nimport { saveSessionState, getSessionState } from '@common/utils'\r\n\r\nexport const useLanguageInPathName = () => {\r\n const storedLanguage = getSessionState(STORAGE_CONST.SAVED_LANGUAGE)\r\n const urlSplitForLang = window.location.pathname.split('/')[1]\r\n const hasLang = Object.values(LANGUAGE_CODES).includes(urlSplitForLang)\r\n const urlLang = hasLang && urlSplitForLang !== 'en' ? `/${urlSplitForLang}` : ''\r\n const [didRedirect, setDidRedirect] = useState(false)\r\n\r\n useEffect(() => {\r\n // If we get language tag from the url, then respect that language and set it to the storage language to update the content\r\n if (urlLang && !storedLanguage) {\r\n saveSessionState(STORAGE_CONST.SAVED_LANGUAGE, urlSplitForLang)\r\n }\r\n\r\n // If we get language tag from the url and there's a stored language, then respect the stored language and replace the language tag in url\r\n if (urlLang && storedLanguage && storedLanguage !== urlSplitForLang) {\r\n setDidRedirect(true)\r\n window.location.pathname = window.location.pathname.replace(\r\n urlLang,\r\n `${storedLanguage !== 'en' ? `/${storedLanguage}` : ''}`\r\n )\r\n }\r\n\r\n // If no language tag from the url and there's a stored language, then respect the stored language and replace the language tag in url\r\n if (!urlLang && storedLanguage && storedLanguage !== 'en') {\r\n setDidRedirect(true)\r\n window.location.pathname = window.location.pathname.replace('', `/${storedLanguage}`)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [storedLanguage, urlLang])\r\n\r\n return { urlLang, didRedirect }\r\n}\r\n","import React, { FunctionComponent, lazy, Suspense } from 'react'\r\nimport { Route, Routes } from 'react-router-dom'\r\nimport { VIEW_PATH } from '@common/constants'\r\nimport { ErrorMessage, LoadingSpinner } from '@common/components'\r\nimport { useLanguageInPathName } from '@common/hooks/useLanguageInPathName'\r\n// Import the page views\r\nconst Billing = lazy(() => import('./views/Billing'))\r\nconst ConfirmationView = lazy(() => import('./views/Confirmation'))\r\n\r\nexport type ParamTypes = {\r\n [key: string]: string | undefined\r\n pathProduct: string\r\n plan: string\r\n}\r\n\r\nexport const BuyRoutes: FunctionComponent = () => {\r\n const { didRedirect } = useLanguageInPathName()\r\n\r\n // If didRedirect was set to true, then don't continue with anything else in this file\r\n if (didRedirect === true) {\r\n return null\r\n }\r\n\r\n return (\r\n }>\r\n \r\n {/* billing main page with customize */}\r\n } />\r\n\r\n {/* billing main page with checkout */}\r\n } />\r\n\r\n {/* confirmation page page */}\r\n } />\r\n\r\n {/* next steps page */}\r\n {/* } /> */}\r\n\r\n {/* fallback */}\r\n \r\n {/* TODO: Find out if we should show an error, redirect to some default page or redirect to the 404 page on goto.com */}\r\n \r\n \r\n }\r\n />\r\n \r\n \r\n )\r\n}\r\n","import React, { FunctionComponent } from 'react'\r\n\r\nimport { GlobalScripts } from '@common/components'\r\nimport { LMI_MA_SCRIPT } from '@common/constants'\r\nimport { useFavicon } from '@common/hooks/useFavicon'\r\nimport { useSelector } from 'react-redux'\r\nimport { BuyRoutes } from './Routes'\r\nimport { ConnectedBuyTrackingProvider } from './connectedComponents'\r\nimport { getProductSettingsData } from './state/selectors'\r\n\r\nconst App: FunctionComponent = () => {\r\n // Can't use useRoute() here to get the pathProduct because this file is loaded before the router\r\n const productSettings = useSelector(getProductSettingsData)\r\n useFavicon(productSettings?.favicon || '')\r\n\r\n return (\r\n <>\r\n \r\n {/* // Feature flags are deprecated */}\r\n \r\n \r\n \r\n {/* */}\r\n \r\n )\r\n}\r\n\r\nexport default App\r\n","import { TrackingState } from '@common/state/tracking/state'\r\nimport { buyTrackingActions } from '@buy/state/tracking/actions'\r\n\r\nexport const mapBuyTrackingState = () => {\r\n return {}\r\n}\r\n\r\nexport const mapBuyTrackingActions = {\r\n track: (trackingInfo: TrackingState, component: string) => buyTrackingActions.track(trackingInfo, component),\r\n}\r\n\r\nexport type BuyTrackingActionsType = typeof mapBuyTrackingActions\r\n\r\nexport interface BuyTrackingContextType {\r\n track: typeof mapBuyTrackingActions.track\r\n}\r\n","import React, { createContext, FunctionComponent } from 'react'\r\nimport { connectRedux, GoToComponentProps } from '@common/utils'\r\nimport {\r\n mapBuyTrackingActions,\r\n mapBuyTrackingState,\r\n BuyTrackingContextType,\r\n BuyTrackingActionsType,\r\n} from '@buy/connectedComponents/Tracking/connector'\r\n\r\ntype BuyTrackingProps = GoToComponentProps, BuyTrackingActionsType>\r\n\r\nexport const BuyTrackingContext = createContext(null)\r\nexport const BuyTrackingProvider: FunctionComponent = ({ children, actions }) => {\r\n const trackingContextValue: BuyTrackingContextType = {\r\n track: actions.track,\r\n }\r\n return {children}\r\n}\r\n\r\nexport const ConnectedBuyTrackingProvider = connectRedux(\r\n BuyTrackingProvider,\r\n mapBuyTrackingState,\r\n mapBuyTrackingActions\r\n)\r\n","import { AppState } from 'app-store'\r\nimport { get } from 'lodash-es'\r\nimport { buyCheckoutActions } from '@buy/state/checkout/actions'\r\nimport { BuySelectedAddon, BuyAddon } from '@buy/state/add-on'\r\nimport { getFatalError, getAccountState, getLocationState } from '@common/state/selectors'\r\nimport {\r\n getUserState,\r\n getLabelContent,\r\n getCheckoutState,\r\n getPlanData,\r\n getBuyFormState,\r\n getCouponState,\r\n} from '@buy/state/selectors'\r\nimport { getExtraAddons, getCurrentAgent, getCurrentEndpoint } from '@buy/utils'\r\nimport { getUpgradingStatus } from '@buy/utils/upgrade-user'\r\nimport { BuyFormData } from '@buy/state/buy-form/state'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport { BuyCustomizeState } from './state'\r\n\r\nexport const mapBuyCustomizeState = (state: AppState): BuyCustomizeState => {\r\n const {\r\n selectedPlan,\r\n changePlan,\r\n upgradeClose,\r\n quantityLabelLong,\r\n quantityLabelPlural,\r\n quantityLabel,\r\n continue: contentContinue,\r\n quantityPopupInfo,\r\n additionalUserLicences,\r\n howManyMore,\r\n existingUserLicencePlural,\r\n existingUserLicense,\r\n additional,\r\n changePlanMethodModalHeader,\r\n changePlanModalSubheader,\r\n modalCloseButtonText,\r\n edit,\r\n changeNumberModalHeader,\r\n changeNumberModalContent,\r\n changePlanUrl,\r\n couponDisclaimer,\r\n monthly,\r\n annual,\r\n user,\r\n year,\r\n month,\r\n billedMonthlyPrice,\r\n billedAnnualPrice,\r\n selectAddons,\r\n selectAddonsDescription,\r\n per,\r\n organizer,\r\n taxTooltip,\r\n agentsVolumediscountTooltip,\r\n endpointsVolumediscountTooltip,\r\n mobileVolumediscountTooltip,\r\n cameraShareVolumediscountTooltip,\r\n endpointProtectionVolumediscountTooltip,\r\n proratedadjustmentTooltip,\r\n } = getLabelContent(state)\r\n\r\n const {\r\n organizers,\r\n selectedAddons,\r\n billingFrequency,\r\n selectedTierIndex,\r\n endpoints,\r\n extraAddons: extraAddonsSelected,\r\n agents,\r\n calculatedTotal,\r\n totalLoading,\r\n baseLine,\r\n additionalLines,\r\n addonLines,\r\n billingTenure,\r\n } = getCheckoutState(state)\r\n\r\n const { accountSubscriptions } = getAccountState(state)\r\n\r\n const { initialData, statesOptional } = getBuyFormState(state)\r\n const planData = getPlanData(state)\r\n const isUserUpgrading = getUpgradingStatus(accountSubscriptions)\r\n const coupon = getCouponState(state)\r\n const { isCouponValidAndApplied, urlCouponCode, couponServerData } = coupon\r\n const {\r\n userType,\r\n existingAccountInformation,\r\n loggedIn: { isUserLoggedIn },\r\n } = getUserState(state)\r\n const { fatalErrorBlocker } = getFatalError(state)\r\n const currentAgent = getCurrentAgent(planData.addons)\r\n const currentEndpoint = getCurrentEndpoint(planData.addons)\r\n const { locationInfo } = getLocationState(state)\r\n const { locale: Locale, currency: CurrencyCode } = locationInfo\r\n const baseTierMonthlyPrice: number = get(\r\n planData,\r\n ['pricingInfo', CurrencyCode, 'monthly', `tier${selectedTierIndex + 1}`, 'price'],\r\n 0\r\n )\r\n const baseTierAnnualPrice: number = get(\r\n planData,\r\n ['pricingInfo', CurrencyCode, 'annual', `tier${selectedTierIndex + 1}`, 'price'],\r\n 0\r\n )\r\n const extraAddons = getExtraAddons(planData.addons).reverse()\r\n const billingPeriodKeys = planData.billingPeriods.map((item) => item.key)\r\n\r\n return {\r\n content: {\r\n selectedPlan,\r\n changePlan,\r\n upgradeClose,\r\n quantityLabelLong,\r\n quantityLabelPlural,\r\n quantityLabel,\r\n continue: contentContinue,\r\n quantityPopupInfo,\r\n additionalUserLicences,\r\n howManyMore,\r\n existingUserLicencePlural,\r\n existingUserLicense,\r\n additional,\r\n changePlanMethodModalHeader,\r\n changePlanModalSubheader,\r\n modalCloseButtonText,\r\n edit,\r\n changeNumberModalHeader,\r\n changeNumberModalContent,\r\n changePlanUrl,\r\n couponDisclaimer,\r\n monthly,\r\n annual,\r\n user,\r\n year,\r\n month,\r\n billedMonthlyPrice,\r\n billedAnnualPrice,\r\n selectAddons,\r\n selectAddonsDescription,\r\n per,\r\n organizer,\r\n taxTooltip,\r\n agentsVolumediscountTooltip,\r\n endpointsVolumediscountTooltip,\r\n mobileVolumediscountTooltip,\r\n cameraShareVolumediscountTooltip,\r\n endpointProtectionVolumediscountTooltip,\r\n proratedadjustmentTooltip,\r\n },\r\n organizers,\r\n planData,\r\n selectedPlan: planData,\r\n isUserLoggedIn,\r\n selectedAddons,\r\n userType,\r\n fatalErrorBlocker,\r\n existingAccountInformation,\r\n initialData,\r\n billingFrequency,\r\n isCouponValidAndApplied,\r\n urlCouponCode,\r\n couponServerData,\r\n locale: Locale,\r\n selectedTierIndex,\r\n CurrencyCode,\r\n coupon,\r\n currentAgent,\r\n currentEndpoint,\r\n endpoints,\r\n baseTierMonthlyPrice,\r\n baseTierAnnualPrice,\r\n extraAddons,\r\n extraAddonsSelected,\r\n agents,\r\n accountSubscriptions,\r\n calculatedTotal,\r\n totalLoading,\r\n statesOptional,\r\n isUserUpgrading,\r\n baseLine,\r\n additionalLines,\r\n addonLines,\r\n billingPeriodKeys,\r\n billingTenure,\r\n }\r\n}\r\nexport const mapBuyCustomizeActions = {\r\n setOrganizers: (organizer: number) => buyCheckoutActions.setOrganizers(organizer),\r\n setSelectedAddons: (addons: BuySelectedAddon[]) => buyCheckoutActions.setSelectedAddons(addons),\r\n calculatePrice: (values: BuyFormData, planSKU?: string) =>\r\n buyCheckoutActions.calculatePrice(values, 'customize', planSKU),\r\n setExtraAddons: (addons: BuyAddon[]) => buyCheckoutActions.setExtraAddons(addons),\r\n setEndpoints: (endpoints: number) => buyCheckoutActions.setEndpoints(endpoints),\r\n setAgents: (agents: number) => buyCheckoutActions.setAgents(agents),\r\n setBaseLine: (baseLine: OrderSummaryLine) => buyCheckoutActions.setBaseLine(baseLine),\r\n setAdditionalLines: (additionalLines: Array) =>\r\n buyCheckoutActions.setAdditionalLines(additionalLines),\r\n setAddonLines: (addonLines: Array) => buyCheckoutActions.setAddonLines(addonLines),\r\n}\r\n\r\nexport type BuyCustomizeActionsType = typeof mapBuyCustomizeActions\r\n","// extracted by mini-css-extract-plugin\nexport default {\"subtitle\":\"customize-module__subtitle\",\"flex-header\":\"customize-module__flex-header\",\"addon-header__sub-text\":\"customize-module__addon-header__sub-text\",\"includes\":\"customize-module__includes\",\"light\":\"customize-module__light\",\"compare\":\"customize-module__compare\",\"label\":\"customize-module__label\",\"labelDescription\":\"customize-module__labelDescription\",\"description\":\"customize-module__description\",\"flex\":\"customize-module__flex\",\"disclaimer\":\"customize-module__disclaimer\",\"license\":\"customize-module__license\",\"logo\":\"customize-module__logo\",\"plan-summary\":\"customize-module__plan-summary\",\"plan-summary-row\":\"customize-module__plan-summary-row\",\"customize-submit-btn\":\"customize-module__customize-submit-btn\",\"plan-summary-base-price\":\"customize-module__plan-summary-base-price\",\"disabled-section\":\"customize-module__disabled-section\",\"addon-selector\":\"customize-module__addon-selector\",\"addon-header\":\"customize-module__addon-header\",\"addon-tooltip\":\"customize-module__addon-tooltip\",\"addon-selector-label\":\"customize-module__addon-selector-label\",\"addon-selector-select\":\"customize-module__addon-selector-select\",\"addon-selector-options-container\":\"customize-module__addon-selector-options-container\",\"addon-selector-option\":\"customize-module__addon-selector-option\",\"addon-selector-option--active\":\"customize-module__addon-selector-option--active\"};","import { BoxWrapper, ConvertStringToReact, CustomDropdown, ErrorMessage, Tooltip } from '@common/components'\r\nimport React, { FunctionComponent, useEffect, useState } from 'react'\r\nimport Pencil from '@common/images/icon-modify-on.svg'\r\nimport { first, get, isEmpty, range } from 'lodash-es'\r\nimport { BasePlanSku, SKUSelectorsResponse } from '@buy/components/VolumeComponentWrapper'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport { remapPricingObject } from '@buy/utils/volume-components-helpers'\r\nimport {\r\n createOrUpdateCheckoutSessionState,\r\n getCheckoutSessionState,\r\n setCheckoutSessionState,\r\n SessionKeys,\r\n} from '@buy/utils'\r\nimport { ParamTypes } from '@buy/Routes'\r\nimport { useParams } from 'react-router-dom'\r\nimport styles from '../../connectedComponents/Customize/customize.module.css'\r\n\r\nexport interface DropdownComponentProps extends SKUSelectorsResponse {\r\n closeLabel: string\r\n showAdditionalLines: boolean\r\n baseLine: OrderSummaryLine\r\n setBaseLine: (value: OrderSummaryLine) => void\r\n additionalLines: Array\r\n setAdditionalLines: (value: Array) => void\r\n currencyCode: string\r\n isYearlyBillingFrequency: boolean\r\n basePlanDefaultVolume: Array\r\n onChange: (value: string) => void\r\n value: string\r\n}\r\n\r\ninterface VolumeComponentDropdownType {\r\n value: string\r\n multiplier: number\r\n}\r\n\r\nexport const DropdownComponent: FunctionComponent = ({\r\n additionalInformation,\r\n description,\r\n title,\r\n unit,\r\n volumeSelector,\r\n closeLabel,\r\n showAdditionalLines,\r\n setBaseLine,\r\n setAdditionalLines,\r\n additionalLines,\r\n baseLine,\r\n pricingInfo,\r\n currencyCode,\r\n basePlanDefaultVolume,\r\n onChange,\r\n value,\r\n sku,\r\n planName,\r\n quantityMultiplier,\r\n}) => {\r\n const { pathProduct, plan } = useParams()\r\n const [isDropdownVisible, setIsDropdownVisible] = useState(false)\r\n const [dropdownItems, setDropdownItems] = useState>([])\r\n\r\n const calculateDropdownValues = (loadedSessionValue: boolean) => {\r\n if (!isEmpty(volumeSelector)) {\r\n const { quantityPerUnit, customListValues, minimum, maximum } = volumeSelector\r\n if (quantityPerUnit && minimum && maximum) {\r\n const newValues = range(minimum, maximum + 1, quantityPerUnit).map((item, index) => ({\r\n value: item.toString(),\r\n multiplier: index + 1,\r\n }))\r\n if (!loadedSessionValue) onChange(first(newValues)!.value)\r\n setDropdownItems([...newValues])\r\n }\r\n if (!isEmpty(customListValues)) {\r\n const splittedValues = customListValues?.split('|')\r\n const remappedValues = splittedValues\r\n ? splittedValues.map((option) => {\r\n const splittedOptions = option.split(',')\r\n return { value: splittedOptions[0], multiplier: Number(splittedOptions[1]) }\r\n })\r\n : []\r\n\r\n if (!loadedSessionValue) onChange(first(remappedValues)!.value)\r\n setDropdownItems([...remappedValues])\r\n }\r\n }\r\n }\r\n\r\n const onChangeDropdown = (input: string) => {\r\n onChange(input)\r\n createOrUpdateCheckoutSessionState({ [`${sku}`]: input }, SessionKeys.volumeFields, pathProduct!, plan!)\r\n\r\n const { multiplier } = dropdownItems.find((item) => item.value === input)!\r\n if (showAdditionalLines) {\r\n if (input === first(dropdownItems)?.value) {\r\n // remove from additional items\r\n const filteredAdditionalLines = additionalLines.filter((item) => item.unit !== unit.unitName)\r\n setAdditionalLines([...filteredAdditionalLines])\r\n setCheckoutSessionState([...filteredAdditionalLines], SessionKeys.additonalLines, pathProduct!, plan!)\r\n return // exit\r\n }\r\n\r\n const hasExistingAdditionalLine = additionalLines.find((item) => item.unit === unit.unitName)\r\n if (hasExistingAdditionalLine) {\r\n const newAdditionalLines = additionalLines.map((item) => {\r\n const newItem = { ...item }\r\n const defaultVolumeSelectorValue = basePlanDefaultVolume.find(\r\n (item2) => item2.unit.unitName === newItem.unit\r\n )!\r\n if (item.unit === unit.unitName) {\r\n newItem.skuName = planName\r\n newItem.title = unit.additionalUnits\r\n newItem.unit = unit.unitName\r\n newItem.quantity = Number(input) - defaultVolumeSelectorValue.quantity\r\n newItem.multiplier = Number(multiplier) - 1\r\n }\r\n return newItem\r\n })\r\n setAdditionalLines(newAdditionalLines)\r\n setCheckoutSessionState(newAdditionalLines, SessionKeys.additonalLines, pathProduct!, plan!)\r\n } else {\r\n const defaultVolumeSelectorValue = basePlanDefaultVolume.find(\r\n (item) => item.unit.unitName === unit.unitName\r\n )!\r\n const newPrices = remapPricingObject(pricingInfo, currencyCode).allPrices\r\n const tempAdditionalLines: OrderSummaryLine[] = [\r\n ...additionalLines,\r\n {\r\n key: sku,\r\n title: unit.additionalUnits,\r\n unit: unit.unitName,\r\n quantity: Number(input) - defaultVolumeSelectorValue.quantity,\r\n multiplier: Number(multiplier) - 1,\r\n allPrices: newPrices,\r\n skuName: planName,\r\n quantityMultiplier,\r\n },\r\n ]\r\n setAdditionalLines(tempAdditionalLines)\r\n setCheckoutSessionState(tempAdditionalLines, SessionKeys.additonalLines, pathProduct!, plan!)\r\n }\r\n } else {\r\n const tempBaseLine: OrderSummaryLine = {\r\n ...baseLine,\r\n multiplier: Number(multiplier),\r\n quantity: Number(multiplier),\r\n }\r\n setBaseLine(tempBaseLine)\r\n setCheckoutSessionState(tempBaseLine, SessionKeys.baseLine, pathProduct!, plan!)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n const sessionState = getCheckoutSessionState(pathProduct!, plan!)\r\n const hasSessionValue =\r\n !isEmpty(sessionState) && !isEmpty(get(sessionState, `${SessionKeys.volumeFields}.${sku}`))\r\n if (hasSessionValue) onChange(sessionState!.volumeFields[sku].toString())\r\n if (!isEmpty(volumeSelector)) {\r\n calculateDropdownValues(hasSessionValue)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [volumeSelector])\r\n\r\n return (\r\n <>\r\n \r\n <>\r\n
\r\n

\r\n {title.replace('{0}', `${value}`)}\r\n \r\n

\r\n\r\n {/* \r\n {state.currentAgent.shortDescription.replace('{quantity}', `${state.agents}`)}\r\n */}\r\n \r\n
\r\n\r\n {volumeSelector && volumeSelector.maximum && Number(value) >= volumeSelector.maximum && (\r\n \r\n )}\r\n\r\n {isDropdownVisible && (\r\n
\r\n {\r\n if ((event.target as HTMLElement).innerText) {\r\n onChangeDropdown((event.target as HTMLElement).innerText)\r\n }\r\n }}\r\n value={value}\r\n modifier={styles['addon-selector']}\r\n label={}\r\n labelClass={styles['addon-selector-label']}\r\n additionalClass={styles['addon-selector-select']}\r\n options={dropdownItems.map((item) => item.value)}\r\n optionsContainerClass={styles['addon-selector-options-container']}\r\n optionsClass={styles['addon-selector-option']}\r\n />\r\n
\r\n )}\r\n \r\n
\r\n \r\n )\r\n}\r\n","import { BoxWrapper, LicenseSelector } from '@common/components'\r\nimport React, { FunctionComponent, useEffect } from 'react'\r\nimport { get, isEmpty, isNumber } from 'lodash-es'\r\nimport { SKUSelectorsResponse } from '@buy/components/VolumeComponentWrapper'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport {\r\n createOrUpdateCheckoutSessionState,\r\n getCheckoutSessionState,\r\n SessionKeys,\r\n setCheckoutSessionState,\r\n} from '@buy/utils'\r\nimport { ParamTypes } from '@buy/Routes'\r\nimport { useParams } from 'react-router-dom'\r\nimport styles from '../../connectedComponents/Customize/customize.module.css'\r\n\r\nexport interface PlusMinusComponentProps extends SKUSelectorsResponse {\r\n title: string\r\n description: string\r\n showAdditionalLines: boolean\r\n baseLine: OrderSummaryLine\r\n setBaseLine: (value: OrderSummaryLine) => void\r\n isYearlyBillingFrequency: boolean\r\n currencyCode: string\r\n onChange: (value: number) => void\r\n value: number\r\n}\r\n\r\nexport const PlusMinusComponent: FunctionComponent = ({\r\n title,\r\n description,\r\n baseLine,\r\n setBaseLine,\r\n volumeSelector,\r\n unit,\r\n onChange,\r\n value,\r\n sku,\r\n}) => {\r\n const { pathProduct, plan } = useParams()\r\n\r\n const onChangeValue = (input: number) => {\r\n onChange(input)\r\n const tempBaseLine: OrderSummaryLine = {\r\n ...baseLine,\r\n multiplier: input,\r\n quantity: Number(input),\r\n }\r\n setBaseLine(tempBaseLine)\r\n createOrUpdateCheckoutSessionState({ [`${sku}`]: input }, SessionKeys.volumeFields, pathProduct!, plan!)\r\n setCheckoutSessionState(tempBaseLine, SessionKeys.baseLine, pathProduct!, plan!)\r\n }\r\n\r\n useEffect(() => {\r\n const sessionState = getCheckoutSessionState(pathProduct!, plan!)\r\n const hasSessionValue =\r\n !isEmpty(sessionState) && isNumber(get(sessionState, `${SessionKeys.volumeFields}.${sku}`))\r\n if (hasSessionValue) onChange(Number(sessionState!.volumeFields[sku]))\r\n else onChange(volumeSelector!.minimum!)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [volumeSelector])\r\n\r\n return (\r\n \r\n \r\n

{title?.replace('{0}', `${value}`)}

\r\n
{description || ''}
\r\n {/* {isAddonFlow && (\r\n

\r\n {state.content.additionalUserLicences}: {state.content.howManyMore}\r\n

\r\n )} */}\r\n {!isEmpty(volumeSelector) ? (\r\n
\r\n \r\n \r\n {/* {state.isUserLoggedIn && state.existingAccountInformation\r\n ? `${state.existingAccountInformation.quantity} ${\r\n state.existingAccountInformation.quantity > 1\r\n ? state.content.existingUserLicencePlural\r\n : state.content.existingUserLicense\r\n } + ${state.organizers} ${state.content.additional}`\r\n : `${\r\n state.organizers > 1 ? state.content.quantityLabelPlural : state.content.quantityLabel\r\n }`} */}\r\n {value > 1 ? unit.unitNamePlural : unit.unitName}\r\n \r\n
\r\n ) : (\r\n <>\r\n )}\r\n
\r\n
\r\n )\r\n}\r\n","import React, { FunctionComponent, useEffect, useState } from 'react'\r\nimport { FLEXIBLE_VOLUME_COMPONENT_TYPE } from '@buy/constants/flexible-components'\r\nimport { has, isBoolean, isEmpty } from 'lodash-es'\r\nimport { DropdownComponent } from '@buy/components/DropdownComponent'\r\nimport { PlusMinusComponent } from '@buy/components/PlusMinusComponent'\r\nimport { BuyPrice } from '@buy/state/price'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport { getComponentType } from '@buy/utils/volume-components-helpers'\r\n\r\ninterface VolumeComponentsWrapperProps {\r\n skuSelectors: Array\r\n closeLabel: string\r\n baseLine: OrderSummaryLine\r\n setBaseLine: (value: OrderSummaryLine) => void // change the type\r\n additionalLines: Array\r\n setAdditionalLines: (value: Array) => void\r\n currencyCode: string\r\n isYearlyBillingFrequency: boolean\r\n setVolumeSelectorValues: (unit: string, value: string | number) => void\r\n volumeSelectorValues: Record\r\n billingPeriodKeys: Array\r\n}\r\n\r\nexport interface SKUSelectorsResponse {\r\n additionalInformation: string\r\n description: string\r\n sku: string\r\n title: string\r\n unit: UnitProperties\r\n pricingInfo: BuyPrice\r\n planName: string\r\n volumeSelector?: VolumeSelectorProperties | undefined\r\n fixedQuantity?: string | undefined\r\n icon?: string\r\n displayPriceWithDecimal?: boolean\r\n includedInSku?: Array\r\n quantityMultiplier: string\r\n}\r\nexport interface BasePlanSku {\r\n quantity: number\r\n quantityDisplayLabel: string\r\n unit: UnitProperties\r\n}\r\ninterface UnitProperties {\r\n id: string\r\n additionalUnits: string\r\n unitName: string\r\n unitNamePlural: string\r\n updateUnits: string\r\n}\r\n\r\nexport interface VolumeSelectorProperties {\r\n maximum?: number\r\n maximumReachedMessage: string\r\n minimum?: number\r\n quantityPerUnit?: number | undefined\r\n customListValues?: string | undefined\r\n}\r\n\r\nconst VolumeComponentsWrapper: FunctionComponent = ({\r\n skuSelectors,\r\n closeLabel,\r\n setAdditionalLines,\r\n setBaseLine,\r\n baseLine,\r\n additionalLines,\r\n currencyCode,\r\n isYearlyBillingFrequency,\r\n volumeSelectorValues,\r\n setVolumeSelectorValues,\r\n}) => {\r\n const [showAdditionalLines, setShowAdditionalLines] = useState()\r\n\r\n const getBasePlanSkuDefaultVolume = () => {\r\n const basePlanSku: SKUSelectorsResponse = skuSelectors.find((item) => has(item, 'includedInSku'))!\r\n return basePlanSku ? basePlanSku.includedInSku! : []\r\n }\r\n\r\n const calculateShowAdditionalLinesToggle = () => {\r\n const basePlanSku: SKUSelectorsResponse = skuSelectors.find((item) => has(item, 'includedInSku'))!\r\n if (!isEmpty(basePlanSku)) {\r\n const detectedAdditionalLinesConfig =\r\n skuSelectors.filter((item) => item.sku === basePlanSku!.sku).length === 1\r\n setShowAdditionalLines(detectedAdditionalLinesConfig)\r\n } else setShowAdditionalLines(false)\r\n }\r\n\r\n useEffect(() => {\r\n if (!isEmpty(skuSelectors)) {\r\n calculateShowAdditionalLinesToggle()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [skuSelectors])\r\n\r\n return isBoolean(showAdditionalLines) ? (\r\n <>\r\n {skuSelectors?.map((item: SKUSelectorsResponse) => {\r\n const type = item.volumeSelector && getComponentType(item.volumeSelector)\r\n if (type === FLEXIBLE_VOLUME_COMPONENT_TYPE.DROPDOWN)\r\n return (\r\n setVolumeSelectorValues(item.unit.unitName, value)}\r\n value={volumeSelectorValues[item.unit.unitName].toString()}\r\n />\r\n )\r\n if (type === FLEXIBLE_VOLUME_COMPONENT_TYPE.PLUSMINUS)\r\n return (\r\n setVolumeSelectorValues(item.unit.unitName, value)}\r\n value={Number(volumeSelectorValues[item.unit.unitName])}\r\n />\r\n )\r\n return null\r\n })}\r\n \r\n ) : (\r\n <>\r\n )\r\n}\r\n\r\nexport default VolumeComponentsWrapper\r\n","import { FormatCurrency } from '@common/components'\r\nimport { DescriptionWithCard } from '@common/components/DescriptionWithCard'\r\nimport React, { FunctionComponent } from 'react'\r\n\r\nimport { SKUSelectorsResponse } from '@buy/components/VolumeComponentWrapper'\r\nimport { getPrice } from '@buy/utils/volume-components-helpers'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport { BillingPeriod } from '@common/constants'\r\nimport { createOrUpdateCheckoutSessionState, SessionKeys, setCheckoutSessionState } from '@buy/utils'\r\nimport { ParamTypes } from '@buy/Routes'\r\nimport { useParams } from 'react-router-dom'\r\n\r\ninterface AddonProps extends SKUSelectorsResponse {\r\n isYearlyBillingFrequency: boolean\r\n labels: any\r\n currencyCode: string\r\n locale: string\r\n onChange: (selected: boolean, sku: string) => void\r\n isSelected: boolean\r\n isDecimal?: boolean\r\n isDisabled: boolean\r\n addonLines: Array\r\n setAddonLines: (value: Array) => void\r\n linkedSelectorValue: string | number\r\n prices: Record>\r\n}\r\n\r\nexport const Addon: FunctionComponent = ({\r\n sku,\r\n title,\r\n description,\r\n additionalInformation,\r\n isYearlyBillingFrequency,\r\n labels,\r\n currencyCode,\r\n locale,\r\n isDecimal = false,\r\n unit,\r\n onChange,\r\n isSelected,\r\n icon,\r\n isDisabled,\r\n addonLines,\r\n setAddonLines,\r\n linkedSelectorValue,\r\n prices,\r\n planName,\r\n quantityMultiplier,\r\n}) => {\r\n const { pathProduct, plan } = useParams()\r\n\r\n const cardTitle = (\r\n <>\r\n \r\n \r\n /{labels.perLabel} {unit?.unitName} /{isYearlyBillingFrequency ? labels.year : labels.month}\r\n \r\n \r\n )\r\n\r\n const onChangeValue = (isChecked: boolean) => {\r\n onChange(isChecked, sku)\r\n createOrUpdateCheckoutSessionState({ [sku]: isChecked }, SessionKeys.addonFields, pathProduct!, plan!)\r\n if (isChecked) {\r\n const newAddonLines: Array = [\r\n ...addonLines,\r\n {\r\n key: sku,\r\n title,\r\n unit: unit.unitName,\r\n quantity: linkedSelectorValue ? Number(linkedSelectorValue) : 0,\r\n multiplier: 1,\r\n allPrices: prices,\r\n skuName: planName,\r\n quantityMultiplier,\r\n },\r\n ]\r\n setAddonLines([...newAddonLines])\r\n setCheckoutSessionState(newAddonLines, SessionKeys.addonLines, pathProduct!, plan!)\r\n } else {\r\n const newAddonLines = addonLines.filter((item) => item.key !== sku)\r\n setAddonLines([...newAddonLines])\r\n setCheckoutSessionState(newAddonLines, SessionKeys.addonLines, pathProduct!, plan!)\r\n }\r\n }\r\n\r\n return (\r\n \r\n )\r\n}\r\n","import React, { FunctionComponent, useEffect, useState } from 'react'\r\nimport { SKUSelectorsResponse } from '@buy/components/VolumeComponentWrapper'\r\nimport { BoxWrapper, CardSelector } from '@common/components'\r\nimport { get, has, isEmpty, isUndefined } from 'lodash-es'\r\nimport { Addon } from '@buy/components/Addon'\r\nimport { BuyAddonPrice } from '@buy/state/price'\r\nimport { BillingDetailedSubscriptionPlan } from '@common/state/billing/state'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport { remapPricingObject } from '@buy/utils/volume-components-helpers'\r\nimport { getCheckoutSessionState, SessionKeys, setCheckoutSessionState } from '@buy/utils'\r\nimport { ParamTypes } from '@buy/Routes'\r\nimport { useParams } from 'react-router-dom'\r\nimport styles from '../../connectedComponents/Customize/customize.module.css'\r\n\r\ninterface AddonsWrapperProps {\r\n skuSelectors: Array\r\n labels: LabelsType\r\n currencyCode: string\r\n isYearlyBillingFrequency: boolean\r\n locale: string\r\n accountSubscriptions: BillingDetailedSubscriptionPlan[]\r\n baseLine: OrderSummaryLine\r\n additionalLines: Array\r\n addonLines: Array\r\n setAddonLines: (value: Array) => void\r\n volumeSelectorValues: Record\r\n legacyAddons: Array\r\n}\r\n\r\nexport interface SkuAddonPrice {\r\n [sku: string]: BuyAddonPrice\r\n}\r\n\r\ninterface LabelsType {\r\n title: string\r\n description: string\r\n year: string\r\n month: string\r\n perLabel: string\r\n}\r\n\r\nexport const AddonsWrapper: FunctionComponent = ({\r\n skuSelectors,\r\n labels,\r\n accountSubscriptions,\r\n volumeSelectorValues,\r\n currencyCode,\r\n isYearlyBillingFrequency,\r\n legacyAddons,\r\n ...rest\r\n}) => {\r\n const { pathProduct, plan } = useParams()\r\n const [addons, setAddons] = useState>([])\r\n const [selectedValues, setSelectedValues] = useState>(new Set()) // array of skus\r\n\r\n const loadSessionState = () => {\r\n const sessionState = getCheckoutSessionState(pathProduct!, plan!)\r\n const hasSessionValue = !isEmpty(sessionState) && !isEmpty(get(sessionState, SessionKeys.addonFields))\r\n if (hasSessionValue) {\r\n const addonFields = get(sessionState, SessionKeys.addonFields)!\r\n const selectedValuesSet = new Set()\r\n Object.keys(addonFields).forEach((key: string) => {\r\n if (addonFields[key]) selectedValuesSet.add(key)\r\n })\r\n setSelectedValues(selectedValuesSet)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n // load addons from legacy plans.addons node\r\n if (!isEmpty(legacyAddons)) {\r\n setAddons([...legacyAddons])\r\n } else {\r\n // load addons from skuSelector node\r\n const filteredAddons = skuSelectors.filter(\r\n (item) => !item.fixedQuantity && isEmpty(item.includedInSku) && isEmpty(item.volumeSelector)\r\n )\r\n setAddons([...filteredAddons])\r\n }\r\n loadSessionState()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [skuSelectors])\r\n\r\n useEffect(() => {\r\n if (!isEmpty(volumeSelectorValues)) {\r\n const updatedAddonLines = rest.addonLines.map((item) => {\r\n const newItem = { ...item }\r\n newItem.quantity = volumeSelectorValues[item.unit!] ? Number(volumeSelectorValues[item.unit!]) : 0\r\n return newItem\r\n })\r\n rest.setAddonLines([...updatedAddonLines])\r\n setCheckoutSessionState(updatedAddonLines, SessionKeys.addonLines, pathProduct!, plan!)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [volumeSelectorValues])\r\n\r\n const onChangeAddon = (isSelected: boolean, key: string) => {\r\n setSelectedValues((oldState) => {\r\n if (isSelected) oldState.add(key)\r\n else oldState.delete(key)\r\n return new Set(oldState)\r\n })\r\n }\r\n\r\n const getLinkedSelectorValue = (unitName: string) => {\r\n if (isEmpty(volumeSelectorValues) || isUndefined(volumeSelectorValues[unitName])) {\r\n const basePlanSku: SKUSelectorsResponse = skuSelectors.find((item) => has(item, 'includedInSku'))!\r\n if (!isEmpty(basePlanSku)) {\r\n const basePlanUnit = basePlanSku.includedInSku!.find((item) => item.unit.unitName === unitName)\r\n return !isEmpty(basePlanUnit) ? basePlanUnit.quantity : 0\r\n }\r\n } else if (!isUndefined(volumeSelectorValues[unitName])) return volumeSelectorValues[unitName]\r\n return 0\r\n }\r\n\r\n return (\r\n <>\r\n {!isEmpty(addons) ? (\r\n \r\n

{labels.title}:

\r\n
{labels.description}
\r\n \r\n {addons.map((item) => (\r\n value.productSku === item.sku))\r\n }\r\n addonLines={rest.addonLines}\r\n setAddonLines={rest.setAddonLines}\r\n linkedSelectorValue={getLinkedSelectorValue(item.unit.unitName)}\r\n prices={remapPricingObject(item.pricingInfo, currencyCode).allPrices}\r\n />\r\n ))}\r\n \r\n
\r\n ) : (\r\n <>\r\n )}\r\n \r\n )\r\n}\r\n","import { SKUSelectorsResponse } from '@buy/components/VolumeComponentWrapper'\r\nimport React, { FunctionComponent, useEffect, useState } from 'react'\r\nimport { has, isEmpty, isUndefined } from 'lodash-es'\r\nimport { ConnectedBuyFormatCurrency } from '@buy/connectedComponents'\r\nimport { BoxWrapper } from '@common/components'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport { BillingPeriod } from '@common/constants'\r\nimport { getPrice } from '@buy/utils/volume-components-helpers'\r\nimport { BillingTenureValue } from '../BillingPeriodSwitch'\r\nimport styles from '../../connectedComponents/Customize/customize.module.css'\r\n\r\ninterface BaseVolumeSectionProps {\r\n skuSelectors: Array\r\n selectedPlanSku: string\r\n shortName: string\r\n isAnnual: boolean\r\n isMobileView: boolean | undefined\r\n userLabel: string\r\n yearLabel: string\r\n monthLabel: string\r\n loggedInNoUpgrade: boolean\r\n billingTenure: BillingTenureValue\r\n baseLine: OrderSummaryLine\r\n}\r\n\r\ninterface VolumeContent {\r\n label: string\r\n value: number | undefined\r\n}\r\n\r\nexport const BasePlanSection: FunctionComponent = ({\r\n skuSelectors,\r\n isMobileView,\r\n isAnnual,\r\n userLabel,\r\n yearLabel,\r\n monthLabel,\r\n loggedInNoUpgrade,\r\n billingTenure,\r\n baseLine,\r\n}) => {\r\n const [content, setContent] = useState>([])\r\n const [logo, setLogo] = useState('')\r\n const [description, setDescription] = useState('')\r\n const [title, setTitle] = useState('')\r\n const [calculatedBasePrice, setCalculatedBasePrice] = useState(0)\r\n\r\n useEffect(() => {\r\n const planPriceIndex =\r\n isAnnual && isUndefined(billingTenure.leftOption) ? BillingPeriod.ANNUAL : billingTenure.leftOption!\r\n const price = getPrice(1, baseLine.allPrices[planPriceIndex]) * baseLine.multiplier * (isAnnual ? 12 : 1)\r\n setCalculatedBasePrice(price)\r\n }, [baseLine, billingTenure, isAnnual])\r\n\r\n useEffect(() => {\r\n if (!isEmpty(skuSelectors)) {\r\n const basePlanSku = skuSelectors.find((item) => has(item, 'includedInSku'))\r\n if (!isEmpty(basePlanSku)) {\r\n const data: Array = basePlanSku.includedInSku!.map((item) => ({\r\n label: item.quantityDisplayLabel,\r\n value: item.quantity,\r\n }))\r\n setContent([...data])\r\n setLogo(basePlanSku.icon ?? '')\r\n setDescription(basePlanSku.description ?? '')\r\n setTitle(basePlanSku.title ?? '')\r\n }\r\n }\r\n }, [skuSelectors])\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n {!isEmpty(logo) && \"logo\"}\r\n

{title}

\r\n
\r\n {description}\r\n
\r\n
\r\n
\r\n {isMobileView && (\r\n <>\r\n {' '}\r\n /{userLabel}\r\n /{isAnnual ? yearLabel : monthLabel}\r\n \r\n )}\r\n {content.map((item) => (\r\n

\r\n {item.label.replace('{0}', item.value!.toString())}\r\n

\r\n ))}\r\n
\r\n \r\n )\r\n}\r\n","import { get, isEmpty } from 'lodash-es'\r\nimport { formatDate } from '@common/utils'\r\n\r\nimport { AppState } from 'app-store'\r\nimport { BillingPeriodKeyMapper, TimePeriod } from '@common/constants'\r\nimport { getUserState, getLabelContent, getCheckoutState, getPlanData, getCouponState } from '@buy/state/selectors'\r\nimport { getCurrentAddons, getCurrentAgent, getCurrentEndpoint, getExtraAddons } from '@buy/utils/get-current-addons'\r\nimport { BuyPlan } from '@buy/state/plan'\r\nimport { buyCheckoutActions } from '@buy/state/checkout/actions'\r\nimport { getActiveCouponServerData, getSubscriptionInfo, ValidCoupon } from '@buy/utils'\r\nimport { ADDONS } from '@buy/constants'\r\nimport { getAddonVolumeDiscount } from '@buy/utils/calculate-volume-discount'\r\nimport { getAccountState, getMarketingState, getLocationState, getModalState } from '@common/state/selectors'\r\nimport { marketingActions } from '@common/state/marketing/actions'\r\nimport { modalActions } from '@common/state/modal/actions'\r\nimport { BuyAddon } from '@buy/state/add-on'\r\nimport { getContentLanguage } from '@buy/utils/language-helpers'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport { BillingTenureValue } from '@buy/components/BillingPeriodSwitch'\r\nimport { buyCouponActions } from '@buy/state/coupon/actions'\r\nimport { BuyOrderSummaryState } from './state'\r\n\r\nexport const mapBuyOrderSummaryState = (state: AppState): BuyOrderSummaryState => {\r\n const content = getLabelContent(state)\r\n\r\n const { locationInfo } = getLocationState(state)\r\n const { locale: Locale, currency: CurrencyCode } = locationInfo\r\n\r\n const {\r\n selectedAddons,\r\n billingFrequency,\r\n calculatedTotal,\r\n calculatedTax,\r\n calculatedCredit,\r\n productPrices,\r\n anniversaryDate,\r\n calculatedNetTotal,\r\n totalLoading,\r\n currentVolumeDiscountPrice,\r\n selectedTierIndex,\r\n calculatedProratedAmount,\r\n endpoints,\r\n agents: totalAgents,\r\n baseLine,\r\n additionalLines,\r\n addonLines,\r\n totalDiscount,\r\n billingTenure,\r\n finalTotal,\r\n } = getCheckoutState(state)\r\n const language = getContentLanguage()\r\n const modal = getModalState(state)\r\n const planData: BuyPlan = getPlanData(state)\r\n const coupon = getCouponState(state)\r\n const {\r\n validCoupons,\r\n couponProcessedDataPerSku,\r\n isCouponValidAndApplied,\r\n couponDoubleDipAmountForNewUser,\r\n couponServerData,\r\n } = coupon\r\n\r\n const couponData = getActiveCouponServerData(coupon, planData)\r\n const couponDiscountType = couponData ? couponData.couponDiscountType : null\r\n const currSelectedAddons = getCurrentAddons(selectedAddons, planData)\r\n const currentTier = `tier${selectedTierIndex + 1}`\r\n const billingFrequencyKey = billingTenure.selected\r\n\r\n const baseTierAnnualPrice: number = get(planData, ['pricingInfo', CurrencyCode, 'annual', currentTier, 'price'], 0)\r\n const baseTierMonthlyPrice: number = get(\r\n planData,\r\n ['pricingInfo', CurrencyCode, 'monthly', currentTier, 'price'],\r\n 0\r\n )\r\n const currentTierPrice: number = get(\r\n planData,\r\n ['pricingInfo', CurrencyCode, billingFrequencyKey, currentTier, 'price'],\r\n 0\r\n )\r\n\r\n const {\r\n userType,\r\n existingAccountInformation,\r\n loggedIn: { isUserLoggedIn },\r\n } = getUserState(state)\r\n\r\n const { accountSubscriptions } = getAccountState(state)\r\n const { displayOptOut, isUserOptOut } = getMarketingState(state)\r\n const subscriptionInfo = getSubscriptionInfo(billingTenure.selected, planData, planData, accountSubscriptions)\r\n\r\n const planStartDate = formatDate(\r\n new Date(accountSubscriptions.find((sub) => sub.productSku === planData.sKU)?.startDate ?? Date.now()),\r\n 'UTC',\r\n 'en-US'\r\n )\r\n\r\n const extraAddonsSelected = getExtraAddons(currSelectedAddons)\r\n const currentAgent = getCurrentAgent(currSelectedAddons)\r\n const currentEndpoint = getCurrentEndpoint(currSelectedAddons)\r\n const disablePlanSelection = !subscriptionInfo.isReplacementBooking\r\n const disableExtraAddons = false\r\n const { includedAgents } = subscriptionInfo\r\n const { includedEndpoints } = subscriptionInfo\r\n const agentsAdded = (currentAgent && currentAgent.quantity > 0 ? currentAgent : null) as BuyAddon\r\n const endpointsAdded = (currentEndpoint && currentEndpoint.quantity > 0 ? currentEndpoint : null) as BuyAddon\r\n const agentContent = getCurrentAgent(planData.addons)\r\n\r\n const agentsPrice: number =\r\n agentsAdded && get(agentsAdded, ['pricingInfo', CurrencyCode, billingFrequencyKey, currentTier, 'price'], 0)\r\n const endpointsPrice: number =\r\n endpointsAdded &&\r\n get(endpointsAdded, ['pricingInfo', CurrencyCode, billingFrequencyKey, currentTier, 'price'], 0)\r\n\r\n let addonsVolumeDiscountTotal = 0\r\n\r\n if (agentsAdded) {\r\n const { discountPrice, tierIndex } = getAddonVolumeDiscount(\r\n agentsAdded,\r\n totalAgents - planData.userAgentsIncludedAmount,\r\n CurrencyCode,\r\n billingFrequencyKey,\r\n currentTier,\r\n totalAgents - includedAgents\r\n )\r\n agentsAdded.discountPrice = discountPrice\r\n agentsAdded.tier = `Tier${tierIndex}`\r\n addonsVolumeDiscountTotal += discountPrice\r\n }\r\n\r\n if (endpointsAdded) {\r\n const { discountPrice, tierIndex } = getAddonVolumeDiscount(\r\n endpointsAdded,\r\n (endpoints - planData.endpointsIncludedAmount) / ADDONS.ENDPOINTS_ADDONS_INTERVAL,\r\n CurrencyCode,\r\n billingFrequencyKey,\r\n currentTier,\r\n (endpoints - includedEndpoints) / ADDONS.ENDPOINTS_ADDONS_INTERVAL\r\n )\r\n endpointsAdded.discountPrice = discountPrice\r\n endpointsAdded.tier = `Tier${tierIndex}`\r\n addonsVolumeDiscountTotal += discountPrice\r\n }\r\n\r\n if (extraAddonsSelected.length) {\r\n // Swap the Mobile/Camera-Share Addons positions to show the \"Mobile Addons\" on top in case both the addons are selected and `Camera Share` addon is first selected\r\n if (extraAddonsSelected.length > 1 && extraAddonsSelected[0].sKU === ADDONS.CAMERA_SHARE_ADDON) {\r\n extraAddonsSelected.reverse()\r\n }\r\n\r\n if (extraAddonsSelected.length === 3) {\r\n const epp = extraAddonsSelected.filter((addon) => addon.sKU === ADDONS.ENDPOINT_PROTECTION_ADDON).pop()\r\n if (epp) {\r\n const endpointIndex = extraAddonsSelected.indexOf(epp)\r\n extraAddonsSelected.splice(endpointIndex, 1)\r\n extraAddonsSelected.splice(1, 0, epp)\r\n }\r\n }\r\n extraAddonsSelected.forEach((addon) => {\r\n /* eslint-disable no-param-reassign */\r\n const { discountPrice, tierIndex } = getAddonVolumeDiscount(\r\n addon,\r\n addon.sKU === ADDONS.ENDPOINT_PROTECTION_ADDON ? endpoints : totalAgents,\r\n CurrencyCode,\r\n billingFrequencyKey,\r\n currentTier,\r\n addon.quantity\r\n )\r\n addon.discountPrice = discountPrice\r\n addon.tier = `Tier${tierIndex}`\r\n addonsVolumeDiscountTotal += discountPrice\r\n })\r\n }\r\n const isCouponValid = coupon.isCouponValidAndApplied && coupon.couponServerData && !isEmpty(coupon.couponServerData)\r\n const couponCode = isCouponValid ? coupon.couponServerData?.couponCode ?? '' : ''\r\n const billingPeriodKeys = planData.billingPeriods.map((item) => {\r\n return BillingPeriodKeyMapper[item.key]\r\n })\r\n\r\n return {\r\n content: {\r\n ...content,\r\n proratedadjustmentTooltip: content.proratedadjustmentTooltip?.replace('{proratedDate}', planStartDate),\r\n },\r\n agentContent,\r\n modal,\r\n Locale,\r\n CurrencyCode,\r\n selectedAddons: currSelectedAddons,\r\n billingFrequency,\r\n selectedPlan: planData,\r\n calculatedTax,\r\n calculatedTotal,\r\n calculatedCredit,\r\n isUserLoggedIn,\r\n productPrices,\r\n anniversaryDate,\r\n calculatedNetTotal,\r\n calculatedProratedAmount,\r\n userType,\r\n existingAccountInformation,\r\n totalLoading,\r\n currentVolumeDiscountPrice,\r\n baseTierAnnualPrice,\r\n baseTierMonthlyPrice,\r\n currentTierPrice,\r\n couponProcessedDataPerSku,\r\n isCouponValidAndApplied,\r\n couponDiscountType,\r\n couponDoubleDipAmountForNewUser,\r\n agentsAdded,\r\n endpointsAdded,\r\n agentsPrice,\r\n endpointsPrice,\r\n currentTier,\r\n endpoints,\r\n extraAddonsSelected,\r\n addonsVolumeDiscountTotal,\r\n totalAgents,\r\n disablePlanSelection,\r\n disableExtraAddons,\r\n includedAgents,\r\n includedEndpoints,\r\n displayOptOut,\r\n isUserOptOut,\r\n subscriptionInfo,\r\n planData,\r\n couponCode,\r\n language,\r\n baseLine,\r\n additionalLines,\r\n addonLines,\r\n billingPeriodKeys,\r\n totalDiscount,\r\n billingTenure,\r\n finalTotal,\r\n couponServerData,\r\n validCoupons,\r\n // agentContent,\r\n // Locale,\r\n // billingFrequency,\r\n // calculatedTotal,\r\n // calculatedCredit,\r\n // productPrices,\r\n // anniversaryDate,\r\n // calculatedNetTotal,\r\n // calculatedProratedAmount,\r\n // existingAccountInformation,\r\n // currentVolumeDiscountPrice,\r\n // baseTierAnnualPrice,\r\n // baseTierMonthlyPrice,\r\n // currentTierPrice,\r\n // couponDoubleDipAmountForNewUser,\r\n // agentsAdded,\r\n // endpointsAdded,\r\n // agentsPrice,\r\n // endpointsPrice,\r\n // currentTier,\r\n // endpoints,\r\n // extraAddonsSelected,\r\n // addonsVolumeDiscountTotal,\r\n // totalAgents,\r\n // disableExtraAddons,\r\n // includedAgents,\r\n // includedEndpoints,\r\n // subscriptionInfo,\r\n }\r\n}\r\n\r\nexport const mapBuyOrderSummaryActions = {\r\n setBillingFrequency: (frequency: TimePeriod) => buyCheckoutActions.setBillingFrequency(frequency),\r\n setIsUserOptOut: (isUserOutOut: boolean) => marketingActions.setIsUserOptOut(isUserOutOut),\r\n setDisplayOptOut: (displayOutOut: boolean) => marketingActions.setDisplayOptOut(displayOutOut),\r\n setBaseLine: (baseLine: OrderSummaryLine) => buyCheckoutActions.setBaseLine(baseLine),\r\n setAdditionalLines: (additionalLines: OrderSummaryLine[]) => buyCheckoutActions.setAdditionalLines(additionalLines),\r\n setAddonLines: (addonLine: OrderSummaryLine[]) => buyCheckoutActions.setAddonLines(addonLine),\r\n setTotalDiscount: (discount: number) => buyCheckoutActions.setTotalDiscount(discount),\r\n closeErrorModal: () => modalActions.setModalOpen(false),\r\n setBillingTenure: (tenure: BillingTenureValue) => buyCheckoutActions.setBillingTenure(tenure),\r\n setFinalTotal: (finalTotal: number) => buyCheckoutActions.setFinalTotal(finalTotal),\r\n setTotalVolumeDiscount: (volumeDiscount: number) => buyCheckoutActions.setTotalVolumeDiscount(volumeDiscount),\r\n setValidCoupons: (validCoupons: ValidCoupon[]) => buyCouponActions.setValidCoupons(validCoupons),\r\n setCouponValidAndApplied: (isValid: boolean) => buyCouponActions.setCouponValidAndApplied(isValid),\r\n}\r\n\r\nexport type BuyOrderSummaryActionsType = typeof mapBuyOrderSummaryActions\r\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"order-summary-module__header\",\"section\":\"order-summary-module__section\",\"sub-section\":\"order-summary-module__sub-section\",\"row\":\"order-summary-module__row\",\"item\":\"order-summary-module__item\",\"item-title\":\"order-summary-module__item-title\",\"item-sub-title\":\"order-summary-module__item-sub-title\",\"item-sub-line\":\"order-summary-module__item-sub-line\",\"small\":\"order-summary-module__small\",\"teal\":\"order-summary-module__teal\",\"light\":\"order-summary-module__light\",\"total\":\"order-summary-module__total\",\"row--subtotal\":\"order-summary-module__row--subtotal\",\"row--total\":\"order-summary-module__row--total\",\"row--total-note\":\"order-summary-module__row--total-note\",\"order-tooltip\":\"order-summary-module__order-tooltip\",\"order-tooltip-content\":\"order-summary-module__order-tooltip-content\"};","import { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport React, { FunctionComponent, useEffect } from 'react'\r\nimport { ConnectedBuyFormatCurrency } from '@buy/connectedComponents'\r\nimport { getPrice } from '@buy/utils/volume-components-helpers'\r\nimport { BillingPeriod } from '@common/constants'\r\nimport { isEmpty, isUndefined } from 'lodash-es'\r\nimport styles from '../../connectedComponents/OrderSummary/order-summary.module.css'\r\nimport { BillingTenureValue } from '../BillingPeriodSwitch'\r\n\r\ninterface BaseLineSummaryProps {\r\n baseLine: OrderSummaryLine\r\n planName: string\r\n shortDescription: string\r\n monthsText: string\r\n isAnnual: boolean\r\n hasAdditionalLines: boolean\r\n setSubTotal: (value: number) => void\r\n subTotal: number\r\n billingTenure: BillingTenureValue\r\n}\r\n\r\nexport const BaseLineSummary: FunctionComponent = ({\r\n baseLine,\r\n planName,\r\n monthsText,\r\n hasAdditionalLines = false,\r\n setSubTotal,\r\n subTotal,\r\n // shortDescription,\r\n billingTenure,\r\n isAnnual,\r\n}) => {\r\n useEffect(() => {\r\n const planPriceIndex =\r\n isAnnual && isUndefined(billingTenure.leftOption) ? BillingPeriod.ANNUAL : billingTenure.leftOption!\r\n const price = getPrice(1, baseLine.allPrices[planPriceIndex]) * baseLine.multiplier * (isAnnual ? 12 : 1)\r\n setSubTotal(price)\r\n }, [baseLine, isAnnual, setSubTotal, billingTenure])\r\n\r\n return (\r\n <>\r\n {!isEmpty(baseLine.key) && (\r\n
\r\n
\r\n \r\n {planName}\r\n \r\n \r\n \r\n \r\n
\r\n {/* {!isEmpty(shortDescription) && (\r\n
\r\n {`${shortDescription}`}\r\n
\r\n )} */}\r\n
\r\n \r\n \r\n  x \r\n {!hasAdditionalLines && baseLine.unit && (\r\n <>\r\n {`${baseLine.quantity} ${baseLine.unit}`}\r\n  x \r\n \r\n )}\r\n \r\n {isAnnual ? 12 : 1} {monthsText}\r\n \r\n \r\n
\r\n
\r\n )}\r\n \r\n )\r\n}\r\n","import { ConnectedBuyFormatCurrency } from '@buy/connectedComponents'\r\nimport React, { FunctionComponent, useEffect } from 'react'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport { BillingPeriod } from '@common/constants'\r\nimport { getPrice } from '@buy/utils/volume-components-helpers'\r\nimport styles from '../../connectedComponents/OrderSummary/order-summary.module.css'\r\nimport { BillingTenureValue } from '../BillingPeriodSwitch'\r\n\r\ninterface AdditionalLinesSummaryProps {\r\n line: OrderSummaryLine\r\n isAnnual: boolean\r\n showSubTotal?: boolean\r\n isAddon?: boolean\r\n addonText?: string\r\n setSubTotal?: (value: number) => void\r\n subTotal?: number\r\n cleanUpFunc?: (unit: string) => void\r\n billingTenure: BillingTenureValue\r\n}\r\n\r\nexport const AdditionalLinesSummary: FunctionComponent = ({\r\n line,\r\n isAnnual,\r\n showSubTotal = true,\r\n isAddon,\r\n addonText = '',\r\n setSubTotal,\r\n subTotal,\r\n cleanUpFunc,\r\n billingTenure,\r\n}) => {\r\n useEffect(() => {\r\n return () => {\r\n cleanUpFunc?.(line.unit!)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (!isAddon) {\r\n const price =\r\n getPrice(1, line.allPrices[isAnnual ? BillingPeriod.ANNUAL : billingTenure.leftOption!]) *\r\n line.multiplier *\r\n (isAnnual ? 12 : 1)\r\n setSubTotal?.(price)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [line, isAnnual, billingTenure, isAddon])\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n {`${line.title} ${addonText}`}\r\n \r\n {showSubTotal && (\r\n \r\n \r\n \r\n )}\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n  x \r\n {line.quantity || 0} {isAddon ? line.unit : line.title!.toLowerCase()}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n )\r\n}\r\n","import { ConnectedBuyFormatCurrency } from '@buy/connectedComponents'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport React, { FunctionComponent, useEffect } from 'react'\r\nimport { isEmpty } from 'lodash-es'\r\nimport { getPrice } from '@buy/utils/volume-components-helpers'\r\nimport { BillingPeriod } from '@common/constants'\r\nimport styles from '../../connectedComponents/OrderSummary/order-summary.module.css'\r\nimport { BillingTenureValue } from '../BillingPeriodSwitch'\r\nimport { AdditionalLinesSummary } from '../AdditionalLinesSummary/AdditionalLinesSummary'\r\n\r\ninterface AddonsSummaryProps {\r\n lines: Array\r\n baseLine: OrderSummaryLine\r\n isAnnual: boolean\r\n mainTitle?: string\r\n setSubTotal: (value: number) => void\r\n subTotal: number\r\n billingTenure: BillingTenureValue\r\n}\r\n\r\nexport const AddonsSummaryWrapper: FunctionComponent = ({\r\n lines,\r\n isAnnual,\r\n mainTitle = 'Add-Ons',\r\n setSubTotal,\r\n subTotal,\r\n billingTenure,\r\n}) => {\r\n const calculateSubTotal = () => {\r\n let total = 0\r\n lines.forEach((line) => {\r\n total +=\r\n getPrice(line.multiplier, line.allPrices[isAnnual ? BillingPeriod.ANNUAL : billingTenure.leftOption!]) *\r\n (line.quantity || 0) *\r\n (isAnnual ? 12 : 1)\r\n })\r\n setSubTotal(total)\r\n }\r\n\r\n useEffect(() => {\r\n calculateSubTotal()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lines, isAnnual])\r\n\r\n return (\r\n <>\r\n {!isEmpty(lines) && (\r\n
\r\n
\r\n \r\n {mainTitle}\r\n \r\n \r\n \r\n \r\n
\r\n {lines.map((item) => (\r\n \r\n ))}\r\n
\r\n )}\r\n \r\n )\r\n}\r\n","import { ConnectedBuyFormatCurrency } from '@buy/connectedComponents'\r\nimport React, { FunctionComponent } from 'react'\r\nimport { Tooltip } from '@common/components'\r\nimport { BillingPeriod } from '@common/constants'\r\nimport { isEmpty } from 'lodash-es'\r\nimport styles from '../../connectedComponents/OrderSummary/order-summary.module.css'\r\nimport { BillingTenureValue } from '../BillingPeriodSwitch'\r\n\r\ninterface CouponDiscountSummaryProps {\r\n percentageOffPromoDiscountLabel: string\r\n promoDiscountForAnnualSavingsTooltipLabel: string\r\n billingTenure?: BillingTenureValue\r\n couponDiscount: number | undefined\r\n sku: string\r\n percent: number\r\n}\r\n\r\nexport const CouponDiscountSummary: FunctionComponent = ({\r\n percentageOffPromoDiscountLabel,\r\n promoDiscountForAnnualSavingsTooltipLabel,\r\n billingTenure,\r\n sku,\r\n couponDiscount = 0,\r\n percent,\r\n}) => {\r\n return (\r\n <>\r\n {couponDiscount > 0 && (\r\n
\r\n
\r\n \r\n \r\n {percent > 0 ? `${percent}%` : }\r\n  \r\n \r\n {percentageOffPromoDiscountLabel}\r\n {billingTenure &&\r\n billingTenure.selected === BillingPeriod.ANNUAL &&\r\n !isEmpty(promoDiscountForAnnualSavingsTooltipLabel) && (\r\n \r\n )}\r\n \r\n \r\n -\r\n \r\n \r\n
\r\n
\r\n )}\r\n \r\n )\r\n}\r\n","import { addonsContentType, ConnectedBuyFormatCurrency } from '@buy/connectedComponents'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport React, { FunctionComponent, useEffect, useState } from 'react'\r\nimport { Tooltip } from '@common/components'\r\nimport { calculateVolumeDiscount, getPrice } from '@buy/utils/volume-components-helpers'\r\nimport {\r\n BillingPeriod,\r\n BillingPeriodCouponPaymentPlanMapper,\r\n COUPON_DISCOUNT_TYPE,\r\n COUPON_TYPE,\r\n} from '@common/constants'\r\nimport { first, isEmpty } from 'lodash-es'\r\nimport { CouponServerData } from '@common/state/coupon/state'\r\nimport { processCouponCalculations, ValidCoupon } from '@buy/utils'\r\nimport styles from '../../connectedComponents/OrderSummary/order-summary.module.css'\r\nimport { BillingTenureValue } from '../BillingPeriodSwitch'\r\nimport { CouponDiscountSummary } from '../CouponDiscountSummary'\r\n\r\ninterface DiscountSummaryProps {\r\n baseLine: OrderSummaryLine\r\n additionalLines: Array\r\n addonLines: Array\r\n title: string\r\n isAnnual: boolean\r\n annualDiscountLabel: string\r\n addonsLabels: addonsContentType\r\n billingPeriodKeys: string[]\r\n showAdditionalLines: boolean\r\n percentageOffPromoDiscountLabel: string\r\n setTotalDiscount: (total: number) => void\r\n totalDiscount: number\r\n promoDiscountForAnnualSavingsTooltipLabel: string\r\n couponServerData: CouponServerData | null\r\n billingTenure: BillingTenureValue\r\n currency: string\r\n validCoupons: ValidCoupon[]\r\n setValidCoupons: (data: ValidCoupon[]) => void\r\n setCouponValidAndApplied: (isValid: boolean) => void\r\n rePriceDiscounts: Record\r\n}\r\n\r\nexport const DiscountSummary: FunctionComponent = ({\r\n baseLine,\r\n additionalLines,\r\n addonLines,\r\n title,\r\n isAnnual,\r\n annualDiscountLabel,\r\n addonsLabels,\r\n billingPeriodKeys,\r\n showAdditionalLines,\r\n percentageOffPromoDiscountLabel,\r\n setTotalDiscount,\r\n totalDiscount,\r\n promoDiscountForAnnualSavingsTooltipLabel,\r\n couponServerData,\r\n billingTenure,\r\n currency,\r\n validCoupons,\r\n setValidCoupons,\r\n setCouponValidAndApplied,\r\n rePriceDiscounts,\r\n}) => {\r\n const discountLineClasses = `${styles.small} ${styles.teal}`\r\n const [annualDiscount, setAnnualDiscount] = useState(0)\r\n const [volumeDiscount, setVolumeDiscount] = useState(0)\r\n const [couponDiscount, setCouponDiscount] = useState(0)\r\n\r\n const calculateAnnualDiscount = () => {\r\n const leftToggleBillingPeriod = billingPeriodKeys.find((item) => item !== BillingPeriod.ANNUAL)!\r\n const priceWithoutDiscount = getPrice(1, baseLine.allPrices[leftToggleBillingPeriod]) * baseLine.multiplier * 12\r\n const annualPrice = getPrice(1, baseLine.allPrices[BillingPeriod.ANNUAL]) * baseLine.multiplier * 12\r\n setAnnualDiscount(priceWithoutDiscount - annualPrice)\r\n }\r\n\r\n const getVolumeDiscount = () => {\r\n const baseLineVolumeDiscount = calculateVolumeDiscount(\r\n baseLine,\r\n baseLine.multiplier,\r\n billingPeriodKeys,\r\n isAnnual\r\n )\r\n // get addon volume discount\r\n let addonVolumeDiscountSum = 0\r\n if (!isEmpty(addonLines)) {\r\n addonLines.forEach((item) => {\r\n const addonVolumeDiscount = calculateVolumeDiscount(item, item.quantity, billingPeriodKeys, isAnnual)\r\n addonVolumeDiscountSum += addonVolumeDiscount\r\n })\r\n }\r\n // get additional lines volume discount\r\n let additionalVolumeDiscountSum = 0\r\n if (!isEmpty(additionalLines)) {\r\n additionalLines.forEach((item) => {\r\n const additionalLineVolumeDiscount = calculateVolumeDiscount(\r\n item,\r\n item.multiplier,\r\n billingPeriodKeys,\r\n isAnnual\r\n )\r\n additionalVolumeDiscountSum += additionalLineVolumeDiscount\r\n })\r\n }\r\n let finalVolumeDiscount = 0\r\n if (!showAdditionalLines) finalVolumeDiscount = baseLineVolumeDiscount + addonVolumeDiscountSum\r\n else finalVolumeDiscount = additionalVolumeDiscountSum + addonVolumeDiscountSum\r\n setVolumeDiscount(finalVolumeDiscount)\r\n }\r\n\r\n useEffect(() => {\r\n if (!isEmpty(couponServerData) && couponServerData.isCouponValid) {\r\n if (\r\n !isEmpty(rePriceDiscounts) &&\r\n rePriceDiscounts[billingTenure.selected] &&\r\n couponServerData.couponDiscountType === COUPON_DISCOUNT_TYPE.REPRICE\r\n ) {\r\n setValidCoupons([\r\n {\r\n discount: rePriceDiscounts[billingTenure.selected],\r\n sku: baseLine.key, // currently reprice is supported only for base plan skus, need to change this in the future when we start supporting reprice coupons for addons\r\n percent: 0,\r\n isReprice: true,\r\n },\r\n ])\r\n return\r\n }\r\n let isValid = true\r\n if (couponServerData.couponType === COUPON_TYPE.FIX) {\r\n const skusSelected = [baseLine, ...addonLines].map((item) => item.key)\r\n const couponItemsSkus = couponServerData.couponItems\r\n .filter((item) => item.paymentPlan === BillingPeriodCouponPaymentPlanMapper[billingTenure.selected])\r\n .map((item) => item.productSku)\r\n isValid = couponItemsSkus.every((item) => skusSelected.includes(item))\r\n }\r\n setCouponValidAndApplied(isValid)\r\n if (isValid) {\r\n const baseLineCouponData: ValidCoupon = processCouponCalculations(\r\n baseLine,\r\n couponServerData.couponDiscountType,\r\n billingTenure.selected,\r\n couponServerData.couponItems,\r\n currency\r\n )\r\n const addonLinesCouponData = addonLines.map((item) => {\r\n const result = processCouponCalculations(\r\n item,\r\n couponServerData.couponDiscountType,\r\n billingTenure.selected,\r\n couponServerData.couponItems,\r\n currency,\r\n true\r\n )\r\n return result\r\n })\r\n setValidCoupons([baseLineCouponData, ...addonLinesCouponData])\r\n } else setValidCoupons([])\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [couponServerData, baseLine, addonLines, billingTenure, rePriceDiscounts])\r\n\r\n useEffect(() => {\r\n if (billingPeriodKeys.length > 1 && isAnnual) {\r\n calculateAnnualDiscount()\r\n } else setAnnualDiscount(0)\r\n getVolumeDiscount()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [baseLine, isAnnual, showAdditionalLines, addonLines])\r\n\r\n useEffect(() => {\r\n const couponDiscountSum = validCoupons.reduce((sum, currentValue) => {\r\n if (!currentValue.isReprice) return sum + currentValue.discount\r\n return sum\r\n }, 0)\r\n setCouponDiscount(couponDiscountSum)\r\n }, [validCoupons])\r\n\r\n useEffect(() => {\r\n setTotalDiscount(annualDiscount + volumeDiscount + couponDiscount)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [annualDiscount, volumeDiscount, couponDiscount])\r\n\r\n return (\r\n <>\r\n {totalDiscount > 0 && (\r\n
\r\n
\r\n \r\n {title}\r\n \r\n \r\n -\r\n \r\n
\r\n {annualDiscount > 0 && (\r\n
\r\n
\r\n \r\n {annualDiscountLabel}\r\n \r\n \r\n -\r\n \r\n
\r\n
\r\n )}\r\n {volumeDiscount > 0 && (\r\n
\r\n
\r\n \r\n {addonsLabels.totalVolumeDiscount}\r\n \r\n \r\n \r\n -\r\n \r\n
\r\n
\r\n )}\r\n\r\n {couponDiscount > 0 ? (\r\n \r\n ) : (\r\n <>\r\n )}\r\n
\r\n )}\r\n \r\n )\r\n}\r\n","import React, { useEffect, useState, FunctionComponent } from 'react'\r\n\r\nimport { ConnectedBuyFormatCurrency } from '@buy/connectedComponents'\r\nimport { Tooltip } from '@common/components'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport { isEmpty } from 'lodash-es'\r\nimport { BillingPeriod } from '@common/constants'\r\nimport styles from '../../connectedComponents/OrderSummary/order-summary.module.css'\r\nimport { BillingTenureValue } from '../BillingPeriodSwitch'\r\n\r\ninterface TotalSummaryProps {\r\n subTotalLabel: string\r\n estimatedTaxLabel: string\r\n estimatedTaxPopupInfoLabel: string\r\n tBDLabel: string\r\n totalLabel: string\r\n calculatingLabel: string\r\n annualPlanNoteLabel: string\r\n monthlyPlanNoteLabel: string\r\n annualContractPlanNoteLabel: string\r\n annualContractTotalLabel: string\r\n totalLoading: boolean\r\n calculatedTax: number\r\n currencyCode: string\r\n baseLineTotal: number\r\n additionalLinesTotal: Record\r\n addonLinesTotal: number\r\n totalDiscount: number\r\n additionalLines: Array\r\n setFinalTotal: (total: number) => void\r\n finalTotal: number\r\n billingTenure: BillingTenureValue\r\n}\r\n\r\nexport const TotalSummary: FunctionComponent = ({\r\n subTotalLabel,\r\n estimatedTaxLabel,\r\n estimatedTaxPopupInfoLabel,\r\n tBDLabel,\r\n totalLabel,\r\n calculatingLabel,\r\n annualPlanNoteLabel,\r\n monthlyPlanNoteLabel,\r\n totalLoading,\r\n calculatedTax,\r\n currencyCode,\r\n baseLineTotal,\r\n additionalLinesTotal,\r\n addonLinesTotal,\r\n totalDiscount,\r\n additionalLines,\r\n finalTotal,\r\n setFinalTotal,\r\n annualContractPlanNoteLabel,\r\n annualContractTotalLabel,\r\n billingTenure,\r\n}) => {\r\n const noteLabels = {\r\n [BillingPeriod.ANNUAL]: annualPlanNoteLabel,\r\n [BillingPeriod.ANNUALBILLEDMONTHLY]: annualContractPlanNoteLabel,\r\n [BillingPeriod.MONTHLY]: monthlyPlanNoteLabel,\r\n }\r\n\r\n const totalLabels = {\r\n [BillingPeriod.ANNUAL]: totalLabel,\r\n [BillingPeriod.ANNUALBILLEDMONTHLY]: annualContractTotalLabel,\r\n [BillingPeriod.MONTHLY]: totalLabel,\r\n }\r\n\r\n const [subTotal, setSubTotal] = useState(0)\r\n\r\n useEffect(() => {\r\n const additionalLinesSum = Object.keys(additionalLinesTotal).reduce((sum, key) => {\r\n const additionLineTotal = !isEmpty(additionalLines.find((item) => item.unit! === key))\r\n ? additionalLinesTotal[key] || 0\r\n : 0\r\n return sum + additionLineTotal\r\n }, 0)\r\n setSubTotal(baseLineTotal + additionalLinesSum + addonLinesTotal - totalDiscount)\r\n }, [baseLineTotal, additionalLinesTotal, addonLinesTotal, totalDiscount, additionalLines])\r\n\r\n useEffect(() => {\r\n setFinalTotal(subTotal + calculatedTax)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [subTotal, calculatedTax])\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n {subTotalLabel}\r\n \r\n {totalLoading ? '--' : }\r\n \r\n
\r\n
\r\n \r\n {estimatedTaxLabel}{' '}\r\n \r\n \r\n\r\n \r\n {totalLoading ? (\r\n '--'\r\n ) : (\r\n <>{calculatedTax ? : tBDLabel}\r\n )}\r\n \r\n
\r\n
\r\n \r\n {totalLabels[billingTenure.selected]} {currencyCode}\r\n \r\n \r\n {totalLoading ? (\r\n `${calculatingLabel}...`\r\n ) : (\r\n 0 ? finalTotal : 0} />\r\n )}\r\n \r\n
\r\n
\r\n {noteLabels[billingTenure.selected]}\r\n
\r\n
\r\n \r\n )\r\n}\r\n","import React, { FunctionComponent, useEffect, useState } from 'react'\r\nimport classNames from 'classnames'\r\nimport { Tooltip } from '@common/components'\r\n// import { ConnectedBuyFormatCurrency } from '@buy/connectedComponents'\r\nimport { get, isEmpty } from 'lodash-es'\r\nimport { BillingPeriodOption, OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport { BillingPeriodKey, BillingPeriod, BillingPeriodKeyMapper } from '@common/constants'\r\nimport { BillingPeriods } from '@buy/state/price'\r\nimport { getPrice } from '@buy/utils/volume-components-helpers'\r\nimport { ParamTypes } from '@buy/Routes'\r\nimport { useParams } from 'react-router-dom'\r\nimport { getCheckoutSessionState, setCheckoutSessionState, SessionKeys } from '@buy/utils'\r\nimport styles from '../../../../common/components/ToggleButton/toggle-button.module.css'\r\n\r\nexport interface SwitchProps {\r\n onChangeFn: (selectedOption: BillingTenureValue) => void\r\n id: string\r\n disabled?: boolean\r\n isLarge?: boolean\r\n widget?: boolean\r\n theme?: string\r\n billingTenure: BillingTenureValue\r\n setBillingTenure: (data: BillingTenureValue) => void\r\n tooltipContent: Record\r\n billingPeriods: BillingPeriods[]\r\n baseLine: OrderSummaryLine\r\n}\r\n\r\nexport interface BillingTenureValue {\r\n selected: BillingPeriod\r\n leftOption?: BillingPeriod\r\n}\r\n\r\nexport const BillingPeriodSwitch: FunctionComponent = ({\r\n onChangeFn,\r\n id,\r\n disabled,\r\n isLarge,\r\n widget,\r\n theme = 'resolve', // theme to be set based on product config in the future\r\n tooltipContent,\r\n billingPeriods,\r\n setBillingTenure,\r\n billingTenure,\r\n baseLine,\r\n}) => {\r\n const { pathProduct, plan } = useParams()\r\n const [leftOption, setLeftOption] = useState()\r\n const [rightOption, setRightOption] = useState()\r\n const [isOn, setIsOn] = useState(true)\r\n const [percentageSaved, setPercentageSaved] = useState('')\r\n\r\n const modifier = `${styles['wrapper--order-summary']} ${\r\n billingTenure.leftOption ? styles['wrapper--annual-contract'] : ''\r\n }`\r\n\r\n useEffect(() => {\r\n const sessionData = getCheckoutSessionState(pathProduct!, plan!)\r\n if (!isEmpty(billingPeriods)) {\r\n const annualBillingFrequency = billingPeriods.find((item) => item.key === BillingPeriodKey.ANNUAL)\r\n if (isEmpty(annualBillingFrequency) || billingPeriods.length > 2) {\r\n console.error('Invalid billing period configuration!')\r\n } else if (billingPeriods.length === 1) setBillingTenure({ selected: BillingPeriod.ANNUAL })\r\n else {\r\n const sessionStorageValue: BillingPeriod = get(sessionData, SessionKeys.billingTenure)\r\n const isValidSessionStorageValue = billingPeriods.find(\r\n (item) => sessionStorageValue === BillingPeriodKeyMapper[item.key]\r\n )\r\n const leftTenure = billingPeriods.find((item) => item.key !== BillingPeriodKey.ANNUAL)!\r\n setLeftOption({\r\n title: leftTenure.name,\r\n key: leftTenure.key,\r\n tooltipText: tooltipContent[leftTenure.key],\r\n descriptionActive: leftTenure.descriptionActive,\r\n descriptionInactive: leftTenure.descriptionInactive,\r\n })\r\n setRightOption({\r\n title: annualBillingFrequency.name,\r\n key: annualBillingFrequency.key,\r\n tooltipText: tooltipContent[annualBillingFrequency.key],\r\n descriptionActive: annualBillingFrequency.descriptionActive,\r\n descriptionInactive: annualBillingFrequency.descriptionInactive,\r\n })\r\n const selectedValue =\r\n !isEmpty(sessionStorageValue) && isValidSessionStorageValue\r\n ? sessionStorageValue\r\n : BillingPeriod.ANNUAL\r\n setBillingTenure({ selected: selectedValue, leftOption: BillingPeriodKeyMapper[leftTenure.key] })\r\n setIsOn(selectedValue === BillingPeriod.ANNUAL)\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [billingPeriods])\r\n\r\n useEffect(() => {\r\n if (billingTenure.leftOption) {\r\n const priceWithoutDiscount = getPrice(1, baseLine.allPrices[billingTenure.leftOption])\r\n const annualPrice = getPrice(1, baseLine.allPrices[BillingPeriod.ANNUAL])\r\n const percentage = (\r\n Number(((priceWithoutDiscount - annualPrice) / priceWithoutDiscount).toFixed(2)) * 100\r\n ).toFixed(2)\r\n const floatPercentage = parseFloat(percentage)\r\n setPercentageSaved(floatPercentage.toString())\r\n }\r\n }, [baseLine, billingTenure])\r\n\r\n const handleChange = (isSelected: boolean) => {\r\n if (onChangeFn && !disabled) {\r\n const newBillingTenure = {\r\n selected: isSelected ? BillingPeriod.ANNUAL : BillingPeriodKeyMapper[leftOption!.key],\r\n leftOption: BillingPeriodKeyMapper[leftOption!.key],\r\n }\r\n setCheckoutSessionState(\r\n newBillingTenure.selected.toString(),\r\n SessionKeys.billingTenure,\r\n pathProduct!,\r\n plan!\r\n )\r\n setBillingTenure(newBillingTenure)\r\n onChangeFn(newBillingTenure)\r\n }\r\n }\r\n\r\n const labelClasses = classNames({\r\n [styles.wrapper]: true,\r\n [styles[`isOn--${theme}`]]: isOn,\r\n [styles['wrapper--large']]: isLarge,\r\n [modifier]: modifier,\r\n [styles.disabled]: disabled,\r\n [styles.widget]: widget,\r\n })\r\n\r\n return (\r\n <>\r\n {!isEmpty(billingPeriods) &&\r\n billingPeriods.length === 2 &&\r\n !isEmpty(leftOption) &&\r\n !isEmpty(rightOption) && (\r\n \r\n )}\r\n \r\n )\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"payment-info-module__wrapper\",\"cc-grid\":\"payment-info-module__cc-grid\",\"cc-grid--hidden\":\"payment-info-module__cc-grid--hidden\",\"heading\":\"payment-info-module__heading\",\"cc\":\"payment-info-module__cc\",\"exp-date\":\"payment-info-module__exp-date\",\"cvv\":\"payment-info-module__cvv\",\"cvv-wrapper\":\"payment-info-module__cvv-wrapper\",\"cc-wrapper\":\"payment-info-module__cc-wrapper\",\"credit-card\":\"payment-info-module__credit-card\",\"credit-card--error\":\"payment-info-module__credit-card--error\",\"credit-card--focus\":\"payment-info-module__credit-card--focus\",\"credit-card--valid\":\"payment-info-module__credit-card--valid\",\"cc-img\":\"payment-info-module__cc-img\",\"error\":\"payment-info-module__error\",\"optional\":\"payment-info-module__optional\",\"terms\":\"payment-info-module__terms\",\"submit\":\"payment-info-module__submit\",\"optout-button\":\"payment-info-module__optout-button\",\"optout-checkbox\":\"payment-info-module__optout-checkbox\",\"payment-details\":\"payment-info-module__payment-details\",\"secure-badge\":\"payment-info-module__secure-badge\",\"secure-icon\":\"payment-info-module__secure-icon\"};","// import dependencies\r\nimport React, { FunctionComponent, useEffect, useState } from 'react'\r\nimport { useSelector } from 'react-redux'\r\n\r\nimport { Checkbox, CommonButton, ConvertStringToReact, TrustArcLogo } from '@common/components'\r\nimport {\r\n VIEW_PATH,\r\n BillingPeriodKey,\r\n BillingPeriod,\r\n BillingPeriodTimePeriodMapper,\r\n COUPON_DISCOUNT_TYPE,\r\n PRODUCTS,\r\n} from '@common/constants'\r\nimport { getSessionState, saveSessionState, connectRedux, GoToComponentProps } from '@common/utils'\r\n\r\nimport { BUY_USER_TYPES, ADDONS } from '@buy/constants'\r\nimport {\r\n mapBuyOrderSummaryState,\r\n mapBuyOrderSummaryActions,\r\n BuyOrderSummaryActionsType,\r\n} from '@buy/connectedComponents/OrderSummary/connector'\r\nimport { ConnectedModal } from '@common/connectedComponents/Modal'\r\nimport { BuyOrderSummaryState } from '@buy/connectedComponents/OrderSummary/state'\r\nimport { get, has, isEmpty, isUndefined } from 'lodash-es'\r\nimport { BaseLineSummary } from '@buy/components/BaseLineSummary/BaseLineSummary'\r\nimport { AdditionalLinesSummary } from '@buy/components/AdditionalLinesSummary/AdditionalLinesSummary'\r\nimport { AddonsSummaryWrapper } from '@buy/components/AddonsSummaryWrapper'\r\nimport { useLocation, useParams } from 'react-router-dom'\r\nimport { ParamTypes } from '@buy/Routes'\r\nimport { remapPricingObject } from '@buy/utils/volume-components-helpers'\r\nimport { SKUSelectorsResponse } from '@buy/components/VolumeComponentWrapper'\r\nimport { DiscountSummary } from '@buy/components/DiscountSummary'\r\nimport { TotalSummary } from '@buy/components/TotalSummary'\r\nimport { getCheckoutSessionState, setCheckoutSessionState, SessionFieldData, SessionKeys } from '@buy/utils'\r\nimport { OrderSummaryLine } from '@buy/state/order-summary/order-summary'\r\nimport { BillingPeriodSwitch, BillingTenureValue } from '@buy/components/BillingPeriodSwitch'\r\nimport { getProductSettingsData } from '@buy/state/selectors'\r\n\r\nimport styles from './order-summary.module.css'\r\nimport paymentStyles from '../PaymentFormInfo/payment-info.module.css'\r\n\r\ntype BuyOrderSummaryProps = GoToComponentProps<\r\n BuyOrderSummaryState,\r\n BuyOrderSummaryActionsType,\r\n {\r\n hidePrice?: boolean\r\n isTabletOrMobileView?: boolean\r\n isMobileView?: boolean\r\n }\r\n>\r\n\r\nexport type addonsContentType = {\r\n year: string\r\n month: string\r\n months: string\r\n percentageOffPromoDiscount: string\r\n percentageOffVolumeDiscount: string\r\n prorateDiscount: string\r\n totalVolumeDiscount: string\r\n tooltips: {\r\n [key: string]: string\r\n }\r\n}\r\n\r\nconst BuyOrderSummary: FunctionComponent = ({ state, actions, props }) => {\r\n const { selectedPlan, content, CurrencyCode, disablePlanSelection, couponCode, language, couponServerData } = state\r\n const productSettings = useSelector(getProductSettingsData)\r\n const qualtricsProductName = productSettings?.qualtricsProductName\r\n const { pathProduct, plan } = useParams()\r\n const { pathname } = useLocation()\r\n const [isCheckout, setIsCheckout] = useState(false)\r\n const [showAdditionalLines, setShowAdditionalLines] = useState(false)\r\n const [baselineTotal, setBaselineTotal] = useState(0)\r\n const [additionalLinesTotal, setAdditionalLinesTotal] = useState>({})\r\n const [addonLinesTotal, setAddonLinesTotal] = useState(0)\r\n const [isAnnual, setIsAnnual] = useState(false)\r\n const [rePriceDiscounts, setRePriceDiscounts] = useState>({})\r\n\r\n // labels and state display\r\n const isAddonFlow = state.isUserLoggedIn && state.userType === BUY_USER_TYPES.ADDON\r\n\r\n const billingPeriodTooltips: Record = {\r\n // [BillingPeriodKey.ANNUAL] : content.monthlyTooltip,\r\n // [BillingPeriodKey.MONTHLY]: content.monthlyTooltip,\r\n [BillingPeriodKey.ANNUALCONTRACT]: content.monthlyTooltip,\r\n }\r\n\r\n const addonsContent: addonsContentType = {\r\n year: content.year,\r\n month: content.month,\r\n months: content.months,\r\n percentageOffPromoDiscount: content.percentageOffPromoDiscount,\r\n percentageOffVolumeDiscount: content.percentageOffVolumeDiscount,\r\n prorateDiscount: content.proratedAdjustment,\r\n totalVolumeDiscount: content.totalVolumeDiscount,\r\n tooltips: {\r\n [ADDONS.AGENT]: content.agentsVolumediscountTooltip,\r\n [ADDONS.ENDPOINT]: content.endpointsVolumediscountTooltip,\r\n [ADDONS.MOBILE_ADDON]: content.mobileVolumediscountTooltip,\r\n [ADDONS.CAMERA_SHARE_ADDON]: content.cameraShareVolumediscountTooltip,\r\n [ADDONS.ENDPOINT_PROTECTION_ADDON]: content.endpointProtectionVolumediscountTooltip,\r\n proratedadjustmentTooltip: content.proratedadjustmentTooltip,\r\n totalVolumeDiscountTooltip: content.totalVolumeDiscountTooltip,\r\n },\r\n }\r\n\r\n const removeAdditionalLinesSubTotalKey = (unit: string) => {\r\n delete additionalLinesTotal[unit]\r\n setAdditionalLinesTotal(additionalLinesTotal)\r\n }\r\n\r\n const loadSessionStorageLinesSummary = (sessionData: SessionFieldData, key: string) => {\r\n const hasLines = !isEmpty(sessionData) && !isEmpty(get(sessionData, key))\r\n if (hasLines) {\r\n let sessionLines: OrderSummaryLine[] = get(sessionData, key)!\r\n const skuSelectorSkus = selectedPlan.sKUSelectors!.map((item) => item.sku)\r\n const legacyAddons = selectedPlan.addons\r\n ?.filter((item) => has(item, 'sKUSelector'))\r\n .map((values) => values.sKUSelector)\r\n sessionLines = sessionLines.filter((item) =>\r\n [...skuSelectorSkus, ...legacyAddons.map((item2) => item2.sku)].includes(item.key)\r\n )\r\n const updatedSessionLines = sessionLines.map((item) => {\r\n const newItem = { ...item }\r\n const { pricingInfo, unit, planName, quantityMultiplier, sku } = [\r\n ...selectedPlan.sKUSelectors!,\r\n ...legacyAddons,\r\n ].find((item2) => item2.sku === item.key)!\r\n newItem.key = sku\r\n if (!isEmpty(unit?.unitName)) newItem.unit = unit?.unitName\r\n newItem.skuName = planName\r\n newItem.allPrices = remapPricingObject(pricingInfo, CurrencyCode).allPrices\r\n newItem.quantityMultiplier = quantityMultiplier\r\n return newItem\r\n })\r\n return updatedSessionLines\r\n }\r\n return null\r\n }\r\n\r\n const loadSessionStorageLines = () => {\r\n const sessionData = getCheckoutSessionState(pathProduct!, plan!)\r\n if (!isEmpty(sessionData)) {\r\n const sessionAdditionalLines = loadSessionStorageLinesSummary(sessionData, SessionKeys.additonalLines)\r\n const sessionAddonLines = loadSessionStorageLinesSummary(sessionData, SessionKeys.addonLines)\r\n if (!isEmpty(sessionAdditionalLines)) actions.setAdditionalLines(sessionAdditionalLines!)\r\n if (!isEmpty(sessionAddonLines)) actions.setAddonLines(sessionAddonLines!)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n const qualtricsData = getSessionState('qualtrics_data_gh')\r\n saveSessionState('qualtrics_data_gh', {\r\n ...(!qualtricsData ? {} : qualtricsData),\r\n // id: '', // added on GTM side\r\n sku: selectedPlan.sKU,\r\n purchase_term: state.billingTenure.selected,\r\n purchase_type: isAddonFlow ? 'addon' : 'new',\r\n order_total: state.finalTotal,\r\n // referral_channel: '', // added on GTM side\r\n promo_code_applied: couponCode ?? '',\r\n site_language: language,\r\n product: qualtricsProductName,\r\n })\r\n }, [\r\n selectedPlan.sKU,\r\n isAddonFlow,\r\n state.finalTotal,\r\n state.billingTenure,\r\n couponCode,\r\n language,\r\n qualtricsProductName,\r\n ])\r\n\r\n useEffect(() => {\r\n setIsCheckout(pathname.includes(VIEW_PATH.PATH_CHECKOUT))\r\n }, [pathname])\r\n\r\n useEffect(() => {\r\n if (!isEmpty(state.selectedPlan.sKUSelectors)) {\r\n const sessionData = getCheckoutSessionState(pathProduct!, plan!)\r\n const sessionBasePlanLine = sessionData?.baseLine\r\n\r\n loadSessionStorageLines()\r\n if (!productSettings.enablePlanCustomization) {\r\n // this product has no customize page\r\n const defaultSku = state.selectedPlan.sKUSelectors![0]\r\n const couponItems =\r\n couponServerData?.couponDiscountType === COUPON_DISCOUNT_TYPE.REPRICE\r\n ? couponServerData?.couponItems.filter((item) => item.productSku === defaultSku.sku)\r\n : []\r\n const newPrices = remapPricingObject(defaultSku.pricingInfo, CurrencyCode, couponItems)\r\n setRePriceDiscounts(newPrices.rePriceDiscounts)\r\n const tempBaseLine: OrderSummaryLine = {\r\n skuName: defaultSku.planName,\r\n key: defaultSku.sku,\r\n multiplier: sessionBasePlanLine ? sessionBasePlanLine.multiplier : 1,\r\n quantity: sessionBasePlanLine ? sessionBasePlanLine.quantity : 1,\r\n allPrices: newPrices.allPrices,\r\n quantityMultiplier: defaultSku.quantityMultiplier,\r\n }\r\n actions.setBaseLine(tempBaseLine)\r\n setCheckoutSessionState(tempBaseLine, SessionKeys.baseLine, pathProduct!, plan!)\r\n } else {\r\n const basePlanSku: SKUSelectorsResponse = state.selectedPlan.sKUSelectors!.find((item) =>\r\n has(item, 'includedInSku')\r\n )!\r\n const hasAdditionalLinesConfig =\r\n !isEmpty(basePlanSku) &&\r\n state.selectedPlan.sKUSelectors?.filter((item) => item.sku === basePlanSku!.sku).length === 1\r\n setShowAdditionalLines(hasAdditionalLinesConfig)\r\n if (hasAdditionalLinesConfig) {\r\n const keyToCompare = !isEmpty(basePlanSku) ? basePlanSku.sku : selectedPlan.sKU\r\n const couponItems =\r\n couponServerData?.couponDiscountType === COUPON_DISCOUNT_TYPE.REPRICE\r\n ? couponServerData?.couponItems.filter((item) => item.productSku === keyToCompare)\r\n : []\r\n const newPrices = remapPricingObject(\r\n !isEmpty(basePlanSku) ? basePlanSku.pricingInfo : selectedPlan.pricingInfo,\r\n CurrencyCode,\r\n couponItems\r\n )\r\n setRePriceDiscounts(newPrices.rePriceDiscounts)\r\n const tempBaseLine: OrderSummaryLine = {\r\n skuName: !isEmpty(basePlanSku) ? basePlanSku.planName : selectedPlan.name,\r\n key: !isEmpty(basePlanSku) ? basePlanSku.sku : selectedPlan.sKU,\r\n multiplier: sessionBasePlanLine ? sessionBasePlanLine.multiplier : 1,\r\n quantity: sessionBasePlanLine ? sessionBasePlanLine.quantity : 1,\r\n allPrices: newPrices.allPrices,\r\n quantityMultiplier: !isEmpty(basePlanSku) ? basePlanSku.quantityMultiplier : '',\r\n }\r\n actions.setBaseLine(tempBaseLine)\r\n setCheckoutSessionState(tempBaseLine, SessionKeys.baseLine, pathProduct!, plan!)\r\n } else {\r\n const volumeSelectorSku: SKUSelectorsResponse = state.selectedPlan.sKUSelectors!.find((item) =>\r\n has(item, 'volumeSelector')\r\n )!\r\n const couponItems =\r\n couponServerData?.couponDiscountType === COUPON_DISCOUNT_TYPE.REPRICE\r\n ? couponServerData?.couponItems.filter((item) => item.productSku === volumeSelectorSku.sku)\r\n : []\r\n const newPrices = remapPricingObject(volumeSelectorSku.pricingInfo, CurrencyCode, couponItems)\r\n setRePriceDiscounts(newPrices.rePriceDiscounts)\r\n\r\n const defaultBundleSize = isUndefined(volumeSelectorSku.volumeSelector!.quantityPerUnit)\r\n ? volumeSelectorSku.volumeSelector!.minimum!\r\n : volumeSelectorSku.volumeSelector!.minimum! /\r\n volumeSelectorSku.volumeSelector!.quantityPerUnit!\r\n\r\n const tempBaseLine: OrderSummaryLine = {\r\n skuName: volumeSelectorSku.planName,\r\n key: volumeSelectorSku.sku,\r\n multiplier: sessionBasePlanLine ? sessionBasePlanLine.multiplier : 1,\r\n quantity: sessionBasePlanLine ? sessionBasePlanLine.multiplier : defaultBundleSize,\r\n unit: !isEmpty(basePlanSku.unit) ? basePlanSku.unit.unitName : volumeSelectorSku.unit?.unitName,\r\n allPrices: newPrices.allPrices,\r\n quantityMultiplier: !isEmpty(basePlanSku.unit)\r\n ? basePlanSku.quantityMultiplier\r\n : volumeSelectorSku.quantityMultiplier,\r\n }\r\n actions.setBaseLine(tempBaseLine)\r\n setCheckoutSessionState(tempBaseLine, SessionKeys.baseLine, pathProduct!, plan!)\r\n }\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [\r\n productSettings.enablePlanCustomization,\r\n isCheckout,\r\n state.selectedPlan.sKUSelectors,\r\n CurrencyCode,\r\n couponServerData,\r\n ])\r\n\r\n useEffect(() => {\r\n setIsAnnual(state.billingTenure.selected === BillingPeriod.ANNUAL)\r\n }, [state.billingTenure])\r\n\r\n return (\r\n
\r\n
\r\n

{content.orderSummary}

\r\n {\r\n actions.setBillingFrequency(BillingPeriodTimePeriodMapper[value.selected])\r\n }}\r\n disabled={isAddonFlow}\r\n id={`toggle-${Math.random()}`}\r\n isLarge\r\n billingTenure={state.billingTenure}\r\n setBillingTenure={actions.setBillingTenure}\r\n tooltipContent={billingPeriodTooltips}\r\n billingPeriods={state.selectedPlan.billingPeriods}\r\n baseLine={state.baseLine}\r\n theme={PRODUCTS.RESOLVE}\r\n />\r\n {!disablePlanSelection && (\r\n \r\n )}\r\n {state.additionalLines.map((item) => (\r\n
\r\n \r\n setAdditionalLinesTotal((oldState: Record) => {\r\n const newState = { ...oldState }\r\n newState[item.unit!] = value\r\n return { ...newState }\r\n })\r\n }\r\n subTotal={additionalLinesTotal[item.unit!]}\r\n cleanUpFunc={removeAdditionalLinesSubTotalKey}\r\n billingTenure={state.billingTenure}\r\n />\r\n
\r\n ))}\r\n \r\n\r\n \r\n\r\n \r\n
\r\n
\r\n {' '}\r\n actions.setDisplayOptOut(!state.displayOptOut)}\r\n type=\"button\"\r\n >\r\n {content.optOut}\r\n \r\n {state.displayOptOut && (\r\n actions.setIsUserOptOut(!state.isUserOptOut)}\r\n qaTag=\"checkout-form-optout\"\r\n />\r\n )}\r\n
\r\n {!props.isTabletOrMobileView && }\r\n actions.closeErrorModal()}>\r\n
\r\n

{state.content.upgradeCreditErrorMessage}

\r\n
\r\n \r\n
\r\n actions.closeErrorModal()}>{state.content.upgradeClose}\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport const ConnectedBuyOrderSummary = connectRedux(\r\n BuyOrderSummary,\r\n mapBuyOrderSummaryState,\r\n mapBuyOrderSummaryActions\r\n)\r\n\r\nexport default ConnectedBuyOrderSummary\r\n","import React, { FunctionComponent, useState, useEffect, useCallback } from 'react'\r\nimport classNames from 'classnames'\r\n\r\n// import components\r\nimport { CommonButton, ConvertStringToReact, TrustArcLogo } from '@common/components'\r\nimport { connectRedux, formatDate, GoToComponentProps } from '@common/utils'\r\nimport { ConnectedModal } from '@common/connectedComponents/Modal'\r\n// TODO: Changes needs to made based on unified config\r\n\r\nimport {\r\n BuyCustomizeActionsType,\r\n mapBuyCustomizeActions,\r\n mapBuyCustomizeState,\r\n} from '@buy/connectedComponents/Customize/connector'\r\nimport { isAddressComplete } from '@buy/utils'\r\nimport { BuyCustomizeState } from '@buy/connectedComponents/Customize/state'\r\nimport { useCustomizeCart, useCustomizePageTracking } from '@buy/hooks'\r\nimport { BuyCardLabels } from '@buy/components/Card'\r\nimport { BuyFormData } from '@buy/state/buy-form/state'\r\nimport { BillingPeriod } from '@common/constants'\r\nimport { useParams } from 'react-router-dom'\r\nimport VolumeComponentsWrapper, { SKUSelectorsResponse } from '@buy/components/VolumeComponentWrapper'\r\nimport { AddonsWrapper } from '@buy/components/AddonsWrapper'\r\nimport { has, isEmpty } from 'lodash-es'\r\nimport { getComponentType } from '@buy/utils/volume-components-helpers'\r\nimport { FLEXIBLE_VOLUME_COMPONENT_TYPE } from '@buy/constants/flexible-components'\r\nimport { BasePlanSection } from '@buy/components/BasePlanSection/BasePlanSection'\r\nimport { ConnectedBuyOrderSummary } from '../OrderSummary'\r\nimport styles from './customize.module.css'\r\nimport billingStyles from '../../views/Billing/billing.module.css'\r\n\r\ntype ParamTypes = {\r\n plan: string\r\n pathProduct: string\r\n}\r\n\r\ntype BuyCustomizeProps = GoToComponentProps<\r\n BuyCustomizeState,\r\n BuyCustomizeActionsType,\r\n {\r\n nextSteps: () => void\r\n isTabletOrMobileView?: boolean\r\n isMobileView?: boolean\r\n }\r\n>\r\n\r\nexport interface Icons {\r\n [key: string]: string\r\n}\r\n\r\nconst Customize: FunctionComponent = ({ state, actions, props }) => {\r\n const { plan: urlPlan } = useParams()\r\n const [initStateLoaded, setInitStateLoaded] = useState(false)\r\n const [isPlanModalOpen, setIsPlanModalOpen] = useState(false)\r\n const [volumeSelectorValues, setVolumeSelectorValues] = useState({})\r\n\r\n const { monthly, annual, user, year, month, billedMonthlyPrice, billedAnnualPrice, organizer, per } = state.content\r\n\r\n const cardLabels: BuyCardLabels = {\r\n monthly,\r\n annual,\r\n user,\r\n year,\r\n month,\r\n newLicenseCopy: '',\r\n highlightsLabel: '',\r\n billedMonthlyPrice,\r\n billedAnnualPrice,\r\n organizer,\r\n per,\r\n }\r\n\r\n const cart = useCustomizeCart({ ...state }, actions)\r\n\r\n useEffect(() => {\r\n if (state.selectedAddons.length > 0 && !initStateLoaded) {\r\n setInitStateLoaded(true)\r\n }\r\n }, [initStateLoaded, state.selectedAddons.length])\r\n\r\n const recalculatePrice = useCallback(\r\n (initialData: BuyFormData, planSKU?: string) => {\r\n if (isAddressComplete(initialData, state.statesOptional)) actions.calculatePrice(initialData, planSKU)\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [actions]\r\n )\r\n\r\n useEffect(() => {\r\n recalculatePrice(state.initialData)\r\n }, [\r\n state.initialData,\r\n state.baseLine,\r\n state.additionalLines,\r\n recalculatePrice,\r\n state.addonLines,\r\n state.billingTenure,\r\n ])\r\n\r\n // tracking\r\n useCustomizePageTracking({\r\n dependencies: [state.baseLine.key, state.selectedPlan.name],\r\n })\r\n\r\n const submitBtnStyles = classNames({\r\n [billingStyles['buy-custom-submit-btn']]: true,\r\n [styles['customize-submit-btn']]: true,\r\n })\r\n\r\n const loggedInNoUpgrade = state.isUserLoggedIn && !cart.canUpgradePlan\r\n const v2NoDowngrade = urlPlan?.toLowerCase() === 'standard'\r\n\r\n useEffect(() => {\r\n const volumeSelectors = state.selectedPlan.sKUSelectors?.filter((item) => has(item, 'volumeSelector'))\r\n const basePlanSku: SKUSelectorsResponse = state.selectedPlan.sKUSelectors!.find((item) =>\r\n has(item, 'includedInSku')\r\n )!\r\n const tempVolumeSelectorValues: Record = {}\r\n volumeSelectors?.forEach((item) => {\r\n const componentType = getComponentType(item.volumeSelector!)\r\n if (componentType === FLEXIBLE_VOLUME_COMPONENT_TYPE.DROPDOWN) {\r\n if (!isEmpty(basePlanSku?.unit) && !isEmpty(basePlanSku?.quantityMultiplier)) {\r\n const defaultBundleQuantity = item.volumeSelector!.minimum! / Number(basePlanSku.quantityMultiplier)\r\n tempVolumeSelectorValues[basePlanSku.unit.unitName] = defaultBundleQuantity.toString()\r\n }\r\n tempVolumeSelectorValues[item.unit.unitName] = item.volumeSelector?.minimum\r\n ? item.volumeSelector?.minimum.toString()\r\n : '1'\r\n }\r\n // default value , need to change when reconnecting sessionstorage\r\n else tempVolumeSelectorValues[item.unit.unitName] = 1 // default value , need to change when reconnecting sessionstorage\r\n })\r\n setVolumeSelectorValues({ ...tempVolumeSelectorValues })\r\n }, [state.selectedPlan.sKUSelectors])\r\n\r\n const updateVolumeSelectors = (unit: string, value: string | number) => {\r\n const basePlanSku: SKUSelectorsResponse = state.selectedPlan.sKUSelectors!.find((item) =>\r\n has(item, 'includedInSku')\r\n )!\r\n setVolumeSelectorValues((oldState: Record) => {\r\n const newState: Record = { ...oldState }\r\n newState[unit!] = value\r\n if (!isEmpty(basePlanSku?.unit) && !isEmpty(basePlanSku?.quantityMultiplier)) {\r\n const defaultBundleQuantity = Number(value) / Number(basePlanSku.quantityMultiplier)\r\n newState[basePlanSku.unit.unitName] = defaultBundleQuantity.toString()\r\n }\r\n return newState\r\n })\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n\r\n has(item, 'sKUSelector'))\r\n .map((values) => values.sKUSelector)}\r\n />\r\n\r\n setIsPlanModalOpen(false)}>\r\n
\r\n

{state.content.changePlanMethodModalHeader}

\r\n \r\n setIsPlanModalOpen(false)}>\r\n {state.content.modalCloseButtonText}\r\n \r\n
\r\n
\r\n {props.isTabletOrMobileView && }\r\n props.nextSteps()}\r\n disabled={\r\n state.fatalErrorBlocker ||\r\n state.totalLoading ||\r\n (state.calculatedTotal === 0 && !cart.canUpgradePlan && !v2NoDowngrade)\r\n }\r\n data-qat=\"continue-to-checkout\"\r\n >\r\n {state.content.continue}\r\n \r\n {props.isTabletOrMobileView && }\r\n {state.isCouponValidAndApplied && state.couponServerData?.validTo && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n )\r\n}\r\n\r\nexport const ConnectedBuyCustomize = connectRedux(Customize, mapBuyCustomizeState, mapBuyCustomizeActions)\r\n","import { AppState } from 'app-store'\r\nimport { getLocationState } from '@common/state/selectors'\r\nimport { BuyFormatCurrencyState } from './state'\r\n\r\nexport const mapBuyFormatCurrencyState = (state: AppState): BuyFormatCurrencyState => {\r\n const { locationInfo } = getLocationState(state)\r\n const { locale: Locale, currency: CurrencyCode } = locationInfo\r\n return {\r\n Locale,\r\n CurrencyCode,\r\n }\r\n}\r\n\r\nexport const mapBuyFormatCurrencyActions = {}\r\n\r\nexport type BuyFormatCurrencyActionsType = typeof mapBuyFormatCurrencyActions\r\n","import React, { FunctionComponent } from 'react'\r\nimport { GoToComponentProps, connectRedux } from '@common/utils'\r\nimport { BuyFormatCurrencyState } from '@buy/connectedComponents/FormatCurrency/state'\r\nimport {\r\n BuyFormatCurrencyActionsType,\r\n mapBuyFormatCurrencyState,\r\n mapBuyFormatCurrencyActions,\r\n} from '@buy/connectedComponents/FormatCurrency/connector'\r\nimport { FormatCurrency } from '@common/components'\r\n\r\ntype BuyFormatCurrencyProps = GoToComponentProps<\r\n BuyFormatCurrencyState,\r\n BuyFormatCurrencyActionsType,\r\n {\r\n value: number\r\n }\r\n>\r\n\r\nexport const FormatCurrencyBuy: FunctionComponent = ({ state, props }) => {\r\n return \r\n}\r\n\r\nexport const ConnectedBuyFormatCurrency = connectRedux(\r\n FormatCurrencyBuy,\r\n mapBuyFormatCurrencyState,\r\n mapBuyFormatCurrencyActions\r\n)\r\n","import React, { FunctionComponent } from 'react'\r\nimport { GoToComponentProps, connectRedux } from '@common/utils'\r\nimport { BuyFormatCurrencyState } from '@buy/connectedComponents/FormatCurrency/state'\r\nimport {\r\n BuyFormatCurrencyActionsType,\r\n mapBuyFormatCurrencyState,\r\n mapBuyFormatCurrencyActions,\r\n} from '@buy/connectedComponents/FormatCurrency/connector'\r\nimport { FormatDecimalCurrency } from '@common/components'\r\n\r\ntype BuyFormatDecimalCurrencyProps = GoToComponentProps<\r\n BuyFormatCurrencyState,\r\n BuyFormatCurrencyActionsType,\r\n {\r\n price: number\r\n }\r\n>\r\n\r\nconst FormatDecimalCurrencyBuy: FunctionComponent = ({ state, props }) => {\r\n return \r\n}\r\n\r\nexport const ConnectedFormatDecimalCurrency = connectRedux(\r\n FormatDecimalCurrencyBuy,\r\n mapBuyFormatCurrencyState,\r\n mapBuyFormatCurrencyActions\r\n)\r\n","import { AppState } from 'app-store'\r\nimport { locationActions } from '@common/state/location/actions'\r\nimport { flexActions } from '@common/state/flex/actions'\r\nimport { buyUserActions } from '@buy/state/user/actions'\r\nimport { buyFormActions } from '@buy/state/buy-form/actions'\r\nimport { buyCheckoutActions } from '@buy/state/checkout/actions'\r\nimport { getFatalError, getFlexState, getCheckoutState as getCommonCheckoutState } from '@common/state/selectors'\r\nimport { BuyPlan } from '@buy/state/plan'\r\nimport { BuyAbandonedCartFormData } from '@buy/state/user/state'\r\nimport { fatalErrorActions } from '@common/state/fatal-error/actions'\r\nimport { getLabelContent, getCheckoutState, getUserState, getBuyFormState, getPlanData } from '@buy/state/selectors'\r\nimport { BuyFormData } from '@buy/state/buy-form/state'\r\nimport { buyTrackingActions } from '@buy/state/tracking/actions'\r\nimport { TrackingState } from '@common/state/tracking/state'\r\nimport { BUY_TRACKING_COMPONENTS } from '@buy/constants'\r\nimport { FatalErrorMessageType } from '@common/state/fatal-error/state'\r\nimport { checkoutActions as commonCheckoutActions } from '@common/state/checkout/actions'\r\nimport { BuyCheckoutFormState } from './state'\r\n\r\nexport const mapBuyCheckoutFormState = (state: AppState): BuyCheckoutFormState => {\r\n const {\r\n signIn,\r\n changePaymentMethodModalHeader,\r\n changePaymentMethodModalSubheader,\r\n modalCloseButtonText,\r\n showMe,\r\n errorCardinalChallenge,\r\n errorCardinalSetup,\r\n existingUsersModalContent,\r\n existingUsersModalHeader,\r\n existingUsersNewEmailButtonText,\r\n changeCountryContent,\r\n changeCountryHeader,\r\n modalCancel,\r\n modalReload,\r\n loadingSpinnerText,\r\n } = getLabelContent(state)\r\n\r\n const { inlineErrors } = getCommonCheckoutState(state)\r\n\r\n const { billingFrequency, baseLine } = getCheckoutState(state)\r\n const planData: BuyPlan = getPlanData(state)\r\n const { isCardValid, isCvvValid, userInteractedWithFlexField, keyInfo, isCardinalSetupComplete, fingerprint } =\r\n getFlexState(state)\r\n const {\r\n userType,\r\n existingPaymentInformation,\r\n loggedIn: { isUserLoggedIn },\r\n } = getUserState(state)\r\n const { clearEmail, statesOptional } = getBuyFormState(state)\r\n const { isFatalError, fatalErrorType } = getFatalError(state)\r\n const isScaEnabledForMid = keyInfo?.scaToken?.isScaEnabledForMid\r\n const tokenString = keyInfo?.scaToken?.tokenString\r\n\r\n return {\r\n content: {\r\n signIn,\r\n changePaymentMethodModalHeader,\r\n changePaymentMethodModalSubheader,\r\n modalCloseButtonText,\r\n showMe,\r\n errorCardinalChallenge,\r\n errorCardinalSetup,\r\n existingUsersModalContent,\r\n existingUsersModalHeader,\r\n existingUsersNewEmailButtonText,\r\n changeCountryContent,\r\n changeCountryHeader,\r\n modalCancel,\r\n modalReload,\r\n },\r\n clearEmail,\r\n userInteractedWithFlexField,\r\n selectedPlan: planData,\r\n isUserLoggedIn,\r\n isFatalError,\r\n fatalErrorType,\r\n userType,\r\n existingPaymentInformation,\r\n billingFrequency,\r\n isCardValid,\r\n isCvvValid,\r\n inlineErrors,\r\n isScaEnabledForMid,\r\n tokenString,\r\n statesOptional,\r\n isCardinalSetupComplete,\r\n fingerprint,\r\n baseLine,\r\n loadingSpinnerText,\r\n }\r\n}\r\n\r\nexport const mapBuyCheckoutFormActions = {\r\n setUserInteractedWithFlexFieldCvv: (interacted: boolean) =>\r\n flexActions.setUserInteractedWithFlexFieldCvv(interacted),\r\n setUserInteractedWithFlexField: (interacted: boolean) => flexActions.setUserInteractedWithFlexField(interacted),\r\n submitForm: (values: BuyFormData) => buyFormActions.submitForm(values),\r\n submitFormUcs: (values: BuyFormData) => buyFormActions.submitFormUcs(values),\r\n existingUserSubmitForm: (values: BuyFormData) => buyFormActions.existingUserSubmitForm(values),\r\n existingUserSubmitFormUCS: (values: BuyFormData) => buyFormActions.existingUserSubmitFormUcs(values),\r\n validateAddress: (values: BuyFormData) => locationActions.validateAddress(values),\r\n calculatePrice: (values: BuyFormData) => buyCheckoutActions.calculatePrice(values),\r\n setFatalError: (isFatalError: boolean, message?: FatalErrorMessageType) =>\r\n fatalErrorActions.setFatalError(isFatalError, message),\r\n setCheckoutFormInlineError: (value: string) => commonCheckoutActions.setCheckoutFormInlineError(value),\r\n removeCheckoutFormInlineError: (value: string) => commonCheckoutActions.removeCheckoutFormInlineError(value),\r\n userLogin: (pathname: string) => buyUserActions.userLogin('trial checkout view', pathname),\r\n setEmailClear: (clear: boolean) => buyFormActions.setClearEmail(clear),\r\n setChallengeCompleteJwt: (jwt: string) => flexActions.setChallengeCompleteJwt(jwt),\r\n track: (trackingInfo: TrackingState) =>\r\n buyTrackingActions.track(trackingInfo, BUY_TRACKING_COMPONENTS.CHECKOUT_PAGE),\r\n setCardinalSetupComplete: () => flexActions.setCardinalSetupComplete(),\r\n submitAbandonCart: (email: string, form: BuyAbandonedCartFormData) =>\r\n buyUserActions.submitAbandonedCart({\r\n success: false,\r\n isTrial: false,\r\n program: 'cart',\r\n email,\r\n form,\r\n }),\r\n}\r\n\r\nexport type BuyCheckoutFormActionsType = typeof mapBuyCheckoutFormActions\r\n","// extracted by mini-css-extract-plugin\nexport default {\"submit-blocker\":\"checkout-form-module__submit-blocker\",\"existing-email-ctas\":\"checkout-form-module__existing-email-ctas\",\"existing-email-text\":\"checkout-form-module__existing-email-text\",\"currency-modal-desc\":\"checkout-form-module__currency-modal-desc\",\"currency-modal-cta\":\"checkout-form-module__currency-modal-cta\"};","import React, { FunctionComponent, useState, useEffect, useCallback, BaseSyntheticEvent } from 'react'\r\nimport { Form, FormikProps } from 'formik'\r\nimport { setCountryInCookie } from '@common/utils/cookie-utils'\r\nimport { CommonButton, ConvertStringToReact, LoadingSpinner } from '@common/components'\r\nimport { isEmpty } from 'lodash-es'\r\nimport { getSessionState, saveSessionState, connectRedux, GoToComponentProps, scrollToTop } from '@common/utils'\r\nimport { useQualtrics } from '@common/hooks'\r\nimport {\r\n mapBuyCheckoutFormState,\r\n mapBuyCheckoutFormActions,\r\n BuyCheckoutFormActionsType,\r\n} from '@buy/connectedComponents/CheckoutForm/connector'\r\nimport { isAddressComplete, isValidationAddressEligible } from '@buy/utils'\r\nimport {\r\n ConnectedBuyAccountFormInfo,\r\n BuyAccountFormInfoComponentProps,\r\n ConnectedBuyBillingFormInfo,\r\n BuyBillingFormInfoComponentProps,\r\n ConnectedBuyPaymentFormInfo,\r\n BuyPaymentFormInfoComponentProps,\r\n ConnectedBuyCheckoutFormSubmission,\r\n BuyCheckoutFormSubmissionComponentProps,\r\n} from '@buy/connectedComponents'\r\nimport { BuyCheckoutFormState } from '@buy/connectedComponents/CheckoutForm/state'\r\nimport { ConnectedModal } from '@common/connectedComponents/Modal'\r\nimport {\r\n CHECKOUTFORM_FIELDS,\r\n CHECKOUTFORM_VALIDATION_EXCLUDE_FIELD_TYPES,\r\n BUY_PARTIAL_NON_VALIDATION_USER_TYPES,\r\n BUY_USER_TYPES,\r\n} from '@buy/constants'\r\nimport { BUY_TRIAL_ERROR_IDS } from '@buy/constants/error-strings'\r\nimport { useCheckoutFormPageTracking } from '@buy/hooks'\r\nimport { BuyErrorContent } from '@buy/state/checkout-form-container/state'\r\nimport { BuyFormData } from '@buy/state/buy-form/state'\r\nimport { TRACKING_EVENTS, PLATFORM } from '@common/constants'\r\n\r\nimport { CardinalPaymentsValidatedResponse } from '@common/state/flex/state'\r\nimport { FATAL_ERROR_TYPE } from '@common/state/fatal-error/state'\r\nimport checkoutStyles from './checkout-form.module.css'\r\n\r\ndeclare const Cardinal: any\r\n\r\ntype BuyCheckoutFormProps = GoToComponentProps<\r\n BuyCheckoutFormState,\r\n BuyCheckoutFormActionsType,\r\n {\r\n isTabletOrMobileView?: boolean\r\n isMobileView?: boolean\r\n initialData: BuyFormData\r\n errorContent: BuyErrorContent\r\n formikRef: React.RefObject>\r\n setHasAddressValidationErrors: React.Dispatch>\r\n setGeneralFieldErrors: React.Dispatch>\r\n setHasCardValidationErrors: React.Dispatch>\r\n hasAddressValidationErrors: boolean\r\n generalFieldErrors: boolean\r\n hasCardValidationErrors: boolean\r\n isSubmittingRef: React.RefObject\r\n }\r\n>\r\n\r\nconst CheckoutForm: FunctionComponent = ({ state, actions, props }) => {\r\n const { userInteractedWithFlexField, inlineErrors, clearEmail, content, statesOptional } = state\r\n const {\r\n formikRef,\r\n setHasAddressValidationErrors,\r\n setGeneralFieldErrors,\r\n setHasCardValidationErrors,\r\n hasCardValidationErrors,\r\n generalFieldErrors,\r\n hasAddressValidationErrors,\r\n isSubmittingRef,\r\n } = props\r\n const { setCheckoutFormInlineError, removeCheckoutFormInlineError } = actions\r\n\r\n const [isSubmitting, setIsSubmitting] = useState(false)\r\n const [useSameForBilling, setUseSameForBilling] = useState(sessionStorage.getItem('useSameForBilling') !== 'false')\r\n const [isFormReset, setIsFormReset] = useState(false)\r\n const [isPaymentModalOpen, setIsPaymentModalOpen] = useState(false)\r\n const [showCurrencyModal, setCurrencyModal] = useState(false)\r\n const [showCardinalModal, setCardinalModal] = useState(false)\r\n const [isTaxRequired, setTaxRequired] = useState(false)\r\n const [isCardinalScriptLoaded, setIsCardinalScriptLoaded] = useState(false)\r\n const [onInitialValue, setOnInitialValue] = useState>({})\r\n\r\n const hasExistingPaymentInformation = !isEmpty(state.existingPaymentInformation)\r\n const isAddonFlow =\r\n state.isUserLoggedIn &&\r\n (state.userType === BUY_USER_TYPES.ADDON ||\r\n (state.userType === BUY_USER_TYPES.EXPIRED && hasExistingPaymentInformation))\r\n const isCrossProductFlow =\r\n (state.isUserLoggedIn && state.userType === BUY_USER_TYPES.CROSSPRODUCT && hasExistingPaymentInformation) ||\r\n (state.isUserLoggedIn && state.userType === BUY_USER_TYPES.TRIALER && hasExistingPaymentInformation)\r\n const isTrialUser =\r\n state.userType === BUY_USER_TYPES.IDENTITY_ONLY ||\r\n (state.userType === BUY_USER_TYPES.TRIALER && !hasExistingPaymentInformation) ||\r\n (state.userType === BUY_USER_TYPES.CROSSPRODUCT && !hasExistingPaymentInformation)\r\n const isExpiredTrialUser = state.userType === BUY_USER_TYPES.EXPIRED\r\n const cardinalScriptUrl =\r\n process.env.ENVIRONMENT === PLATFORM.PROD\r\n ? 'https://songbird.cardinalcommerce.com/edge/v1/songbird.js'\r\n : 'https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js'\r\n const qualtricsQZID = process.env.ENVIRONMENT === PLATFORM.PROD ? 'ZN_299DrXKoCGOsbHw' : 'ZN_eWlJ0ywVecl7T38'\r\n\r\n useQualtrics(isSubmitting, qualtricsQZID)\r\n\r\n const resetFieldTouched = useCallback(() => {\r\n if (formikRef?.current) {\r\n Object.keys(formikRef.current.values).forEach((fieldKey) => {\r\n formikRef.current?.setFieldTouched(fieldKey, false)\r\n })\r\n }\r\n }, [formikRef])\r\n\r\n const canValidateAddress = (values: BuyFormData, dontForceCompare?: boolean) => {\r\n // for later: need to send a new FormData object with billing first name and billing last name instead of FN & LN\r\n if (\r\n isValidationAddressEligible(values, dontForceCompare) &&\r\n isAddressComplete(values, statesOptional, isTaxRequired)\r\n ) {\r\n actions.validateAddress(values)\r\n actions.calculatePrice(values)\r\n }\r\n }\r\n\r\n const resetFatalError = () => {\r\n if (isFormReset && state.isFatalError) {\r\n actions.setFatalError(false)\r\n setIsFormReset(false)\r\n }\r\n }\r\n\r\n // tracking\r\n const { trackFormError, trackBillingInfoStep, trackPaymentStep, trackSubmitForm } = useCheckoutFormPageTracking({\r\n planName: state.selectedPlan.name,\r\n formikRef,\r\n dependencies: [state.selectedPlan.name, state.baseLine.key],\r\n })\r\n\r\n const loadCardinalScript = () => {\r\n const script = document.createElement('script')\r\n script.type = 'text/javascript'\r\n script.async = true\r\n script.src = cardinalScriptUrl\r\n script.addEventListener('load', () => {\r\n setIsCardinalScriptLoaded(true)\r\n })\r\n script.addEventListener('error', () => {\r\n actions.setFatalError(true, { fatalErrorType: FATAL_ERROR_TYPE.CARDINAL_SETUP })\r\n actions.track({\r\n event: TRACKING_EVENTS.CARDINAL_SECURITY_MODAL,\r\n eventData: {\r\n securityModalAction: TRACKING_EVENTS.CARDINAL_FAIL,\r\n },\r\n })\r\n })\r\n document.body.appendChild(script)\r\n }\r\n\r\n const submitForm = (formValues: BuyFormData) => {\r\n try {\r\n const qualtricsData = getSessionState('qualtrics_data_gh')\r\n saveSessionState('qualtrics_data_gh', {\r\n ...(!qualtricsData ? {} : qualtricsData),\r\n userEmail: formValues.Email,\r\n })\r\n } catch (err) {\r\n console.error(err)\r\n }\r\n setIsSubmitting(true)\r\n if (!userInteractedWithFlexField) {\r\n actions.setUserInteractedWithFlexField(true)\r\n }\r\n actions.submitForm(formValues)\r\n trackSubmitForm()\r\n }\r\n\r\n const onFormErrors = (formIds: string[], formErrors: string[]) => {\r\n scrollToTop()\r\n setGeneralFieldErrors(true)\r\n trackFormError(formIds, formErrors)\r\n }\r\n\r\n const preSubmit = () => {\r\n if (hasAddressValidationErrors || hasCardValidationErrors) {\r\n scrollToTop()\r\n if (hasCardValidationErrors) {\r\n trackFormError([BUY_TRIAL_ERROR_IDS.CARD_ERROR], ['invalid credit card'])\r\n }\r\n if (hasAddressValidationErrors) {\r\n trackFormError([BUY_TRIAL_ERROR_IDS.ADDRESS_ERROR], ['invalid billing address'])\r\n }\r\n } else if (isAddonFlow || isCrossProductFlow) {\r\n setIsSubmitting(true)\r\n trackSubmitForm()\r\n if (formikRef?.current) {\r\n actions.existingUserSubmitForm(formikRef.current.values)\r\n }\r\n } else if (formikRef?.current) {\r\n formikRef.current.validateForm().then((errors) => {\r\n if (statesOptional && errors.StateCode) {\r\n /* eslint-disable no-param-reassign */\r\n delete errors.StateCode\r\n }\r\n if (!isTaxRequired && errors.TaxNumber) {\r\n /* eslint-disable no-param-reassign */\r\n delete errors.TaxNumber\r\n }\r\n const errorList = Object.keys(errors)\r\n if (!state.isCardValid) {\r\n actions.setUserInteractedWithFlexField(true)\r\n }\r\n if (!state.isCvvValid) {\r\n actions.setUserInteractedWithFlexFieldCvv(true)\r\n }\r\n if (errors.Password && formikRef?.current) {\r\n formikRef.current.touched.Password = true\r\n }\r\n if (errorList.length > 0) {\r\n if (isTrialUser || isExpiredTrialUser) {\r\n const trialUserValidErrors = Object.entries(errors).filter(\r\n (errorField) => errorField[0] !== CHECKOUTFORM_FIELDS.PASSWORD\r\n )\r\n if (Object.keys(trialUserValidErrors).length > 0) {\r\n const trialUserValidErrorValues = trialUserValidErrors.map(\r\n (fieldErrorTuple) => fieldErrorTuple[1]\r\n )\r\n const trialUserValidErrorKeys = trialUserValidErrors.map(\r\n (fieldErrorTuple) => fieldErrorTuple[0]\r\n )\r\n onFormErrors(trialUserValidErrorKeys, trialUserValidErrorValues as string[])\r\n } else if (formikRef.current) submitForm(formikRef.current.values)\r\n } else {\r\n onFormErrors(Object.keys(errors), Object.values(errors) as string[])\r\n }\r\n } else if (formikRef.current) {\r\n submitForm(formikRef.current.values)\r\n }\r\n })\r\n }\r\n }\r\n\r\n const checkCurrencyConflict = (country: string, originCountry: string) => {\r\n if (originCountry !== country) {\r\n setCurrencyModal(true)\r\n } else {\r\n setCurrencyModal(false)\r\n }\r\n }\r\n\r\n /* configure cardinal */\r\n useEffect(() => {\r\n if (!isCardinalScriptLoaded) {\r\n return\r\n }\r\n\r\n Cardinal.configure({\r\n logging: {\r\n level: 'on',\r\n },\r\n })\r\n\r\n Cardinal.on('payments.validated', (data: CardinalPaymentsValidatedResponse, jwt: string) => {\r\n const {\r\n ErrorDescription,\r\n ErrorNumber,\r\n Payment: {\r\n ExtendedData: { ChallengeCancel },\r\n },\r\n } = data\r\n if (ErrorDescription === 'Success' && ErrorNumber === 0 && ChallengeCancel !== '01') {\r\n actions.setChallengeCompleteJwt(jwt)\r\n actions.track({\r\n event: TRACKING_EVENTS.CARDINAL_SECURITY_MODAL,\r\n eventData: {\r\n securityModalAction: TRACKING_EVENTS.CARDINAL_SUCCESS,\r\n },\r\n })\r\n } else {\r\n actions.setFatalError(true, { fatalErrorType: FATAL_ERROR_TYPE.CARDINAL_CHALLENGE })\r\n actions.track({\r\n event: TRACKING_EVENTS.CARDINAL_SECURITY_MODAL,\r\n eventData: {\r\n securityModalAction: TRACKING_EVENTS.CARDINAL_FAIL,\r\n },\r\n })\r\n }\r\n })\r\n\r\n Cardinal.on('payments.setupComplete', () => {\r\n actions.setCardinalSetupComplete()\r\n actions.track({\r\n event: TRACKING_EVENTS.CARDINAL_SECURITY_MODAL,\r\n eventData: {\r\n securityModalAction: TRACKING_EVENTS.CARDINAL_LOADED,\r\n },\r\n })\r\n })\r\n\r\n Cardinal.setup('init', {\r\n jwt: state.tokenString,\r\n })\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.tokenString, isCardinalScriptLoaded])\r\n\r\n useEffect(() => {\r\n if (!Object.keys(inlineErrors).length) {\r\n setGeneralFieldErrors(false)\r\n }\r\n }, [inlineErrors, setGeneralFieldErrors])\r\n\r\n useEffect(() => {\r\n if (formikRef.current) {\r\n if (statesOptional) {\r\n removeCheckoutFormInlineError('StateCode')\r\n }\r\n canValidateAddress(formikRef?.current?.values, true)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [statesOptional])\r\n\r\n useEffect(() => {\r\n if (state.userType === BUY_USER_TYPES.ADDON && formikRef.current) {\r\n actions.calculatePrice(formikRef.current.values)\r\n }\r\n }, [state.userType, actions, formikRef])\r\n\r\n useEffect(() => {\r\n if (state.isScaEnabledForMid) {\r\n loadCardinalScript()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.isScaEnabledForMid])\r\n\r\n // show form errors by scrolling to top\r\n useEffect(() => {\r\n const errorsInForm = generalFieldErrors || hasAddressValidationErrors\r\n if (errorsInForm) {\r\n scrollToTop()\r\n setIsSubmitting(false)\r\n if ((window as any).QSI) {\r\n ;(window as any).QSI.API?.unload()\r\n }\r\n }\r\n }, [hasAddressValidationErrors, generalFieldErrors])\r\n\r\n // reset the form and reset the states affected by checkout form\r\n useEffect(() => {\r\n if (state.isFatalError && formikRef.current) {\r\n scrollToTop()\r\n formikRef.current.setSubmitting(false)\r\n setIsSubmitting(false)\r\n resetFieldTouched()\r\n formikRef.current.setFieldValue(CHECKOUTFORM_FIELDS.EXPIRATION_DATE, '')\r\n setHasAddressValidationErrors(false)\r\n setHasCardValidationErrors(false)\r\n setGeneralFieldErrors(false)\r\n setIsFormReset(true)\r\n if (\r\n state.fatalErrorType === FATAL_ERROR_TYPE.CARDINAL_SETUP ||\r\n state.fatalErrorType === FATAL_ERROR_TYPE.CARDINAL_CHALLENGE ||\r\n state.fatalErrorType === FATAL_ERROR_TYPE.CARDINAL_PAYMENT\r\n ) {\r\n setCardinalModal(true)\r\n }\r\n if ((window as any).QSI) {\r\n ;(window as any).QSI.API?.unload()\r\n }\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [actions, formikRef, isFormReset, resetFieldTouched, state.isFatalError])\r\n\r\n // validate the non empty entries after populating\r\n useEffect(() => {\r\n if (state.userType !== BUY_USER_TYPES.ADDON) {\r\n Object.entries(props.initialData).forEach(([formField, formValue]) => {\r\n // ignore empty fields\r\n if (formValue !== '') {\r\n // if the user is a trialer, crossproduct, expired, banned\r\n // then dont validate the identity and address fields\r\n if (\r\n !(\r\n Object.values(BUY_PARTIAL_NON_VALIDATION_USER_TYPES).includes(\r\n state.userType as BUY_PARTIAL_NON_VALIDATION_USER_TYPES\r\n ) &&\r\n Object.values(CHECKOUTFORM_VALIDATION_EXCLUDE_FIELD_TYPES).includes(\r\n formField as CHECKOUTFORM_VALIDATION_EXCLUDE_FIELD_TYPES\r\n )\r\n )\r\n ) {\r\n if (formikRef.current) {\r\n formikRef.current.validateField(formField)\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }, [formikRef, props.initialData, state.userType])\r\n\r\n // if the billing frequency changes, recalculate the cost\r\n useEffect(() => {\r\n if (formikRef.current && isAddressComplete(formikRef.current.values, statesOptional, isTaxRequired)) {\r\n actions.calculatePrice(formikRef.current.values)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [actions, formikRef, state.billingFrequency])\r\n\r\n // for trial and expired trial user, set billing FN and LN to avoid validation error\r\n useEffect(() => {\r\n if ((isTrialUser || isExpiredTrialUser) && useSameForBilling && formikRef.current) {\r\n formikRef.current.setFieldValue(CHECKOUTFORM_FIELDS.BILLING_FIRST_NAME, props.initialData.FirstName)\r\n formikRef.current.setFieldValue(CHECKOUTFORM_FIELDS.BILLING_LAST_NAME, props.initialData.LastName)\r\n }\r\n }, [isTrialUser, useSameForBilling, props.initialData, isExpiredTrialUser, formikRef])\r\n\r\n const accountInfoProps: BuyAccountFormInfoComponentProps = {\r\n useSameForBilling,\r\n resetFatalError,\r\n canValidateAddress,\r\n formikRef,\r\n setCheckoutFormInlineError,\r\n removeCheckoutFormInlineError,\r\n inlineErrors,\r\n isSubmittingRef,\r\n setOnInitialValue,\r\n }\r\n\r\n const billingInfoProps: BuyBillingFormInfoComponentProps = {\r\n useSameForBilling,\r\n resetFatalError,\r\n canValidateAddress,\r\n setUseSameForBilling,\r\n trackBillingInfoStep,\r\n setHasAddressValidationErrors,\r\n formikRef,\r\n setCheckoutFormInlineError,\r\n removeCheckoutFormInlineError,\r\n inlineErrors,\r\n checkCurrencyConflict,\r\n setTaxRequired,\r\n }\r\n\r\n const paymentInfoProps: BuyPaymentFormInfoComponentProps = {\r\n resetFatalError,\r\n hasExistingPaymentInformation,\r\n setIsPaymentModalOpen,\r\n trackPaymentStep,\r\n setHasCardValidationErrors,\r\n setCheckoutFormInlineError,\r\n removeCheckoutFormInlineError,\r\n inlineErrors,\r\n }\r\n\r\n const checkoutSubmissionProps: BuyCheckoutFormSubmissionComponentProps = {\r\n isSubmitting,\r\n preSubmit,\r\n isTabletOrMobileView: props.isTabletOrMobileView,\r\n inlineErrors,\r\n isOnePayFlow: false,\r\n }\r\n\r\n const trackAbandon = (value: BaseSyntheticEvent) => {\r\n if (formikRef.current) {\r\n const formData = {\r\n firstName: formikRef.current.values.FirstName,\r\n lastName: formikRef.current.values.LastName,\r\n email: formikRef.current.values.Email,\r\n }\r\n\r\n const fieldName = value.target.name\r\n const currentValue = value.target.value\r\n const fieldsToValidate = [\r\n CHECKOUTFORM_FIELDS.EMAIL,\r\n CHECKOUTFORM_FIELDS.FIRST_NAME,\r\n CHECKOUTFORM_FIELDS.LAST_NAME,\r\n ]\r\n if (fieldsToValidate.includes(fieldName)) {\r\n const initialValue = onInitialValue[fieldName]\r\n formikRef.current.validateField(fieldName).then(() => {\r\n const hasFieldErrors = Boolean(\r\n formikRef.current?.errors.Email ||\r\n formikRef.current?.errors.FirstName ||\r\n formikRef.current?.errors.LastName\r\n )\r\n if (!isEmpty(formData.email) && currentValue !== initialValue && !hasFieldErrors) {\r\n actions.submitAbandonCart(formData.email, formData)\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n
trackAbandon(value)}>\r\n {!state.isUserLoggedIn && }\r\n \r\n \r\n \r\n \r\n \r\n
\r\n

Oh no!

\r\n
\r\n {state.fatalErrorType === FATAL_ERROR_TYPE.CARDINAL_CHALLENGE\r\n ? content.errorCardinalChallenge\r\n : content.errorCardinalSetup}\r\n
\r\n
\r\n {\r\n window.location.reload()\r\n }}\r\n >\r\n {content.modalCloseButtonText}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n

{content.changeCountryHeader}

\r\n
\r\n \r\n
\r\n
\r\n {\r\n const currentForm = formikRef.current\r\n if (currentForm) {\r\n setCountryInCookie(currentForm.values.CountryCode)\r\n sessionStorage.removeItem(CHECKOUTFORM_FIELDS.STREET1)\r\n sessionStorage.removeItem(CHECKOUTFORM_FIELDS.CITY)\r\n sessionStorage.removeItem(CHECKOUTFORM_FIELDS.STATE_CODE)\r\n sessionStorage.removeItem(CHECKOUTFORM_FIELDS.ZIP_CODE)\r\n sessionStorage.removeItem(CHECKOUTFORM_FIELDS.CONTACT_PHONE)\r\n window.location.reload()\r\n }\r\n }}\r\n modifier={checkoutStyles['currency-modal-cta']}\r\n >\r\n {content.modalReload}\r\n \r\n {\r\n const currentForm = formikRef.current\r\n if (currentForm) currentForm.values.CountryCode = currentForm.initialValues.CountryCode\r\n setCurrencyModal(false)\r\n }}\r\n >\r\n {content.modalCancel}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n

{content.existingUsersModalHeader}

\r\n
\r\n \r\n
\r\n
\r\n actions.userLogin(window.location.pathname)}\r\n qaTag=\"login-error-button\"\r\n >\r\n {content.signIn}\r\n \r\n actions.setEmailClear(false)}>\r\n {content.existingUsersNewEmailButtonText}\r\n \r\n
\r\n
\r\n
\r\n\r\n setIsPaymentModalOpen(false)}>\r\n
\r\n

{content.changePaymentMethodModalHeader}

\r\n
\r\n \r\n
\r\n setIsPaymentModalOpen(false)}>\r\n {content.modalCloseButtonText}\r\n \r\n
\r\n
\r\n\r\n {isSubmitting && }\r\n {/* Needed for qualtrics, Do Not Remove */}\r\n
\r\n \r\n )\r\n}\r\n\r\nexport const ConnectedCheckoutForm = connectRedux(CheckoutForm, mapBuyCheckoutFormState, mapBuyCheckoutFormActions)\r\n","export const METRIX_MERCHANTID_GETGO_US = 'getgo_us'\r\n","import React, { FunctionComponent, useState, useEffect, useCallback, BaseSyntheticEvent } from 'react'\r\nimport { Form, FormikProps } from 'formik'\r\nimport { setCountryInCookie } from '@common/utils/cookie-utils'\r\nimport { CommonButton, ConvertStringToReact, LoadingSpinner } from '@common/components'\r\nimport { isEmpty } from 'lodash-es'\r\nimport { getSessionState, saveSessionState, connectRedux, GoToComponentProps, scrollToTop } from '@common/utils'\r\nimport { useMetrixScript } from '@common/hooks'\r\nimport {\r\n mapBuyCheckoutFormState,\r\n mapBuyCheckoutFormActions,\r\n BuyCheckoutFormActionsType,\r\n} from '@buy/connectedComponents/CheckoutForm/connector'\r\nimport { isAddressComplete, isValidationAddressEligible } from '@buy/utils'\r\nimport {\r\n ConnectedBuyAccountFormInfo,\r\n BuyAccountFormInfoComponentProps,\r\n ConnectedBuyBillingFormInfo,\r\n BuyBillingFormInfoComponentProps,\r\n ConnectedBuyCheckoutFormSubmission,\r\n BuyCheckoutFormSubmissionComponentProps,\r\n} from '@buy/connectedComponents'\r\nimport { BuyCheckoutFormState } from '@buy/connectedComponents/CheckoutForm/state'\r\nimport { ConnectedModal } from '@common/connectedComponents/Modal'\r\nimport {\r\n CHECKOUTFORM_FIELDS,\r\n CHECKOUTFORM_VALIDATION_EXCLUDE_FIELD_TYPES,\r\n BUY_PARTIAL_NON_VALIDATION_USER_TYPES,\r\n BUY_USER_TYPES,\r\n} from '@buy/constants'\r\nimport { BUY_TRIAL_ERROR_IDS } from '@buy/constants/error-strings'\r\nimport { useCheckoutFormPageTracking } from '@buy/hooks'\r\nimport { BuyErrorContent } from '@buy/state/checkout-form-container/state'\r\nimport { BuyFormData } from '@buy/state/buy-form/state'\r\nimport { TRACKING_EVENTS, PLATFORM } from '@common/constants'\r\n\r\nimport { CardinalPaymentsValidatedResponse } from '@common/state/flex/state'\r\nimport { FATAL_ERROR_TYPE } from '@common/state/fatal-error/state'\r\nimport { FLEX_KEY } from '@common/constants/flex'\r\nimport { METRIX_MERCHANTID_GETGO_US } from '@common/constants/metrix'\r\nimport checkoutStyles from './checkout-form.module.css'\r\n\r\ndeclare const Cardinal: any\r\n\r\ntype BuyCheckoutFormProps = GoToComponentProps<\r\n BuyCheckoutFormState,\r\n BuyCheckoutFormActionsType,\r\n {\r\n isTabletOrMobileView?: boolean\r\n isMobileView?: boolean\r\n initialData: BuyFormData\r\n errorContent: BuyErrorContent\r\n formikRef: React.RefObject>\r\n setHasAddressValidationErrors: React.Dispatch>\r\n setGeneralFieldErrors: React.Dispatch>\r\n setHasCardValidationErrors: React.Dispatch>\r\n hasAddressValidationErrors: boolean\r\n generalFieldErrors: boolean\r\n hasCardValidationErrors: boolean\r\n isSubmittingRef: React.RefObject\r\n }\r\n>\r\n\r\nconst CheckoutForm: FunctionComponent = ({ state, actions, props }) => {\r\n const { inlineErrors, clearEmail, content, statesOptional, fingerprint } = state\r\n const {\r\n formikRef,\r\n setHasAddressValidationErrors,\r\n setGeneralFieldErrors,\r\n setHasCardValidationErrors,\r\n generalFieldErrors,\r\n hasAddressValidationErrors,\r\n isSubmittingRef,\r\n } = props\r\n const { setCheckoutFormInlineError, removeCheckoutFormInlineError } = actions\r\n\r\n const [isSubmitting, setIsSubmitting] = useState(false)\r\n const [useSameForBilling, setUseSameForBilling] = useState(sessionStorage.getItem('useSameForBilling') !== 'false')\r\n const [isFormReset, setIsFormReset] = useState(false)\r\n const [isPaymentModalOpen, setIsPaymentModalOpen] = useState(false)\r\n const [showCurrencyModal, setCurrencyModal] = useState(false)\r\n const [showCardinalModal, setCardinalModal] = useState(false)\r\n const [isTaxRequired, setTaxRequired] = useState(false)\r\n const [isCardinalScriptLoaded, setIsCardinalScriptLoaded] = useState(false)\r\n const [onInitialValue, setOnInitialValue] = useState>({})\r\n\r\n const isCrossProductFlow = state.isUserLoggedIn && state.userType === BUY_USER_TYPES.CROSSPRODUCT\r\n const isTrialUser = state.userType === BUY_USER_TYPES.IDENTITY_ONLY || state.userType === BUY_USER_TYPES.TRIALER\r\n const isExpiredTrialUser = state.userType === BUY_USER_TYPES.EXPIRED\r\n const cardinalScriptUrl =\r\n process.env.ENVIRONMENT === PLATFORM.PROD\r\n ? 'https://songbird.cardinalcommerce.com/edge/v1/songbird.js'\r\n : 'https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js'\r\n\r\n const resetFieldTouched = useCallback(() => {\r\n if (formikRef?.current) {\r\n Object.keys(formikRef.current.values).forEach((fieldKey) => {\r\n formikRef.current?.setFieldTouched(fieldKey, false)\r\n })\r\n }\r\n }, [formikRef])\r\n\r\n const canValidateAddress = (values: BuyFormData, dontForceCompare?: boolean) => {\r\n // for later: need to send a new FormData object with billing first name and billing last name instead of FN & LN\r\n if (\r\n isValidationAddressEligible(values, dontForceCompare) &&\r\n isAddressComplete(values, statesOptional, isTaxRequired)\r\n ) {\r\n actions.validateAddress(values)\r\n actions.calculatePrice(values)\r\n }\r\n }\r\n\r\n const resetFatalError = () => {\r\n if (isFormReset && state.isFatalError) {\r\n actions.setFatalError(false)\r\n setIsFormReset(false)\r\n }\r\n }\r\n\r\n // tracking\r\n const { trackFormError, trackBillingInfoStep, trackPaymentStep, trackSubmitForm } = useCheckoutFormPageTracking({\r\n planName: state.selectedPlan.name,\r\n formikRef,\r\n dependencies: [state.selectedPlan.name, state.baseLine.key],\r\n })\r\n\r\n // Establish device fingerprint session for decisionmaker\r\n // See documentation at https://confluence.ops.expertcity.com/x/L4UVIg\r\n const sessionId = fingerprint\r\n const orgId = FLEX_KEY\r\n const mid = METRIX_MERCHANTID_GETGO_US\r\n useMetrixScript(!!fingerprint, orgId, sessionId, mid)\r\n\r\n const loadCardinalScript = () => {\r\n const script = document.createElement('script')\r\n script.type = 'text/javascript'\r\n script.async = true\r\n script.src = cardinalScriptUrl\r\n script.addEventListener('load', () => {\r\n setIsCardinalScriptLoaded(true)\r\n })\r\n script.addEventListener('error', () => {\r\n actions.setFatalError(true, { fatalErrorType: FATAL_ERROR_TYPE.CARDINAL_SETUP })\r\n actions.track({\r\n event: TRACKING_EVENTS.CARDINAL_SECURITY_MODAL,\r\n eventData: {\r\n securityModalAction: TRACKING_EVENTS.CARDINAL_FAIL,\r\n },\r\n })\r\n })\r\n document.body.appendChild(script)\r\n }\r\n\r\n const submitForm = (formValues: BuyFormData) => {\r\n // Since the OnePay flow doesn't show the credit card form on the ecomm site,\r\n // track the \"begin_checkout step 4\" event upon clicking the Proceed to Purchase button\r\n // See also: src/products/buy/connectedComponents/PaymentFormInfo/index.tsx\r\n // See also: src/products/buy/utils/buy-tracking.ts\r\n trackPaymentStep()\r\n\r\n try {\r\n const qualtricsData = getSessionState('qualtrics_data_gh')\r\n saveSessionState('qualtrics_data_gh', {\r\n ...(!qualtricsData ? {} : qualtricsData),\r\n userEmail: formValues.Email,\r\n })\r\n } catch (err) {\r\n console.error(err)\r\n }\r\n setIsSubmitting(true)\r\n\r\n actions.submitFormUcs(formValues)\r\n\r\n trackSubmitForm()\r\n }\r\n\r\n const onFormErrors = (formIds: string[], formErrors: string[]) => {\r\n scrollToTop()\r\n setGeneralFieldErrors(true)\r\n trackFormError(formIds, formErrors)\r\n }\r\n\r\n const preSubmit = () => {\r\n if (hasAddressValidationErrors) {\r\n scrollToTop()\r\n if (hasAddressValidationErrors) {\r\n trackFormError([BUY_TRIAL_ERROR_IDS.ADDRESS_ERROR], ['invalid billing address'])\r\n }\r\n } else if (isCrossProductFlow) {\r\n setIsSubmitting(true)\r\n trackSubmitForm()\r\n if (formikRef?.current) {\r\n actions.existingUserSubmitFormUCS(formikRef.current.values)\r\n }\r\n } else if (formikRef?.current) {\r\n formikRef.current.validateForm().then((errors) => {\r\n if (statesOptional && errors.StateCode) {\r\n /* eslint-disable no-param-reassign */\r\n delete errors.StateCode\r\n }\r\n if (!isTaxRequired && errors.TaxNumber) {\r\n /* eslint-disable no-param-reassign */\r\n delete errors.TaxNumber\r\n }\r\n const errorList = Object.keys(errors)\r\n\r\n if (errors.Password && formikRef?.current) {\r\n formikRef.current.touched.Password = true\r\n }\r\n if (errorList.length > 0) {\r\n if (isTrialUser || isExpiredTrialUser) {\r\n const trialUserValidErrors = Object.entries(errors).filter(\r\n (errorField) => errorField[0] !== CHECKOUTFORM_FIELDS.PASSWORD\r\n )\r\n if (Object.keys(trialUserValidErrors).length > 0) {\r\n const trialUserValidErrorValues = trialUserValidErrors.map(\r\n (fieldErrorTuple) => fieldErrorTuple[1]\r\n )\r\n const trialUserValidErrorKeys = trialUserValidErrors.map(\r\n (fieldErrorTuple) => fieldErrorTuple[0]\r\n )\r\n onFormErrors(trialUserValidErrorKeys, trialUserValidErrorValues as string[])\r\n } else if (formikRef.current) submitForm(formikRef.current.values)\r\n } else {\r\n onFormErrors(Object.keys(errors), Object.values(errors) as string[])\r\n }\r\n } else if (formikRef.current) {\r\n submitForm(formikRef.current.values)\r\n }\r\n })\r\n }\r\n }\r\n\r\n const checkCurrencyConflict = (country: string, originCountry: string) => {\r\n if (originCountry !== country) {\r\n setCurrencyModal(true)\r\n } else {\r\n setCurrencyModal(false)\r\n }\r\n }\r\n\r\n /* configure cardinal */\r\n useEffect(() => {\r\n if (!isCardinalScriptLoaded) {\r\n return\r\n }\r\n\r\n Cardinal.configure({\r\n logging: {\r\n level: 'on',\r\n },\r\n })\r\n\r\n Cardinal.on('payments.validated', (data: CardinalPaymentsValidatedResponse, jwt: string) => {\r\n const {\r\n ErrorDescription,\r\n ErrorNumber,\r\n Payment: {\r\n ExtendedData: { ChallengeCancel },\r\n },\r\n } = data\r\n if (ErrorDescription === 'Success' && ErrorNumber === 0 && ChallengeCancel !== '01') {\r\n actions.setChallengeCompleteJwt(jwt)\r\n actions.track({\r\n event: TRACKING_EVENTS.CARDINAL_SECURITY_MODAL,\r\n eventData: {\r\n securityModalAction: TRACKING_EVENTS.CARDINAL_SUCCESS,\r\n },\r\n })\r\n } else {\r\n actions.setFatalError(true, { fatalErrorType: FATAL_ERROR_TYPE.CARDINAL_CHALLENGE })\r\n actions.track({\r\n event: TRACKING_EVENTS.CARDINAL_SECURITY_MODAL,\r\n eventData: {\r\n securityModalAction: TRACKING_EVENTS.CARDINAL_FAIL,\r\n },\r\n })\r\n }\r\n })\r\n\r\n Cardinal.on('payments.setupComplete', () => {\r\n actions.setCardinalSetupComplete()\r\n actions.track({\r\n event: TRACKING_EVENTS.CARDINAL_SECURITY_MODAL,\r\n eventData: {\r\n securityModalAction: TRACKING_EVENTS.CARDINAL_LOADED,\r\n },\r\n })\r\n })\r\n\r\n Cardinal.setup('init', {\r\n jwt: state.tokenString,\r\n })\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.tokenString, isCardinalScriptLoaded])\r\n\r\n useEffect(() => {\r\n if (!Object.keys(inlineErrors).length) {\r\n setGeneralFieldErrors(false)\r\n }\r\n }, [inlineErrors, setGeneralFieldErrors])\r\n\r\n useEffect(() => {\r\n if (formikRef.current) {\r\n if (statesOptional) {\r\n removeCheckoutFormInlineError('StateCode')\r\n }\r\n canValidateAddress(formikRef?.current?.values, true)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [statesOptional])\r\n\r\n useEffect(() => {\r\n if (state.userType === BUY_USER_TYPES.ADDON && formikRef.current) {\r\n actions.calculatePrice(formikRef.current.values)\r\n }\r\n }, [state.userType, actions, formikRef])\r\n\r\n useEffect(() => {\r\n if (state.isScaEnabledForMid) {\r\n loadCardinalScript()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.isScaEnabledForMid])\r\n\r\n // show form errors by scrolling to top\r\n useEffect(() => {\r\n const errorsInForm = generalFieldErrors || hasAddressValidationErrors\r\n if (errorsInForm) {\r\n scrollToTop()\r\n setIsSubmitting(false)\r\n if ((window as any).QSI) {\r\n ;(window as any).QSI.API?.unload()\r\n }\r\n }\r\n }, [hasAddressValidationErrors, generalFieldErrors])\r\n\r\n // reset the form and reset the states affected by checkout form\r\n useEffect(() => {\r\n if (state.isFatalError && formikRef.current) {\r\n scrollToTop()\r\n formikRef.current.setSubmitting(false)\r\n setIsSubmitting(false)\r\n resetFieldTouched()\r\n formikRef.current.setFieldValue(CHECKOUTFORM_FIELDS.EXPIRATION_DATE, '')\r\n setHasAddressValidationErrors(false)\r\n setHasCardValidationErrors(false)\r\n setGeneralFieldErrors(false)\r\n setIsFormReset(true)\r\n if (\r\n state.fatalErrorType === FATAL_ERROR_TYPE.CARDINAL_SETUP ||\r\n state.fatalErrorType === FATAL_ERROR_TYPE.CARDINAL_CHALLENGE ||\r\n state.fatalErrorType === FATAL_ERROR_TYPE.CARDINAL_PAYMENT\r\n ) {\r\n setCardinalModal(true)\r\n }\r\n if ((window as any).QSI) {\r\n ;(window as any).QSI.API?.unload()\r\n }\r\n }\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [actions, formikRef, isFormReset, resetFieldTouched, state.isFatalError])\r\n\r\n // validate the non empty entries after populating\r\n useEffect(() => {\r\n if (state.userType !== BUY_USER_TYPES.ADDON) {\r\n Object.entries(props.initialData).forEach(([formField, formValue]) => {\r\n // ignore empty fields\r\n if (formValue !== '') {\r\n // if the user is a trialer, crossproduct, expired, banned\r\n // then dont validate the identity and address fields\r\n if (\r\n !(\r\n Object.values(BUY_PARTIAL_NON_VALIDATION_USER_TYPES).includes(\r\n state.userType as BUY_PARTIAL_NON_VALIDATION_USER_TYPES\r\n ) &&\r\n Object.values(CHECKOUTFORM_VALIDATION_EXCLUDE_FIELD_TYPES).includes(\r\n formField as CHECKOUTFORM_VALIDATION_EXCLUDE_FIELD_TYPES\r\n )\r\n )\r\n ) {\r\n if (formikRef.current) {\r\n formikRef.current.validateField(formField)\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }, [formikRef, props.initialData, state.userType])\r\n\r\n // if the billing frequency changes, recalculate the cost\r\n useEffect(() => {\r\n if (formikRef.current && isAddressComplete(formikRef.current.values, statesOptional, isTaxRequired)) {\r\n actions.calculatePrice(formikRef.current.values)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [actions, formikRef, state.billingFrequency])\r\n\r\n // for trial and expired trial user, set billing FN and LN to avoid validation error\r\n useEffect(() => {\r\n if ((isTrialUser || isExpiredTrialUser) && useSameForBilling && formikRef.current) {\r\n formikRef.current.setFieldValue(CHECKOUTFORM_FIELDS.BILLING_FIRST_NAME, props.initialData.FirstName)\r\n formikRef.current.setFieldValue(CHECKOUTFORM_FIELDS.BILLING_LAST_NAME, props.initialData.LastName)\r\n }\r\n }, [isTrialUser, useSameForBilling, props.initialData, isExpiredTrialUser, formikRef])\r\n\r\n const accountInfoProps: BuyAccountFormInfoComponentProps = {\r\n useSameForBilling,\r\n resetFatalError,\r\n canValidateAddress,\r\n formikRef,\r\n setCheckoutFormInlineError,\r\n removeCheckoutFormInlineError,\r\n inlineErrors,\r\n isSubmittingRef,\r\n setOnInitialValue,\r\n }\r\n\r\n const billingInfoProps: BuyBillingFormInfoComponentProps = {\r\n useSameForBilling,\r\n resetFatalError,\r\n canValidateAddress,\r\n setUseSameForBilling,\r\n trackBillingInfoStep,\r\n setHasAddressValidationErrors,\r\n formikRef,\r\n setCheckoutFormInlineError,\r\n removeCheckoutFormInlineError,\r\n inlineErrors,\r\n checkCurrencyConflict,\r\n setTaxRequired,\r\n }\r\n\r\n const checkoutSubmissionProps: BuyCheckoutFormSubmissionComponentProps = {\r\n isSubmitting,\r\n preSubmit,\r\n isTabletOrMobileView: props.isTabletOrMobileView,\r\n inlineErrors,\r\n isOnePayFlow: true,\r\n }\r\n\r\n const trackAbandon = (value: BaseSyntheticEvent) => {\r\n if (formikRef.current) {\r\n const formData = {\r\n firstName: formikRef.current.values.FirstName,\r\n lastName: formikRef.current.values.LastName,\r\n email: formikRef.current.values.Email,\r\n }\r\n\r\n const fieldName = value.target.name\r\n const currentValue = value.target.value\r\n const fieldsToValidate = [\r\n CHECKOUTFORM_FIELDS.EMAIL,\r\n CHECKOUTFORM_FIELDS.FIRST_NAME,\r\n CHECKOUTFORM_FIELDS.LAST_NAME,\r\n ]\r\n if (fieldsToValidate.includes(fieldName)) {\r\n const initialValue = onInitialValue[fieldName]\r\n formikRef.current.validateField(fieldName).then(() => {\r\n const hasFieldErrors = Boolean(\r\n formikRef.current?.errors.Email ||\r\n formikRef.current?.errors.FirstName ||\r\n formikRef.current?.errors.LastName\r\n )\r\n if (!isEmpty(formData.email) && currentValue !== initialValue && !hasFieldErrors) {\r\n actions.submitAbandonCart(formData.email, formData)\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n
trackAbandon(value)}>\r\n {!state.isUserLoggedIn && }\r\n \r\n \r\n \r\n \r\n
\r\n

Oh no!

\r\n
\r\n {state.fatalErrorType === FATAL_ERROR_TYPE.CARDINAL_CHALLENGE\r\n ? content.errorCardinalChallenge\r\n : content.errorCardinalSetup}\r\n
\r\n
\r\n {\r\n window.location.reload()\r\n }}\r\n >\r\n {content.modalCloseButtonText}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n

{content.changeCountryHeader}

\r\n
\r\n \r\n
\r\n
\r\n {\r\n const currentForm = formikRef.current\r\n if (currentForm) {\r\n setCountryInCookie(currentForm.values.CountryCode)\r\n sessionStorage.removeItem(CHECKOUTFORM_FIELDS.STREET1)\r\n sessionStorage.removeItem(CHECKOUTFORM_FIELDS.CITY)\r\n sessionStorage.removeItem(CHECKOUTFORM_FIELDS.STATE_CODE)\r\n sessionStorage.removeItem(CHECKOUTFORM_FIELDS.ZIP_CODE)\r\n sessionStorage.removeItem(CHECKOUTFORM_FIELDS.CONTACT_PHONE)\r\n window.location.reload()\r\n }\r\n }}\r\n modifier={checkoutStyles['currency-modal-cta']}\r\n >\r\n {content.modalReload}\r\n \r\n {\r\n const currentForm = formikRef.current\r\n if (currentForm) currentForm.values.CountryCode = currentForm.initialValues.CountryCode\r\n setCurrencyModal(false)\r\n }}\r\n >\r\n {content.modalCancel}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n

{content.existingUsersModalHeader}

\r\n
\r\n \r\n
\r\n
\r\n actions.userLogin(window.location.pathname)}\r\n qaTag=\"login-error-button\"\r\n >\r\n {content.signIn}\r\n \r\n actions.setEmailClear(false)}>\r\n {content.existingUsersNewEmailButtonText}\r\n \r\n
\r\n
\r\n
\r\n\r\n setIsPaymentModalOpen(false)}>\r\n
\r\n

{content.changePaymentMethodModalHeader}

\r\n
\r\n \r\n
\r\n setIsPaymentModalOpen(false)}>\r\n {content.modalCloseButtonText}\r\n \r\n
\r\n
\r\n\r\n {isSubmitting && (\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport const ConnectedCheckoutFormOnePay = connectRedux(\r\n CheckoutForm,\r\n mapBuyCheckoutFormState,\r\n mapBuyCheckoutFormActions\r\n)\r\n","import { AppState } from 'app-store'\r\nimport { buyFormActions } from '@buy/state/buy-form/actions'\r\nimport { BuyFormData } from '@buy/state/buy-form/state'\r\nimport { getBuyFormState, getLabelContent } from '@buy/state/selectors'\r\nimport { BuyCheckoutFormContainerState } from '@buy/state/checkout-form-container/state'\r\n\r\nexport const mapBuyCheckoutFormContainerState = (state: AppState): BuyCheckoutFormContainerState => {\r\n const {\r\n errorInvalidCharacter,\r\n errorInvalidCVV,\r\n errorInvalidEmail,\r\n errorInvalidExpirationDate,\r\n errorInvalidPassword,\r\n errorInvalidPhoneNumber,\r\n errorInvalidTaxNumber,\r\n errorRequiredAddress,\r\n errorRequiredCity,\r\n errorRequiredFirstName,\r\n errorRequiredLastName,\r\n errorRequiredPostalCode,\r\n errorRequiredState,\r\n errorInvalidCreditCardNumber,\r\n emailAddressAlreadyInUse,\r\n errorRequiredCVV,\r\n errorRequiredCountry,\r\n errorRequiredCreditCardNumber,\r\n errorRequiredEmail,\r\n errorRequiredExpDate,\r\n errorRequiredPassword,\r\n errorRequiredPhoneNumber,\r\n errorInvalidPostalCode,\r\n errorGenericMessage,\r\n errorInvalidAddress,\r\n errorRequiredTaxNumber,\r\n passwordStrength,\r\n passwordStrengthLevel1,\r\n passwordStrengthLevel2,\r\n passwordStrengthLevel3,\r\n passwordStrengthLevel4,\r\n passwordStrengthTipDrawer,\r\n passwordStrengthTip1,\r\n passwordStrengthTip2,\r\n passwordStrengthTip3,\r\n } = getLabelContent(state)\r\n const { initialData } = getBuyFormState(state)\r\n\r\n return {\r\n errorContent: {\r\n errorInvalidCharacter,\r\n errorInvalidCVV,\r\n errorInvalidEmail,\r\n errorInvalidExpirationDate,\r\n errorInvalidPassword,\r\n errorInvalidPhoneNumber,\r\n errorInvalidTaxNumber,\r\n errorRequiredAddress,\r\n errorRequiredCity,\r\n errorRequiredFirstName,\r\n errorRequiredLastName,\r\n errorRequiredPostalCode,\r\n errorRequiredState,\r\n errorInvalidCreditCardNumber,\r\n emailAddressAlreadyInUse,\r\n errorRequiredCVV,\r\n errorRequiredCountry,\r\n errorRequiredCreditCardNumber,\r\n errorRequiredEmail,\r\n errorRequiredExpDate,\r\n errorRequiredPassword,\r\n errorRequiredPhoneNumber,\r\n errorInvalidPostalCode,\r\n errorGenericMessage,\r\n errorInvalidAddress,\r\n errorRequiredTaxNumber,\r\n passwordStrength,\r\n passwordStrengthLevel1,\r\n passwordStrengthLevel2,\r\n passwordStrengthLevel3,\r\n passwordStrengthLevel4,\r\n passwordStrengthTipDrawer,\r\n passwordStrengthTip1,\r\n passwordStrengthTip2,\r\n passwordStrengthTip3,\r\n },\r\n initialData,\r\n }\r\n}\r\n\r\nexport const mapBuyCheckoutFormContainerActions = {\r\n updateInitialFormState: (data: BuyFormData) => buyFormActions.updateInitialFormState(data),\r\n}\r\nexport type BuyCheckoutFormContainerActionsType = typeof mapBuyCheckoutFormContainerActions\r\n","import { connectRedux, setFormSessionValues, GoToComponentProps, getFormSessionValue } from '@common/utils'\r\nimport {\r\n BuyCheckoutFormContainerActionsType,\r\n mapBuyCheckoutFormContainerActions,\r\n mapBuyCheckoutFormContainerState,\r\n} from '@buy/connectedComponents/CheckoutFormContainer/connector'\r\nimport { BuyCheckoutFormContainerState } from '@buy/state/checkout-form-container/state'\r\nimport { BuyFormData } from '@buy/state/buy-form/state'\r\nimport { CheckoutSchema } from '@buy/utils'\r\nimport { Formik, FormikProps } from 'formik'\r\nimport React, { FunctionComponent, useEffect, useLayoutEffect, useRef } from 'react'\r\nimport { CHECKOUTFORM_FIELDS } from '@gtresolve/constants'\r\nimport { getCountryFromCookie } from '@common/utils/cookie-utils'\r\nimport { isEmpty } from 'lodash-es'\r\nimport { COUNTRIES } from '@common/constants'\r\nimport { getIsOnePayFlow } from '@buy/utils/get-is-onepay-flow'\r\nimport { ConnectedCheckoutForm } from '../CheckoutForm/index'\r\nimport { ConnectedCheckoutFormOnePay } from '../CheckoutForm/index-onepay'\r\n\r\ntype BuyCheckoutFormContainerProps = GoToComponentProps<\r\n BuyCheckoutFormContainerState,\r\n BuyCheckoutFormContainerActionsType,\r\n {\r\n isTabletOrMobileView?: boolean\r\n isMobileView?: boolean\r\n setHasAddressValidationErrors: React.Dispatch>\r\n setGeneralFieldErrors: React.Dispatch>\r\n setHasCardValidationErrors: React.Dispatch>\r\n hasAddressValidationErrors: boolean\r\n generalFieldErrors: boolean\r\n hasCardValidationErrors: boolean\r\n }\r\n>\r\n\r\nexport const BuyCheckoutFormContainer: FunctionComponent = ({\r\n state,\r\n props,\r\n actions,\r\n}) => {\r\n const formikRef = useRef>(null)\r\n const isSubmittingRef = useRef(false)\r\n const isOnePayFlow = getIsOnePayFlow()\r\n\r\n useLayoutEffect(() => {\r\n return () => {\r\n const formRef = { ...formikRef }\r\n if (!isEmpty(formRef.current)) {\r\n // eslint-disable-next-line prefer-const\r\n let formValues = { ...formRef.current!.values }\r\n if (!isEmpty(formValues)) formValues!.ExpirationDate = ''\r\n if (formValues) actions.updateInitialFormState(formValues)\r\n }\r\n }\r\n }, [actions])\r\n\r\n const setFormValues = async (fieldValues: Record) => {\r\n await formikRef.current?.setValues((values) => ({ ...values, ...fieldValues }))\r\n }\r\n\r\n useEffect(() => {\r\n const {\r\n BillingFirstName,\r\n BillingLastName,\r\n City,\r\n ContactPhone,\r\n FirstName,\r\n LastName,\r\n StateCode,\r\n Street1,\r\n ZipCode,\r\n CountryCode,\r\n Email,\r\n } = state.initialData\r\n const isSameAsAccount = sessionStorage.getItem('useSameForBilling') !== 'false'\r\n const defaultCountryCode =\r\n getFormSessionValue(CHECKOUTFORM_FIELDS.COUNTRY_CODE) || getCountryFromCookie() || COUNTRIES.US\r\n const formValues = {\r\n [CHECKOUTFORM_FIELDS.FIRST_NAME]: FirstName,\r\n [CHECKOUTFORM_FIELDS.LAST_NAME]: LastName,\r\n [CHECKOUTFORM_FIELDS.COUNTRY_CODE]: isEmpty(CountryCode) ? defaultCountryCode : CountryCode,\r\n [CHECKOUTFORM_FIELDS.BILLING_FIRST_NAME]: isSameAsAccount ? FirstName : BillingFirstName,\r\n [CHECKOUTFORM_FIELDS.BILLING_LAST_NAME]: isSameAsAccount ? LastName : BillingLastName,\r\n [CHECKOUTFORM_FIELDS.STREET1]: Street1,\r\n [CHECKOUTFORM_FIELDS.CITY]: City,\r\n [CHECKOUTFORM_FIELDS.ZIP_CODE]: ZipCode,\r\n [CHECKOUTFORM_FIELDS.CONTACT_PHONE]: ContactPhone,\r\n [CHECKOUTFORM_FIELDS.STATE_CODE]: StateCode,\r\n [CHECKOUTFORM_FIELDS.EMAIL]: Email,\r\n }\r\n setFormSessionValues(formValues)\r\n setFormValues(formValues)\r\n }, [state.initialData])\r\n\r\n return (\r\n CheckoutSchema(state.initialData.CountryCode, state.errorContent)}\r\n validateOnChange={false}\r\n validateOnBlur={false}\r\n onSubmit={(_values, formikBag) => {\r\n formikBag.setSubmitting(false)\r\n }}\r\n innerRef={formikRef}\r\n >\r\n {(formikProps) => {\r\n if (formikProps.isSubmitting) {\r\n isSubmittingRef.current = true\r\n }\r\n\r\n if (isSubmittingRef.current && !formikProps.isSubmitting) {\r\n isSubmittingRef.current = false\r\n }\r\n\r\n if (isOnePayFlow) {\r\n return (\r\n \r\n )\r\n }\r\n return (\r\n \r\n )\r\n }}\r\n \r\n )\r\n}\r\n\r\nexport const ConnectedBuyCheckoutFormContainer = connectRedux(\r\n BuyCheckoutFormContainer,\r\n mapBuyCheckoutFormContainerState,\r\n mapBuyCheckoutFormContainerActions\r\n)\r\n","import { AppState } from 'app-store'\r\nimport { getBuyFormState, getLabelContent } from '@buy/state/selectors'\r\nimport { buyUserActions } from '@buy/state/user/actions'\r\nimport { BuyFormData } from '@buy/state/buy-form/state'\r\nimport { buyFormActions } from '@buy/state/buy-form/actions'\r\nimport { BuyAccountFormInfoState } from './state'\r\n\r\nexport const mapBuyAccountFormInfoState = (state: AppState): BuyAccountFormInfoState => {\r\n const {\r\n createAnAccount,\r\n signIn,\r\n firstName,\r\n lastName,\r\n email,\r\n password,\r\n passwordRequirements,\r\n errorInvalidPassword,\r\n errorRequiredPassword,\r\n passwordStrength,\r\n passwordStrengthLevel1,\r\n passwordStrengthLevel2,\r\n passwordStrengthLevel3,\r\n passwordStrengthLevel4,\r\n passwordStrengthTipDrawer,\r\n passwordStrengthTip1,\r\n passwordStrengthTip2,\r\n passwordStrengthTip3,\r\n } = getLabelContent(state)\r\n const { clearEmail, steps } = getBuyFormState(state)\r\n return {\r\n content: { createAnAccount, signIn, firstName, lastName, email, password, passwordRequirements },\r\n errorContent: {\r\n errorInvalidPassword,\r\n errorRequiredPassword,\r\n passwordStrength,\r\n passwordStrengthLevel1,\r\n passwordStrengthLevel2,\r\n passwordStrengthLevel3,\r\n passwordStrengthLevel4,\r\n passwordStrengthTipDrawer,\r\n passwordStrengthTip1,\r\n passwordStrengthTip2,\r\n passwordStrengthTip3,\r\n },\r\n clearEmail,\r\n steps,\r\n }\r\n}\r\n\r\nexport const mapBuyAccountFormInfoActions = {\r\n checkExistingUser: (email: string, form?: BuyFormData) => buyUserActions.checkExistingUser(email, form),\r\n userLogin: (view: string, path?: string) => buyUserActions.userLogin(view, path),\r\n setEmailClear: (clear: boolean) => buyFormActions.setClearEmail(clear),\r\n}\r\n\r\nexport type BuyAccountFormInfoActionsType = typeof mapBuyAccountFormInfoActions\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"password-validation-module__wrapper\",\"wrapper--compact\":\"password-validation-module__wrapper--compact\",\"requirements\":\"password-validation-module__requirements\",\"subhead\":\"password-validation-module__subhead\",\"label\":\"password-validation-module__label\",\"label--focused\":\"password-validation-module__label--focused\",\"password-wrapper\":\"password-validation-module__password-wrapper\",\"password-wrapper--focused\":\"password-validation-module__password-wrapper--focused\",\"password-wrapper--error\":\"password-validation-module__password-wrapper--error\",\"password-wrapper--disabled\":\"password-validation-module__password-wrapper--disabled\",\"password-wrapper--valid\":\"password-validation-module__password-wrapper--valid\",\"eye\":\"password-validation-module__eye\",\"subhead--error\":\"password-validation-module__subhead--error\"};","import React, { FunctionComponent, useState } from 'react'\r\nimport classNames from 'classnames'\r\nimport { Input, InputProps, PasswordStrengthIndicator } from '@common/components'\r\n\r\nimport Eye from '@common/images/icon-pw-show@2x.svg'\r\nimport EyeClosed from '@common/images/icon-pw-hide@2x.svg'\r\n\r\nimport styles from './password-validation.module.css'\r\n\r\nexport interface BuyPasswordValidationProps extends InputProps {\r\n label: string\r\n touched: boolean\r\n genericPasswordLabel: string\r\n modifier?: string\r\n passwordStrength: string\r\n passwordStrengthLevel1: string\r\n passwordStrengthLevel2: string\r\n passwordStrengthLevel3: string\r\n passwordStrengthLevel4: string\r\n passwordStrengthTip1: string\r\n passwordStrengthTip2: string\r\n passwordStrengthTip3: string\r\n passwordStrengthTipDrawer: string\r\n isSubmittingRef: React.RefObject\r\n}\r\n\r\nexport const BuyPasswordValidation: FunctionComponent = ({\r\n touched,\r\n genericPasswordLabel,\r\n modifier = '',\r\n passwordStrength,\r\n passwordStrengthLevel1,\r\n passwordStrengthLevel2,\r\n passwordStrengthLevel3,\r\n passwordStrengthLevel4,\r\n passwordStrengthTipDrawer,\r\n passwordStrengthTip1,\r\n passwordStrengthTip2,\r\n passwordStrengthTip3,\r\n isSubmittingRef,\r\n ...props\r\n}) => {\r\n const { id, label, error, value = '', disabled, valid } = props\r\n\r\n const [showPW, setShowPW] = useState(false)\r\n const [isPWFocused, setIsPWFocused] = useState(false)\r\n\r\n const setFocusState = (e: React.FocusEvent) => {\r\n setIsPWFocused(true)\r\n if (props.onFocus) props.onFocus(e)\r\n }\r\n\r\n const setBlurState = (e: React.FocusEvent) => {\r\n setIsPWFocused(false)\r\n if (props.onBlur) props.onBlur(e)\r\n }\r\n\r\n const classList = classNames({\r\n [styles.wrapper]: true,\r\n [modifier]: !!modifier,\r\n })\r\n\r\n const InputWrapperClassList = classNames({\r\n [styles['password-wrapper']]: true,\r\n [styles['password-wrapper--focused']]: isPWFocused,\r\n [styles['password-wrapper--error']]: error,\r\n [styles['password-wrapper--disabled']]: disabled,\r\n [styles['password-wrapper--valid']]: valid,\r\n })\r\n\r\n const labelClasslist = classNames({\r\n [styles.label]: true,\r\n [styles['label--focused']]: isPWFocused || valid || value,\r\n })\r\n\r\n return (\r\n
\r\n \r\n
\r\n setBlurState(e)}\r\n onFocus={(e) => setFocusState(e)}\r\n type={showPW ? 'text' : 'password'}\r\n />\r\n \r\n
\r\n\r\n \r\n
\r\n )\r\n}\r\n","import { BoxWrapper, ConvertStringToReact, InputField, InlineErrorView } from '@common/components'\r\nimport { useClearField } from '@common/hooks'\r\nimport { connectRedux, GoToComponentProps } from '@common/utils'\r\nimport { CHECKOUTFORM_FIELDS, CHECKOUTFORM_STEPS } from '@buy/constants'\r\nimport {\r\n BuyAccountFormInfoActionsType,\r\n mapBuyAccountFormInfoActions,\r\n mapBuyAccountFormInfoState,\r\n} from '@buy/connectedComponents/AccountFormInfo/connector'\r\nimport { BuyAccountFormInfoState } from '@buy/connectedComponents/AccountFormInfo/state'\r\nimport { BuyFormData } from '@buy/state/buy-form/state'\r\nimport { manuallyValidateFieldData } from '@buy/utils'\r\nimport { Field, FieldProps, FormikProps } from 'formik'\r\nimport React, { FunctionComponent } from 'react'\r\nimport { BuyPasswordValidation } from '@buy/components/PasswordValidation'\r\nimport passwordValidationStyles from '@buy/components/PasswordValidation/password-validation.module.css'\r\nimport accountStyles from './account-info.module.css'\r\n\r\nexport interface BuyAccountFormInfoComponentProps {\r\n useSameForBilling: boolean\r\n resetFatalError: () => void\r\n canValidateAddress: (values: BuyFormData) => void\r\n formikRef: React.RefObject>\r\n setCheckoutFormInlineError: (value: string) => void\r\n removeCheckoutFormInlineError: (value: string) => void\r\n inlineErrors: { [key: string]: string } | Record\r\n isSubmittingRef: React.RefObject\r\n setOnInitialValue: React.Dispatch>>\r\n}\r\n\r\ntype BuyAccountFormInfoProps = GoToComponentProps<\r\n BuyAccountFormInfoState,\r\n BuyAccountFormInfoActionsType,\r\n BuyAccountFormInfoComponentProps\r\n>\r\nexport const BuyAccountFormInfo: FunctionComponent = ({ state, actions, props }) => {\r\n const {\r\n useSameForBilling,\r\n resetFatalError,\r\n canValidateAddress,\r\n formikRef,\r\n setCheckoutFormInlineError,\r\n removeCheckoutFormInlineError,\r\n inlineErrors,\r\n isSubmittingRef,\r\n setOnInitialValue,\r\n } = props\r\n const { content, errorContent, clearEmail, steps } = state\r\n\r\n const createUserAccountStep = steps[CHECKOUTFORM_STEPS.CREATE_USER_ACCOUNT]\r\n const userAccountCreated = createUserAccountStep.completed && !createUserAccountStep.error\r\n\r\n const userLogIn = () => actions.userLogin('billing view', window.location.pathname)\r\n const existingUserCheck = (email: string, form: BuyFormData) => {\r\n actions.checkExistingUser(email, form)\r\n }\r\n\r\n // clear email\r\n useClearField(clearEmail, formikRef, CHECKOUTFORM_FIELDS.EMAIL)\r\n\r\n return (\r\n \r\n
\r\n

\r\n {' '}\r\n \r\n {content.signIn}\r\n \r\n

\r\n
\r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n return (\r\n \r\n {\r\n if (clearEmail) actions.setEmailClear(false)\r\n setOnInitialValue((oldState) => ({\r\n ...oldState,\r\n [field.name]: e.target.value,\r\n }))\r\n }}\r\n onBlur={async (e) => {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n if (!meta.error && e.target.value.length > 0) {\r\n existingUserCheck(e.target.value, form.values)\r\n canValidateAddress(form.values)\r\n }\r\n\r\n resetFatalError()\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n form.validateField(field.name)\r\n sessionStorage.setItem(field.name, e.target.value.trim())\r\n }}\r\n valid={manuallyValidateFieldData({ form, field, meta })}\r\n disabled={userAccountCreated}\r\n />\r\n \r\n )\r\n }}\r\n \r\n\r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n return (\r\n \r\n {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n resetFatalError()\r\n canValidateAddress(form.values)\r\n }}\r\n onChange={async (e) => {\r\n field.onChange(e)\r\n sessionStorage.setItem(field.name, e.target.value.trim())\r\n if (useSameForBilling) {\r\n sessionStorage.setItem(\r\n CHECKOUTFORM_FIELDS.BILLING_FIRST_NAME,\r\n e.target.value.trim()\r\n )\r\n await form.setFieldValue(\r\n CHECKOUTFORM_FIELDS.BILLING_FIRST_NAME,\r\n e.target.value\r\n )\r\n }\r\n }}\r\n onFocus={(e) => {\r\n setOnInitialValue((oldState) => ({\r\n ...oldState,\r\n [field.name]: e.target.value,\r\n }))\r\n }}\r\n valid={manuallyValidateFieldData({ form, field, meta })}\r\n disabled={userAccountCreated}\r\n />\r\n \r\n )\r\n }}\r\n \r\n\r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n return (\r\n \r\n {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n resetFatalError()\r\n canValidateAddress(form.values)\r\n }}\r\n onChange={async (e) => {\r\n field.onChange(e)\r\n sessionStorage.setItem(field.name, e.target.value.trim())\r\n if (useSameForBilling) {\r\n sessionStorage.setItem(\r\n CHECKOUTFORM_FIELDS.BILLING_LAST_NAME,\r\n e.target.value.trim()\r\n )\r\n await form.setFieldValue(\r\n CHECKOUTFORM_FIELDS.BILLING_LAST_NAME,\r\n e.target.value\r\n )\r\n }\r\n }}\r\n onFocus={(e) => {\r\n setOnInitialValue((oldState) => ({\r\n ...oldState,\r\n [field.name]: e.target.value,\r\n }))\r\n }}\r\n valid={manuallyValidateFieldData({ form, field, meta })}\r\n disabled={userAccountCreated}\r\n />\r\n \r\n )\r\n }}\r\n \r\n\r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n return (\r\n \r\n 0\r\n ? errorContent.errorInvalidPassword\r\n : errorContent.errorRequiredPassword\r\n }\r\n onBlur={(e) => {\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n resetFatalError()\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n }}\r\n value={field.value}\r\n valid={manuallyValidateFieldData({ form, field, meta })}\r\n touched={meta.touched}\r\n disabled={userAccountCreated}\r\n modifier={passwordValidationStyles['wrapper--compact']}\r\n passwordStrength={errorContent.passwordStrength}\r\n passwordStrengthLevel1={errorContent.passwordStrengthLevel1}\r\n passwordStrengthLevel2={errorContent.passwordStrengthLevel2}\r\n passwordStrengthLevel3={errorContent.passwordStrengthLevel3}\r\n passwordStrengthLevel4={errorContent.passwordStrengthLevel4}\r\n passwordStrengthTipDrawer={errorContent.passwordStrengthTipDrawer}\r\n passwordStrengthTip1={errorContent.passwordStrengthTip1}\r\n passwordStrengthTip2={errorContent.passwordStrengthTip2}\r\n passwordStrengthTip3={errorContent.passwordStrengthTip3}\r\n isSubmittingRef={isSubmittingRef}\r\n />\r\n \r\n )\r\n }}\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport const ConnectedBuyAccountFormInfo = connectRedux(\r\n BuyAccountFormInfo,\r\n mapBuyAccountFormInfoState,\r\n mapBuyAccountFormInfoActions\r\n)\r\n","import { locationActions } from '@common/state/location/actions'\r\nimport { getLocationState } from '@common/state/selectors'\r\nimport { AppState } from 'app-store'\r\nimport { BuyFormData } from '@buy/state/buy-form/state'\r\nimport { buyCheckoutActions } from '@buy/state/checkout/actions'\r\nimport { getContentData, getLabelContent, getUserState, getCheckoutState } from '@buy/state/selectors'\r\nimport { COUNTRIES } from '@common/constants'\r\nimport { buyFormActions } from '@buy/state/buy-form/actions'\r\nimport { getContentLanguage } from '@buy/utils/language-helpers'\r\nimport { BuyBillingFormInfoState } from './state'\r\n\r\nexport const mapBuyBillingFormInfoState = (state: AppState): BuyBillingFormInfoState => {\r\n const {\r\n billingInformation,\r\n useAccountInfo,\r\n firstName,\r\n lastName,\r\n address,\r\n country,\r\n city,\r\n state: addressState,\r\n pleaseSelect,\r\n postalCode,\r\n phone,\r\n taxBusiness,\r\n taxIndividual,\r\n taxNumber,\r\n gSTDisclaimer,\r\n vATDisclaimer,\r\n gSTOption,\r\n vATOption,\r\n companyName,\r\n optional,\r\n taxCodeGST,\r\n taxCodeVAT,\r\n errorInvalidTaxNumber,\r\n } = getLabelContent(state)\r\n const location = getLocationState(state)\r\n\r\n const {\r\n existingBillingInformation,\r\n loggedIn: { isUserLoggedIn },\r\n } = getUserState(state)\r\n\r\n const { taxType } = getCheckoutState(state)\r\n\r\n const { DefaultCountry: contentDefaultCountry } = getContentData(state)\r\n const defaultCountry = contentDefaultCountry || COUNTRIES.US\r\n const language = getContentLanguage()\r\n\r\n return {\r\n content: {\r\n billingInformation,\r\n useAccountInfo,\r\n firstName,\r\n lastName,\r\n address,\r\n country,\r\n city,\r\n state: addressState,\r\n pleaseSelect,\r\n postalCode,\r\n phone,\r\n taxBusiness,\r\n taxIndividual,\r\n taxNumber,\r\n gSTDisclaimer,\r\n vATDisclaimer,\r\n gSTOption,\r\n vATOption,\r\n companyName,\r\n optional,\r\n taxCodeGST,\r\n taxCodeVAT,\r\n errorInvalidTaxNumber,\r\n },\r\n location,\r\n isUserLoggedIn,\r\n existingBillingInformation,\r\n defaultCountry,\r\n taxType,\r\n language,\r\n }\r\n}\r\n\r\nexport const mapBuyBillingFormInfoActions = {\r\n // TODO: load based on product\r\n getCountries: (productFamily: string) => locationActions.getCountries(productFamily),\r\n calculatePrice: (values: BuyFormData) => buyCheckoutActions.calculatePrice(values),\r\n setTaxType: (type: string) => buyCheckoutActions.setTaxType(type),\r\n setStatesOptional: (optional: boolean) => buyFormActions.setStatesOptional(optional),\r\n}\r\nexport type BuyBillingFormInfoActionsType = typeof mapBuyBillingFormInfoActions\r\n","// extracted by mini-css-extract-plugin\nexport default {\"grid\":\"billing-info-module__grid\",\"cc-first-name\":\"billing-info-module__cc-first-name\",\"cc-last-name\":\"billing-info-module__cc-last-name\",\"address\":\"billing-info-module__address\",\"city\":\"billing-info-module__city\",\"state\":\"billing-info-module__state\",\"zipcode\":\"billing-info-module__zipcode\",\"phone\":\"billing-info-module__phone\",\"checkbox-wrapper\":\"billing-info-module__checkbox-wrapper\",\"existing-address\":\"billing-info-module__existing-address\",\"country-wrapper\":\"billing-info-module__country-wrapper\",\"tax-id\":\"billing-info-module__tax-id\",\"radioInputField-module__radios\":\"billing-info-module__radioInputField-module__radios\",\"tax\":\"billing-info-module__tax\",\"tax-disclaimer\":\"billing-info-module__tax-disclaimer\",\"tax-option\":\"billing-info-module__tax-option\",\"tax-checkbox\":\"billing-info-module__tax-checkbox\",\"tax-code\":\"billing-info-module__tax-code\",\"existing-tax\":\"billing-info-module__existing-tax\",\"exisiting-company\":\"billing-info-module__exisiting-company\"};","import { BoxWrapper, Checkbox, InputField, Select, InlineErrorView, RadioInputField } from '@common/components'\r\nimport { BuyFormData } from '@buy/state/buy-form/state'\r\n\r\nimport { Field, FieldProps, FormikProps } from 'formik'\r\nimport React, { FunctionComponent, useCallback, useEffect, useState, ChangeEvent, useRef } from 'react'\r\nimport { isEmpty } from 'lodash-es'\r\nimport { manuallyValidateFieldData, checkAlphaNumerical } from '@buy/utils'\r\nimport { connectRedux, GoToComponentProps } from '@common/utils'\r\nimport { BuyBillingFormInfoState } from '@buy/connectedComponents/BillingFormInfo/state'\r\nimport {\r\n BuyBillingFormInfoActionsType,\r\n mapBuyBillingFormInfoActions,\r\n mapBuyBillingFormInfoState,\r\n} from '@buy/connectedComponents/BillingFormInfo/connector'\r\nimport { Address } from '@common/state/location/state'\r\nimport { CHECKOUTFORM_FIELDS } from '@buy/constants'\r\nimport { TAX_COUNTRIES } from '@common/constants'\r\nimport selectStyles from '@common/components/Select/select.module.css'\r\nimport InfoIcon from '@common/images/icon-info-grey.svg'\r\nimport { getAddressFromGooglePlace } from '@common/utils/getAddressFromGooglePlace'\r\nimport { useAddressAutoFill } from '@common/hooks/useAddressAutoFill'\r\nimport { GooglePlace } from '@common/state/addressAutoFill/state'\r\nimport { useTaxNumberValidation } from '@buy/hooks'\r\nimport { getProductSettingsData } from '@buy/state/selectors'\r\nimport { useSelector } from 'react-redux'\r\nimport billingStyles from './billing-info.module.css'\r\n\r\nexport interface BuyBillingFormInfoComponentProps {\r\n useSameForBilling: boolean\r\n resetFatalError: () => void\r\n canValidateAddress: (values: BuyFormData) => void\r\n setUseSameForBilling: (useSame: boolean) => void\r\n trackBillingInfoStep: () => void\r\n setHasAddressValidationErrors: (value: React.SetStateAction) => void\r\n formikRef: React.RefObject>\r\n setCheckoutFormInlineError: (value: string) => void\r\n removeCheckoutFormInlineError: (value: string) => void\r\n inlineErrors: { [key: string]: string } | Record\r\n checkCurrencyConflict: (country: string, originCountry: string) => void\r\n setTaxRequired: (value: boolean) => void\r\n}\r\n\r\ntype BuyBillingFormInfoProps = GoToComponentProps<\r\n BuyBillingFormInfoState,\r\n BuyBillingFormInfoActionsType,\r\n BuyBillingFormInfoComponentProps\r\n>\r\n\r\nexport const BillingFormInfo: FunctionComponent = ({ state, actions, props }) => {\r\n const { content, existingBillingInformation, isUserLoggedIn, location, taxType } = state\r\n const {\r\n useSameForBilling,\r\n resetFatalError,\r\n canValidateAddress,\r\n setUseSameForBilling,\r\n trackBillingInfoStep,\r\n setHasAddressValidationErrors,\r\n formikRef,\r\n setCheckoutFormInlineError,\r\n removeCheckoutFormInlineError,\r\n inlineErrors,\r\n checkCurrencyConflict,\r\n setTaxRequired,\r\n } = props\r\n\r\n const productSettings = useSelector(getProductSettingsData)\r\n const [countryCode, setCountryCode] = useState('')\r\n const [showTaxField, setShowTaxField] = useState(false)\r\n const [showIndividualTax, setShowIndividualTax] = useState(true)\r\n const [showBrazilTaxField, setShowBrazilTaxField] = useState(false)\r\n const [showOptionalTaxField, setShowOptionalTaxField] = useState(false)\r\n const [shouldLoadAddressAutoFill, setShouldLoadAddressAutoFill] = useState(false)\r\n\r\n const taxNumbValidation = useTaxNumberValidation()\r\n\r\n useEffect(() => {\r\n if (formikRef.current && !taxNumbValidation.isValidating && showTaxField) {\r\n if (taxNumbValidation.isValid) {\r\n formikRef.current.setFieldError(CHECKOUTFORM_FIELDS.TAX_ID, '')\r\n } else {\r\n formikRef.current.setFieldError(CHECKOUTFORM_FIELDS.TAX_ID, content.errorInvalidTaxNumber)\r\n }\r\n }\r\n }, [\r\n formikRef,\r\n content.errorInvalidTaxNumber,\r\n showTaxField,\r\n taxNumbValidation.isValid,\r\n taxNumbValidation.isValidating,\r\n ])\r\n\r\n // Do not set allowAddressAutofill back to true until bug WAE1-1721 is solved.\r\n // (See comment replies on that ticket for root cause of the bug.)\r\n const allowAddressAutofill = false\r\n\r\n const streetFieldRef = useRef(null)\r\n\r\n const selectCountry = (e: React.ChangeEvent) => {\r\n checkCurrencyConflict(countryCode, e.target.value)\r\n }\r\n const selectedCountry = state.location.countries.find((country) => {\r\n return country.abbreviation === countryCode\r\n })\r\n\r\n const setAddressErrors = useCallback(\r\n (errorMessage: string | undefined) => {\r\n if (formikRef.current) {\r\n formikRef.current.setFieldError('CountryCode', errorMessage)\r\n formikRef.current.setFieldError('Street1', errorMessage)\r\n formikRef.current.setFieldError('City', errorMessage)\r\n formikRef.current.setFieldError('StateCode', errorMessage)\r\n formikRef.current.setFieldError('ZipCode', errorMessage)\r\n }\r\n },\r\n [formikRef]\r\n )\r\n\r\n const setAddressValues = useCallback(\r\n (address: Address) => {\r\n if (formikRef.current) {\r\n formikRef.current.setFieldValue('CountryCode', address.country)\r\n formikRef.current.setFieldValue('Street1', address.addressLine1)\r\n formikRef.current.setFieldValue('City', address.city)\r\n formikRef.current.setFieldValue('StateCode', address.state)\r\n formikRef.current.setFieldValue('ZipCode', address.postalCode)\r\n }\r\n },\r\n [formikRef]\r\n )\r\n\r\n const getFormValuesWithUpdatedAddress = useCallback(\r\n (correctedAddress: Address) => {\r\n if (formikRef.current) {\r\n const currentFormValues = formikRef.current.values\r\n const { addressLine1: Street1, city: City, state: StateCode, postalCode: ZipCode } = correctedAddress\r\n const updatedAddressValues = { ...currentFormValues, Street1, City, StateCode, ZipCode }\r\n return updatedAddressValues\r\n }\r\n return null\r\n },\r\n [formikRef]\r\n )\r\n\r\n const isLocationEligible = (country: string) =>\r\n location.countries.find((eligibleCountry) => country === eligibleCountry.abbreviation)\r\n\r\n const existingBillingInfoLocation = location.countries.find((country) => {\r\n return country.abbreviation === existingBillingInformation?.country\r\n })\r\n\r\n const getExistingBillingInfoTaxType = () => {\r\n if (existingBillingInformation && existingBillingInformation.federalTaxType) {\r\n return existingBillingInformation.federalTaxType === content.taxIndividual\r\n ? content.taxIndividual\r\n : content.taxBusiness\r\n }\r\n if (existingBillingInfoLocation) {\r\n return existingBillingInfoLocation.taxType === 'GST' ? content.taxCodeGST : content.taxCodeVAT\r\n }\r\n return ''\r\n }\r\n\r\n const handleTaxOptionChanged = (e: ChangeEvent) => {\r\n if (formikRef.current) {\r\n formikRef.current.setFieldValue('TaxNumber', '')\r\n }\r\n actions.setTaxType(e.target.value)\r\n }\r\n\r\n const handleAutoFillAddress = (place: GooglePlace) => {\r\n const addr = getAddressFromGooglePlace(place)\r\n setAddressValues(addr)\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n canValidateAddress(formikRef.current!.values)\r\n }\r\n\r\n // effects\r\n // get list of countries\r\n useEffect(() => {\r\n if (!location.isCountriesLoaded) {\r\n actions.getCountries(productSettings.productFamily)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [actions, location.isCountriesLoaded])\r\n\r\n useEffect(() => {\r\n if (location.isCountriesLoaded && !countryCode && formikRef.current) {\r\n const preSelectedCountry = isLocationEligible(formikRef?.current.values.CountryCode)\r\n setCountryCode(preSelectedCountry?.abbreviation || state.defaultCountry)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [location.isCountriesLoaded])\r\n\r\n useEffect(() => {\r\n if (location.isCountriesLoaded && countryCode && formikRef.current) {\r\n if (selectedCountry && !selectedCountry.states) {\r\n actions.setStatesOptional(true)\r\n } else if (!formikRef.current.values.StateCode) {\r\n actions.setStatesOptional(false)\r\n }\r\n\r\n if (selectedCountry && selectedCountry.hasTaxId) {\r\n setShowTaxField(true)\r\n if (countryCode === 'BR') {\r\n setShowBrazilTaxField(true)\r\n formikRef.current.values.TaxType = 'Individual'\r\n setTaxRequired(true)\r\n } else {\r\n removeCheckoutFormInlineError('TaxNumber')\r\n }\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [location.isCountriesLoaded, countryCode])\r\n\r\n // Once the countryCode is determined, then enable Google Places address autofill\r\n useEffect(() => {\r\n if (allowAddressAutofill && countryCode) {\r\n setShouldLoadAddressAutoFill(true)\r\n }\r\n }, [countryCode, allowAddressAutofill])\r\n\r\n useAddressAutoFill({\r\n language: state.language,\r\n streetFieldRef,\r\n countries: [countryCode],\r\n onChangePlace: handleAutoFillAddress,\r\n shouldLoad: shouldLoadAddressAutoFill,\r\n })\r\n\r\n // show & reset address errors\r\n useEffect(() => {\r\n if (!location.validAddress && location.addressErrors.length !== 0) {\r\n setHasAddressValidationErrors(true)\r\n setAddressErrors(' ')\r\n } else if (location.validAddress && location.addressErrors.length === 0) {\r\n setHasAddressValidationErrors(false)\r\n setAddressErrors(undefined)\r\n }\r\n }, [location, setAddressErrors, setHasAddressValidationErrors])\r\n\r\n // update with corrected address\r\n useEffect(() => {\r\n if (location.validAddress && location.correctedAddress.city && formikRef.current) {\r\n setAddressValues(location.correctedAddress)\r\n // we need to do this because, formik setFieldValue is async in nature and doesn't return a promise\r\n // so we can't assume we have updated values within formikRef\r\n const updatedFormValues = getFormValuesWithUpdatedAddress(location.correctedAddress)\r\n if (updatedFormValues) {\r\n actions.calculatePrice(updatedFormValues)\r\n }\r\n }\r\n }, [\r\n actions,\r\n location.validAddress,\r\n location.correctedAddress,\r\n formikRef,\r\n setAddressValues,\r\n getFormValuesWithUpdatedAddress,\r\n ])\r\n\r\n useEffect(() => {\r\n if (taxType) {\r\n if (taxType === 'individualTax' && formikRef.current) {\r\n formikRef.current.values.TaxType = 'Individual'\r\n setShowIndividualTax(true)\r\n }\r\n if (taxType === 'businessTax' && formikRef.current) {\r\n formikRef.current.values.TaxType = 'Business'\r\n setShowIndividualTax(false)\r\n }\r\n if (taxType === 'GstVatNotRequired' && formikRef.current) {\r\n formikRef.current.values.TaxNumber = ''\r\n formikRef.current.errors.TaxNumber = ''\r\n formikRef.current.touched.TaxNumber = false\r\n removeCheckoutFormInlineError('TaxNumber')\r\n setTaxRequired(false)\r\n setShowOptionalTaxField(false)\r\n }\r\n if (taxType === 'GstVatRequired') {\r\n setTaxRequired(true)\r\n setShowOptionalTaxField(true)\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [taxType])\r\n\r\n const isTaxGST = selectedCountry?.taxType === 'GST'\r\n\r\n const clearBillingFields = async (\r\n fieldName: CHECKOUTFORM_FIELDS.BILLING_FIRST_NAME | CHECKOUTFORM_FIELDS.BILLING_LAST_NAME\r\n ) => {\r\n sessionStorage.removeItem(fieldName)\r\n await formikRef.current?.setFieldValue(fieldName, '')\r\n }\r\n\r\n const setBillingValues = async (\r\n accountFieldName: CHECKOUTFORM_FIELDS.FIRST_NAME | CHECKOUTFORM_FIELDS.LAST_NAME,\r\n billingFieldName: CHECKOUTFORM_FIELDS.BILLING_FIRST_NAME | CHECKOUTFORM_FIELDS.BILLING_LAST_NAME\r\n ) => {\r\n const field = formikRef.current?.getFieldProps(accountFieldName)\r\n const form = formikRef.current\r\n const value = field?.value || sessionStorage.getItem(accountFieldName)\r\n\r\n if (!value) {\r\n const firstNameValue =\r\n formikRef.current?.values[billingFieldName] || sessionStorage.getItem(billingFieldName)\r\n await formikRef.current?.setFieldValue(accountFieldName, firstNameValue)\r\n\r\n if (firstNameValue) {\r\n sessionStorage.setItem(accountFieldName, firstNameValue)\r\n }\r\n\r\n if (field) {\r\n form?.validateField(field.name)\r\n }\r\n } else {\r\n await formikRef.current?.setFieldValue(billingFieldName, value || '')\r\n sessionStorage.setItem(billingFieldName, value || '')\r\n }\r\n }\r\n\r\n return (\r\n \r\n
\r\n

{content.billingInformation}

\r\n\r\n {!isUserLoggedIn || isEmpty(existingBillingInformation) ? (\r\n <>\r\n
\r\n {\r\n setUseSameForBilling(!useSameForBilling)\r\n sessionStorage.setItem('useSameForBilling', `${!useSameForBilling}`)\r\n if (useSameForBilling) {\r\n clearBillingFields(CHECKOUTFORM_FIELDS.BILLING_FIRST_NAME)\r\n clearBillingFields(CHECKOUTFORM_FIELDS.BILLING_LAST_NAME)\r\n } else {\r\n setBillingValues(\r\n CHECKOUTFORM_FIELDS.FIRST_NAME,\r\n CHECKOUTFORM_FIELDS.BILLING_FIRST_NAME\r\n )\r\n setBillingValues(\r\n CHECKOUTFORM_FIELDS.LAST_NAME,\r\n CHECKOUTFORM_FIELDS.BILLING_LAST_NAME\r\n )\r\n }\r\n }}\r\n label={content.useAccountInfo}\r\n qaTag=\"checkout-form-same-for-billing\"\r\n />\r\n
\r\n
\r\n <>\r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n // TODO : optimize the conditions\r\n const billingInfoChecked = useSameForBilling\r\n ? sessionStorage.getItem(field.name)\r\n : ''\r\n\r\n let value = !field.value ? billingInfoChecked : field.value\r\n\r\n const accountFirstName = form.getFieldProps(CHECKOUTFORM_FIELDS.FIRST_NAME)\r\n .value\r\n ? sessionStorage.getItem(CHECKOUTFORM_FIELDS.BILLING_FIRST_NAME)\r\n : form.getFieldProps(CHECKOUTFORM_FIELDS.FIRST_NAME).value\r\n\r\n const checkSession = sessionStorage.getItem(CHECKOUTFORM_FIELDS.FIRST_NAME)\r\n ? sessionStorage.getItem(CHECKOUTFORM_FIELDS.FIRST_NAME)\r\n : accountFirstName\r\n\r\n value = useSameForBilling ? checkSession : value?.trim()\r\n return (\r\n \r\n {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n canValidateAddress(form.values)\r\n resetFatalError()\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n sessionStorage.setItem(field.name, e.target.value.trim())\r\n }}\r\n data-qat=\"billing-first-name\"\r\n />\r\n \r\n )\r\n }}\r\n \r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n // TODO : optimize the conditions\r\n const billingInfoChecked = useSameForBilling\r\n ? sessionStorage.getItem(field.name)\r\n : ''\r\n\r\n let value = !field.value ? billingInfoChecked : field.value\r\n\r\n const accountLastName = form.getFieldProps(CHECKOUTFORM_FIELDS.LAST_NAME).value\r\n ? sessionStorage.getItem(CHECKOUTFORM_FIELDS.BILLING_LAST_NAME)\r\n : form.getFieldProps(CHECKOUTFORM_FIELDS.LAST_NAME).value\r\n\r\n const checkSession = sessionStorage.getItem(CHECKOUTFORM_FIELDS.LAST_NAME)\r\n ? sessionStorage.getItem(CHECKOUTFORM_FIELDS.LAST_NAME)\r\n : accountLastName\r\n\r\n value = useSameForBilling ? checkSession : value?.trim()\r\n return (\r\n \r\n {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n canValidateAddress(form.values)\r\n resetFatalError()\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n sessionStorage.setItem(field.name, e.target.value.trim())\r\n }}\r\n data-qat=\"billing-last-name\"\r\n />\r\n \r\n )\r\n }}\r\n \r\n \r\n
\r\n \r\n {({ form, field }: FieldProps) => {\r\n return (\r\n {\r\n selectCountry(e)\r\n field.onChange(e)\r\n sessionStorage.setItem(field.name, e.target.value.trim())\r\n }}\r\n onBlur={() => {\r\n canValidateAddress(form.values)\r\n }}\r\n value={field.value as string}\r\n selected={!!countryCode}\r\n modifier={selectStyles['select-wrapper--compact']}\r\n >\r\n {location.countries.length === 0 ? (\r\n \r\n ) : (\r\n location.countries.map((country) => (\r\n \r\n {country.name}\r\n \r\n ))\r\n )}\r\n \r\n )\r\n }}\r\n \r\n
\r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n return (\r\n \r\n {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n canValidateAddress(form.values)\r\n resetFatalError()\r\n trackBillingInfoStep()\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n sessionStorage.setItem(field.name, e.target.value.trim())\r\n }}\r\n data-qat=\"billing-address\"\r\n />\r\n \r\n )\r\n }}\r\n \r\n\r\n \r\n {({ field, form, meta }: FieldProps) => {\r\n return (\r\n \r\n {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n canValidateAddress(form.values)\r\n resetFatalError()\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n sessionStorage.setItem(field.name, e.target.value.trim())\r\n }}\r\n data-qat=\"billing-city\"\r\n />\r\n \r\n )\r\n }}\r\n \r\n {selectedCountry && selectedCountry.states && (\r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n return (\r\n \r\n {\r\n field.onChange(e)\r\n sessionStorage.setItem(field.name, e.target.value.trim())\r\n }}\r\n onBlur={async (e) => {\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n canValidateAddress(form.values)\r\n resetFatalError()\r\n }}\r\n valid={manuallyValidateFieldData({ form, field, meta })}\r\n wrapperClass={billingStyles.state}\r\n modifier={selectStyles['select-wrapper--compact']}\r\n >\r\n \r\n {selectedCountry.states &&\r\n selectedCountry.states.map((countryState) => (\r\n \r\n {countryState.name}\r\n \r\n ))}\r\n \r\n \r\n )\r\n }}\r\n \r\n )}\r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n return (\r\n \r\n {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n canValidateAddress(form.values)\r\n resetFatalError()\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n sessionStorage.setItem(field.name, e.target.value.trim())\r\n }}\r\n data-qat=\"billing-postal-code\"\r\n />\r\n \r\n )\r\n }}\r\n \r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n return (\r\n \r\n {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n resetFatalError()\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n sessionStorage.setItem(field.name, e.target.value.trim())\r\n }}\r\n data-qat=\"billing-contact-number\"\r\n />\r\n \r\n )\r\n }}\r\n \r\n
\r\n {showTaxField && (\r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n return (\r\n
\r\n {showBrazilTaxField ? (\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n if (!meta.error && meta.value.length > 0) {\r\n taxNumbValidation.validate(\r\n countryCode,\r\n meta.value,\r\n formikRef.current!.values.TaxType\r\n )\r\n }\r\n canValidateAddress(form.values)\r\n resetFatalError()\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n form.validateField(field.name)\r\n }}\r\n ismasked={true}\r\n mask={\r\n showIndividualTax ? '999.999.999-99' : '99.999.999/9999-99'\r\n }\r\n maskChar=\"\"\r\n data-qat=\"billing-tax-number\"\r\n />\r\n \r\n ) : (\r\n <>\r\n {\r\n if (showOptionalTaxField && formikRef.current) {\r\n actions.setTaxType('GstVatNotRequired')\r\n } else {\r\n actions.setTaxType('GstVatRequired')\r\n }\r\n }}\r\n label={isTaxGST ? content.gSTOption : content.vATOption}\r\n qaTag=\"checkout-form-optional-tax\"\r\n modifier={billingStyles['tax-checkbox']}\r\n />\r\n {showOptionalTaxField && (\r\n \r\n
\r\n \r\n {TAX_COUNTRIES[countryCode] || countryCode}\r\n \r\n {\r\n await form.setFieldValue(\r\n field.name,\r\n e.target.value.trim()\r\n )\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n if (!meta.error && meta.value.length > 0) {\r\n taxNumbValidation.validate(\r\n countryCode,\r\n meta.value\r\n )\r\n }\r\n canValidateAddress(form.values)\r\n resetFatalError()\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n form.validateField(field.name)\r\n }}\r\n checkValid={checkAlphaNumerical}\r\n data-qat=\"billing-tax-number\"\r\n />\r\n
\r\n
\r\n \"info\"\r\n \r\n {isTaxGST\r\n ? content.gSTDisclaimer\r\n : content.vATDisclaimer}\r\n \r\n
\r\n \r\n )}\r\n \r\n )}\r\n
\r\n )\r\n }}\r\n
\r\n )}\r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n return (\r\n \r\n {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n }}\r\n data-qat=\"billing-company-name\"\r\n />\r\n \r\n )\r\n }}\r\n \r\n \r\n ) : (\r\n existingBillingInformation && (\r\n
\r\n
\r\n {existingBillingInformation.firstName} {existingBillingInformation.lastName}\r\n
\r\n
{existingBillingInformation.addressLine1}
\r\n
\r\n {existingBillingInformation.city} {existingBillingInformation.state}{' '}\r\n {existingBillingInfoLocation?.name} {existingBillingInformation.postalCode}\r\n
\r\n
{existingBillingInformation.phoneNumber}
\r\n {existingBillingInformation.taxNumber && (\r\n
\r\n {getExistingBillingInfoTaxType()}: {existingBillingInformation.taxNumber}\r\n
\r\n )}\r\n {existingBillingInformation.companyName ? (\r\n
\r\n {content.companyName}: {existingBillingInformation.companyName}\r\n
\r\n ) : (\r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n return (\r\n \r\n {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n }}\r\n data-qat=\"billing-company-name\"\r\n />\r\n \r\n )\r\n }}\r\n \r\n )}\r\n
\r\n )\r\n )}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport const ConnectedBuyBillingFormInfo = connectRedux(\r\n BillingFormInfo,\r\n mapBuyBillingFormInfoState,\r\n mapBuyBillingFormInfoActions\r\n)\r\n","// extracted by mini-css-extract-plugin\nexport default {\"submit\":\"buy-checkout-form-submit__submit\"};","import classNames from 'classnames'\r\nimport { FormSubmitButton, TrustArcLogo } from '@common/components'\r\nimport { connectRedux, GoToComponentProps } from '@common/utils'\r\nimport { ConnectedBuyOrderSummary } from '@buy/connectedComponents'\r\nimport {\r\n BuyCheckoutFormSubmissionActionsType,\r\n mapBuyCheckoutFormSubmissionActions,\r\n mapBuyCheckoutFormSubmissionState,\r\n} from '@buy/connectedComponents/CheckoutFormSubmission/connector'\r\nimport { BuyCheckoutFormSubmissionState } from '@buy/connectedComponents/CheckoutFormSubmission/state'\r\n\r\nimport React, { FunctionComponent } from 'react'\r\nimport checkoutFormStyles from './buy-checkout-form-submit.css'\r\nimport billingStyles from '../../views/Billing/billing.module.css'\r\n\r\nexport interface BuyCheckoutFormSubmissionComponentProps {\r\n isSubmitting: boolean\r\n preSubmit: () => void\r\n isTabletOrMobileView?: boolean | undefined\r\n inlineErrors: { [key: string]: string } | Record\r\n isOnePayFlow: boolean\r\n}\r\ntype BuyCheckoutFormSubmissionProps = GoToComponentProps<\r\n BuyCheckoutFormSubmissionState,\r\n BuyCheckoutFormSubmissionActionsType,\r\n BuyCheckoutFormSubmissionComponentProps\r\n>\r\n\r\nexport const BuyCheckoutFormSubmission: FunctionComponent = ({ state, props }) => {\r\n const { content, isFatalError, fatalErrorBlocker, totalLoading, calculatedTotal, disablePlanSelection } = state\r\n const { isSubmitting, preSubmit, isTabletOrMobileView, inlineErrors, isOnePayFlow } = props\r\n const submitBtnStyles = classNames({\r\n [billingStyles['buy-custom-submit-btn']]: true,\r\n [billingStyles['common-submit-btn']]: true,\r\n [checkoutFormStyles.submit]: true,\r\n })\r\n\r\n const btnText = isOnePayFlow ? content.checkoutCTAButtonText : content.completePurchase\r\n\r\n return (\r\n <>\r\n {!isTabletOrMobileView ? (\r\n <>\r\n {\r\n preSubmit()\r\n }}\r\n text={btnText}\r\n />\r\n \r\n ) : (\r\n <>\r\n \r\n {\r\n preSubmit()\r\n }}\r\n text={btnText}\r\n />\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport const ConnectedBuyCheckoutFormSubmission = connectRedux(\r\n BuyCheckoutFormSubmission,\r\n mapBuyCheckoutFormSubmissionState,\r\n mapBuyCheckoutFormSubmissionActions\r\n)\r\n","import { getFatalError, getMarketingState } from '@common/state/selectors'\r\nimport { AppState } from 'app-store'\r\nimport { getCheckoutState, getLabelContent } from '@buy/state/selectors'\r\nimport { BuyCheckoutFormSubmissionState } from './state'\r\n\r\nexport const mapBuyCheckoutFormSubmissionState = (state: AppState): BuyCheckoutFormSubmissionState => {\r\n const { completePurchase, pricingNote, optOut, optOutCheckboxLabel, checkoutCTAButtonText } = getLabelContent(state)\r\n const { isFatalError, fatalErrorBlocker } = getFatalError(state)\r\n const { totalLoading, calculatedTotal } = getCheckoutState(state)\r\n const { displayOptOut } = getMarketingState(state)\r\n\r\n return {\r\n content: { completePurchase, pricingNote, optOut, optOutCheckboxLabel, checkoutCTAButtonText },\r\n isFatalError,\r\n fatalErrorBlocker,\r\n totalLoading,\r\n displayOptOut,\r\n calculatedTotal,\r\n disablePlanSelection: false,\r\n }\r\n}\r\n\r\nexport const mapBuyCheckoutFormSubmissionActions = {}\r\n\r\nexport type BuyCheckoutFormSubmissionActionsType = typeof mapBuyCheckoutFormSubmissionActions\r\n","import { getFatalError, getFlexState } from '@common/state/selectors'\r\nimport { AppState } from 'app-store'\r\nimport { flexActions } from '@common/state/flex/actions'\r\nimport { getLabelContent, getUserState } from '@buy/state/selectors'\r\nimport { BuyPaymentFormInfoState } from './state'\r\n\r\nexport const mapBuyPaymentFormInfoState = (state: AppState): BuyPaymentFormInfoState => {\r\n const {\r\n paymentDetails,\r\n edit,\r\n cardNumber,\r\n expirationDate,\r\n cVVHint,\r\n cVV,\r\n errorInvalidCreditCardNumber,\r\n errorRequiredCreditCardNumber,\r\n errorInvalidCVV,\r\n errorRequiredCVV,\r\n secure,\r\n } = getLabelContent(state)\r\n const { isFatalError } = getFatalError(state)\r\n const { existingPaymentInformation } = getUserState(state)\r\n const { isCardValid, isCvvValid, userInteractedWithFlexField, userInteractedWithFlexFieldCvv, microformCreated } =\r\n getFlexState(state)\r\n\r\n return {\r\n content: { paymentDetails, edit, cardNumber, expirationDate, cVVHint, cVV, secure },\r\n errorContent: {\r\n errorInvalidCreditCardNumber,\r\n errorRequiredCreditCardNumber,\r\n errorInvalidCVV,\r\n errorRequiredCVV,\r\n },\r\n isFatalError,\r\n existingPaymentInformation,\r\n isCardValid,\r\n isCvvValid,\r\n userInteractedWithFlexField,\r\n userInteractedWithFlexFieldCvv,\r\n microformCreated: !!microformCreated,\r\n }\r\n}\r\n\r\nexport const mapBuyPaymentFormInfoActions = {\r\n setCardValid: (valid: boolean) => flexActions.setCardValid(valid),\r\n setCvvValid: (valid: boolean) => flexActions.setCvvValid(valid),\r\n setUserInteractedWithFlexField: (interacted: boolean) => flexActions.setUserInteractedWithFlexField(interacted),\r\n setUserInteractedWithFlexFieldCvv: (interacted: boolean) =>\r\n flexActions.setUserInteractedWithFlexFieldCvv(interacted),\r\n}\r\n\r\nexport type BuyPaymentFormInfoActionsType = typeof mapBuyPaymentFormInfoActions\r\n","import { BoxWrapper, InputField, InlineErrorView } from '@common/components'\r\nimport { FieldProps, Field } from 'formik'\r\nimport React, { FunctionComponent, useEffect, useState } from 'react'\r\nimport PencilIcon from '@common/images/icon-modify-on.svg'\r\nimport CreditIcon from '@common/images/img-icon-credit@2x.png'\r\nimport SecureIcon from '@common/images/icon-secure.svg'\r\nimport { ConnectedFlexForm } from '@common/connectedComponents'\r\nimport { connectRedux, GoToComponentProps } from '@common/utils'\r\nimport { BuyPaymentFormInfoState } from '@buy/connectedComponents/PaymentFormInfo/state'\r\nimport {\r\n mapBuyPaymentFormInfoActions,\r\n mapBuyPaymentFormInfoState,\r\n BuyPaymentFormInfoActionsType,\r\n} from '@buy/connectedComponents/PaymentFormInfo/connector'\r\nimport { CHECKOUTFORM_FIELDS } from '@buy/constants'\r\nimport { FlexField } from '@common/components/FlexField/flex-field'\r\nimport paymentStyles from './payment-info.module.css'\r\n\r\nexport interface BuyPaymentFormInfoComponentProps {\r\n resetFatalError: () => void\r\n hasExistingPaymentInformation: boolean\r\n setIsPaymentModalOpen: (value: React.SetStateAction) => void\r\n trackPaymentStep: () => void\r\n setHasCardValidationErrors: (value: React.SetStateAction) => void\r\n setCheckoutFormInlineError: (value: string) => void\r\n removeCheckoutFormInlineError: (value: string) => void\r\n inlineErrors: { [key: string]: string } | Record\r\n}\r\ntype BuyPaymentFormInfoProps = GoToComponentProps<\r\n BuyPaymentFormInfoState,\r\n BuyPaymentFormInfoActionsType,\r\n BuyPaymentFormInfoComponentProps\r\n>\r\n\r\nexport const BuyPaymentFormInfo: FunctionComponent = ({ state, actions, props }) => {\r\n const {\r\n content,\r\n errorContent,\r\n isFatalError,\r\n existingPaymentInformation,\r\n isCardValid,\r\n isCvvValid,\r\n userInteractedWithFlexField,\r\n userInteractedWithFlexFieldCvv,\r\n microformCreated,\r\n } = state\r\n const {\r\n resetFatalError,\r\n setIsPaymentModalOpen,\r\n setCheckoutFormInlineError,\r\n removeCheckoutFormInlineError,\r\n inlineErrors,\r\n hasExistingPaymentInformation,\r\n trackPaymentStep,\r\n setHasCardValidationErrors,\r\n } = props\r\n\r\n const [isCardInfoEnteredFirstTime, setIsCardInfoEnteredFirstTime] = useState(false)\r\n\r\n // effects\r\n // if credit card is invalid display error message\r\n useEffect(() => {\r\n if (!isCardValid && userInteractedWithFlexField) {\r\n setHasCardValidationErrors(true)\r\n if ((inlineErrors && !inlineErrors.cardCC) || !inlineErrors) {\r\n setCheckoutFormInlineError('cardCC')\r\n }\r\n }\r\n if (isCardValid && userInteractedWithFlexField) {\r\n setHasCardValidationErrors(false)\r\n if (inlineErrors && inlineErrors.cardCC) {\r\n removeCheckoutFormInlineError('cardCC')\r\n }\r\n }\r\n\r\n if (!isCvvValid && userInteractedWithFlexFieldCvv) {\r\n setHasCardValidationErrors(true)\r\n if ((inlineErrors && !inlineErrors.cardCvv) || !inlineErrors) {\r\n setCheckoutFormInlineError('cardCvv')\r\n }\r\n }\r\n\r\n if (isCvvValid && userInteractedWithFlexFieldCvv) {\r\n setHasCardValidationErrors(false)\r\n if (inlineErrors && inlineErrors.cardCvv) {\r\n removeCheckoutFormInlineError('cardCvv')\r\n }\r\n }\r\n }, [\r\n isCardValid,\r\n setHasCardValidationErrors,\r\n userInteractedWithFlexField,\r\n isCvvValid,\r\n userInteractedWithFlexFieldCvv,\r\n setCheckoutFormInlineError,\r\n removeCheckoutFormInlineError,\r\n inlineErrors,\r\n ])\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n
\r\n

{content.paymentDetails}

\r\n
\r\n \"secure\"\r\n {content.secure}\r\n
\r\n
\r\n {hasExistingPaymentInformation && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n
\r\n
\r\n {!hasExistingPaymentInformation && }\r\n\r\n {/* Credit Card Number */}\r\n {!hasExistingPaymentInformation ? (\r\n
\r\n {\r\n actions.setCardValid(valid)\r\n actions.setUserInteractedWithFlexField(false)\r\n }}\r\n onBlur={() => {\r\n actions.setUserInteractedWithFlexField(true)\r\n if (!isCardInfoEnteredFirstTime) {\r\n setIsCardInfoEnteredFirstTime((oldState) => {\r\n if (!oldState) {\r\n trackPaymentStep()\r\n }\r\n return true\r\n })\r\n }\r\n\r\n resetFatalError()\r\n }}\r\n shouldRefresh={isFatalError}\r\n />\r\n
\r\n ) : (\r\n // Show a disabled field if hasExistingPaymentInformation\r\n \r\n )}\r\n\r\n {/* Expiration Date */}\r\n \r\n {({ form, field, meta }: FieldProps) => {\r\n return (\r\n \r\n {\r\n await form.setFieldValue(field.name, e.target.value.trim())\r\n field.onBlur(e)\r\n form.validateField(field.name)\r\n resetFatalError()\r\n }}\r\n onChange={(e) => {\r\n field.onChange(e)\r\n }}\r\n valid={!meta.error && meta.touched}\r\n />\r\n \r\n )\r\n }}\r\n \r\n\r\n {/* CVV Code */}\r\n
\r\n {!hasExistingPaymentInformation ? (\r\n {\r\n actions.setCvvValid(valid)\r\n actions.setUserInteractedWithFlexFieldCvv(false)\r\n }}\r\n onBlur={() => {\r\n actions.setUserInteractedWithFlexFieldCvv(true)\r\n resetFatalError()\r\n }}\r\n shouldRefresh={isFatalError}\r\n />\r\n ) : (\r\n // Show a disabled field if hasExistingPaymentInformation\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport const ConnectedBuyPaymentFormInfo = connectRedux(\r\n BuyPaymentFormInfo,\r\n mapBuyPaymentFormInfoState,\r\n mapBuyPaymentFormInfoActions\r\n)\r\n","import { TrackingState } from '@common/state/tracking/state'\r\nimport { BuyTrackingContext } from '@buy/connectedComponents/Tracking'\r\nimport { useContext, useMemo } from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nexport const useBuyTracking = () => {\r\n const location = useLocation()\r\n const trackingContext = useContext(BuyTrackingContext)\r\n if (!trackingContext) {\r\n throw new Error(\r\n 'useBuyTrackingContext must only be used within GTBuyTrackingProvider component and its children.'\r\n )\r\n }\r\n\r\n const currentLocation = location.pathname\r\n const trackingWrapper = useMemo(\r\n () => ({\r\n track: (trackingInfo: TrackingState, component: string) => {\r\n const trackingData = {\r\n ...trackingInfo,\r\n eventData: { ...trackingInfo.eventData, currentLocation },\r\n }\r\n trackingContext.track(trackingData, component)\r\n },\r\n }),\r\n [currentLocation, trackingContext]\r\n )\r\n return trackingWrapper\r\n}\r\n","import { TRACKING_EVENTS } from '@common/constants'\r\nimport { usePageLoad } from '@common/hooks'\r\nimport { BUY_TRACKING_COMPONENTS } from '@buy/constants'\r\nimport { useBuyTracking } from './useBuyTracking'\r\n\r\nexport interface BillingPageTrackingParams {\r\n contentLoaded?: boolean\r\n isUserLoggedIn?: boolean\r\n}\r\nexport const useBillingPageTracking = (params: BillingPageTrackingParams) => {\r\n const { track } = useBuyTracking()\r\n const componentName = BUY_TRACKING_COMPONENTS.BILLING_PAGE\r\n const trackCTAClick = (name: string, url: string) => {\r\n track({ event: TRACKING_EVENTS.CLICK_CTA, eventData: { name, url } }, componentName)\r\n }\r\n usePageLoad(() => {\r\n track({ event: TRACKING_EVENTS.SESSION_INFORMATION }, componentName)\r\n }, params.contentLoaded && params.isUserLoggedIn)\r\n\r\n return { trackCTAClick }\r\n}\r\n","import { TRACKING_EVENTS, BUY_VIEW_PATHS } from '@common/constants'\r\nimport { usePageLoadV2 } from '@common/hooks'\r\nimport { BUY_TRACKING_COMPONENTS } from '@buy/constants'\r\nimport { BuyFormData } from '@buy/state/buy-form/state'\r\nimport { FormikProps } from 'formik'\r\nimport { useState, useEffect, useCallback } from 'react'\r\nimport { useBuyTracking } from './useBuyTracking'\r\n\r\nexport interface CheckoutFormPageTrackingParams {\r\n planName: string\r\n formikRef: React.RefObject>\r\n dependencies: Array\r\n}\r\n\r\nexport const useCheckoutFormPageTracking = (params: CheckoutFormPageTrackingParams) => {\r\n const [hasTrackedStartForm, setHasTrackedStartForm] = useState(false)\r\n const [hasSetBeforeunload, setHasSetBeforeunload] = useState(false)\r\n const [skipBeforeunload, setSkipBeforeunload] = useState(false)\r\n const componentName = BUY_TRACKING_COMPONENTS.CHECKOUT_PAGE\r\n const { track } = useBuyTracking()\r\n const trackFormError = (formIds: string[], formErrors: string[]) => {\r\n track({ event: TRACKING_EVENTS.ERROR_FORM, eventData: { formIds, formErrors } }, componentName)\r\n }\r\n const trackBillingInfoStep = () => {\r\n track({ event: TRACKING_EVENTS.BEGIN_CHECKOUT, eventData: { step: 3 } }, componentName)\r\n }\r\n const trackPaymentStep = () => {\r\n track({ event: TRACKING_EVENTS.BEGIN_CHECKOUT, eventData: { step: 4 } }, componentName)\r\n }\r\n const trackAbandonForm = useCallback(() => {\r\n window.removeEventListener('beforeunload', trackAbandonForm)\r\n const currentForm = params.formikRef.current\r\n if (!skipBeforeunload && currentForm?.values.CountryCode === currentForm?.initialValues.CountryCode) {\r\n track({ event: TRACKING_EVENTS.ABANDON_FORM }, componentName)\r\n }\r\n }, [track, componentName, skipBeforeunload, params.formikRef])\r\n const trackSubmitForm = () => {\r\n window.removeEventListener('beforeunload', trackAbandonForm)\r\n setSkipBeforeunload(true)\r\n track({ event: TRACKING_EVENTS.SUBMIT_FORM }, componentName)\r\n }\r\n usePageLoadV2(() => {\r\n track({ event: TRACKING_EVENTS.LOAD_FORM }, componentName)\r\n track({ event: TRACKING_EVENTS.BEGIN_CHECKOUT, eventData: { step: 2 } }, componentName)\r\n }, params.dependencies)\r\n\r\n const { touched = {} } = params.formikRef.current ?? {}\r\n useEffect(() => {\r\n if (params.formikRef.current) {\r\n const fieldTouched = Object.keys(touched).length > 0\r\n if (fieldTouched && !hasTrackedStartForm) {\r\n setHasTrackedStartForm(true)\r\n track({ event: TRACKING_EVENTS.START_FORM }, componentName)\r\n }\r\n if (fieldTouched && !hasSetBeforeunload && window.location.pathname === BUY_VIEW_PATHS.BUY_CHECKOUT) {\r\n setHasSetBeforeunload(true)\r\n window.addEventListener('beforeunload', trackAbandonForm)\r\n }\r\n }\r\n return undefined\r\n }, [componentName, hasTrackedStartForm, params.formikRef, touched, track, hasSetBeforeunload, trackAbandonForm])\r\n return { trackFormError, trackBillingInfoStep, trackPaymentStep, trackSubmitForm }\r\n}\r\n","import { TRACKING_EVENTS } from '@common/constants'\r\nimport { usePageLoadV2 } from '@common/hooks'\r\nimport { BUY_TRACKING_COMPONENTS } from '@buy/constants'\r\nimport { useBuyTracking } from './useBuyTracking'\r\n\r\nexport interface CustomizePageTrackingParams {\r\n dependencies: Array\r\n}\r\n\r\nexport const useCustomizePageTracking = (params: CustomizePageTrackingParams) => {\r\n const componentName = BUY_TRACKING_COMPONENTS.CUSTOMIZE_PAGE\r\n const { track } = useBuyTracking()\r\n const trackCustomizeViewClick = () => {\r\n track({ event: TRACKING_EVENTS.VIEW_ITEM }, componentName)\r\n }\r\n usePageLoadV2(() => {\r\n track({ event: TRACKING_EVENTS.BEGIN_CHECKOUT, eventData: { step: 1 } }, componentName)\r\n }, params.dependencies)\r\n return { trackCustomizeViewClick }\r\n}\r\n","import { STORAGE_CONST, TRACKING_EVENTS } from '@common/constants'\r\nimport { usePageLoad } from '@common/hooks'\r\nimport { TRACKING_COMPONENTS } from '@gtc/constants'\r\nimport { trackEvent } from '@common/utils'\r\nimport { useBuyTracking } from './useBuyTracking'\r\n\r\nexport interface ConfirmationPageTrackingParams {\r\n isLabelsLoaded: boolean\r\n invoiceNumber: string\r\n}\r\n\r\nexport const useConfirmationPageTracking = ({ isLabelsLoaded, invoiceNumber }: ConfirmationPageTrackingParams) => {\r\n const { track } = useBuyTracking()\r\n const componentName = TRACKING_COMPONENTS.CONFIRMATION_PAGE\r\n\r\n // VIEW_CONTENT event\r\n usePageLoad(() => {\r\n track({ event: TRACKING_EVENTS.VIEW_CONTENT }, componentName)\r\n }, isLabelsLoaded)\r\n\r\n // COMPLETE_BUY_FLOW event\r\n usePageLoad(() => {\r\n const sessionStorageKeyName = `${STORAGE_CONST.STORED_GA_EVENT_PREFIX}${TRACKING_EVENTS.COMPLETE_BUY_FLOW}`\r\n\r\n // Retreive the event data that was put in sessionStorage before redirecting to OnePay\r\n // (See where it gets set at src/products/buy/saga/checkout-form/form-submission.ts)\r\n const value = window.sessionStorage.getItem(sessionStorageKeyName)\r\n if (value) {\r\n const event = JSON.parse(value)\r\n\r\n // Log the event to google analytics\r\n trackEvent(event)\r\n\r\n // Remove from sessionStorage now that we have logged it to google analytics\r\n window.sessionStorage.removeItem(sessionStorageKeyName)\r\n }\r\n }, isLabelsLoaded)\r\n\r\n // PURCHASE event\r\n usePageLoad(() => {\r\n const sessionStorageKeyName = `${STORAGE_CONST.STORED_GA_EVENT_PREFIX}${TRACKING_EVENTS.PURCHASE}`\r\n\r\n // Retreive the event data that was put in sessionStorage before redirecting to OnePay\r\n // (See where it gets set at src/products/buy/saga/checkout-form/form-submission.ts)\r\n const value = window.sessionStorage.getItem(sessionStorageKeyName)\r\n if (value) {\r\n const event = JSON.parse(value)\r\n\r\n // Update the event to contain the invoiceNumber now that we have it\r\n event.eventData.actionField.transaction_id = invoiceNumber\r\n\r\n // Log the event to google analytics\r\n trackEvent(event)\r\n\r\n // Remove from sessionStorage now that we have logged it to google analytics\r\n window.sessionStorage.removeItem(sessionStorageKeyName)\r\n }\r\n }, isLabelsLoaded && !!invoiceNumber)\r\n}\r\n","import { useEffect, useMemo } from 'react'\r\nimport { ActionWithPayload } from '@common/utils'\r\nimport { TimePeriod } from '@common/constants'\r\nimport { BuyCheckoutActionTypes } from '@buy/state/checkout/actions'\r\nimport { BillingDetailedSubscriptionPlan } from '@common/state/billing/state'\r\nimport { BuySelectedAddon, BuyAddon } from '@buy/state/add-on'\r\nimport { BuyPlan } from '@buy/state/plan'\r\nimport { getCartInfo } from '@buy/utils'\r\nimport { useParams } from 'react-router-dom'\r\n\r\ntype ParamTypes = {\r\n plan: string\r\n pathProduct: string\r\n}\r\n\r\nexport const useCustomizeCart = (\r\n state: {\r\n agents: number\r\n endpoints: number\r\n billingFrequency: TimePeriod\r\n planData: BuyPlan\r\n selectedPlan: BuyPlan\r\n extraAddonsSelected: BuyAddon[]\r\n accountSubscriptions?: BillingDetailedSubscriptionPlan[]\r\n },\r\n actions: {\r\n setSelectedAddons: (addons: BuySelectedAddon[]) => ActionWithPayload<\r\n BuyCheckoutActionTypes.SET_SELECTED_ADDONS,\r\n {\r\n addons: BuySelectedAddon[]\r\n }\r\n >\r\n\r\n setExtraAddons: (addons: BuyAddon[]) => ActionWithPayload<\r\n BuyCheckoutActionTypes.SET_EXTRA_ADDON,\r\n {\r\n addons: BuyAddon[]\r\n }\r\n >\r\n }\r\n) => {\r\n const { plan: urlPlan } = useParams()\r\n const cart = useMemo(() => {\r\n return getCartInfo(\r\n state.agents,\r\n state.endpoints,\r\n state.billingFrequency,\r\n state.planData,\r\n state.selectedPlan,\r\n state.extraAddonsSelected,\r\n state.accountSubscriptions,\r\n urlPlan\r\n )\r\n }, [\r\n state.agents,\r\n state.endpoints,\r\n state.billingFrequency,\r\n state.planData,\r\n state.selectedPlan,\r\n state.extraAddonsSelected,\r\n state.accountSubscriptions,\r\n urlPlan,\r\n ])\r\n\r\n useEffect(\r\n () => {\r\n actions.setExtraAddons(cart.extraAddons)\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state.selectedPlan, state.accountSubscriptions, actions.setExtraAddons]\r\n )\r\n\r\n useEffect(\r\n () => {\r\n actions.setSelectedAddons(cart.addons)\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [\r\n state.agents,\r\n state.endpoints,\r\n state.selectedPlan,\r\n state.extraAddonsSelected,\r\n state.billingFrequency,\r\n state.accountSubscriptions,\r\n actions.setSelectedAddons,\r\n ]\r\n )\r\n\r\n return cart\r\n}\r\n","import { useState, useCallback } from 'react'\r\nimport { validateTaxNumber } from '@buy/services'\r\n\r\nexport const useTaxNumberValidation = () => {\r\n const [isValid, setIsValid] = useState(true)\r\n const [isValidating, setIsValidating] = useState(false)\r\n\r\n const validate = useCallback(\r\n async (country: string, taxNumber: string, federalTaxType?: string) => {\r\n setIsValidating(true)\r\n\r\n try {\r\n await validateTaxNumber(country, taxNumber, federalTaxType)\r\n setIsValid(true)\r\n } catch (e) {\r\n setIsValid(false)\r\n } finally {\r\n setIsValidating(false)\r\n }\r\n },\r\n [setIsValid, setIsValidating]\r\n )\r\n\r\n return {\r\n validate,\r\n isValid,\r\n isValidating,\r\n }\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"existing-info\":\"account-info-module__existing-info\",\"signin\":\"account-info-module__signin\",\"flex\":\"account-info-module__flex\",\"grid\":\"account-info-module__grid\",\"error-box\":\"account-info-module__error-box\"};","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"billing-module__wrapper\",\"grid\":\"billing-module__grid\",\"column\":\"billing-module__column\",\"heading\":\"billing-module__heading\",\"subnav\":\"billing-module__subnav\",\"cursor-default\":\"billing-module__cursor-default\",\"disabled\":\"billing-module__disabled\",\"arrow\":\"billing-module__arrow\",\"subnav-btn\":\"billing-module__subnav-btn\",\"common-submit-btn\":\"billing-module__common-submit-btn\",\"buy-custom-submit-btn\":\"billing-module__buy-custom-submit-btn\",\"disabled-section\":\"billing-module__disabled-section\",\"disabled-cursor\":\"billing-module__disabled-cursor\",\"form\":\"billing-module__form\"};"],"names":["DescriptionWithCard","_ref","icon","mainDescription","title","cardDescription","showCheckbox","cardTitle","onSelect","selected","id","disabled","containerClassList","classNames","styles","cardClassList","checkboxClassList","React","className","src","alt","role","Checkbox","checked","modifier","onchange","event","target","qaTag","useFavicon","favicon","headLink","window","document","head","querySelector","useEffect","setAttribute","useLanguageInPathName","storedLanguage","getSessionState","STORAGE_CONST","SAVED_LANGUAGE","urlSplitForLang","location","pathname","split","urlLang","Object","values","LANGUAGE_CODES","includes","didRedirect","setDidRedirect","useState","saveSessionState","replace","Billing","lazy","ConfirmationView","BuyRoutes","Suspense","fallback","LoadingSpinner","Routes","Route","path","VIEW_PATH","PATH_CUSTOMIZE","element","step","PATH_CHECKOUT","PATH_CONFIRMATION","style","padding","margin","ErrorMessage","errorMessage","App","productSettings","useSelector","getProductSettingsData","GlobalScripts","analyticsProductKey","analyticsContainerID","lmiMaScriptUrl","LMI_MA_SCRIPT","URL","enableChatBot","ConnectedBuyTrackingProvider","mapBuyTrackingActions","track","trackingInfo","component","buyTrackingActions","BuyTrackingContext","createContext","connectRedux","children","actions","trackingContextValue","Provider","value","mapBuyTrackingState","mapBuyCustomizeActions","setOrganizers","organizer","buyCheckoutActions","setSelectedAddons","addons","calculatePrice","planSKU","setExtraAddons","setEndpoints","endpoints","setAgents","agents","setBaseLine","baseLine","setAdditionalLines","additionalLines","setAddonLines","addonLines","DropdownComponent","additionalInformation","description","unit","volumeSelector","closeLabel","showAdditionalLines","pricingInfo","currencyCode","basePlanDefaultVolume","onChange","sku","planName","quantityMultiplier","pathProduct","plan","useParams","isDropdownVisible","setIsDropdownVisible","dropdownItems","setDropdownItems","sessionState","getCheckoutSessionState","hasSessionValue","isEmpty","get","SessionKeys","volumeFields","toString","loadedSessionValue","quantityPerUnit","customListValues","minimum","maximum","newValues","range","map","item","index","multiplier","first","splittedValues","remappedValues","option","splittedOptions","Number","calculateDropdownValues","BoxWrapper","Tooltip","content","contentClass","onClick","Pencil","updateUnits","warning","maximumReachedMessage","CustomDropdown","name","unitName","innerText","input","createOrUpdateCheckoutSessionState","find","filteredAdditionalLines","filter","setCheckoutSessionState","additonalLines","newAdditionalLines","newItem","_objectSpread","defaultVolumeSelectorValue","item2","skuName","additionalUnits","quantity","newPrices","remapPricingObject","allPrices","tempAdditionalLines","key","tempBaseLine","onChangeDropdown","label","ConvertStringToReact","htmlString","labelClass","additionalClass","options","optionsContainerClass","optionsClass","PlusMinusComponent","isNumber","LicenseSelector","theme","organizers","min","max","error","unitNamePlural","skuSelectors","isYearlyBillingFrequency","volumeSelectorValues","setVolumeSelectorValues","setShowAdditionalLines","getBasePlanSkuDefaultVolume","basePlanSku","has","includedInSku","calculateShowAdditionalLinesToggle","detectedAdditionalLinesConfig","length","isBoolean","type","getComponentType","FLEXIBLE_VOLUME_COMPONENT_TYPE","DROPDOWN","_extends","PLUSMINUS","Addon","labels","locale","isDecimal","isSelected","isDisabled","linkedSelectorValue","prices","FormatCurrency","getPrice","BillingPeriod","ANNUAL","MONTHLY","Locale","CurrencyCode","decimals","perLabel","year","month","isChecked","addonFields","newAddonLines","AddonsWrapper","accountSubscriptions","legacyAddons","rest","_objectWithoutProperties","_excluded","setAddons","selectedValues","setSelectedValues","Set","filteredAddons","fixedQuantity","loadSessionState","selectedValuesSet","keys","forEach","add","updatedAddonLines","onChangeAddon","oldState","delete","getLinkedSelectorValue","isUndefined","basePlanUnit","CardSelector","wrap","displayPriceWithDecimal","productSku","BasePlanSection","isMobileView","isAnnual","userLabel","yearLabel","monthLabel","loggedInNoUpgrade","billingTenure","setContent","logo","setLogo","setDescription","setTitle","calculatedBasePrice","setCalculatedBasePrice","planPriceIndex","leftOption","price","_basePlanSku$icon","_basePlanSku$descript","_basePlanSku$title","data","quantityDisplayLabel","ConnectedBuyFormatCurrency","mapBuyOrderSummaryActions","setBillingFrequency","frequency","setIsUserOptOut","isUserOutOut","marketingActions","setDisplayOptOut","displayOutOut","addonLine","setTotalDiscount","discount","closeErrorModal","modalActions","setModalOpen","setBillingTenure","tenure","setFinalTotal","finalTotal","setTotalVolumeDiscount","volumeDiscount","setValidCoupons","validCoupons","buyCouponActions","setCouponValidAndApplied","isValid","BaseLineSummary","monthsText","hasAdditionalLines","setSubTotal","subTotal","section","row","small","AdditionalLinesSummary","line","showSubTotal","isAddon","addonText","cleanUpFunc","total","toLowerCase","AddonsSummaryWrapper","lines","mainTitle","calculateSubTotal","CouponDiscountSummary","percentageOffPromoDiscountLabel","promoDiscountForAnnualSavingsTooltipLabel","couponDiscount","percent","teal","DiscountSummary","annualDiscountLabel","addonsLabels","billingPeriodKeys","totalDiscount","couponServerData","currency","rePriceDiscounts","discountLineClasses","annualDiscount","setAnnualDiscount","setVolumeDiscount","setCouponDiscount","isCouponValid","couponDiscountType","COUPON_DISCOUNT_TYPE","REPRICE","isReprice","couponType","COUPON_TYPE","FIX","skusSelected","couponItems","paymentPlan","BillingPeriodCouponPaymentPlanMapper","every","baseLineCouponData","processCouponCalculations","addonLinesCouponData","calculateAnnualDiscount","leftToggleBillingPeriod","priceWithoutDiscount","annualPrice","getVolumeDiscount","baseLineVolumeDiscount","calculateVolumeDiscount","addonVolumeDiscountSum","addonVolumeDiscount","additionalVolumeDiscountSum","additionalLineVolumeDiscount","finalVolumeDiscount","couponDiscountSum","reduce","sum","currentValue","totalVolumeDiscount","tooltips","totalVolumeDiscountTooltip","TotalSummary","subTotalLabel","estimatedTaxLabel","estimatedTaxPopupInfoLabel","tBDLabel","totalLabel","calculatingLabel","annualPlanNoteLabel","monthlyPlanNoteLabel","totalLoading","calculatedTax","baseLineTotal","additionalLinesTotal","addonLinesTotal","annualContractPlanNoteLabel","annualContractTotalLabel","noteLabels","ANNUALBILLEDMONTHLY","totalLabels","additionalLinesSum","BillingPeriodSwitch","onChangeFn","isLarge","widget","tooltipContent","billingPeriods","setLeftOption","rightOption","setRightOption","isOn","setIsOn","percentageSaved","setPercentageSaved","sessionData","annualBillingFrequency","BillingPeriodKey","console","sessionStorageValue","isValidSessionStorageValue","BillingPeriodKeyMapper","leftTenure","tooltipText","descriptionActive","descriptionInactive","selectedValue","percentage","toFixed","floatPercentage","parseFloat","labelClasses","wrapper","htmlFor","offLabel","subCallout","newBillingTenure","handleChange","check","onLabel","ConnectedBuyOrderSummary","state","props","selectedPlan","disablePlanSelection","couponCode","language","qualtricsProductName","useLocation","isCheckout","setIsCheckout","baselineTotal","setBaselineTotal","setAdditionalLinesTotal","setAddonLinesTotal","setIsAnnual","setRePriceDiscounts","isAddonFlow","isUserLoggedIn","userType","BUY_USER_TYPES","ADDON","billingPeriodTooltips","ANNUALCONTRACT","monthlyTooltip","addonsContent","months","percentageOffPromoDiscount","percentageOffVolumeDiscount","prorateDiscount","proratedAdjustment","ADDONS","AGENT","agentsVolumediscountTooltip","ENDPOINT","endpointsVolumediscountTooltip","MOBILE_ADDON","mobileVolumediscountTooltip","CAMERA_SHARE_ADDON","cameraShareVolumediscountTooltip","ENDPOINT_PROTECTION_ADDON","endpointProtectionVolumediscountTooltip","proratedadjustmentTooltip","removeAdditionalLinesSubTotalKey","loadSessionStorageLinesSummary","sessionLines","skuSelectorSkus","sKUSelectors","sKUSelector","qualtricsData","sKU","purchase_term","purchase_type","order_total","promo_code_applied","site_language","product","sessionBasePlanLine","loadSessionStorageLines","sessionAdditionalLines","sessionAddonLines","enablePlanCustomization","hasAdditionalLinesConfig","keyToCompare","volumeSelectorSku","defaultBundleSize","defaultSku","header","orderSummary","BillingPeriodTimePeriodMapper","Math","random","PRODUCTS","RESOLVE","shortDescription","newState","addOns","percentageOffAnnualDiscount","promoDiscountForAnnualSavingsTooltip","subtotal","estimatedTax","estimatedTaxPopupInfo","tBD","calculating","annualPlanNote","monthlyPlanNote","annualConractPlanNote","annualContractTotal","paymentStyles","terms","pricingNote","displayOptOut","optOut","optOutCheckboxLabel","isUserOptOut","isTabletOrMobileView","TrustArcLogo","trustArcSupport","ConnectedModal","isOpen","modal","isModalOpen","closeable","onClose","upgradeCreditErrorMessage","upgradeCreditErrorAssistance","CommonButton","upgradeClose","_accountSubscriptions","_coupon$couponServerD","getLabelContent","locationInfo","getLocationState","selectedAddons","billingFrequency","calculatedTotal","calculatedCredit","productPrices","anniversaryDate","calculatedNetTotal","currentVolumeDiscountPrice","selectedTierIndex","calculatedProratedAmount","totalAgents","getCheckoutState","getContentLanguage","getModalState","planData","getPlanData","coupon","getCouponState","couponProcessedDataPerSku","isCouponValidAndApplied","couponDoubleDipAmountForNewUser","couponData","getActiveCouponServerData","currSelectedAddons","getCurrentAddons","currentTier","billingFrequencyKey","baseTierAnnualPrice","baseTierMonthlyPrice","currentTierPrice","existingAccountInformation","loggedIn","getUserState","getAccountState","getMarketingState","subscriptionInfo","getSubscriptionInfo","planStartDate","formatDate","Date","sub","startDate","now","extraAddonsSelected","getExtraAddons","currentAgent","getCurrentAgent","currentEndpoint","getCurrentEndpoint","isReplacementBooking","includedAgents","includedEndpoints","agentsAdded","endpointsAdded","agentContent","agentsPrice","endpointsPrice","addonsVolumeDiscountTotal","discountPrice","tierIndex","getAddonVolumeDiscount","userAgentsIncludedAmount","tier","endpointsIncludedAmount","ENDPOINTS_ADDONS_INTERVAL","reverse","epp","addon","pop","endpointIndex","indexOf","splice","disableExtraAddons","ConnectedBuyCustomize","urlPlan","initStateLoaded","setInitStateLoaded","isPlanModalOpen","setIsPlanModalOpen","monthly","annual","user","billedMonthlyPrice","billedAnnualPrice","per","cardLabels","newLicenseCopy","highlightsLabel","cart","useCustomizeCart","recalculatePrice","useCallback","initialData","isAddressComplete","statesOptional","useCustomizePageTracking","dependencies","submitBtnStyles","billingStyles","canUpgradePlan","v2NoDowngrade","volumeSelectors","tempVolumeSelectorValues","defaultBundleQuantity","selectedPlanSku","shortName","VolumeComponentsWrapper","updateVolumeSelectors","selectAddons","selectAddonsDescription","changePlanMethodModalHeader","changePlanModalSubheader","modalCloseButtonText","nextSteps","fatalErrorBlocker","continue","validTo","couponDisclaimer","changePlan","quantityLabelLong","quantityLabelPlural","quantityLabel","contentContinue","quantityPopupInfo","additionalUserLicences","howManyMore","existingUserLicencePlural","existingUserLicense","additional","edit","changeNumberModalHeader","changeNumberModalContent","changePlanUrl","taxTooltip","extraAddons","getBuyFormState","isUserUpgrading","getUpgradingStatus","urlCouponCode","getFatalError","mapBuyFormatCurrencyState","mapBuyFormatCurrencyActions","FormatDecimalCurrency","mapBuyCheckoutFormState","signIn","changePaymentMethodModalHeader","changePaymentMethodModalSubheader","showMe","errorCardinalChallenge","errorCardinalSetup","existingUsersModalContent","existingUsersModalHeader","existingUsersNewEmailButtonText","changeCountryContent","changeCountryHeader","modalCancel","modalReload","loadingSpinnerText","inlineErrors","getCommonCheckoutState","isCardValid","isCvvValid","userInteractedWithFlexField","keyInfo","isCardinalSetupComplete","fingerprint","getFlexState","existingPaymentInformation","clearEmail","isFatalError","fatalErrorType","isScaEnabledForMid","scaToken","tokenString","mapBuyCheckoutFormActions","setUserInteractedWithFlexFieldCvv","interacted","flexActions","setUserInteractedWithFlexField","submitForm","buyFormActions","submitFormUcs","existingUserSubmitForm","existingUserSubmitFormUCS","existingUserSubmitFormUcs","validateAddress","locationActions","setFatalError","message","fatalErrorActions","setCheckoutFormInlineError","commonCheckoutActions","removeCheckoutFormInlineError","userLogin","buyUserActions","setEmailClear","clear","setClearEmail","setChallengeCompleteJwt","jwt","BUY_TRACKING_COMPONENTS","CHECKOUT_PAGE","setCardinalSetupComplete","submitAbandonCart","email","form","submitAbandonedCart","success","isTrial","program","ConnectedCheckoutForm","formikRef","setHasAddressValidationErrors","setGeneralFieldErrors","setHasCardValidationErrors","hasCardValidationErrors","generalFieldErrors","hasAddressValidationErrors","isSubmittingRef","isSubmitting","setIsSubmitting","useSameForBilling","setUseSameForBilling","sessionStorage","getItem","isFormReset","setIsFormReset","isPaymentModalOpen","setIsPaymentModalOpen","showCurrencyModal","setCurrencyModal","showCardinalModal","setCardinalModal","isTaxRequired","setTaxRequired","isCardinalScriptLoaded","setIsCardinalScriptLoaded","onInitialValue","setOnInitialValue","hasExistingPaymentInformation","EXPIRED","isCrossProductFlow","CROSSPRODUCT","TRIALER","isTrialUser","IDENTITY_ONLY","isExpiredTrialUser","cardinalScriptUrl","process","PLATFORM","PROD","qualtricsQZID","useQualtrics","resetFieldTouched","current","fieldKey","setFieldTouched","canValidateAddress","dontForceCompare","isValidationAddressEligible","resetFatalError","trackFormError","trackBillingInfoStep","trackPaymentStep","trackSubmitForm","useCheckoutFormPageTracking","formValues","userEmail","Email","err","onFormErrors","formIds","formErrors","scrollToTop","Cardinal","configure","logging","level","on","ErrorDescription","ErrorNumber","Payment","ExtendedData","ChallengeCancel","TRACKING_EVENTS","CARDINAL_SECURITY_MODAL","eventData","securityModalAction","CARDINAL_SUCCESS","FATAL_ERROR_TYPE","CARDINAL_CHALLENGE","CARDINAL_FAIL","CARDINAL_LOADED","setup","loadCardinalScript","script","createElement","async","addEventListener","CARDINAL_SETUP","body","appendChild","QSI","API","unload","setSubmitting","setFieldValue","CHECKOUTFORM_FIELDS","EXPIRATION_DATE","CARDINAL_PAYMENT","entries","_ref2","formField","formValue","BUY_PARTIAL_NON_VALIDATION_USER_TYPES","CHECKOUTFORM_VALIDATION_EXCLUDE_FIELD_TYPES","validateField","BILLING_FIRST_NAME","FirstName","BILLING_LAST_NAME","LastName","accountInfoProps","billingInfoProps","checkCurrencyConflict","country","originCountry","paymentInfoProps","checkoutSubmissionProps","preSubmit","BUY_TRIAL_ERROR_IDS","CARD_ERROR","ADDRESS_ERROR","validateForm","then","errors","StateCode","TaxNumber","errorList","Password","touched","trialUserValidErrors","errorField","PASSWORD","trialUserValidErrorValues","fieldErrorTuple","trialUserValidErrorKeys","isOnePayFlow","Form","onBlur","formData","firstName","lastName","fieldName","EMAIL","FIRST_NAME","LAST_NAME","initialValue","hasFieldErrors","Boolean","trackAbandon","ConnectedBuyAccountFormInfo","ConnectedBuyBillingFormInfo","ConnectedBuyPaymentFormInfo","ConnectedBuyCheckoutFormSubmission","checkoutStyles","reload","currentForm","setCountryInCookie","CountryCode","removeItem","STREET1","CITY","STATE_CODE","ZIP_CODE","CONTACT_PHONE","purpose","initialValues","wrapperModifier","ConnectedCheckoutFormOnePay","sessionId","orgId","FLEX_KEY","useMetrixScript","text","mapBuyCheckoutFormContainerActions","updateInitialFormState","ConnectedBuyCheckoutFormContainer","useRef","getIsOnePayFlow","useLayoutEffect","formRef","ExpirationDate","BillingFirstName","BillingLastName","City","ContactPhone","Street1","ZipCode","isSameAsAccount","defaultCountryCode","getFormSessionValue","COUNTRY_CODE","getCountryFromCookie","COUNTRIES","US","setFormSessionValues","setValues","fieldValues","setFormValues","Formik","validationSchema","CheckoutSchema","errorContent","validateOnChange","validateOnBlur","onSubmit","_values","formikBag","innerRef","formikProps","errorInvalidCharacter","errorInvalidCVV","errorInvalidEmail","errorInvalidExpirationDate","errorInvalidPassword","errorInvalidPhoneNumber","errorInvalidTaxNumber","errorRequiredAddress","errorRequiredCity","errorRequiredFirstName","errorRequiredLastName","errorRequiredPostalCode","errorRequiredState","errorInvalidCreditCardNumber","emailAddressAlreadyInUse","errorRequiredCVV","errorRequiredCountry","errorRequiredCreditCardNumber","errorRequiredEmail","errorRequiredExpDate","errorRequiredPassword","errorRequiredPhoneNumber","errorInvalidPostalCode","errorGenericMessage","errorInvalidAddress","errorRequiredTaxNumber","passwordStrength","passwordStrengthLevel1","passwordStrengthLevel2","passwordStrengthLevel3","passwordStrengthLevel4","passwordStrengthTipDrawer","passwordStrengthTip1","passwordStrengthTip2","passwordStrengthTip3","mapBuyAccountFormInfoActions","checkExistingUser","view","BuyPasswordValidation","genericPasswordLabel","valid","showPW","setShowPW","isPWFocused","setIsPWFocused","classList","InputWrapperClassList","labelClasslist","Input","e","setBlurState","onFocus","setFocusState","EyeClosed","Eye","PasswordStrengthIndicator","isFocused","steps","createUserAccountStep","CHECKOUTFORM_STEPS","CREATE_USER_ACCOUNT","userAccountCreated","completed","useClearField","createAnAccount","accountStyles","signin","userLogIn","grid","Field","field","meta","InlineErrorView","fieldData","setErrorCall","removeErrorCall","InputField","autoFocus","wrapperClass","trim","existingUserCheck","setItem","manuallyValidateFieldData","_ref3","maxLength","_ref4","_ref5","password","passwordValidationStyles","passwordRequirements","mapBuyBillingFormInfoActions","getCountries","productFamily","setTaxType","setStatesOptional","optional","existingBillingInformation","taxType","countryCode","setCountryCode","showTaxField","setShowTaxField","showIndividualTax","setShowIndividualTax","showBrazilTaxField","setShowBrazilTaxField","showOptionalTaxField","setShowOptionalTaxField","shouldLoadAddressAutoFill","setShouldLoadAddressAutoFill","taxNumbValidation","useTaxNumberValidation","isValidating","setFieldError","TAX_ID","allowAddressAutofill","streetFieldRef","selectedCountry","countries","abbreviation","setAddressErrors","setAddressValues","address","addressLine1","city","postalCode","getFormValuesWithUpdatedAddress","correctedAddress","currentFormValues","existingBillingInfoLocation","handleTaxOptionChanged","isCountriesLoaded","preSelectedCountry","eligibleCountry","defaultCountry","states","hasTaxId","TaxType","useAddressAutoFill","onChangePlace","place","addr","getAddressFromGooglePlace","shouldLoad","validAddress","addressErrors","undefined","updatedFormValues","isTaxGST","clearBillingFields","setBillingValues","accountFieldName","billingFieldName","getFieldProps","firstNameValue","billingInformation","useAccountInfo","billingInfoChecked","accountFirstName","checkSession","ignoreInlineError","autoComplete","accountLastName","Select","selectCountry","selectStyles","inputRef","_ref6","_ref7","pleaseSelect","countryState","code","_ref8","_ref9","phone","_ref10","RadioInputField","taxIndividual","taxBusiness","taxNumber","validate","ismasked","mask","maskChar","gSTOption","vATOption","TAX_COUNTRIES","taxCodeGST","taxCodeVAT","checkValid","checkAlphaNumerical","InfoIcon","gSTDisclaimer","vATDisclaimer","COMPANY_NAME","_ref11","companyName","phoneNumber","federalTaxType","_ref12","addressState","DefaultCountry","contentDefaultCountry","getContentData","checkoutFormStyles","btnText","checkoutCTAButtonText","completePurchase","FormSubmitButton","mapBuyPaymentFormInfoActions","setCardValid","setCvvValid","_existingPaymentInfor","userInteractedWithFlexFieldCvv","microformCreated","isCardInfoEnteredFirstTime","setIsCardInfoEnteredFirstTime","cardCC","cardCvv","heading","paymentDetails","SecureIcon","secure","PencilIcon","selector","CreditIcon","ConnectedFlexForm","shouldRefresh","last4Digits","inputMode","cardNumber","cc","FlexField","flexFieldType","labelCopy","hasError","errorCopyNotEmpty","errorCopyEmpty","hint","expirationDate","cvv","cVVHint","cVV","useBuyTracking","trackingContext","useContext","Error","currentLocation","useMemo","trackingData","useBillingPageTracking","params","componentName","BILLING_PAGE","usePageLoad","SESSION_INFORMATION","contentLoaded","trackCTAClick","url","CLICK_CTA","_params$formikRef$cur","hasTrackedStartForm","setHasTrackedStartForm","hasSetBeforeunload","setHasSetBeforeunload","skipBeforeunload","setSkipBeforeunload","trackAbandonForm","removeEventListener","ABANDON_FORM","usePageLoadV2","LOAD_FORM","BEGIN_CHECKOUT","fieldTouched","START_FORM","BUY_VIEW_PATHS","BUY_CHECKOUT","ERROR_FORM","SUBMIT_FORM","CUSTOMIZE_PAGE","trackCustomizeViewClick","VIEW_ITEM","useConfirmationPageTracking","isLabelsLoaded","invoiceNumber","TRACKING_COMPONENTS","CONFIRMATION_PAGE","VIEW_CONTENT","sessionStorageKeyName","STORED_GA_EVENT_PREFIX","COMPLETE_BUY_FLOW","JSON","parse","trackEvent","PURCHASE","actionField","transaction_id","getCartInfo","setIsValid","setIsValidating","validateTaxNumber"],"sourceRoot":""}