{"version":3,"file":"static/js/01e3de84ee3686448f74.bundle.js","mappings":"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","sources":["webpack://Dobbies.Commerce/./src/modules/dobbies-add-product-to-cart/components/add-product-to-cart.tsx?b960","webpack://Dobbies.Commerce/./src/modules/dobbiesclub-checkout/common/checkout.tsx?e465","webpack://Dobbies.Commerce/./src/modules/dobbiesclub-checkout/common/place-order.tsx?1045","webpack://Dobbies.Commerce/./src/modules/dobbiesclub-checkout/common/empty-active-cart.tsx?4256","webpack://Dobbies.Commerce/./src/modules/dobbiesclub-checkout/methods/place-order.ts?331f","webpack://Dobbies.Commerce/./src/themes/dobbies/views/loyalty-sign-up.view.tsx?5474","webpack://Dobbies.Commerce/./src/themes/dobbiesclub/utilities/input-mask-utility.ts?53bc","webpack://Dobbies.Commerce/./src/themes/dobbiesclub/views/loyalty-sign-up.view.tsx?0a61","webpack://Dobbies.Commerce/./lib/loyalty-sign-up/module-registration.js?ccc8","webpack://Dobbies.Commerce/./src/modules/loyalty-sign-up/components/loyalty-sign-up-small-components.tsx?7106","webpack://Dobbies.Commerce/./src/modules/loyalty-sign-up/loyalty-sign-up.tsx?fd89","webpack://Dobbies.Commerce/./src/modules/loyalty-sign-up/loyalty-sign-up.view.tsx?45ec","webpack://Dobbies.Commerce/./node_modules/moment/locale/ sync ^\\.\\/.*$?b2df","webpack://Dobbies.Commerce/external var \"React\"?0d3b","webpack://Dobbies.Commerce/external var \"ReactDOM\"?853b","webpack://Dobbies.Commerce/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.string.match.js?bbbe"],"sourcesContent":["/* tslint:disable:max-func-body-length */\r\n\r\nimport { Waiting } from '@msdyn365-commerce-modules/utilities';\r\n// import * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport * as React from 'react';\r\nimport { IDobbiesAddProductToCartViewProps } from '../dobbies-add-product-to-cart';\r\n\r\nimport { getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport enum TierType {\r\n Club = 'club',\r\n ClubPlus = 'club-plus',\r\n ClubPremium = 'club-premium',\r\n ClubPlusFreeTrial = 'club-plus-trial',\r\n ClubPlusBoltons = 'club-plus-bolton'\r\n}\r\n\r\nexport interface IDobbiesProductAddToCartProps {\r\n props: IDobbiesAddProductToCartViewProps;\r\n}\r\n\r\ninterface ISelectedProduct extends SimpleProduct {\r\n productVariant?: SimpleProduct;\r\n}\r\n\r\nconst DobbiesProductAddToCart: React.FC = props => {\r\n const [itemAdded, setItemAdded] = React.useState(false);\r\n const { isAuthenticated } = props.props.context.request.user;\r\n const { authenticationMessage, loadingDobbiesExperienceMessage } = props.props.resources;\r\n\r\n const { clubPremiumTierId, clubPlusTierId, clubPlusTrialTierId, clubPlusBoltOnId, clubPlusBoltOnSecondId } = props.props.config;\r\n\r\n const getTier = (props: IDobbiesProductAddToCartProps) => {\r\n const loyaltyGroup = props.props.data.loyaltyCard.result?.LoyaltyGroups && props.props.data.loyaltyCard.result?.LoyaltyGroups[0];\r\n // highestLoyaltCardTier\r\n const highestActiveLoyaltyCardTier = loyaltyGroup && loyaltyGroup.HighestActiveLoyaltyCardTier;\r\n const loyaltyCardTiers = loyaltyGroup && loyaltyGroup.LoyaltyCardTiers;\r\n // Get TierId based on the active cardTier\r\n if (loyaltyCardTiers && loyaltyCardTiers?.length > 0) {\r\n for (const [_, loyaltyCardTier] of loyaltyCardTiers.entries()) {\r\n if (loyaltyCardTier.RecordId === highestActiveLoyaltyCardTier) {\r\n return loyaltyCardTier;\r\n }\r\n }\r\n }\r\n return;\r\n };\r\n\r\n React.useEffect(() => {\r\n const addProductToCart = async () => {\r\n // get product from data that we want to add into cart.\r\n\r\n // VSI CUSTOMIZATION - START\r\n const context = props.props.context.actionContext;\r\n // props.props.context.request.channel!.RecordId\r\n\r\n // Clear cart on page load\r\n const cartState = await getCartState(props.props.context.actionContext);\r\n\r\n const lineItemIdsToRemove = [];\r\n let productToAdd: ISelectedProduct | null;\r\n\r\n const activeCart = cartState.cart;\r\n for (const activeCartLine of activeCart.CartLines || []) {\r\n lineItemIdsToRemove.push(activeCartLine.LineId!);\r\n }\r\n\r\n if (lineItemIdsToRemove.length > 0) {\r\n try {\r\n await cartState.removeCartLines({ cartLineIds: lineItemIdsToRemove });\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n if (!props.props.context.request.query?.tier) {\r\n return;\r\n }\r\n\r\n const tier = props.props.context.request.query.tier.toLowerCase();\r\n const boltonProductToAdd = props.props.context.request.query.productNumber;\r\n\r\n if (tier === TierType.ClubPremium) {\r\n const variantInput = new SelectedVariantInput(clubPremiumTierId!, props.props.context.request.channel!.RecordId);\r\n const newProduct = await getSelectedVariant(variantInput, context);\r\n\r\n productToAdd = newProduct;\r\n } else if (tier === TierType.ClubPlusFreeTrial) {\r\n const variantInput = new SelectedVariantInput(clubPlusTrialTierId!, props.props.context.request.channel!.RecordId);\r\n const newProduct = await getSelectedVariant(variantInput, context);\r\n\r\n productToAdd = newProduct;\r\n } else if (tier === 'club-plus-bolton') {\r\n const loyaltGroups = props.props.data.loyaltyCard.result?.LoyaltyGroups![0];\r\n if (loyaltGroups) {\r\n const highestActiveLoyaltyCardTier = loyaltGroups.HighestActiveLoyaltyCardTier;\r\n const activatedTier = loyaltGroups.LoyaltyCardTiers!.find(card => card.RecordId === highestActiveLoyaltyCardTier);\r\n console.log('activeTier', activatedTier);\r\n if (activatedTier?.TierId === 'Club Plus') {\r\n if (boltonProductToAdd && boltonProductToAdd === '2') {\r\n const variantInput = new SelectedVariantInput(\r\n clubPlusBoltOnSecondId!,\r\n props.props.context.request.channel!.RecordId\r\n );\r\n const newProduct = await getSelectedVariant(variantInput, context);\r\n productToAdd = newProduct;\r\n } else {\r\n const variantInput = new SelectedVariantInput(clubPlusBoltOnId!, props.props.context.request.channel!.RecordId);\r\n const newProduct = await getSelectedVariant(variantInput, context);\r\n productToAdd = newProduct;\r\n }\r\n } else if (\r\n activatedTier?.TierId === 'Club Plus Free Trial' &&\r\n props.props.config.allowBoltonsPurcharseForClubPlusFreeTrial\r\n ) {\r\n if (boltonProductToAdd && boltonProductToAdd === '2') {\r\n const variantInput = new SelectedVariantInput(\r\n clubPlusBoltOnSecondId!,\r\n props.props.context.request.channel!.RecordId\r\n );\r\n const newProduct = await getSelectedVariant(variantInput, context);\r\n productToAdd = newProduct;\r\n } else {\r\n const variantInput = new SelectedVariantInput(clubPlusBoltOnId!, props.props.context.request.channel!.RecordId);\r\n const newProduct = await getSelectedVariant(variantInput, context);\r\n productToAdd = newProduct;\r\n }\r\n } else {\r\n if (\r\n props.props.context.request.query?.tier &&\r\n props.props.context.request.query?.tier.toLowerCase() === 'club-plus-bolton'\r\n ) {\r\n window.location.assign('/checkout?tier=club-plus');\r\n return;\r\n }\r\n window.location.assign('/loyalty');\r\n }\r\n }\r\n } else {\r\n const variantInput = new SelectedVariantInput(clubPlusTierId!, props.props.context.request.channel!.RecordId);\r\n const newProduct = await getSelectedVariant(variantInput, context);\r\n\r\n productToAdd = newProduct;\r\n }\r\n\r\n // if cartLines is empty add product to cart\r\n if (cartState.cart.CartLines && cartState.cart.CartLines.length === 0) {\r\n await cartState.addProductToCart({ product: productToAdd!, count: 1, enableStockCheck: false });\r\n // After adding product to cart redirects user to checkout page\r\n setItemAdded(true);\r\n }\r\n const checkoutLink = props.props.config.newSignupJourneyURL; // Msdyn365.getUrlSync('checkout', props.props.context.actionContext) || '';\r\n\r\n if (tier === TierType.ClubPremium) {\r\n window.location.assign(`${checkoutLink}?tier=club-premium`);\r\n } else if (tier === TierType.ClubPlus) {\r\n window.location.assign(`${checkoutLink}?tier=club-plus`);\r\n } else if (tier === 'club-plus-bolton') {\r\n window.location.assign(`${checkoutLink}?tier=club-plus-bolton`);\r\n } else {\r\n window.location.assign(`${checkoutLink}`);\r\n }\r\n };\r\n\r\n const loyaltyGroups = props.props.data.loyaltyCard.result?.LoyaltyGroups;\r\n const tier =\r\n loyaltyGroups &&\r\n loyaltyGroups.length > 0 &&\r\n loyaltyGroups[0].LoyaltyCardTiers &&\r\n loyaltyGroups[0].LoyaltyCardTiers.length > 0 &&\r\n loyaltyGroups[0].LoyaltyCardTiers[0].TierId;\r\n // If user is authenticated\r\n if (isAuthenticated) {\r\n const userActiveTier = getTier(props);\r\n let shouldRedirectToBoltonsLandingPage = false;\r\n if (\r\n userActiveTier &&\r\n userActiveTier.TierId &&\r\n userActiveTier.TierId.toLowerCase() === 'club' &&\r\n props.props.context.request.query?.tier &&\r\n props.props.context.request.query?.tier.toLowerCase() === 'club-plus-bolton'\r\n ) {\r\n shouldRedirectToBoltonsLandingPage = true;\r\n }\r\n if (\r\n (!userActiveTier || !userActiveTier.TierId) &&\r\n props.props.context.request.query?.tier.toLowerCase() === 'club-plus-bolton'\r\n ) {\r\n shouldRedirectToBoltonsLandingPage = true;\r\n }\r\n if (shouldRedirectToBoltonsLandingPage) {\r\n const boltons_url_path = props.props.context.request.cookies.get('boltons_url_path');\r\n if (boltons_url_path && boltons_url_path.value) {\r\n window.location.assign(`/${boltons_url_path.value}`);\r\n return;\r\n }\r\n window.location.assign('/loyalty_boltons-copy');\r\n return;\r\n }\r\n // if user tierId is not 'club plus' add product to cart and redirect to checkout\r\n if (!props.props.data.loyaltyCard.result?.LoyaltyGroups) {\r\n // redirect user to loyalty page\r\n if (\r\n props.props.context.request.query?.tier &&\r\n props.props.context.request.query?.tier.toLowerCase() === 'club-plus-bolton'\r\n ) {\r\n window.location.assign('/checkout?tier=club-plus');\r\n return;\r\n }\r\n // const loyaltyJoinLink = props.props.context?.app?.config?.loyaltyJoinLink;\r\n !itemAdded && addProductToCart();\r\n // window.location.assign(loyaltyJoinLink);\r\n } else {\r\n // check if loyalty tier is club free then proceed\r\n if (tier && tier.toLowerCase() !== props.props.config.clubPlusText?.toLowerCase()) {\r\n !itemAdded && addProductToCart();\r\n // TODO: if tier is expired what to do\r\n } else if (\r\n tier &&\r\n tier.toLowerCase() === props.props.config.clubPlusText?.toLowerCase() &&\r\n loyaltyGroups &&\r\n loyaltyGroups.length &&\r\n loyaltyGroups[0].LoyaltyCardTiers &&\r\n loyaltyGroups[0].LoyaltyCardTiers.length\r\n ) {\r\n const validToDate = loyaltyGroups && loyaltyGroups[0].LoyaltyCardTiers[0].ValidTo;\r\n const endDate = new Date(validToDate ?? '');\r\n const today = new Date();\r\n const timeDifference = endDate.getTime() - today.getTime() + 24 * 60 * 60 * 1000;\r\n const remainingDays = Math.ceil(timeDifference / (1000 * 60 * 60 * 24));\r\n const daysLimit = props.props.context?.app?.config?.clubPlusRenewalDays || 30;\r\n if (\r\n remainingDays <= daysLimit ||\r\n (props.props.context.request.query?.tier &&\r\n props.props.context.request.query?.tier.toLowerCase() === 'club-plus-bolton')\r\n ) {\r\n !itemAdded && addProductToCart();\r\n } else {\r\n // if (\r\n // props.props.context.request.query?.tier &&\r\n // props.props.context.request.query?.tier.toLowerCase() === 'club-plus-bolton'\r\n // ) {\r\n // // window.location.assign('/checkout?tier=club-plus');\r\n // // return;\r\n // !itemAdded && addProductToCart();\r\n // }\r\n const loyaltyLink = props.props.context?.app?.config?.loyaltyLink;\r\n window.location.assign(loyaltyLink);\r\n }\r\n } else {\r\n // redirects user to loyalty page (so he can view his points)\r\n if (\r\n props.props.context.request.query?.tier &&\r\n props.props.context.request.query?.tier.toLowerCase() === 'club-plus-bolton'\r\n ) {\r\n window.location.assign('/checkout?tier=club-plus');\r\n return;\r\n }\r\n const loyaltyLink = props.props.context?.app?.config?.loyaltyLink;\r\n window.location.assign(loyaltyLink);\r\n }\r\n }\r\n } else {\r\n // if user is not authenticated redirects to checkout\r\n const signinLink = props.props.context.request.user.signInUrl;\r\n setItemAdded(true);\r\n window.location.assign(signinLink!);\r\n }\r\n }, [itemAdded]);\r\n // If user is not authenticated show him/her message with loader and redirects him to signin page\r\n if (isAuthenticated) {\r\n return (\r\n
\r\n
\r\n \r\n {authenticationMessage}\r\n
\r\n
\r\n );\r\n // If user is authenticated display him/her custom message please wait while we're loading club experience\r\n } else {\r\n return (\r\n
\r\n
\r\n \r\n {loadingDobbiesExperienceMessage}\r\n
\r\n
\r\n );\r\n }\r\n};\r\n\r\nexport default DobbiesProductAddToCart;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { checkoutAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { getTenderTypesAsync, resolveCardTypesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport {\r\n Address,\r\n CardPaymentAcceptResult,\r\n CardType,\r\n CartTenderLine,\r\n RetailOperation,\r\n SalesOrder,\r\n TenderType,\r\n TokenizedPaymentCard\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nexport const OPERATIONS = {\r\n PayCard: 201,\r\n PayGiftCertificate: 214,\r\n PayLoyalty: 207,\r\n PayCustomerAccount: 202\r\n};\r\n\r\nconst getCardTypeId = async (ctx: IActionContext, cardPrefix: string = ''): Promise => {\r\n try {\r\n const response = await resolveCardTypesAsync({ callerContext: ctx }, cardPrefix, CardType.Unknown);\r\n if (response && response.length > 0) {\r\n return response[0].TypeId;\r\n }\r\n } catch (error) {\r\n ctx.telemetry.error('Call to resolveCardTypesAsync failed.', error);\r\n }\r\n return undefined;\r\n};\r\n\r\nconst findTenderIdTypeByOperationId = (tenderTypes: TenderType[], operationId: RetailOperation): string | undefined => {\r\n const matchedTenderType = tenderTypes.find(tenderType => tenderType.OperationId === operationId);\r\n if (matchedTenderType) {\r\n return matchedTenderType.TenderTypeId;\r\n }\r\n return;\r\n};\r\n\r\nconst roundNumber = (value: number) => Number(value.toFixed(2));\r\n\r\nasync function getLoyaltyTenderLine(\r\n ctx: IActionContext,\r\n LoyaltyCardId: string,\r\n Amount: number = 0,\r\n Currency: string = 'USD'\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayLoyalty);\r\n return {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n LoyaltyCardId\r\n };\r\n}\r\n\r\nasync function getGiftCardTenderLine(\r\n ctx: IActionContext,\r\n GiftCardId: string = '',\r\n Amount: number = 0,\r\n Currency: string = 'USD',\r\n tenderTypeId?: string,\r\n giftCardPin?: string,\r\n giftCardExpirationYear?: number,\r\n giftCardExpirationMonth?: number\r\n): Promise {\r\n let TenderTypeId = tenderTypeId;\r\n\r\n if (!TenderTypeId) {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayGiftCertificate);\r\n }\r\n\r\n const GiftCardPin = giftCardPin;\r\n const GiftCardExpirationYear = giftCardExpirationYear;\r\n const GiftCardExpirationMonth = giftCardExpirationMonth;\r\n return {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n GiftCardId,\r\n GiftCardPin,\r\n GiftCardExpirationYear,\r\n GiftCardExpirationMonth\r\n };\r\n}\r\n\r\nasync function getCreditCardTenderLine(\r\n ctx: IActionContext,\r\n tokenizedPaymentCard: TokenizedPaymentCard,\r\n cardPrefix: string = '',\r\n Amount: number = 0,\r\n Currency: string = 'USD',\r\n billingAddress?: Address\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n let cartTypeId = tokenizedPaymentCard.CardTypeId;\r\n\r\n if (!cartTypeId) {\r\n cartTypeId = await getCardTypeId(ctx, cardPrefix);\r\n }\r\n\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get card tender type');\r\n }\r\n\r\n if (!cartTypeId) {\r\n throw new Error('Fail to get card type id');\r\n }\r\n\r\n const TenderTypeId = tokenizedPaymentCard.TenderType ?? findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\r\n const cardTenderLine: CartTenderLine = {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n Amount,\r\n TenderTypeId,\r\n CardTypeId: cartTypeId\r\n };\r\n cardTenderLine.TokenizedPaymentCard = {\r\n ...tokenizedPaymentCard,\r\n CardTypeId: cartTypeId,\r\n\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard',\r\n House: tokenizedPaymentCard.House || 'N/A',\r\n ...(tokenizedPaymentCard.CardTokenInfo && {\r\n CardTokenInfo: {\r\n ...tokenizedPaymentCard.CardTokenInfo,\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CardTokenInfo'\r\n }\r\n }),\r\n ...(billingAddress && {\r\n Phone: billingAddress.Phone,\r\n Country: billingAddress.ThreeLetterISORegionName,\r\n Address1: billingAddress.Street,\r\n City: billingAddress.City,\r\n State: billingAddress.State,\r\n Zip: billingAddress.ZipCode\r\n })\r\n };\r\n\r\n return cardTenderLine;\r\n}\r\n\r\n/**\r\n * Get credit card tender line.\r\n * @param context - Action context.\r\n * @param amount - Due amount for credit card.\r\n * @param currency - Currency.\r\n * @param cardPaymentAcceptResult - CardPaymentAcceptResult.\r\n * @param billingAddress - BillingAddress.\r\n * @returns - The credit card tender line.\r\n */\r\nasync function getCreditCardTenderLineForSinglePaymentAuth(\r\n context: IActionContext,\r\n amount: number = 0,\r\n currency: string = 'USD',\r\n cardPaymentAcceptResult?: CardPaymentAcceptResult,\r\n billingAddress?: Address\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: context, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n const tenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\r\n\r\n if (cardPaymentAcceptResult) {\r\n cardPaymentAcceptResult.TokenizedPaymentCard = {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard',\r\n House: 'N/A',\r\n ...(billingAddress && {\r\n Phone: billingAddress.Phone,\r\n Country: billingAddress.ThreeLetterISORegionName,\r\n Address1: billingAddress.Street,\r\n City: billingAddress.City,\r\n State: billingAddress.State,\r\n Zip: billingAddress.ZipCode\r\n })\r\n };\r\n }\r\n\r\n const cardTenderLine: CartTenderLine = {\r\n // @ts-expect-error -- existing data.\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency: currency,\r\n Amount: amount,\r\n TenderTypeId: tenderTypeId,\r\n CardPaymentAcceptResult: cardPaymentAcceptResult\r\n };\r\n\r\n return cardTenderLine;\r\n}\r\n\r\nasync function createCustomerAccountTenderLine(ctx: IActionContext, Amount: number, Currency: string = 'USD'): Promise {\r\n const CustomerId = null;\r\n if (!ctx.requestContext.user.isAuthenticated) {\r\n ctx.telemetry.error('A customer id is required to pay with customer account');\r\n }\r\n\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!tenderTypes) {\r\n ctx.telemetry.error('No tender types found for this channel');\r\n }\r\n\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCustomerAccount);\r\n if (!TenderTypeId) {\r\n ctx.telemetry.error('No customer account tender type');\r\n }\r\n return {\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n\r\n // @ts-expect-error\r\n CustomerId\r\n };\r\n}\r\n\r\nexport const CartCheckout = async (\r\n ctx: IActionContext,\r\n updatedCartVersion?: number,\r\n isPaymentVerificationRedirection?: boolean\r\n): Promise => {\r\n const checkoutState = await getCheckoutState(ctx).catch(error => {\r\n throw error;\r\n });\r\n\r\n const cartState = checkoutState.checkoutCart;\r\n\r\n const channelConfiguration = ctx.requestContext.channel;\r\n\r\n if (!cartState || Object.keys(cartState).length === 0 || !channelConfiguration) {\r\n throw new Error('Fail to placeOrder');\r\n }\r\n\r\n const {\r\n giftCardExtends,\r\n tokenizedPaymentCard,\r\n cardPrefix,\r\n guestCheckoutEmail,\r\n billingAddress,\r\n loyaltyAmount,\r\n cardPaymentAcceptResult,\r\n shouldEnableSinglePaymentAuthorizationCheckout,\r\n isExpressCheckoutApplied,\r\n isExpressAddressApplied\r\n } = checkoutState;\r\n const { Currency } = channelConfiguration;\r\n\r\n let amountDue = cartState.cart.AmountDue || 0;\r\n let cartTenderLines;\r\n const getTenderLinePromises = [];\r\n const loyaltyCardNumber = cartState.cart.LoyaltyCardId;\r\n\r\n // Pay by loyalty first\r\n if (loyaltyAmount && loyaltyCardNumber) {\r\n const chargedAmount = roundNumber(Math.min(loyaltyAmount, amountDue));\r\n const loyaltyTenderLinePromise = getLoyaltyTenderLine(ctx, loyaltyCardNumber, chargedAmount, Currency);\r\n getTenderLinePromises.push(loyaltyTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n\r\n ctx.telemetry.information('Checkout loyalty tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout loyalty tender line is not added when no loyaltyAmount or loyaltyCardNumber.');\r\n }\r\n\r\n // Then by gift card\r\n if (giftCardExtends && giftCardExtends.length > 0) {\r\n giftCardExtends.some(giftCardExtend => {\r\n if (giftCardExtend.Balance && amountDue > 0) {\r\n const chargedAmount = roundNumber(Math.min(giftCardExtend.Balance, amountDue));\r\n const tenderTypeId = giftCardExtend.TenderTypeId;\r\n const giftCardPin = giftCardExtend.Pin;\r\n const giftCardExpirationYear = giftCardExtend.ExpirationDate\r\n ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[1], 10)\r\n : undefined;\r\n const giftCardExpirationMonth = giftCardExtend.ExpirationDate\r\n ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[0], 10)\r\n : undefined;\r\n const creditCardTenderLinePromise = getGiftCardTenderLine(\r\n ctx,\r\n giftCardExtend.Id,\r\n chargedAmount,\r\n Currency,\r\n tenderTypeId,\r\n giftCardPin,\r\n giftCardExpirationYear,\r\n giftCardExpirationMonth\r\n );\r\n getTenderLinePromises.push(creditCardTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n\r\n ctx.telemetry.information('Checkout gift card tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout gift card tender line is not added when no balance or no remaining balance.');\r\n }\r\n return amountDue === 0;\r\n });\r\n }\r\n\r\n // Then by customer account\r\n if (checkoutState.customerAccountAmount > 0) {\r\n const chargedAmount = roundNumber(Math.min(checkoutState.customerAccountAmount, amountDue));\r\n const customerAccountTenderLinePromise = createCustomerAccountTenderLine(ctx, chargedAmount, Currency);\r\n getTenderLinePromises.push(customerAccountTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n\r\n ctx.telemetry.information('Checkout customer account amount tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout customer account amount tender line is not added when customerAccountAmount is 0.');\r\n }\r\n\r\n // Pay the rest by credit card\r\n if (amountDue > 0) {\r\n let creditCardTenderLinePromise: Promise;\r\n\r\n if (\r\n shouldEnableSinglePaymentAuthorizationCheckout &&\r\n (!(isExpressCheckoutApplied && !isExpressAddressApplied) || (isExpressCheckoutApplied && isPaymentVerificationRedirection))\r\n ) {\r\n creditCardTenderLinePromise = getCreditCardTenderLineForSinglePaymentAuth(\r\n ctx,\r\n amountDue,\r\n Currency,\r\n cardPaymentAcceptResult,\r\n billingAddress\r\n );\r\n } else {\r\n if (!tokenizedPaymentCard) {\r\n throw new Error('Fail to placeOrder: no token found');\r\n }\r\n creditCardTenderLinePromise = getCreditCardTenderLine(\r\n ctx,\r\n tokenizedPaymentCard,\r\n cardPrefix,\r\n amountDue,\r\n Currency,\r\n billingAddress\r\n );\r\n }\r\n\r\n getTenderLinePromises.push(creditCardTenderLinePromise);\r\n\r\n ctx.telemetry.information('Checkout credit card tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout credit card tender line is not added when no remaining balance for credit card.');\r\n }\r\n\r\n if (getTenderLinePromises.length > 0) {\r\n // When payment methods is required\r\n cartTenderLines = await Promise.all(getTenderLinePromises).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!cartTenderLines || cartTenderLines.length === 0) {\r\n throw new Error('Fail to placeOrder: fail to get cart tender lines');\r\n }\r\n } else {\r\n ctx.telemetry.information('TenderLinePromises length is 0.');\r\n }\r\n\r\n const cartVersion = updatedCartVersion || cartState.cart.Version;\r\n\r\n ctx.telemetry.information('Checkout checkoutAsync is called.');\r\n\r\n // Proceed checkout\r\n const salesOrder = await checkoutAsync(\r\n { callerContext: ctx, bypassCache: 'get' },\r\n cartState.cart.Id,\r\n guestCheckoutEmail,\r\n undefined,\r\n undefined,\r\n cartTenderLines || null,\r\n cartVersion\r\n ).catch(async error => {\r\n if (checkoutState.shouldEnableSinglePaymentAuthorizationCheckout) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown type.\r\n if (error.data?.AdditionalContext) {\r\n ctx.telemetry.warning('CheckoutAsync call failed. AdditionalContext is sent for single payment auth.');\r\n\r\n await checkoutState.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown type.\r\n await checkoutState.updateRedirectAdditionalContext({\r\n newRedirectAdditionalContext: error?.data?.AdditionalContext as string\r\n });\r\n await checkoutState.updateRedirectPaymentConnectorId({\r\n newRedirectPaymentConnectorId: cardPaymentAcceptResult?.Settings?.PaymentConnectorId as string\r\n });\r\n } else {\r\n ctx.telemetry.warning('CheckoutAsync call failed. AdditionalContext is not sent for single payment auth.');\r\n\r\n await checkoutState.updateIsCheckoutCallFailed({ newIsCheckoutCallFailed: true });\r\n\r\n await checkoutState.updateCheckoutErrorPaymentConnectorId({\r\n newCheckoutErrorPaymentConnectorId: cardPaymentAcceptResult?.Settings?.PaymentConnectorId as string\r\n });\r\n\r\n if (isPaymentVerificationRedirection) {\r\n ctx.telemetry.warning('RefreshCart when isPaymentVerificationRedirection is true.');\r\n\r\n await checkoutState.checkoutCart.refreshCart({});\r\n await checkoutState.updateIsExpressCheckoutApplied({ newIsExpressCheckoutApplied: false });\r\n await checkoutState.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\r\n }\r\n }\r\n }\r\n\r\n throw error;\r\n });\r\n\r\n if (!salesOrder) {\r\n ctx.telemetry.error('Failed to placeOrder: fail to checkout.');\r\n throw new Error('Fail to placeOrder: fail to checkout');\r\n }\r\n\r\n return salesOrder;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { getUrlSync, IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { SalesOrder, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartCheckout } from './checkout';\r\nimport { EmptyActiveCart } from './empty-active-cart';\r\n\r\nexport const PlaceOrder = async (\r\n ctx: IActionContext,\r\n checkoutState: ICheckoutState | undefined,\r\n orderedProducts: SimpleProduct[] | undefined,\r\n redirect: boolean,\r\n updatedCartVersion?: number,\r\n isPaymentVerificationRedirection?: boolean,\r\n updateCustomerDDAttribute?: any,\r\n isFromApplePay?: boolean\r\n) => {\r\n //@ts-ignore\r\n return new Promise(async (resolve: () => void, reject: (reason?: Error) => void) => {\r\n ctx.telemetry.information('Checkout place-order method is triggered.');\r\n\r\n let salesOrder: SalesOrder;\r\n\r\n // Proceed checkout\r\n try {\r\n salesOrder = await CartCheckout(ctx, updatedCartVersion, isPaymentVerificationRedirection);\r\n ctx.requestContext.cookies.set('cp_sales_transaction_id', salesOrder?.Id, {\r\n expires: new Date(new Date().getTime() + 1000 * 60 * 15)\r\n });\r\n if (isFromApplePay) {\r\n const orderConfirmationUrl = getUrlSync('orderConfirmation', ctx) || '';\r\n if (!orderConfirmationUrl) {\r\n reject(new Error('Error: No orderConfirmationUrl'));\r\n return;\r\n }\r\n const separator = orderConfirmationUrl.includes('?') ? '&' : '?';\r\n const url = `${orderConfirmationUrl}${separator}transactionId=${salesOrder.Id}`;\r\n window.location.assign(url);\r\n }\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n // Remove purchased items from the active cart\r\n try {\r\n ctx.telemetry.information('Checkout emptyActiveCart is called.');\r\n await EmptyActiveCart(ctx);\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n if (redirect) {\r\n ctx.telemetry.information('Redirect to order confirmation page.');\r\n updateCustomerDDAttribute();\r\n // Redirect to the order confirmation page\r\n const orderConfirmationUrl = getUrlSync('orderConfirmation', ctx) || '';\r\n if (!orderConfirmationUrl) {\r\n reject(new Error('Error: No orderConfirmationUrl'));\r\n return;\r\n }\r\n\r\n const separator = orderConfirmationUrl.includes('?') ? '&' : '?';\r\n const url = `${orderConfirmationUrl}${separator}transactionId=${salesOrder.Id}`;\r\n window.location.assign(url);\r\n } else {\r\n ctx.telemetry.information('Not redirect to order confirmation page.');\r\n\r\n if (checkoutState) {\r\n const result = await checkoutState.updateSalesOrder({\r\n newSalesOrder: salesOrder,\r\n newOrderedProducts: orderedProducts || []\r\n });\r\n\r\n if (result.status === 'FAILED') {\r\n reject(new Error('Error: Updating error state failed'));\r\n return;\r\n }\r\n } else {\r\n reject(new Error('Error: No checkout state'));\r\n return;\r\n }\r\n resolve();\r\n }\r\n });\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCartState, getCheckoutState } from '@msdyn365-commerce/global-state';\r\n\r\nexport const EmptyActiveCart = async (ctx: IActionContext): Promise => {\r\n let cartState;\r\n let checkoutState;\r\n const lineItemIdsToRemove = [];\r\n\r\n try {\r\n cartState = await getCartState(ctx);\r\n checkoutState = await getCheckoutState(ctx);\r\n } catch (error) {\r\n throw error;\r\n }\r\n\r\n if (!cartState || !cartState.cart) {\r\n throw new Error('Fail to fetch active cart');\r\n }\r\n\r\n if (!checkoutState || !checkoutState.checkoutCart) {\r\n throw new Error('Fail to fetch checkoutCart cart');\r\n }\r\n\r\n const activeCart = cartState.cart;\r\n const checkoutCart = checkoutState.checkoutCart.cart;\r\n\r\n for (const activeCartLine of activeCart.CartLines || []) {\r\n for (const checkoutCartLine of checkoutCart.CartLines || []) {\r\n if (activeCartLine.LineId && activeCartLine.LineId === checkoutCartLine.LineId) {\r\n lineItemIdsToRemove.push(activeCartLine.LineId);\r\n }\r\n }\r\n }\r\n\r\n try {\r\n await cartState.removeCartLines({ cartLineIds: lineItemIdsToRemove });\r\n await cartState.removeAllPromoCodes({});\r\n await checkoutState.removeCheckoutCartId({});\r\n } catch (error) {\r\n throw error;\r\n }\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { PlaceOrder } from '../common/place-order';\r\n\r\nexport default async (\r\n ctx: IActionContext,\r\n checkoutState: ICheckoutState | undefined,\r\n orderedProducts: SimpleProduct[] | undefined,\r\n redirect: boolean,\r\n updatedCartVersion?: number,\r\n isPaymentVerificationRedirection?: boolean,\r\n updateCustomerDDAttribute?: any,\r\n isFromApplePay?: boolean\r\n) => {\r\n return PlaceOrder(\r\n ctx,\r\n checkoutState,\r\n orderedProducts,\r\n redirect,\r\n updatedCartVersion,\r\n isPaymentVerificationRedirection,\r\n updateCustomerDDAttribute,\r\n isFromApplePay\r\n );\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* tslint:disable:max-line-length */\r\n/* tslint:disable:cyclomatic-complexity */\r\n\r\nimport { ILoyaltySignUpViewProps } from '@msdyn365-commerce-modules/account-management/src/modules/loyalty-sign-up/./loyalty-sign-up';\r\nimport {\r\n issueLoyalty,\r\n IssueLoyaltyInput,\r\n updateCustomerAttributes,\r\n updateCustomerAttributesInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, Module, Node, Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport {\r\n Address,\r\n AttributeDefinition,\r\n CustomerAttribute,\r\n LoyaltyGroup\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport moment from 'moment';\r\nimport React, { useEffect, useState } from 'react';\r\nimport MaskInput from 'react-maskinput';\r\nimport {\r\n IHeadingData,\r\n ILoyaltySignUpProps,\r\n ILoyaltySignUpResources,\r\n ISimpleMarketingConsentAttributesData,\r\n ITermsAndConditionsLinkData\r\n} from '../definition-extensions/loyalty-sign-up.ext.props.autogenerated';\r\nimport { ILoyaltySignUpData } from './loyalty-sign-up.data';\r\n\r\nconst LoyaltySignUpView: React.FC> = props => {\r\n const {\r\n LoyaltySignUp,\r\n config: { termsAndConditionsLink },\r\n loading,\r\n slots: { dateOfBirthText }\r\n } = props;\r\n if (loading) {\r\n props.context.telemetry.error(props.resources.moduleWontRenderErrorText);\r\n return null;\r\n }\r\n const attributeDefinition: AttributeDefinition[] = (props.data.attributeDefinitions && props.data.attributeDefinitions.result) || [];\r\n const [mask, setMask] = useState('00/00/0000');\r\n const [maskString, setMaskString] = useState('DD/MM/YYYY');\r\n const [dateOfBirth, setdateOfBirth] = useState(Object);\r\n const [localStore, setLocalStore] = useState(Object);\r\n const [title, setTitle] = useState(Object);\r\n const [gender, setGender] = useState(Object);\r\n const [mobileNumber, setMobileNumber] = useState(Object);\r\n const [promoCode, setPromoCode] = useState('');\r\n const [isEmailChecked, setIsEmailChecked] = useState(Object);\r\n const [isPostChecked, setIsPostChecked] = useState(Object);\r\n const [isResearchChecked, setIsResearchChecked] = useState(Object);\r\n const [isSmsChecked, setIsSmsChecked] = useState(Object);\r\n const [isProfilingChecked, setIsProfilingChecked] = useState(Object);\r\n const [day, setDay] = useState(Object);\r\n const [month, setMonth] = useState(Object);\r\n const [year, setYear] = useState(Object);\r\n const [disabled, setDisabled] = useState(true);\r\n const [error, SetError] = useState('');\r\n const [displayNotification, SetDisplayNotification] = useState(false);\r\n const [overEighteen, SetOverEighteen] = useState(true);\r\n const [isValidDob, SetIsValidDob] = useState(false);\r\n const [isYearOutOfRange, setIsYearOutOfRange] = useState(false);\r\n const [minYear, SetMinYear] = useState(-1);\r\n const [maxYear, SetMaxYear] = useState(-1);\r\n const [dateError, SetDateError] = useState(''); // This state is used to display dob errors while adding dob\r\n const [isAddressError, setIsAddressError] = useState(false); // Will be true if there is no address\r\n const [addressError, setAddressError] = useState(''); // Error message for address\r\n const [inputCheck, setInputCheck] = useState([\r\n {\r\n Name: \"Contactable Email\",\r\n BooleanValue: false,\r\n },\r\n {\r\n Name:\"Contactable Post\",\r\n BooleanValue: false,\r\n },\r\n {\r\n Name:\"Contactable Mobile\",\r\n BooleanValue: false,\r\n }\r\n ]);\r\n\r\n const { loyaltyCard, customerInformation } = props.data;\r\n const loyaltyGroup = loyaltyCard.result?.LoyaltyGroups && loyaltyCard.result?.LoyaltyGroups[0];\r\n const query = props.context.request.query;\r\n const dobbiesClubSiteUrl = props.context.request.app.config.dobbiesClubSiteUrl;\r\n const patternAttribute = {\r\n pattern: `^\\s*\\(?(020[7,8]{1}\\)?[ ]?[1-9]{1}[0-9{2}[ ]?[0-9]{4})|(0[1-8]{1}[0-9]{3}\\)?[ ]?[1-9]{1}[0-9]{2}[ ]?[0-9]{3})\\s*$`\r\n };\r\n\r\n if (!props.context.request.user.isAuthenticated) {\r\n const signinLink = props.context.request.user.signInUrl;\r\n window.location.assign(signinLink!);\r\n }\r\n\r\n useEffect(() => {\r\n const incomingMarketingAttributes = customerInformation.result?.Attributes;\r\n if(incomingMarketingAttributes!.length > 0){\r\n incomingMarketingAttributes?.map(attr => {\r\n if (attr.Name === \"Contactable Post\") {\r\n setIsPostChecked(setAttributeValue(attr.AttributeValue?.BooleanValue!, attr, true));\r\n setInputCheck(prevData => \r\n prevData.map(item => \r\n item.Name === attr.Name ? { ...item, BooleanValue: attr.AttributeValue?.BooleanValue! } : item\r\n ));\r\n }\r\n if (attr.Name === \"Contactable Email\") {\r\n setIsEmailChecked(setAttributeValue(attr.AttributeValue?.BooleanValue!, attr, true));\r\n setInputCheck(prevData => \r\n prevData.map(item => \r\n item.Name === attr.Name ? { ...item, BooleanValue: attr.AttributeValue?.BooleanValue! } : item\r\n ));\r\n }\r\n if (attr.Name === \"Contactable Mobile\") {\r\n setIsSmsChecked(setAttributeValue(attr.AttributeValue?.BooleanValue!, attr, true));\r\n setInputCheck(prevData => \r\n prevData.map(item => \r\n item.Name === attr.Name ? { ...item, BooleanValue: attr.AttributeValue?.BooleanValue! } : item\r\n ));\r\n }\r\n })\r\n }\r\n }, [])\r\n\r\n const getTier = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps) => {\r\n const loyaltyGroup = props.data.loyaltyCard.result?.LoyaltyGroups && props.data.loyaltyCard.result?.LoyaltyGroups[0];\r\n // highestLoyaltCardTier\r\n const highestActiveLoyaltyCardTier = loyaltyGroup && loyaltyGroup.HighestActiveLoyaltyCardTier;\r\n const loyaltyCardTiers = loyaltyGroup && loyaltyGroup.LoyaltyCardTiers;\r\n // Get TierId based on the active cardTier\r\n if (loyaltyCardTiers && loyaltyCardTiers?.length > 0) {\r\n for (const [_, loyaltyCardTier] of loyaltyCardTiers.entries()) {\r\n if (loyaltyCardTier.RecordId === highestActiveLoyaltyCardTier) {\r\n return loyaltyCardTier;\r\n }\r\n }\r\n }\r\n return;\r\n };\r\n\r\n const tier = getTier(props);\r\n\r\n if (tier && tier.TierId !== 'Club') {\r\n // Redirect to club-plus, if user has membership of club plus or club plus free trial\r\n const today = new Date();\r\n const validTill = new Date(props.data.loyaltyCard.result?.LoyaltyGroups![0].LoyaltyCardTiers![0].ValidFrom!);\r\n const expiryDate = new Date(today);\r\n const validNumberOfDays: number = props.app.config.CheckValidityForTheNumberOfDays;\r\n expiryDate.setDate(expiryDate.getDate() + validNumberOfDays);\r\n\r\n // To calculate the time difference of two dates\r\n const differenceInTime = expiryDate.getTime() - validTill.getTime();\r\n\r\n // To calculate the no. of days between two dates\r\n const differenceInDays = differenceInTime / (1000 * 3600 * 24);\r\n console.log('diff', differenceInDays, differenceInDays <= 0);\r\n\r\n if (\r\n query &&\r\n query.tier &&\r\n query.tier.toLowerCase() === 'club-plus-trial' &&\r\n tier &&\r\n (tier.TierId === 'Club Plus' || tier.TierId === 'Club Plus Free Tier')\r\n ) {\r\n window.location.assign(`${dobbiesClubSiteUrl}?tier=club-plus`);\r\n }\r\n }\r\n\r\n // UseEffect hook to set minyear and maxYear into state (useState hooks)\r\n setMinAndMaxYear(props, SetMinYear, minYear, SetMaxYear, maxYear);\r\n // Custom hook to get the customer address count.\r\n const addressCount = useGetAddressesCount(props);\r\n useEffect(() => {\r\n if (addressCount === undefined || addressCount?.length === 0) {\r\n setIsAddressError(true);\r\n } else {\r\n setIsAddressError(false);\r\n setAddressError('');\r\n }\r\n });\r\n\r\n // Get TierId based on the active cardTier Here's the tier ID could be (club, club plus)\r\n const tierId = getTierId(loyaltyGroup);\r\n /* VSI-Customization -- Redirect user based on tier conditions */\r\n redirectUserIfTierExist(props, tierId);\r\n\r\n const loyaltyProgramText =\r\n termsAndConditionsLink &&\r\n _renderTermsAndConditionsText(\r\n termsAndConditionsLink,\r\n props.resources.loyaltyProgramText,\r\n '__term-and-conditions-link',\r\n '__terms-and-conditions-text'\r\n );\r\n const { loyaltyTermsLinkText, dynamicClass } = getDynamicClass(query, props);\r\n\r\n // tslint:disable-next-line:no-any\r\n const updateDOB = (e: any): void => {\r\n const {\r\n resources: { validYearErrorText, ageRestrictionError, validDateErrorText }\r\n } = props;\r\n let isInvalid = false;\r\n let ageRestriction = false;\r\n let invalidYear = false;\r\n let futureDate = false; // If user enters dob greater than today\r\n const dob = e && e.target && e.target.value;\r\n if (parseInt(dob[6], 10) > 2) {\r\n setMaskString('DD/MM/YY');\r\n setMask('00/00/00');\r\n } else {\r\n setMaskString('DD/MM/YYYY');\r\n setMask('00/00/0000');\r\n }\r\n if (moment(dob, 'DD/MM/YYYY').format('DD/MM/YYYY') !== 'Invalid date') {\r\n const inputDob = moment(dob, 'DD/MM/YYYY', true);\r\n const isValidInput = inputDob.isValid();\r\n const inputDate = moment(dob, 'DD/MM/YYYY').format('DD/MM/YYYY');\r\n const today = new Date();\r\n const currentYear = today.getFullYear();\r\n const dobYear = moment(dob, 'DD/MM/YYYY').year();\r\n if (isValidInput) {\r\n const years = moment(inputDate, 'DD/MM/YYYY').fromNow(true); // Years difference from today\r\n if (inputDob < moment()) {\r\n SetIsValidDob(true);\r\n const diffYears = years.split(' ');\r\n const yearLabel = diffYears[1].trim().toLowerCase();\r\n if (yearLabel === 'year' || yearLabel === 'years') {\r\n const _difference = diffYears[0].trim().toLowerCase();\r\n const difference = parseInt(_difference, 10);\r\n if ((dobYear < currentYear && _difference === 'a') || difference < 18) {\r\n // Difference is 'a year' in case of 1 year and x months in case of some months\r\n SetOverEighteen(false);\r\n SetDisplayNotification(true);\r\n ageRestriction = true;\r\n } else if (dobYear < minYear) {\r\n // dob must not be less than 1990\r\n SetDisplayNotification(true);\r\n setIsYearOutOfRange(true);\r\n invalidYear = true;\r\n } else {\r\n SetOverEighteen(true);\r\n SetDisplayNotification(false);\r\n SetDateError(''); // Remove date error if any\r\n }\r\n } else if (dobYear < currentYear) {\r\n // when dobyear is less and difference is just of months or days\r\n SetOverEighteen(false);\r\n SetDisplayNotification(true);\r\n setIsYearOutOfRange(false);\r\n ageRestriction = true;\r\n } else {\r\n futureDate = true; // input date is greater than today\r\n }\r\n } else {\r\n futureDate = true; // input date is greater than today\r\n }\r\n } else {\r\n // date is not valid\r\n isInvalid = true;\r\n }\r\n SetError('');\r\n setdateOfBirth(setAttributeValue(moment(dob, 'DD/MM/YYYY').format('DD/MM/YYYY'), dateOfBirth, false));\r\n updateDayMonthYearAttributes(moment(dob, 'DD/MM/YYYY').format('DD/MM/YYYY'));\r\n } else {\r\n setdateOfBirth((prevState: CustomerAttribute) => ({\r\n ...prevState,\r\n AttributeValue: {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CommercePropertyValue',\r\n StringValue: ''\r\n }\r\n }));\r\n isInvalid = true; // date is not valid\r\n }\r\n if (isInvalid) {\r\n SetDateError(validDateErrorText);\r\n SetIsValidDob(false);\r\n setIsYearOutOfRange(false);\r\n SetDisplayNotification(true);\r\n } else if (futureDate) {\r\n SetIsValidDob(true);\r\n setIsYearOutOfRange(true);\r\n }\r\n let invalidDate = false; // Following code is to check date erorr while entering dob\r\n if (ageRestriction) {\r\n SetError(ageRestrictionError);\r\n invalidDate = true;\r\n } else if (invalidYear || futureDate) {\r\n SetError(validYearErrorText);\r\n invalidDate = true;\r\n }\r\n if (invalidDate) {\r\n SetDateError(validYearErrorText);\r\n }\r\n };\r\n\r\n const setAttributeDefaultValues = () => {\r\n const {\r\n genderAttribute,\r\n titleAttribute,\r\n contactableEmailAttribute,\r\n contactableMobileAttribute,\r\n contactablePostAttribute,\r\n mobileAttribute\r\n } = props.config;\r\n const {\r\n contactableProfilingAttribute,\r\n contactableResearchAttribute,\r\n dayAttribute,\r\n monthAttribute,\r\n yearAttribute,\r\n localStoreAttribute\r\n } = props.config;\r\n // tslint:disable-next-line: cyclomatic-complexity\r\n attributeDefinition?.forEach(attr => {\r\n const Name = attr.Name?.toLowerCase();\r\n if (Name === localStoreAttribute.toLowerCase() && Object.keys(localStore).length === 0) {\r\n setLocalStore(setAttrDefaultValues(attr));\r\n }\r\n if (Name === genderAttribute.toLowerCase() && Object.keys(gender).length === 0) {\r\n setGender(setAttrDefaultValues(attr));\r\n }\r\n if (Name === titleAttribute.toLowerCase() && Object.keys(title).length === 0) {\r\n setTitle(setAttrDefaultValues(attr));\r\n }\r\n if (Name === contactableEmailAttribute.toLowerCase() && Object.keys(isEmailChecked).length === 0) {\r\n setIsEmailChecked(setAttrDefaultValues(attr));\r\n }\r\n if (Name === contactablePostAttribute.toLowerCase() && Object.keys(isPostChecked).length === 0) {\r\n setIsPostChecked(setAttrDefaultValues(attr));\r\n }\r\n if (Name === contactableMobileAttribute.toLowerCase() && Object.keys(isSmsChecked).length === 0) {\r\n setIsSmsChecked(setAttrDefaultValues(attr));\r\n }\r\n if (Name === contactableResearchAttribute.toLowerCase() && Object.keys(isResearchChecked).length === 0) {\r\n setIsResearchChecked(setAttrDefaultValues(attr));\r\n }\r\n if (Name === contactableProfilingAttribute.toLowerCase() && Object.keys(isProfilingChecked).length === 0) {\r\n setIsProfilingChecked(setAttrDefaultValues(attr));\r\n }\r\n if (Name === mobileAttribute.toLowerCase() && Object.keys(mobileNumber).length === 0) {\r\n setMobileNumber(setAttrDefaultValues(attr));\r\n }\r\n if (Name === dayAttribute.toLowerCase() && Object.keys(day).length === 0) {\r\n setDay(setAttrDefaultValues(attr));\r\n }\r\n if (Name === monthAttribute.toLowerCase() && Object.keys(month).length === 0) {\r\n setMonth(setAttrDefaultValues(attr));\r\n }\r\n if (Name === yearAttribute.toLowerCase() && Object.keys(year).length === 0) {\r\n setYear(setAttrDefaultValues(attr));\r\n }\r\n });\r\n };\r\n // Run at initial render and set the attribute values of customer\r\n setAttributeDefaultValues();\r\n\r\n const handleClubPlusScenario = async () => {\r\n // Check if address existed or not\r\n const isValid = validateAttributeValuesForClubPlus();\r\n if (isValid) {\r\n /* -3 If user is dobbies club free member and wants to enroll for club plus membership redirects him to checkout page */\r\n const {\r\n clubFreeTierText,\r\n directDebitAttribute: directDebitAttr,\r\n directDebitAttributeValue,\r\n promoCodeAttribute: promoCodeAttr\r\n } = props.config;\r\n if (\r\n (loyaltyCard.result?.CardNumber &&\r\n tierId?.toLowerCase() === clubFreeTierText?.toLowerCase() &&\r\n query?.tier?.toLowerCase() === 'club-plus') ||\r\n query?.tier?.toLowerCase() === 'club-plus-trial'\r\n ) {\r\n // update attribute Direct Debit\r\n const customer = props.data.customerInformation.result || { Attributes: [], AccountNumber: '' };\r\n const directDebitAttribute = getCustomAttribute(props, directDebitAttr, directDebitAttributeValue);\r\n const promoCodeAttribute = getCustomAttribute(props, promoCodeAttr, promoCode);\r\n // If user previously entered empty promo code filter the array and add newly promo code attribute with udpated value.\r\n const filteredAttributes = customer.Attributes?.filter(x => x.Name?.toLowerCase() !== promoCodeAttr.toLowerCase());\r\n if (customer && directDebitAttribute && filteredAttributes) {\r\n filteredAttributes.push(directDebitAttribute);\r\n filteredAttributes.push(promoCodeAttribute);\r\n }\r\n const input = new updateCustomerAttributesInput(\r\n customer.AccountNumber,\r\n filteredAttributes || [],\r\n props.context.request.apiSettings\r\n );\r\n updateCustomerAttributes(input, props.context.actionContext).then(() => {\r\n if (query && query.tier && query.tier.toLowerCase() === 'club-plus-trial') {\r\n window.location.assign(`${dobbiesClubSiteUrl}?tier=club-plus-trial`);\r\n } else {\r\n window.location.assign(`${dobbiesClubSiteUrl}?tier=club-plus`);\r\n }\r\n return;\r\n });\r\n }\r\n // If cardNumber doesn't exist or Tier is expired it means user wants to enroll for membership\r\n if (!loyaltyCard.result?.CardNumber) {\r\n _issueLoyalty();\r\n }\r\n }\r\n return;\r\n };\r\n // validate attribute values and update state accordingly\r\n const validateAttributeValuesForClubPlus = () => {\r\n const {\r\n resources: { addressRequiredError }\r\n } = props;\r\n if (isAddressError) {\r\n SetError(addressRequiredError);\r\n setAddressError(props.resources.addressRequiredError);\r\n setDisabled(false);\r\n return false;\r\n }\r\n return true;\r\n };\r\n // validate attribute values and update state accordingly\r\n const validateAttributeValues = () => {\r\n const {\r\n resources: {\r\n validDateErrorText,\r\n validYearErrorText,\r\n ageRestrictionError,\r\n validGenderErrorText,\r\n titleErrorMessage,\r\n addressRequiredError\r\n }\r\n } = props;\r\n if (!isValidDob) {\r\n SetError(validDateErrorText);\r\n SetDisplayNotification(true);\r\n setDisabled(false);\r\n return;\r\n }\r\n if (isYearOutOfRange) {\r\n SetError(validYearErrorText);\r\n setDisabled(false);\r\n return;\r\n }\r\n if ((dateOfBirth && dateOfBirth.AttributeValue.StringValue === '') || !isValidDob) {\r\n SetError(validDateErrorText);\r\n setDisabled(false);\r\n return;\r\n }\r\n if (!overEighteen) {\r\n SetError(ageRestrictionError);\r\n setDisabled(false);\r\n return;\r\n }\r\n if (gender && gender.AttributeValue && gender.AttributeValue.StringValue === '') {\r\n SetError(validGenderErrorText);\r\n setDisabled(false);\r\n return;\r\n }\r\n // If localStore default value is set to empty string then set it to default None\r\n if (localStore && localStore.AttributeValue && localStore.AttributeValue.StringValue === '') {\r\n localStore.AttributeValue.StringValue = 'None';\r\n }\r\n if (title && title.AttributeValue && title.AttributeValue.StringValue === '') {\r\n SetError(titleErrorMessage);\r\n setDisabled(false);\r\n return;\r\n }\r\n if (isAddressError) {\r\n SetError(addressRequiredError);\r\n setDisabled(false);\r\n return;\r\n }\r\n return true;\r\n };\r\n // When user wants to enroll for loyalty membership below function will triggered\r\n const updateAttributes = async () => {\r\n const CardNumber = props.data.loyaltyCard.result?.CardNumber;\r\n const {\r\n context,\r\n config: { promoCodeAttribute }\r\n } = props;\r\n if (!props.context.request.user.isAuthenticated) {\r\n return;\r\n }\r\n // If cardNumber doesn't exist then validate attributes\r\n if (!CardNumber) {\r\n const isValid = validateAttributeValues();\r\n if (!isValid) {\r\n return;\r\n }\r\n setDisabled(true);\r\n const _customer = props.data.customerInformation.result || { Attributes: [], AccountNumber: '' };\r\n const attributes = [];\r\n attributes.push(gender);\r\n attributes.push(day);\r\n attributes.push(month);\r\n attributes.push(year);\r\n attributes.push(localStore);\r\n attributes.push(title);\r\n attributes.push(isSmsChecked);\r\n attributes.push(isResearchChecked);\r\n attributes.push(isEmailChecked);\r\n attributes.push(isPostChecked);\r\n attributes.push(isProfilingChecked);\r\n attributes.push(mobileNumber);\r\n // If user doesn't have cardNumber and query param is 'club-plus' send the direct debit attribute\r\n if (\r\n context.request.query?.tier?.toLowerCase() === 'club-plus' ||\r\n context.request.query?.tier?.toLowerCase() === 'club-plus-trial'\r\n ) {\r\n attributes.push(getCustomAttribute(props, props.config.directDebitAttribute, props.config.directDebitAttributeValue));\r\n attributes.push(getCustomAttribute(props, promoCodeAttribute, promoCode));\r\n }\r\n if (_customer) {\r\n _customer.Attributes = attributes;\r\n }\r\n // If cardNumber doesn't exist it means we've to set attributes\r\n const input = new updateCustomerAttributesInput(\r\n _customer.AccountNumber,\r\n _customer.Attributes || [],\r\n context.request.apiSettings\r\n );\r\n updateCustomerAttributes(input, context.actionContext)\r\n .then(async () => {\r\n // Here we need to add several checks\r\n await handleClubPlusScenario();\r\n })\r\n .catch((err: Error) => {\r\n setDisabled(false);\r\n });\r\n } else {\r\n await handleClubPlusScenario();\r\n }\r\n };\r\n\r\n const _issueLoyalty = () => {\r\n if (props.context.request.user.isAuthenticated) {\r\n const input = new IssueLoyaltyInput(props.context.request.apiSettings, props.context.request.user.customerAccountNumber);\r\n issueLoyalty(input, props.context.actionContext)\r\n .then(() => {\r\n if (query && query.tier && query.tier.toLowerCase() === 'club-free') {\r\n window.location.assign(Msdyn365.getUrlSync('loyalty', props.context.actionContext) || '');\r\n } else if (query && query.tier && query.tier.toLowerCase() === 'club-plus-trial') {\r\n window.location.assign(`${dobbiesClubSiteUrl}?tier=club-plus-trial`);\r\n } else {\r\n window.location.assign(`${dobbiesClubSiteUrl}?tier=club-plus`);\r\n }\r\n })\r\n .catch((err: Error) => {\r\n props.telemetry.error(err.message);\r\n props.telemetry.debug(props.resources.loyaltyCardIssue);\r\n setDisabled(false);\r\n });\r\n }\r\n };\r\n\r\n const updateGenderValue = (event: React.ChangeEvent): void => {\r\n const selectedGender = event.target.value;\r\n SetError('');\r\n setGender(setAttributeValue(selectedGender, gender, false));\r\n };\r\n const updateLocalStore = (event: React.ChangeEvent): void => {\r\n const selectedLocalStore = event.target.value;\r\n SetError('');\r\n setLocalStore(setAttributeValue(selectedLocalStore, localStore, false));\r\n };\r\n const updateTitle = (event: React.ChangeEvent): void => {\r\n const selectedTitle = event.target.value;\r\n SetError('');\r\n setTitle(setAttributeValue(selectedTitle, title, false));\r\n };\r\n const updateDayMonthYearAttributes = (dob: string) => {\r\n const [D, M, Y] = dob.split('/');\r\n setDay(setAttributeValue(D, day, false));\r\n setMonth(setAttributeValue(M, month, false));\r\n setYear(setAttributeValue(Y, year, false));\r\n };\r\n /** VSI Customization -- END */\r\n const renderDropDownOptionsForAttribute = (attribute: string) => {\r\n const attr = props.data.attributeDefinitions?.result?.find(x => x.AttributeTypeName?.toLowerCase() === attribute.toLowerCase());\r\n return attr?.EnumerationDetails?.map(e => {\r\n return (\r\n \r\n );\r\n });\r\n };\r\n // Render dropdown options for localstore attribute\r\n const renderLocalStores = () => {\r\n const { localStoreAttribute } = props.config;\r\n const localStoreAttr = props.data.attributeDefinitions?.result?.find(\r\n x => x.AttributeTypeName?.toLowerCase() === localStoreAttribute.toLowerCase()\r\n );\r\n const localStores = localStoreAttr?.EnumerationDetails?.sort((a, b) => a.EnumerationValue!.localeCompare(b.EnumerationValue!));\r\n // Move none value to the start of array\r\n const noneVal =\r\n localStores &&\r\n localStores.find(store => {\r\n return store.EnumerationValue && store.EnumerationValue.toLowerCase() === 'none';\r\n });\r\n localStores?.sort((x, y) => {\r\n return x.EnumerationValue === noneVal?.EnumerationValue ? -1 : y === noneVal?.EnumerationValue ? 1 : 0;\r\n });\r\n return localStores?.map(e => {\r\n return (\r\n \r\n );\r\n });\r\n };\r\n\r\n /* VSI-Customization -- Update button attribute disabled (true or false) based on certain checkbox checked or not */\r\n const handleTermsCheck = (e: React.ChangeEvent) => {\r\n // update state (toggle) based on terms and conditions checkbox checked or not\r\n setDisabled(!e.target.checked);\r\n };\r\n /* VSI Customization -- Check if gender is not selected, display error message */\r\n const _genderNotSelectedErrorMsg = () => {\r\n const { validGenderErrorText } = props.resources;\r\n // Dont display error on adding dob input i.e. before clicking Next button\r\n if (dateError !== '') {\r\n return;\r\n }\r\n if (error !== '' && gender && gender.AttributeValue && gender.AttributeValue.StringValue === '') {\r\n return {validGenderErrorText};\r\n }\r\n return;\r\n };\r\n /* VSI Customization -- Check if title is not selected, display error message */\r\n const titleNotSelectedErrorMsg = () => {\r\n const { titleErrorMessage } = props.resources;\r\n // Dont display error on adding dob input i.e. before clicking Next button\r\n if (dateError !== '') {\r\n return;\r\n }\r\n if (error !== '' && title && title.AttributeValue && title.AttributeValue.StringValue === '') {\r\n return {titleErrorMessage};\r\n }\r\n return;\r\n };\r\n // Render loyalty terms link\r\n const _renderLoyaltyTermsLink = () => {\r\n const termsUrl = Msdyn365.getUrlSync('club-terms-and-conditions', props.context.actionContext);\r\n return (\r\n \r\n );\r\n };\r\n // event handler for mobile field\r\n const handleMobileNumber = (event: React.ChangeEvent) => {\r\n const value = event.target.value;\r\n setMobileNumber(setAttributeValue(value, mobileNumber, false));\r\n };\r\n // Event handler for marketing consent attributes\r\n const handleMarketingConsent = (event: React.ChangeEvent) => {\r\n const {\r\n contactableEmailAttribute,\r\n contactableMobileAttribute,\r\n contactablePostAttribute,\r\n contactableProfilingAttribute,\r\n contactableResearchAttribute\r\n } = props.config;\r\n const targetName = event.target.name.toLowerCase();\r\n const isChecked = event.target.checked;\r\n if (targetName === contactablePostAttribute.toLowerCase()) {\r\n setIsPostChecked(setAttributeValue(isChecked, isPostChecked, true));\r\n setInputCheck(prevData => \r\n prevData.map(item => \r\n item.Name.toLowerCase() === targetName ? { ...item, BooleanValue: isChecked } : item\r\n ));\r\n }\r\n if (targetName === contactableEmailAttribute.toLowerCase()) {\r\n setIsEmailChecked(setAttributeValue(isChecked, isEmailChecked, true));\r\n setInputCheck(prevData => \r\n prevData.map(item => \r\n item.Name.toLowerCase() === targetName ? { ...item, BooleanValue: isChecked } : item\r\n ));\r\n }\r\n if (targetName === contactableResearchAttribute.toLowerCase()) {\r\n setIsResearchChecked(setAttributeValue(isChecked, isResearchChecked, true));\r\n }\r\n if (targetName === contactableMobileAttribute.toLowerCase()) {\r\n setIsSmsChecked(setAttributeValue(isChecked, isSmsChecked, true));\r\n setInputCheck(prevData => \r\n prevData.map(item => \r\n item.Name.toLowerCase() === targetName ? { ...item, BooleanValue: isChecked } : item\r\n ));\r\n }\r\n if (targetName === contactableProfilingAttribute.toLowerCase()) {\r\n setIsProfilingChecked(setAttributeValue(isChecked, isProfilingChecked, true));\r\n }\r\n };\r\n // Render Marketing consent attributes section\r\n const renderMarketingConsentSection = () => {\r\n const cardNumber = props.data.loyaltyCard.result?.CardNumber;\r\n const {\r\n marketingPreferenceHeading,\r\n clubMarketingConsentDescription,\r\n clubPlusMarketingConsentDescription,\r\n updatePreferenceText\r\n } = props.resources;\r\n const { clubPlusMarketingConsentAttributes, simpleMarketingConsentAttributes } = props.config;\r\n if (!cardNumber) {\r\n return (\r\n <>\r\n
\r\n
\r\n

{marketingPreferenceHeading}

\r\n

{clubMarketingConsentDescription}

\r\n
\r\n {/* Render club marketing consent attributes section */}\r\n
\r\n {simpleMarketingConsentAttributes && renderMarketingConsentAttributes(simpleMarketingConsentAttributes)}\r\n
\r\n

{clubPlusMarketingConsentDescription}

\r\n
\r\n {/* Render club plus marketing consent attributes section */}\r\n
\r\n {clubPlusMarketingConsentAttributes &&\r\n renderMarketingConsentAttributes(clubPlusMarketingConsentAttributes)}\r\n
\r\n
\r\n

{updatePreferenceText}

\r\n
\r\n
\r\n
\r\n {props.signInLink}\r\n \r\n );\r\n }\r\n return;\r\n };\r\n // Render checkboxes for marketing consent attributes\r\n const renderMarketingConsentAttributes = (marketingConsentAttributes: ISimpleMarketingConsentAttributesData[]) => {\r\n return marketingConsentAttributes.map(attr => {\r\n const { attributeLabel, attributeName } = attr;\r\n const filteredInputCheck = inputCheck.find(attr2 => attr2.Name === attributeName && attr2.BooleanValue);\r\n if(filteredInputCheck){\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }else{\r\n return(\r\n \r\n \r\n \r\n \r\n )\r\n }\r\n });\r\n };\r\n // Render date of birth field and display error message if occurs\r\n const renderDateOfBirthField = () => {\r\n const { dateOfBirthLabel } = props.resources;\r\n return (\r\n
\r\n
\r\n \r\n \r\n {/* slot will be rendered for dob description text */}\r\n {dateOfBirthText && dateOfBirthText}\r\n \r\n {_invalidDobErrorMsg(\r\n displayNotification,\r\n error,\r\n dateError,\r\n isValidDob,\r\n overEighteen,\r\n props.resources,\r\n isYearOutOfRange,\r\n minYear,\r\n maxYear\r\n )}\r\n
\r\n );\r\n };\r\n // Render local store select element\r\n const renderLocalStoreField = () => {\r\n const { storeLabel } = props.resources;\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n };\r\n // Render mobile field\r\n const renderMobileField = () => {\r\n const { mobileLabel } = props.resources;\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n };\r\n // Render select element for given attribute\r\n const renderSelectElement = (\r\n label: string,\r\n onChangeHandler: React.ChangeEventHandler,\r\n dropdownLabel: string,\r\n attribute: string\r\n ) => {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n const handlePromoCodeChange = (e: React.ChangeEvent) => {\r\n setPromoCode(e.currentTarget.value);\r\n };\r\n const renderPromoCodeField = () => {\r\n const {\r\n resources: { promoCodeLabel }\r\n } = props;\r\n // const cardNumber = props.data.loyaltyCard.result?.CardNumber;\r\n // if (cardNumber || (!cardNumber && query?.tier?.toLowerCase() === 'club-plus')) {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n // }\r\n // return;\r\n };\r\n\r\n // Render Loyalty terms and conditions section with Action button\r\n const renderLoyaltyTermsAndConditionsSection = () => {\r\n const { joinLoyaltyButtonText } = props.resources;\r\n return (\r\n
\r\n
{renderHeading(props.config.heading)}
\r\n
\r\n

{loyaltyProgramText}

\r\n
\r\n
\r\n \r\n {_renderLoyaltyTermsLink()}\r\n
\r\n {/* To handle click functionality overriding the loyalty sign up button */}\r\n {\r\n \r\n }\r\n
\r\n );\r\n };\r\n // Render full view for loyalty sign up page\r\n const renderLoyaltySignUpView = () => {\r\n const { titleLabel, pleaseSelectText, genderLabel } = props.resources;\r\n const { nonClubMemberStatement, memberStatement } = props.config;\r\n const { titleAttribute, genderAttribute } = props.config;\r\n const CardNumber = props.data.loyaltyCard.result?.CardNumber;\r\n const tierID = tierId?.toLowerCase();\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n {displayHeading(props)}\r\n
\r\n {tierID === 'club' ?

{memberStatement}

:

{nonClubMemberStatement}

}\r\n
\r\n
\r\n
\r\n
\r\n {renderMainHeading(props)}\r\n {!CardNumber && (\r\n <>\r\n {renderSelectElement(titleLabel, updateTitle, pleaseSelectText, titleAttribute)}\r\n {titleNotSelectedErrorMsg()}\r\n {renderFirstAndLastName(props)}\r\n {renderMobileField()}\r\n {renderDateOfBirthField()}\r\n \r\n )}\r\n {props.slots.address}\r\n {addressError !== '' && {addressError}}\r\n {!CardNumber && (\r\n <>\r\n {renderSelectElement(genderLabel, updateGenderValue, pleaseSelectText, genderAttribute)}\r\n {_genderNotSelectedErrorMsg()}\r\n {renderLocalStoreField()}\r\n \r\n )}\r\n {renderPromoCodeField()}\r\n
\r\n {renderMarketingConsentSection()}\r\n {renderLoyaltyTermsAndConditionsSection()}\r\n
\r\n
\r\n
\r\n );\r\n };\r\n // Due to use of useState hooks inside this function need to disable tslint\r\n // tslint:disable-next-line: max-func-body-length\r\n const renderJSX = (): JSX.Element => {\r\n const { redirectingLoaderText, authenticationMessage } = props.resources;\r\n let { clubFreeTierText, clubPlusTierText } = props.config;\r\n clubFreeTierText = clubFreeTierText?.toLowerCase();\r\n clubPlusTierText = clubPlusTierText?.toLowerCase();\r\n const tierID = tierId?.toLowerCase();\r\n const queryParam = query?.tier?.toLowerCase();\r\n const CardNumber = props.data.loyaltyCard.result?.CardNumber;\r\n if (!props.context.request.user.isAuthenticated) {\r\n return ;\r\n } else if (CardNumber && tierID === clubFreeTierText && queryParam === 'club-free') {\r\n return ;\r\n } else if (CardNumber && tierID === clubPlusTierText && (queryParam === 'club-plus' || queryParam === 'club-plus-trial')) {\r\n return ;\r\n } else if (CardNumber && tierID === clubPlusTierText && queryParam === 'club-free') {\r\n return ;\r\n } else {\r\n return <>{renderLoyaltySignUpView()};\r\n }\r\n };\r\n // Here's the main rendering\r\n return <>{renderJSX()};\r\n};\r\n// Custom hook to get custom address count\r\nconst useGetAddressesCount = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps) => {\r\n const [addressCount, setAddressCount] = useState([]);\r\n useEffect(() => {\r\n setAddressCount(props.data.getCustomerAddress.result?.addresses);\r\n });\r\n return addressCount;\r\n};\r\n\r\n// Provide the TierId of user's loyalty\r\nconst getTierId = (loyaltyGroup: LoyaltyGroup | undefined) => {\r\n // highestLoyaltCardTier\r\n const highestActiveLoyaltyCardTier = loyaltyGroup && loyaltyGroup.HighestActiveLoyaltyCardTier;\r\n const loyaltyCardTiers = loyaltyGroup && loyaltyGroup.LoyaltyCardTiers;\r\n if (loyaltyCardTiers && loyaltyCardTiers?.length > 0) {\r\n for (const [_, loyaltyCardTier] of loyaltyCardTiers.entries()) {\r\n if (loyaltyCardTier.RecordId === highestActiveLoyaltyCardTier) {\r\n return loyaltyCardTier.TierId;\r\n }\r\n }\r\n }\r\n return;\r\n};\r\n\r\nconst renderMainHeading = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps) => {\r\n if (!props.data.loyaltyCard.result?.CardNumber) {\r\n return (\r\n <>\r\n {renderHeading(props.config.memberHeading)}\r\n
\r\n

{props.resources.additionalDetailsLabel}

\r\n
\r\n \r\n );\r\n }\r\n return;\r\n};\r\n// this will return attribute which we need to for club plus members like (direct debit, promo code).\r\nconst getCustomAttribute = (\r\n props: ILoyaltySignUpViewProps & ILoyaltySignUpProps,\r\n attribute: string,\r\n value: string\r\n): CustomerAttribute => {\r\n // const { directDebitAttribute, directDebitAttributeValue} = props.config;\r\n const defaultAttribute = props.data.attributeDefinitions.result?.find(attr => attr.Name?.toLowerCase() === attribute?.toLowerCase());\r\n return {\r\n ['AttributeValue']: {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CommercePropertyValue',\r\n StringValue: value\r\n },\r\n ['@odata.type']: '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CustomerAttribute',\r\n ['ExtensionProperties@odata.type']: '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.CommerceProperty)',\r\n ['NameTranslations@odata.type']: '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.TextValueTranslation)',\r\n ['NameTranslations']: [],\r\n ['DataTypeValue']: defaultAttribute && defaultAttribute.DataTypeValue,\r\n ['KeyName']: defaultAttribute && defaultAttribute.Name,\r\n ['Name']: defaultAttribute && defaultAttribute.Name,\r\n ['RecordId']: defaultAttribute && defaultAttribute.RecordId,\r\n ['ExtensionProperties']: []\r\n };\r\n};\r\n// This function will render generic headings\r\nconst renderHeading = (heading: (IHeadingData & IHeadingData) | undefined) => {\r\n return heading?.text && ;\r\n};\r\n// Render Customer's first and last name\r\nconst renderFirstAndLastName = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps) => {\r\n const {\r\n customerInformation: { result }\r\n } = props.data;\r\n return (\r\n
\r\n
\r\n {props.resources.firstNameLabel}\r\n {result?.FirstName}\r\n
\r\n
\r\n {props.resources.lastNameLabel}\r\n {result?.LastName}\r\n
\r\n
\r\n );\r\n};\r\n// Function for setting attribute default value\r\nconst setAttrDefaultValues = (attribute: CustomerAttribute) => {\r\n return {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CustomerAttribute',\r\n Attribute: undefined,\r\n DataTypeValue: attribute.DataTypeValue,\r\n KeyName: attribute.Name,\r\n Name: attribute.Name,\r\n RecordId: attribute.RecordId,\r\n Units: undefined,\r\n AttributeValue: {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CommercePropertyValue',\r\n StringValue: attribute.DataTypeValue === 5 ? '' : null,\r\n BooleanValue: attribute.DataTypeValue === 6 ? false : null\r\n },\r\n 'ExtensionProperties@odata.type': '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.CommerceProperty)',\r\n ExtensionProperties: [],\r\n 'NameTranslations@odata.type': '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.TextValueTranslation)',\r\n NameTranslations: []\r\n };\r\n};\r\n\r\nconst setAttributeValue = (value: string | boolean, attribute: CustomerAttribute, isBoolean: boolean) => {\r\n return {\r\n ['AttributeValue']: {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CommercePropertyValue',\r\n IntegerValue: null,\r\n BooleanValue: isBoolean ? value : null,\r\n StringValue: isBoolean ? null : value,\r\n DecimalValue: null\r\n },\r\n ['@odata.type']: '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CustomerAttribute',\r\n ['ExtensionProperties@odata.type']: '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.CommerceProperty)',\r\n ['NameTranslations@odata.type']: '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.TextValueTranslation)',\r\n ['NameTranslations']: [],\r\n ['DataTypeValue']: (attribute && attribute.DataTypeValue) || '',\r\n ['KeyName']: (attribute && attribute.Name) || '',\r\n ['Name']: (attribute && attribute.Name) || '',\r\n ['RecordId']: (attribute && attribute.RecordId) || '',\r\n ['ExtensionProperties']: []\r\n };\r\n};\r\n// Will render generic loader with given message\r\nconst RenderErrorMessageWithLoader: React.FC<{ message: string }> = ({ message }) => {\r\n return (\r\n
\r\n
\r\n \r\n {message}\r\n
\r\n
\r\n );\r\n};\r\n// Redirects the user based on certain criteria defined inside function\r\nconst redirectUserIfTierExist = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps, tierId: string | undefined) => {\r\n const { clubFreeTierText, clubPlusTierText } = props.config;\r\n const {\r\n data: { loyaltyCard },\r\n context: {\r\n request: { query }\r\n }\r\n } = props;\r\n // -1 If user is already dobbies club free member and wants to enroll for it again\r\n // redirects him to loyalty page\r\n if (\r\n loyaltyCard.result?.CardNumber &&\r\n tierId?.toLowerCase() === clubFreeTierText?.toLowerCase() &&\r\n query?.tier?.toLowerCase() === 'club-free'\r\n ) {\r\n // redirects him to loyalty page.\r\n window.location.assign(Msdyn365.getUrlSync('loyalty', props.context.actionContext) || '');\r\n return;\r\n }\r\n /* -2 If user is already dobbies club plus member and wants to enroll for it again redirects him to loyalty page */\r\n if (\r\n loyaltyCard.result?.CardNumber &&\r\n tierId?.toLowerCase() === clubPlusTierText?.toLowerCase() &&\r\n query?.tier?.toLowerCase() === 'club-plus'\r\n ) {\r\n // redirects him to loyalty page.\r\n window.location.assign(Msdyn365.getUrlSync('loyalty', props.context.actionContext) || '');\r\n return;\r\n }\r\n\r\n /* -2 If user is already dobbies club plus member and wants to enroll for it again redirects him to loyalty page */\r\n if (\r\n loyaltyCard.result?.CardNumber &&\r\n tierId?.toLowerCase() === clubPlusTierText?.toLowerCase() &&\r\n query?.tier?.toLowerCase() === 'club-plus'\r\n ) {\r\n // redirects him to loyalty page.\r\n window.location.assign(Msdyn365.getUrlSync('loyalty', props.context.actionContext) || '');\r\n return;\r\n }\r\n /* -3 If user is club plus member now he mistakenly wants to enroll in free tier redirects him to loyalty page */\r\n if (\r\n loyaltyCard.result?.CardNumber &&\r\n tierId?.toLowerCase() === clubPlusTierText?.toLowerCase() &&\r\n query?.tier?.toLowerCase() === 'club-free'\r\n ) {\r\n // redirects him to loyalty page.\r\n window.location.assign(Msdyn365.getUrlSync('loyalty', props.context.actionContext) || '');\r\n return;\r\n }\r\n\r\n /* -4 If user is already dobbies club plus member and wants to enroll in dobbies free club trial redirects him to loyalty page */\r\n if (\r\n loyaltyCard.result?.CardNumber &&\r\n tierId?.toLowerCase() === clubPlusTierText?.toLowerCase() &&\r\n query?.tier?.toLowerCase() === 'club-plus'\r\n ) {\r\n // redirects him to loyalty page.\r\n window.location.assign(Msdyn365.getUrlSync('loyalty', props.context.actionContext) || '');\r\n return;\r\n }\r\n};\r\n\r\nconst _invalidDobErrorMsg = (\r\n displayNotification: boolean,\r\n error: string,\r\n dateError: string,\r\n isValidDob: Boolean,\r\n overEighteen: boolean,\r\n resources: ILoyaltySignUpResources,\r\n isYearOutOfRange: boolean,\r\n minYear: number,\r\n maxYear: number\r\n) => {\r\n const { validDateErrorText, ageRestrictionError, validYearErrorText } = resources;\r\n const yearRangeErrorText = validYearErrorText.replace('{minYear}', minYear.toString()).replace('{maxYear}', maxYear.toString());\r\n if ((error !== '' || dateError !== '') && displayNotification && !isYearOutOfRange) {\r\n return (\r\n \r\n {!isValidDob ? validDateErrorText : !overEighteen ? ageRestrictionError : undefined}\r\n \r\n );\r\n }\r\n if (error !== '' && isValidDob && isYearOutOfRange) {\r\n return {yearRangeErrorText};\r\n }\r\n return;\r\n};\r\n\r\nconst _renderTermsAndConditionsText = (\r\n termsAndConditionLink: ITermsAndConditionsLinkData,\r\n termsAndConditionsText: string,\r\n linkClass: string,\r\n textClass: string\r\n) => {\r\n const termsAndConditionLinkData: Msdyn365.ILinksData = {\r\n ariaLabel: termsAndConditionLink.ariaLabel || undefined,\r\n className: linkClass,\r\n linkText: termsAndConditionLink.linkText,\r\n linkUrl: termsAndConditionLink.linkUrl && termsAndConditionLink.linkUrl.destinationUrl\r\n };\r\n return (\r\n \r\n {termsAndConditionsText}\r\n \r\n \r\n );\r\n};\r\n// Display main heading on page to differentiate b/w Club and Club Plus page\r\nconst displayHeading = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps) => {\r\n const { joiningClubPlusText, joiningClubText, joiningClubPlusTrialText } = props.resources;\r\n const query = props.context.request.query;\r\n if (query?.tier?.toLowerCase() === 'club-free') {\r\n return

{joiningClubText}

;\r\n } else if (query?.tier?.toLowerCase() === 'club-plus-trial') {\r\n return

{joiningClubPlusTrialText}

;\r\n } else if (query?.tier?.toLowerCase() === 'club-plus') {\r\n return

{joiningClubPlusText}

;\r\n } else {\r\n return

{joiningClubText}

;\r\n }\r\n};\r\n// Will update state after getting maxYear and minYear from values coming from D365 for Year Attribute\r\n// tslint:disable-next-line: max-line-length\r\nconst setMinAndMaxYear = (\r\n props: ILoyaltySignUpViewProps & ILoyaltySignUpProps,\r\n SetMinYear: React.Dispatch>,\r\n minYear: number,\r\n SetMaxYear: React.Dispatch>,\r\n maxYear: number\r\n): void => {\r\n useEffect(() => {\r\n if (minYear === -1 && maxYear === -1) {\r\n const attributes = props.data.attributeDefinitions.result;\r\n const yearAttr = attributes?.find(x => x.Name?.toLowerCase() === 'year');\r\n let years: number[] | undefined = [];\r\n let _minYear;\r\n if (yearAttr) {\r\n years = yearAttr.EnumerationDetails?.map(enumeration => {\r\n // tslint:disable-next-line: radix\r\n return parseInt(enumeration.EnumerationValue!);\r\n });\r\n _minYear = years && Math.min.apply(null, years);\r\n }\r\n SetMinYear(_minYear ? _minYear : minYear);\r\n // Now calculate max year as 18 years back from current date\r\n const date = new Date();\r\n const maximumYear = date.getFullYear() - 18;\r\n SetMaxYear(maximumYear);\r\n }\r\n });\r\n};\r\n// Provide dynamic class based on query param for club and club plus\r\nconst getDynamicClass = (\r\n query: Msdyn365.IDictionary | undefined,\r\n props: React.PropsWithChildren>\r\n) => {\r\n let dynamicClass: string = 'dobbies-club-free';\r\n let loyaltyTermsLinkText: string = '';\r\n const queryParam = query && query.tier && query.tier.toLowerCase();\r\n if (queryParam === 'club-free') {\r\n dynamicClass = 'dobbies-club-free';\r\n loyaltyTermsLinkText = props.resources.loyaltyTermsLinkText;\r\n } else if (queryParam === 'club-plus' || queryParam === 'club-plus-trial') {\r\n dynamicClass = 'dobbies-club-plus club-signup-bg';\r\n loyaltyTermsLinkText = props.resources.loyaltyPlusTermsLinkText;\r\n }\r\n return { loyaltyTermsLinkText, dynamicClass };\r\n};\r\nexport default LoyaltySignUpView;\r\n","const handleMask = (event: React.KeyboardEvent, mask: string) => {\r\n const target = event.target as HTMLInputElement;\r\n \r\n event.stopPropagation();\r\n event.preventDefault();\r\n\r\n // If charCode is not available\r\n if (!event.charCode) return;\r\n\r\n const c = String.fromCharCode(event.charCode);\r\n // If character is not a digit, exit\r\n if (c.match(/\\D/)) return;\r\n\r\n let val = target.value.substring(0, target.selectionStart!) + c + target.value.substr(target.selectionEnd!);\r\n let pos = target.selectionStart! + 1;\r\n\r\n // Count NaN values (non-numeric characters) before removing the separators\r\n const nan = count(val, /\\D/, pos);\r\n val = val.replace(/\\D/g, '');\r\n\r\n const maskParts = mask.match(/^(\\D*)(.+9)(\\D*)$/);\r\n if (!maskParts) return; // Throw an exception if needed\r\n\r\n // Check if value exceeds the number of 9's in the mask\r\n if (val.length > count(maskParts[2], /9/)) return;\r\n\r\n let txt = '';\r\n let im = 0;\r\n let iv = 0;\r\n\r\n // Create the masked value\r\n while (im < maskParts[2].length && iv < val.length) {\r\n const maskChar = maskParts[2].charAt(im);\r\n txt += maskChar.match(/\\D/) ? maskChar : val.charAt(iv++);\r\n im += 1;\r\n }\r\n\r\n // Update the target value\r\n target.value = maskParts[1] + txt + maskParts[3];\r\n \r\n // Update the selection range after input\r\n target.selectionStart = target.selectionEnd = pos + \r\n (pos === 1 ? maskParts[1].length : count(target.value, /\\D/, pos) - nan);\r\n\r\n /**\r\n * Count occurrences of a pattern in a string up to a specific point\r\n * \r\n * @param str string to search\r\n * @param c pattern to match\r\n * @param e index to stop counting\r\n * @returns count of matches\r\n */\r\n function count(str: string, c: RegExp, e?: number): number {\r\n e = e || str.length;\r\n let n = 0;\r\n for (let i = 0; i < e; i += 1) {\r\n if (str.charAt(i).match(c)) n += 1;\r\n }\r\n return n;\r\n }\r\n}\r\n\r\nexport default handleMask;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* tslint:disable:max-line-length */\r\n/* tslint:disable:cyclomatic-complexity */\r\n\r\nimport { ILoyaltySignUpViewProps } from '@msdyn365-commerce-modules/account-management/src/modules/loyalty-sign-up/./loyalty-sign-up';\r\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n issueLoyalty,\r\n IssueLoyaltyInput,\r\n updateCustomerAttributes,\r\n updateCustomerAttributesInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n// import { Button, Module, Node, Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport { Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { Button, Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport {\r\n Address,\r\n AttributeDefinition,\r\n CustomerAttribute,\r\n DeliveryPreferenceType,\r\n LineDeliverySpecification,\r\n LoyaltyGroup,\r\n CardPaymentAcceptResult\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport moment from 'moment';\r\nimport React, { useEffect, useState } from 'react';\r\n// import MaskInput from 'react-maskinput';\r\nimport {\r\n // IHeadingData,\r\n ILoyaltySignUpProps,\r\n ILoyaltySignUpResources,\r\n // ISimpleMarketingConsentAttributesData,\r\n // ITermsAndConditionsLinkData\r\n} from '../definition-extensions/loyalty-sign-up.ext.props.autogenerated';\r\nimport { ILoyaltySignUpData } from './loyalty-sign-up.data';\r\nimport { getCartState, ICartState, getCheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { TierType } from '../../../modules/dobbies-add-product-to-cart/components/add-product-to-cart';\r\n// import PlaceOrderButtonComponent from '../../../modules/dobbiesclub-checkout/components/place-order-button';\r\nimport placeOrder from '../../../modules/dobbiesclub-checkout/methods/place-order';\r\nimport { getByIdAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { updateLineDeliverySpecificationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport handleMask from '../utilities/input-mask-utility';\r\ninterface ISelectedProduct extends SimpleProduct {\r\n productVariant?: SimpleProduct;\r\n}\r\n\r\n\r\nconst LoyaltySignUpView: React.FC> = props => {\r\n const {\r\n // LoyaltySignUp,\r\n // config: { termsAndConditionsLink },\r\n loading,\r\n slots: { dateOfBirthText }\r\n } = props;\r\n if (loading) {\r\n props.context.telemetry.error(props.resources.moduleWontRenderErrorText);\r\n return null;\r\n }\r\n const attributeDefinition: AttributeDefinition[] = (props.data.attributeDefinitions && props.data.attributeDefinitions.result) || [];\r\n // const [mask, setMask] = useState('DD/MM/YYYY');\r\n // const [maskString, setMaskString] = useState('DD/MM/YYYY');\r\n const [dateOfBirth, setdateOfBirth] = useState(Object);\r\n const [localStore, setLocalStore] = useState(Object);\r\n const [title, setTitle] = useState(Object);\r\n const [gender, setGender] = useState(Object);\r\n const [mobileNumber, setMobileNumber] = useState(Object);\r\n const [promoCode, setPromoCode] = useState('');\r\n const [isEmailChecked, setIsEmailChecked] = useState(Object);\r\n const [isPostChecked, setIsPostChecked] = useState(Object);\r\n const [isResearchChecked, setIsResearchChecked] = useState(Object);\r\n const [isSmsChecked, setIsSmsChecked] = useState(Object);\r\n const [isProfilingChecked, setIsProfilingChecked] = useState(Object);\r\n const [day, setDay] = useState(Object);\r\n const [month, setMonth] = useState(Object);\r\n const [year, setYear] = useState(Object);\r\n const [disabled, setDisabled] = useState(true);\r\n const [error, SetError] = useState('');\r\n const [displayNotification, SetDisplayNotification] = useState(false);\r\n const [overEighteen, SetOverEighteen] = useState(true);\r\n const [isValidDob, SetIsValidDob] = useState(false);\r\n const [isYearOutOfRange, setIsYearOutOfRange] = useState(false);\r\n const [minYear, SetMinYear] = useState(-1);\r\n const [maxYear, SetMaxYear] = useState(-1);\r\n const [dateError, SetDateError] = useState(''); // This state is used to display dob errors while adding dob\r\n const [isAddressError, setIsAddressError] = useState(false); // Will be true if there is no address\r\n const [addressError, setAddressError] = useState(''); // Error message for address\r\n const [currStep, setCurrStep] = useState(0);\r\n const [showBtnDisabled, setShowButtonDisabled] = useState(true);\r\n const [tAndRChecked, setTAndRChecked] = useState(false);\r\n const [currCartState, setCurrCartState] = useState(undefined);\r\n const [shouldBtnBeDisabled, setShouldBtnBeDisabled] = useState(true);\r\n\r\n const [isPaymentTriggered, setIsPaymentTriggered] = useState(false);\r\n // const [useBillingSameAsShipping, setUseBillingSameAsShipping] = useState(false);\r\n console.log(addressError);\r\n\r\n const { clubPremiumTierId, clubPlusTierId, clubPlusTrialTierId, clubPlusText, clubPlusBoltOnId } = props.config;\r\n // const clubPlusTierId = 5637327545;\r\n // const clubPremiumTierId = 5637677076;\r\n // const clubPlusTrialTierId = 5637626827;\r\n // const clubPlusText = 'club plus';\r\n\r\n const [inputCheck, setInputCheck] = useState([\r\n {\r\n Name: \"Contactable Email\",\r\n BooleanValue: false,\r\n },\r\n {\r\n Name:\"Contactable Post\",\r\n BooleanValue: false,\r\n },\r\n {\r\n Name:\"Contactable Mobile\",\r\n BooleanValue: false,\r\n }\r\n ]);\r\n\r\n console.log(inputCheck);\r\n\r\n const { loyaltyCard, customerInformation } = props.data;\r\n const loyaltyGroup = loyaltyCard.result?.LoyaltyGroups && loyaltyCard.result?.LoyaltyGroups[0];\r\n const query = props.context.request.query;\r\n const dobbiesClubSiteUrl = props.context.request.app.config.dobbiesClubSiteUrl;\r\n const patternAttribute = {\r\n pattern: `^\\s*\\(?(020[7,8]{1}\\)?[ ]?[1-9]{1}[0-9{2}[ ]?[0-9]{4})|(0[1-8]{1}[0-9]{3}\\)?[ ]?[1-9]{1}[0-9]{2}[ ]?[0-9]{3})\\s*$`\r\n };\r\n \r\n const updateDayMonthYearAttributes = (dob: string) => {\r\n const [D, M, Y] = dob.split('/');\r\n setDay(setAttributeValue(D, day, false));\r\n setMonth(setAttributeValue(M, month, false));\r\n setYear(setAttributeValue(Y, year, false));\r\n };\r\n\r\n if (!props.context.request.user.isAuthenticated) {\r\n const signinLink = props.context.request.user.signInUrl;\r\n window.location.assign(signinLink!);\r\n }\r\n \r\n useEffect(() => {\r\n if (props.data.inputsValidations.result?.areAllFieldsValid && !disabled && currStep > 0) {\r\n setDisabled(true);\r\n } else if (!props.data.inputsValidations.result?.areAllFieldsValid && disabled && currStep > 0) {\r\n setDisabled(false);\r\n }\r\n\r\n }, [props.data.inputsValidations.result?.areAllFieldsValid])\r\n\r\n useEffect(() => {\r\n const incomingMarketingAttributes = customerInformation.result?.Attributes;\r\n if(incomingMarketingAttributes!.length > 0){\r\n incomingMarketingAttributes?.map(attr => {\r\n if (attr.Name === \"Contactable Post\") {\r\n setIsPostChecked(setAttributeValue(attr.AttributeValue?.BooleanValue!, attr, true));\r\n setInputCheck(prevData => \r\n prevData.map(item => \r\n item.Name === attr.Name ? { ...item, BooleanValue: attr.AttributeValue?.BooleanValue! } : item\r\n ));\r\n }\r\n if (attr.Name === \"Contactable Email\") {\r\n setIsEmailChecked(setAttributeValue(attr.AttributeValue?.BooleanValue!, attr, true));\r\n setInputCheck(prevData => \r\n prevData.map(item => \r\n item.Name === attr.Name ? { ...item, BooleanValue: attr.AttributeValue?.BooleanValue! } : item\r\n ));\r\n }\r\n if (attr.Name === \"Contactable Mobile\") {\r\n setIsSmsChecked(setAttributeValue(attr.AttributeValue?.BooleanValue!, attr, true));\r\n setInputCheck(prevData => \r\n prevData.map(item => \r\n item.Name === attr.Name ? { ...item, BooleanValue: attr.AttributeValue?.BooleanValue! } : item\r\n ));\r\n }\r\n })\r\n }\r\n const promoCodeCurrVal = getPromoCodeAttrCurrValue() || '';\r\n setPromoCode(promoCodeCurrVal);\r\n\r\n setTimeout(() => {\r\n let btn = document.getElementById('loyalty-next-btn') as HTMLButtonElement;\r\n if (!btn) {\r\n const btnElems = document.getElementsByClassName('loyalty-btn');\r\n if (btnElems && btnElems.length) {\r\n btn = btnElems[0] as HTMLButtonElement;\r\n }\r\n }\r\n if (btn && !shouldBtnBeDisabled && btn.disabled) {\r\n btn.disabled = false;\r\n btn.classList.remove('disabled');\r\n }\r\n }, 1000);\r\n const isBackAfterPayment = props.context.actionContext.requestContext.cookies.get('is_payment_triggered');\r\n if (isBackAfterPayment && isBackAfterPayment.value === 'true') {\r\n placeLoyaltyOrderAfterPaymentTriggered();\r\n }\r\n if (props.context.request.query?.tier) {\r\n props.context.actionContext.requestContext.cookies.set('curr_checkout_tier', props.context.request.query?.tier);\r\n }\r\n props.context.actionContext.requestContext.cookies.set('step_1_clicked_next', 'false');\r\n\r\n if (Msdyn365.msdyn365Commerce.isBrowser && window) {\r\n if (window.location.href.includes('step=3') && currStep !== 2) {\r\n setCurrStep(2);\r\n }\r\n }\r\n }, [])\r\n\r\n const getTier = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps) => {\r\n const loyaltyGroup = props.data.loyaltyCard.result?.LoyaltyGroups && props.data.loyaltyCard.result?.LoyaltyGroups[0];\r\n // highestLoyaltCardTier\r\n const highestActiveLoyaltyCardTier = loyaltyGroup && loyaltyGroup.HighestActiveLoyaltyCardTier;\r\n const loyaltyCardTiers = loyaltyGroup && loyaltyGroup.LoyaltyCardTiers;\r\n // Get TierId based on the active cardTier\r\n if (loyaltyCardTiers && loyaltyCardTiers?.length > 0) {\r\n for (const [_, loyaltyCardTier] of loyaltyCardTiers.entries()) {\r\n if (loyaltyCardTier.RecordId === highestActiveLoyaltyCardTier) {\r\n return loyaltyCardTier;\r\n }\r\n }\r\n }\r\n return;\r\n };\r\n const allowed_tiers: string[] = [TierType.Club, TierType.ClubPlus, TierType.ClubPlusFreeTrial, TierType.ClubPremium];\r\n if (query && query.tier && !allowed_tiers.includes(query.tier?.toLowerCase())) {\r\n window.location.assign('/loyalty');\r\n }\r\n\r\n const tier = getTier(props);\r\n\r\n if (tier && tier.TierId?.toLowerCase() === 'club' && query && query.tier && query.tier.toLowerCase() === 'club') {\r\n window.location.assign('/loyalty');\r\n }\r\n\r\n // TODO: Add Club Plus Validation\r\n\r\n if (tier && tier.TierId !== 'Club') {\r\n // Redirect to club-plus, if user has membership of club plus or club plus free trial\r\n const today = new Date();\r\n const validTill = new Date(props.data.loyaltyCard.result?.LoyaltyGroups![0].LoyaltyCardTiers![0].ValidFrom!);\r\n const expiryDate = new Date(today);\r\n const validNumberOfDays: number = props.app.config.CheckValidityForTheNumberOfDays;\r\n expiryDate.setDate(expiryDate.getDate() + validNumberOfDays);\r\n\r\n // To calculate the time difference of two dates\r\n const differenceInTime = expiryDate.getTime() - validTill.getTime();\r\n\r\n // To calculate the no. of days between two dates\r\n const differenceInDays = differenceInTime / (1000 * 3600 * 24);\r\n console.log('diff', differenceInDays, differenceInDays <= 0);\r\n\r\n if (\r\n query &&\r\n query.tier &&\r\n query.tier.toLowerCase() === 'club-plus-trial' &&\r\n tier &&\r\n (tier.TierId === 'Club Plus' || tier.TierId === 'Club Plus Free Tier')\r\n ) {\r\n window.location.assign(`${dobbiesClubSiteUrl}?tier=club-plus`);\r\n }\r\n }\r\n\r\n // UseEffect hook to set minyear and maxYear into state (useState hooks)\r\n setMinAndMaxYear(props, SetMinYear, minYear, SetMaxYear, maxYear);\r\n // Custom hook to get the customer address count.\r\n const addressCount = useGetAddressesCount(props);\r\n useEffect(() => {\r\n if (addressCount === undefined || addressCount?.length === 0) {\r\n setIsAddressError(true);\r\n } else {\r\n setIsAddressError(false);\r\n setAddressError('');\r\n }\r\n });\r\n\r\n // Get TierId based on the active cardTier Here's the tier ID could be (club, club plus)\r\n const tierId = getTierId(loyaltyGroup);\r\n /* VSI-Customization -- Redirect user based on tier conditions */\r\n redirectUserIfTierExist(props, tierId);\r\n\r\n // const loyaltyProgramText =\r\n // termsAndConditionsLink &&\r\n // _renderTermsAndConditionsText(\r\n // termsAndConditionsLink,\r\n // props.resources.loyaltyProgramText,\r\n // '__term-and-conditions-link',\r\n // '__terms-and-conditions-text'\r\n // );\r\n const { dynamicClass } = getDynamicClass(query, props);\r\n\r\n\r\n const validateDOB = (dob: string): boolean => {\r\n if (moment(dob, 'DD/MM/YYYY').format('DD/MM/YYYY') !== 'Invalid date') {\r\n const inputDob = moment(dob, 'DD/MM/YYYY', true);\r\n const isValidInput = inputDob.isValid();\r\n const inputDate = moment(dob, 'DD/MM/YYYY').format('DD/MM/YYYY');\r\n const today = new Date();\r\n const currentYear = today.getFullYear();\r\n const dobYear = moment(dob, 'DD/MM/YYYY').year();\r\n \r\n let isEighteenYearOld = true;\r\n let yearOOR = false;\r\n let futureDate = false;\r\n\r\n if (isValidInput) {\r\n const years = moment(inputDate, 'DD/MM/YYYY').fromNow(true); // Years difference from today\r\n if (inputDob < moment()) {\r\n const diffYears = years.split(' ');\r\n const yearLabel = diffYears[1].trim().toLowerCase();\r\n if (yearLabel === 'year' || yearLabel === 'years') {\r\n const _difference = diffYears[0].trim().toLowerCase();\r\n const difference = parseInt(_difference, 10);\r\n if ((dobYear < currentYear && _difference === 'a') || difference < 18) {\r\n // Difference is 'a year' in case of 1 year and x months in case of some months\r\n // SetOverEighteen(false);\r\n // SetDisplayNotification(true);\r\n // ageRestriction = true;\r\n isEighteenYearOld = false;\r\n } else if (dobYear < minYear) {\r\n // dob must not be less than 1990\r\n // SetDisplayNotification(true);\r\n // setIsYearOutOfRange(true);\r\n // invalidYear = true;\r\n yearOOR = true;\r\n } else {\r\n // SetOverEighteen(true);\r\n // SetDisplayNotification(false);\r\n // SetDateError(''); // Remove date error if any\r\n }\r\n } else if (dobYear < currentYear) {\r\n // when dobyear is less and difference is just of months or days\r\n // SetOverEighteen(false);\r\n // SetDisplayNotification(true);\r\n // setIsYearOutOfRange(false);\r\n } else {\r\n futureDate = true; // input date is greater than today\r\n }\r\n } else {\r\n futureDate = true; // input date is greater than today\r\n }\r\n if (isEighteenYearOld && !yearOOR && !futureDate) {\r\n if (!isValidDob) {\r\n SetIsValidDob(true);\r\n }\r\n return true;\r\n }\r\n } else {\r\n // date is not valid\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n const updateDOB = (e: any): void => {\r\n const {\r\n // resources: { validYearErrorText, ageRestrictionError, validDateErrorText }\r\n resources: { validYearErrorText }\r\n } = props;\r\n let isInvalid = false;\r\n let ageRestriction = false;\r\n let invalidYear = false;\r\n let futureDate = false; // If user enters dob greater than today\r\n const dob = e && e.target && e.target.value;\r\n if (parseInt(dob[6], 10) > 2) {\r\n // setMaskString('DD/MM/YY');\r\n // setMask('DD/MM/YY');\r\n } else {\r\n // setMaskString('DD/MM/YYYY');\r\n // setMask('DD/MM/YY');\r\n }\r\n if (moment(dob, 'DD/MM/YYYY').format('DD/MM/YYYY') !== 'Invalid date') {\r\n const inputDob = moment(dob, 'DD/MM/YYYY', true);\r\n const isValidInput = inputDob.isValid();\r\n const inputDate = moment(dob, 'DD/MM/YYYY').format('DD/MM/YYYY');\r\n const today = new Date();\r\n const currentYear = today.getFullYear();\r\n const dobYear = moment(dob, 'DD/MM/YYYY').year();\r\n if (isValidInput) {\r\n const years = moment(inputDate, 'DD/MM/YYYY').fromNow(true); // Years difference from today\r\n if (inputDob < moment()) {\r\n // SetIsValidDob(true);\r\n const diffYears = years.split(' ');\r\n const yearLabel = diffYears[1].trim().toLowerCase();\r\n if (yearLabel === 'year' || yearLabel === 'years') {\r\n const _difference = diffYears[0].trim().toLowerCase();\r\n const difference = parseInt(_difference, 10);\r\n if ((dobYear < currentYear && _difference === 'a') || difference < 18) {\r\n // Difference is 'a year' in case of 1 year and x months in case of some months\r\n SetOverEighteen(false);\r\n SetDisplayNotification(true);\r\n ageRestriction = true;\r\n } else if (dobYear < minYear) {\r\n // dob must not be less than 1990\r\n SetDisplayNotification(true);\r\n setIsYearOutOfRange(true);\r\n invalidYear = true;\r\n } else {\r\n SetOverEighteen(true);\r\n SetDisplayNotification(false);\r\n SetDateError(''); // Remove date error if any\r\n }\r\n } else if (dobYear < currentYear) {\r\n // when dobyear is less and difference is just of months or days\r\n SetOverEighteen(false);\r\n SetDisplayNotification(true);\r\n setIsYearOutOfRange(false);\r\n ageRestriction = true;\r\n } else {\r\n futureDate = true; // input date is greater than today\r\n }\r\n } else {\r\n futureDate = true; // input date is greater than today\r\n }\r\n } else {\r\n // date is not valid\r\n isInvalid = true;\r\n }\r\n // SetError('');\r\n // setdateOfBirth(setAttributeValue(moment(dob, 'DD/MM/YYYY').format('DD/MM/YYYY'), dateOfBirth, false));\r\n // setdateOfBirth(setAttributeValue(dob, dateOfBirth, false));\r\n updateDayMonthYearAttributes(moment(dob, 'DD/MM/YYYY').format('DD/MM/YYYY'));\r\n } else {\r\n // setdateOfBirth((prevState: CustomerAttribute) => ({\r\n // ...prevState,\r\n // AttributeValue: {\r\n // // @ts-ignore\r\n // '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CommercePropertyValue',\r\n // StringValue: ''\r\n // }\r\n // }));\r\n isInvalid = true; // date is not valid\r\n }\r\n if (isInvalid) {\r\n // SetDateError(validDateErrorText);\r\n SetIsValidDob(false);\r\n setIsYearOutOfRange(false);\r\n // SetDisplayNotification(true);\r\n } else if (futureDate) {\r\n // SetIsValidDob(true);\r\n // setIsYearOutOfRange(true);\r\n }\r\n let invalidDate = false; // Following code is to check date erorr while entering dob\r\n if (ageRestriction) {\r\n // SetError(ageRestrictionError);\r\n invalidDate = true;\r\n } else if (invalidYear || futureDate) {\r\n // SetError(validYearErrorText);\r\n invalidDate = true;\r\n }\r\n if (invalidDate) {\r\n SetDateError(validYearErrorText);\r\n }\r\n setdateOfBirth(setAttributeValue(dob, dateOfBirth, false));\r\n };\r\n\r\n const setAttributeDefaultValues = () => {\r\n const {\r\n genderAttribute,\r\n titleAttribute,\r\n contactableEmailAttribute,\r\n contactableMobileAttribute,\r\n contactablePostAttribute,\r\n mobileAttribute\r\n } = props.config;\r\n const {\r\n contactableProfilingAttribute,\r\n contactableResearchAttribute,\r\n dayAttribute,\r\n monthAttribute,\r\n yearAttribute,\r\n localStoreAttribute\r\n } = props.config;\r\n // tslint:disable-next-line: cyclomatic-complexity\r\n let isDayLoaded = false;\r\n let isMonthLoaded = false;\r\n let isYearLoaded = false;\r\n let dayStr = '';\r\n let monthStr = '';\r\n let yearStr = '';\r\n attributeDefinition?.forEach(attr => {\r\n const Name = attr.Name?.toLowerCase();\r\n if (Name === localStoreAttribute.toLowerCase() && Object.keys(localStore).length === 0) {\r\n setLocalStore(setAttrDefaultValues(attr));\r\n }\r\n if (Name === genderAttribute.toLowerCase() && Object.keys(gender).length === 0) {\r\n setGender(setAttrDefaultValues(attr));\r\n }\r\n if (Name === titleAttribute.toLowerCase() && Object.keys(title).length === 0) {\r\n const customer = props.data.customerInformation.result;\r\n const customerTitleAttr = titleAttribute && \r\n customer?.Attributes?.find(attr => attr.Name?.toLowerCase() === titleAttribute.toLowerCase());\r\n if (customerTitleAttr && customerTitleAttr.AttributeValue?.StringValue) {\r\n setTitle(setAttributeValue(customerTitleAttr.AttributeValue?.StringValue, attr, false));\r\n } else {\r\n setTitle(setAttrDefaultValues(attr));\r\n }\r\n }\r\n if (Name === contactableEmailAttribute.toLowerCase() && Object.keys(isEmailChecked).length === 0) {\r\n setIsEmailChecked(setAttrDefaultValues(attr));\r\n }\r\n if (Name === contactablePostAttribute.toLowerCase() && Object.keys(isPostChecked).length === 0) {\r\n setIsPostChecked(setAttrDefaultValues(attr));\r\n }\r\n if (Name === contactableMobileAttribute.toLowerCase() && Object.keys(isSmsChecked).length === 0) {\r\n setIsSmsChecked(setAttrDefaultValues(attr));\r\n }\r\n if (Name === contactableResearchAttribute.toLowerCase() && Object.keys(isResearchChecked).length === 0) {\r\n setIsResearchChecked(setAttrDefaultValues(attr));\r\n }\r\n if (Name === contactableProfilingAttribute.toLowerCase() && Object.keys(isProfilingChecked).length === 0) {\r\n setIsProfilingChecked(setAttrDefaultValues(attr));\r\n }\r\n if (Name === mobileAttribute.toLowerCase() && Object.keys(mobileNumber).length === 0) {\r\n const customer = props.data.customerInformation.result;\r\n const customerMobileAttr = mobileAttribute && \r\n customer?.Attributes?.find(attr => attr.Name?.toLowerCase() === mobileAttribute.toLowerCase());\r\n if (customerMobileAttr && customerMobileAttr.AttributeValue?.StringValue) {\r\n setMobileNumber(setAttributeValue(customerMobileAttr.AttributeValue?.StringValue, attr, false));\r\n } else {\r\n setMobileNumber(setAttrDefaultValues(attr));\r\n }\r\n }\r\n \r\n if (Name === dayAttribute.toLowerCase() && Object.keys(day).length === 0) {\r\n const customer = props.data.customerInformation.result;\r\n const customerDay = dayAttribute && \r\n customer?.Attributes?.find(attr => attr.Name?.toLowerCase() === dayAttribute.toLowerCase());\r\n if (customerDay && customerDay.AttributeValue?.StringValue) {\r\n setDay(setAttributeValue(customerDay.AttributeValue?.StringValue, attr, false));\r\n isDayLoaded = true;\r\n dayStr = customerDay.AttributeValue?.StringValue;\r\n } else {\r\n setDay(setAttrDefaultValues(attr));\r\n }\r\n }\r\n if (Name === monthAttribute.toLowerCase() && Object.keys(month).length === 0) {\r\n const customer = props.data.customerInformation.result;\r\n const customerMonth = monthAttribute && \r\n customer?.Attributes?.find(attr => attr.Name?.toLowerCase() === monthAttribute.toLowerCase());\r\n if (customerMonth && customerMonth.AttributeValue?.StringValue) {\r\n setMonth(setAttributeValue(customerMonth.AttributeValue?.StringValue, attr, false));\r\n isMonthLoaded = true;\r\n monthStr = customerMonth.AttributeValue?.StringValue;\r\n } else {\r\n setMonth(setAttrDefaultValues(attr));\r\n }\r\n }\r\n if (Name === yearAttribute.toLowerCase() && Object.keys(year).length === 0) {\r\n const customer = props.data.customerInformation.result;\r\n const customerYear = yearAttribute && \r\n customer?.Attributes?.find(attr => attr.Name?.toLowerCase() === yearAttribute.toLowerCase());\r\n if (customerYear && customerYear.AttributeValue?.StringValue) {\r\n setYear(setAttributeValue(customerYear.AttributeValue?.StringValue, attr, false));\r\n isYearLoaded = true;\r\n yearStr = customerYear.AttributeValue?.StringValue;\r\n } else {\r\n setYear(setAttrDefaultValues(attr));\r\n }\r\n }\r\n\r\n if (Name?.toLowerCase() === localStoreAttribute.toLowerCase() && Object.keys(localStore).length === 0) {\r\n const customer = props.data.customerInformation.result;\r\n const localStoreSelected = localStoreAttribute && customer?.Attributes?.find(attr => attr.Name?.toLowerCase() === localStoreAttribute.toLowerCase());\r\n if (localStoreSelected && localStoreSelected.AttributeValue?.StringValue) {\r\n setLocalStore(setAttributeValue(localStoreSelected.AttributeValue?.StringValue, attr, false));\r\n }\r\n\r\n }\r\n });\r\n if (isDayLoaded && isMonthLoaded && isYearLoaded) {\r\n SetIsValidDob(true);\r\n const dob = `${dayStr}/${monthStr}/${yearStr}`;\r\n setdateOfBirth(setAttributeValue(moment(dob, 'DD/MM/YYYY').format('DD/MM/YYYY'), dateOfBirth, false));\r\n } \r\n };\r\n // Run at initial render and set the attribute values of customer\r\n setAttributeDefaultValues();\r\n\r\n const handleClubPlusScenario = async () => {\r\n // Check if address existed or not\r\n const isValid = validateAttributeValuesForClubPlus();\r\n if (isValid) {\r\n /* -3 If user is dobbies club free member and wants to enroll for club plus membership redirects him to checkout page */\r\n const {\r\n clubFreeTierText,\r\n directDebitAttribute: directDebitAttr,\r\n directDebitAttributeValue,\r\n promoCodeAttribute: promoCodeAttr\r\n } = props.config;\r\n if (\r\n (loyaltyCard.result?.CardNumber &&\r\n (tierId?.toLowerCase() === clubFreeTierText?.toLowerCase() ||\r\n query?.tier?.toLowerCase() === 'club-plus') ||\r\n query?.tier?.toLowerCase() === 'club-plus-trial')\r\n ) {\r\n // update attribute Direct Debit\r\n const customer = props.data.customerInformation.result || { Attributes: [], AccountNumber: '' };\r\n const directDebitAttribute = getCustomAttribute(props, directDebitAttr, directDebitAttributeValue);\r\n const promoCodeAttribute = getCustomAttribute(props, promoCodeAttr, promoCode);\r\n // If user previously entered empty promo code filter the array and add newly promo code attribute with udpated value.\r\n const filteredAttributes = customer.Attributes?.filter(x => x.Name?.toLowerCase() !== promoCodeAttr.toLowerCase()).filter( x => x.Name?.toLowerCase() !== directDebitAttr.toLowerCase());\r\n if (customer && directDebitAttribute && filteredAttributes) {\r\n filteredAttributes.push(directDebitAttribute);\r\n filteredAttributes.push(promoCodeAttribute);\r\n }\r\n const input = new updateCustomerAttributesInput(\r\n customer.AccountNumber,\r\n filteredAttributes || [],\r\n props.context.request.apiSettings\r\n );\r\n updateCustomerAttributes(input, props.context.actionContext).then(async () => {\r\n if (query && query.tier && query.tier.toLowerCase() === 'club-plus-trial') {\r\n // window.location.assign(`${dobbiesClubSiteUrl}?tier=club-plus-trial`);\r\n // setCurrStep(2);\r\n matchTiersAndAddProductToCart();\r\n setTimeout(() => {\r\n const promoCodeInputElement = document.getElementById('dobbies-loyalty-promocode');\r\n promoCodeInputElement?.addEventListener('focusout', (event: FocusEvent) => {\r\n updatePromoCodeAttr(event);\r\n });\r\n }, 1000);\r\n } else {\r\n // window.location.assign(`${dobbiesClubSiteUrl}?tier=club-plus`);\r\n if (query && query.tier && (query.tier === TierType.ClubPlus || query.tier === TierType.ClubPremium || query.tier === TierType.ClubPlusFreeTrial)) {\r\n // setCurrStep(2);\r\n matchTiersAndAddProductToCart();\r\n setTimeout(() => {\r\n const promoCodeInputElement = document.getElementById('dobbies-loyalty-promocode');\r\n promoCodeInputElement?.addEventListener('focusout', (event: FocusEvent) => {\r\n updatePromoCodeAttr(event);\r\n });\r\n }, 1000);\r\n }\r\n }\r\n return;\r\n });\r\n }\r\n // If cardNumber doesn't exist or Tier is expired it means user wants to enroll for membership\r\n if (!loyaltyCard.result?.CardNumber) {\r\n _issueLoyalty();\r\n }\r\n }\r\n return;\r\n };\r\n // validate attribute values and update state accordingly\r\n const validateAttributeValuesForClubPlus = () => {\r\n // const {\r\n // resources: { addressRequiredError }\r\n // } = props;\r\n if (isAddressError) {\r\n // SetError(addressRequiredError);\r\n setAddressError(props.resources.addressRequiredError);\r\n setDisabled(false);\r\n return false;\r\n }\r\n return true;\r\n };\r\n // validate attribute values and update state accordingly\r\n const validateAttributeValues = () => {\r\n const {\r\n resources: {\r\n validDateErrorText,\r\n validYearErrorText,\r\n ageRestrictionError\r\n }\r\n } = props;\r\n const queryTier = props.context.request.query?.tier?.toLowerCase();\r\n const isClub = queryTier === 'club';\r\n if (!isClub && !isValidDob) {\r\n SetError(validDateErrorText);\r\n SetDisplayNotification(true);\r\n setDisabled(false);\r\n return;\r\n }\r\n if (!isClub && isYearOutOfRange) {\r\n SetError(validYearErrorText);\r\n setDisabled(false);\r\n return;\r\n }\r\n if (!isClub && ((dateOfBirth && dateOfBirth.AttributeValue.StringValue === '') || !isValidDob)) {\r\n SetError(validDateErrorText);\r\n setDisabled(false);\r\n return;\r\n }\r\n if (!isClub && !overEighteen) {\r\n SetError(ageRestrictionError);\r\n setDisabled(false);\r\n return;\r\n }\r\n // if (gender && gender.AttributeValue && gender.AttributeValue.StringValue === '') {\r\n // SetError(validGenderErrorText);\r\n // setDisabled(false);\r\n // return;\r\n // }\r\n // If localStore default value is set to empty string then set it to default None\r\n if (localStore && localStore.AttributeValue && localStore.AttributeValue.StringValue === '') {\r\n localStore.AttributeValue.StringValue = 'None';\r\n }\r\n if (title && title.AttributeValue && title.AttributeValue.StringValue === '') {\r\n // SetError(titleErrorMessage);\r\n setDisabled(false);\r\n return;\r\n }\r\n if (isAddressError) {\r\n // SetError(addressRequiredError);\r\n setDisabled(false);\r\n return;\r\n }\r\n return true;\r\n };\r\n\r\n const iconOneClicked = () => {\r\n setCurrStep(0);\r\n };\r\n\r\n const iconTwoClicked = () => {\r\n const stepOneNextClickedCookie = props.context.actionContext.requestContext.cookies.get('step_1_clicked_next');\r\n if (stepOneNextClickedCookie && stepOneNextClickedCookie.value === 'true' && validateInputs()) {\r\n const phoneNum = mobileNumber.AttributeValue?.StringValue;\r\n props.context.actionContext.requestContext.cookies.set('loyalty_singup_phone', phoneNum);\r\n setTAndRChecked(false);\r\n setCurrStep(1);\r\n }\r\n };\r\n\r\n const iconThreeClicked = () => {\r\n if (disabled) {\r\n return;\r\n }\r\n if (!areAttributesNew()) {\r\n setCurrStep(2);\r\n }\r\n };\r\n\r\n const areAttributesNew = () => {\r\n const attributes = [];\r\n // attributes.push(gender);\r\n attributes.push(day);\r\n attributes.push(month);\r\n attributes.push(year);\r\n attributes.push(localStore);\r\n attributes.push(title);\r\n // attributes.push(isSmsChecked);\r\n // attributes.push(isResearchChecked);\r\n // attributes.push(isEmailChecked);\r\n // attributes.push(isPostChecked);\r\n // attributes.push(isProfilingChecked);\r\n attributes.push(mobileNumber);\r\n const customer = props.data.customerInformation.result;\r\n if (customer && customer.Attributes?.length) {\r\n for (const at of attributes) {\r\n const cAt = customer.Attributes?.find(a => a.Name === at.Name);\r\n if (cAt && cAt.AttributeValue?.StringValue !== at.AttributeValue?.StringValue) {\r\n return true;\r\n }\r\n } \r\n }\r\n return false;\r\n };\r\n\r\n // When user wants to enroll for loyalty membership below function will triggered\r\n const updateAttributes = async () => {\r\n // const CardNumber = props.data.loyaltyCard.result?.CardNumber;\r\n const {\r\n context,\r\n config: { promoCodeAttribute }\r\n } = props;\r\n if (!props.context.request.user.isAuthenticated) {\r\n return;\r\n }\r\n // If cardNumber doesn't exist then validate attributes\r\n // if (!CardNumber) {\r\n const isValid = validateAttributeValues();\r\n if (!isValid) {\r\n return;\r\n }\r\n setDisabled(true);\r\n const _customer = props.data.customerInformation.result || { Attributes: [], AccountNumber: '' };\r\n const attributes = [];\r\n // attributes.push(gender);\r\n if (day?.AttributeValue?.StringValue && month?.AttributeValue?.StringValue && year?.AttributeValue?.StringValue) {\r\n attributes.push(day);\r\n attributes.push(month);\r\n attributes.push(year);\r\n }\r\n attributes.push(localStore);\r\n attributes.push(title);\r\n attributes.push(isSmsChecked);\r\n attributes.push(isResearchChecked);\r\n attributes.push(isEmailChecked);\r\n attributes.push(isPostChecked);\r\n attributes.push(isProfilingChecked);\r\n attributes.push(mobileNumber);\r\n // If user doesn't have cardNumber and query param is 'club-plus' send the direct debit attribute\r\n if (\r\n context.request.query?.tier?.toLowerCase() === 'club-plus' ||\r\n context.request.query?.tier?.toLowerCase() === 'club-plus-trial'\r\n ) {\r\n attributes.push(getCustomAttribute(props, props.config.directDebitAttribute, props.config.directDebitAttributeValue));\r\n attributes.push(getCustomAttribute(props, promoCodeAttribute, promoCode));\r\n }\r\n if (_customer) {\r\n _customer.Attributes = attributes;\r\n }\r\n // If cardNumber doesn't exist it means we've to set attributes\r\n const input = new updateCustomerAttributesInput(\r\n _customer.AccountNumber,\r\n _customer.Attributes || [],\r\n context.request.apiSettings\r\n );\r\n updateCustomerAttributes(input, context.actionContext)\r\n .then(async () => {\r\n const queryTier = props.context.request.query?.tier?.toLowerCase();\r\n if (queryTier === 'club' || queryTier?.toLowerCase() === TierType.Club.toLowerCase()) {\r\n if (props.context.request.user.isAuthenticated && !props.data.loyaltyCard.result?.CardNumber) {\r\n const input = new IssueLoyaltyInput(props.context.request.apiSettings, props.context.request.user.customerAccountNumber);\r\n issueLoyalty(input, props.context.actionContext).then(res => {\r\n window.location.assign('/dobbiesclub/loyalty-club-join-confirmation');\r\n }).catch (e => {\r\n\r\n });\r\n }\r\n else {\r\n window.location.assign('/dobbiesclub/loyalty-club-join-confirmation');\r\n }\r\n return;\r\n }\r\n // Here we need to add several checks\r\n await handleClubPlusScenario();\r\n })\r\n .catch((err: Error) => {\r\n setDisabled(false);\r\n });\r\n // } else {\r\n // await handleClubPlusScenario();\r\n // }\r\n };\r\n\r\n const getPromoCodeAttrCurrValue = () => {\r\n const customer = props.data.customerInformation.result || { Attributes: [], AccountNumber: '' };\r\n let promoCodeAttribute = customer?.Attributes?.find(attr => attr.Name?.toLowerCase() === 'Promo Code'.toLowerCase());\r\n return promoCodeAttribute?.AttributeValue?.StringValue;\r\n };\r\n\r\n const updatePromoCodeAttr = (event: FocusEvent) => {\r\n const customer = props.data.customerInformation.result || { Attributes: [], AccountNumber: '' };\r\n if (!event.target) {\r\n return;\r\n }\r\n const targetElem = event.target as HTMLInputElement;\r\n \r\n let promoCodeAttribute = customer?.Attributes?.find(attr => attr.Name?.toLowerCase() === 'Promo Code'.toLowerCase());\r\n let filteredAttributes = customer?.Attributes;\r\n if (promoCodeAttribute && filteredAttributes && filteredAttributes.length) {\r\n for (let i = 0; i < filteredAttributes?.length; i++) {\r\n if (filteredAttributes[i].Name?.toLowerCase() === 'Promo Code'.toLowerCase()) {\r\n filteredAttributes.splice(i, 1);\r\n break;\r\n }\r\n }\r\n const promoCodeAttribute = getCustomAttribute(props, props.config.promoCodeAttribute, targetElem.value);\r\n filteredAttributes?.push(promoCodeAttribute);\r\n } else {\r\n const promoCodeAttribute = getCustomAttribute(props, props.config.promoCodeAttribute, targetElem.value);\r\n filteredAttributes?.push(promoCodeAttribute);\r\n }\r\n\r\n const input = new updateCustomerAttributesInput(\r\n customer.AccountNumber,\r\n filteredAttributes || [],\r\n props.context.request.apiSettings\r\n );\r\n if(targetElem.value) {\r\n updateCustomerAttributes(input, props.context.actionContext).then(async resp => {\r\n console.log(resp);\r\n }).catch(e => {\r\n console.log(e);\r\n });\r\n }\r\n };\r\n\r\n const canPlaceOrder = async () => {\r\n\r\n const checkoutState = await getCheckoutState(props.context.actionContext);\r\n \r\n const shouldEnableSinglePaymentAuthorizationCheckout =\r\n checkoutState.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\r\n\r\n // If isTermsAndConditionAccepted is undefined means TermsAndCondition module is not added to page and we should able to place order.\r\n return (\r\n shouldEnableSinglePaymentAuthorizationCheckout &&\r\n (\r\n shouldEnableSinglePaymentAuthorizationCheckout ||\r\n (checkoutState.isPaymentVerificationRedirection ?? false))\r\n );\r\n };\r\n\r\n // useEffect(() => {\r\n const updateIsEnabledRedirection = async () => {\r\n const cpOrder = await canPlaceOrder();\r\n let checkoutState = await getCheckoutState(props.context.actionContext);\r\n if (checkoutState.shouldEnableSinglePaymentAuthorizationCheckout && cpOrder && checkoutState.isPaymentVerificationRedirection) {\r\n await checkoutState.updateIsPlaceOrderEnabledInRedirection({\r\n newIsPlaceOrderEnabledInRedirection: true\r\n });\r\n if (checkoutState.shouldEnableSinglePaymentAuthorizationCheckout && !checkoutState.redirectAdditionalContext &&\r\n (!checkoutState.isExpressCheckoutApplied ||\r\n checkoutState.isPaymentVerificationRedirection)) {\r\n placeLoyaltyOrderAfterPaymentTriggered();\r\n }\r\n }\r\n }\r\n updateIsEnabledRedirection();\r\n \r\n // });\r\n\r\n useEffect(() => {\r\n if (isPaymentTriggered) {\r\n setTimeout(() => {\r\n if (window.location.href.includes('tier=')) {\r\n placeLoyaltyOrderAfterPaymentTriggered();\r\n }\r\n }, 1000);\r\n }\r\n }, [isPaymentTriggered]);\r\n\r\n const triggerPaymentWithPlaceOrder = async (): Promise => {\r\n const checkoutState = await getCheckoutState(props.context.actionContext);\r\n \r\n await checkoutState.updateShouldTriggerPaymentWithPlaceOrder({\r\n newShouldTriggerPaymentWithPlaceOrder: !checkoutState.shouldTriggerPaymentWithPlaceOrder\r\n });\r\n props.context.actionContext.requestContext.cookies.set('is_payment_triggered', 'true');\r\n setIsPaymentTriggered(true);\r\n };\r\n\r\n const _issueLoyalty = () => {\r\n if (props.context.request.user.isAuthenticated) {\r\n const input = new IssueLoyaltyInput(props.context.request.apiSettings, props.context.request.user.customerAccountNumber);\r\n issueLoyalty(input, props.context.actionContext)\r\n .then(async () => {\r\n if (query && query.tier && query.tier.toLowerCase() === 'club-free') {\r\n // window.location.assign(Msdyn365.getUrlSync('loyalty', props.context.actionContext) || '');\r\n // setCurrStep(2);\r\n // matchTiersAndAddProductToCart();\r\n } else if (query && query.tier && query.tier.toLowerCase() === 'club-plus-trial') {\r\n // window.location.assign(`${dobbiesClubSiteUrl}?tier=club-plus-trial`);\r\n // setCurrStep(2);\r\n matchTiersAndAddProductToCart();\r\n setTimeout(() => {\r\n const promoCodeInputElement = document.getElementById('dobbies-loyalty-promocode');\r\n promoCodeInputElement?.addEventListener('focusout', (event: FocusEvent) => {\r\n updatePromoCodeAttr(event);\r\n });\r\n }, 1000);\r\n } else {\r\n // window.location.assign(`${dobbiesClubSiteUrl}?tier=club-plus`);\r\n // setCurrStep(2);\r\n matchTiersAndAddProductToCart();\r\n setTimeout(() => {\r\n const promoCodeInputElement = document.getElementById('dobbies-loyalty-promocode');\r\n promoCodeInputElement?.addEventListener('focusout', (event: FocusEvent) => {\r\n updatePromoCodeAttr(event);\r\n });\r\n }, 1000);\r\n }\r\n })\r\n .catch((err: Error) => {\r\n props.telemetry.error(err.message);\r\n props.telemetry.debug(props.resources.loyaltyCardIssue);\r\n setDisabled(false);\r\n });\r\n }\r\n };\r\n\r\n const updateCustomerDDAttribute = async () => {\r\n \r\n const { context } = props;\r\n const customer = props.data.customerInformation.result!;\r\n const customerAttr = customer.Attributes;\r\n let boltonAttrSet = false;\r\n const newAttributes = customerAttr?.map(attr => {\r\n let attrValue = attr.AttributeValue;\r\n if (attr.Name === 'Direct Debit') {\r\n const value = attrValue?.StringValue === 'None' || attrValue?.StringValue === 'DDCAN' ? 'DDRP' : 'DDRP';\r\n\r\n attrValue = { ...attr.AttributeValue, StringValue: value };\r\n }\r\n if (props.context.request.query?.tier === 'club-plus-bolton') {\r\n if (attr.Name === 'IsBoltonMember') {\r\n attrValue = { ...attr.AttributeValue, StringValue: 'Yes' };\r\n boltonAttrSet = true;\r\n }\r\n }\r\n return { ...attr, AttributeValue: attrValue };\r\n });\r\n\r\n if (props.context.request.query?.tier === 'club-plus-bolton' && !boltonAttrSet) {\r\n if (newAttributes) {\r\n const defaultAttribute = props.data.attributeDefinitions.result?.find(\r\n attr => attr.Name?.toLowerCase() === 'IsBoltonMember'.toLowerCase()\r\n );\r\n newAttributes.push({\r\n ['AttributeValue']: {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CommercePropertyValue',\r\n StringValue: 'Yes'\r\n },\r\n ['@odata.type']: '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CustomerAttribute',\r\n ['ExtensionProperties@odata.type']: '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.CommerceProperty)',\r\n ['NameTranslations@odata.type']: '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.TextValueTranslation)',\r\n ['NameTranslations']: [],\r\n ['DataTypeValue']: defaultAttribute && defaultAttribute.DataTypeValue,\r\n ['KeyName']: defaultAttribute && defaultAttribute.Name,\r\n ['Name']: defaultAttribute && defaultAttribute.Name,\r\n ['RecordId']: defaultAttribute && defaultAttribute.RecordId,\r\n ['ExtensionProperties']: []\r\n });\r\n }\r\n }\r\n\r\n const input = new updateCustomerAttributesInput(customer.AccountNumber, newAttributes || [], context.request.apiSettings);\r\n try {\r\n await updateCustomerAttributes(input, context.actionContext).catch();\r\n } catch (error) {\r\n if (context.telemetry) {\r\n //@ts-ignore\r\n context.telemetry.exception(error);\r\n context.telemetry.debug('Unable to update customer attributes');\r\n }\r\n }\r\n if (props.context.request.query?.tier) {\r\n const urlTier = props.context.request.query?.tier.toLowerCase();\r\n if (urlTier && urlTier === 'club-plus') {\r\n props.context.request.cookies.set('club_plus_purchased', true, {\r\n expires: new Date(new Date().getTime() + 1000 * 60 * 60)\r\n });\r\n }\r\n } else {\r\n const cookieTier = props.context.actionContext.requestContext.cookies.get('curr_checkout_tier');\r\n if (cookieTier && cookieTier.value && cookieTier.value === 'club-plus') {\r\n props.context.request.cookies.set('club_plus_purchased', true, {\r\n expires: new Date(new Date().getTime() + 1000 * 60 * 60)\r\n });\r\n }\r\n }\r\n \r\n };\r\n\r\n const updateCartLineEmailAddress = async (newGuestCheckoutEmail: string, checkoutState: ICheckoutState): Promise => {\r\n const emailDeliveryModeCode = props.context.request.channel?.EmailDeliveryModeCode;\r\n\r\n const emailDeliveryCartLines = checkoutState.checkoutCart.cart.CartLines?.filter(\r\n cartLine => cartLine.DeliveryMode && cartLine.DeliveryMode !== '' && cartLine.DeliveryMode === emailDeliveryModeCode\r\n );\r\n\r\n let updatedCartVersion: number | undefined;\r\n if (emailDeliveryCartLines && emailDeliveryCartLines.length > 0) {\r\n const lineDeliverySpecifications: LineDeliverySpecification[] = emailDeliveryCartLines.map(line => {\r\n return {\r\n LineId: line.LineId,\r\n DeliverySpecification: {\r\n DeliveryModeId: emailDeliveryModeCode,\r\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ElectronicDelivery,\r\n ElectronicDeliveryEmailAddress: newGuestCheckoutEmail\r\n }\r\n };\r\n });\r\n\r\n await updateLineDeliverySpecificationsAsync(\r\n { callerContext: props.context.actionContext },\r\n checkoutState.checkoutCart.cart.Id,\r\n lineDeliverySpecifications\r\n )\r\n .then(updatedCart => {\r\n updatedCartVersion = updatedCart.Version;\r\n })\r\n .catch(error => {\r\n props.context.actionContext.telemetry.exception(error);\r\n throw new Error('[updateLineDeliverySpecificationsAsync] Unable to update electronic delivery email address in cart');\r\n });\r\n }\r\n\r\n return updatedCartVersion;\r\n };\r\n\r\n const getReturnUrl = (): string => {\r\n // let returnUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\r\n let returnUrl = Msdyn365.getUrlSync('dobbiesclub-loyalty-join', props.context.actionContext) || '';\r\n const absoluteUrlRegExp = new RegExp('^(?:[a-z]+:)?//', 'i');\r\n const isAbsoluteUrl = absoluteUrlRegExp.test(returnUrl);\r\n if (window && !isAbsoluteUrl) {\r\n returnUrl = `${window.location.origin}${returnUrl}`;\r\n }\r\n\r\n return `${returnUrl}${!returnUrl.includes('?') ? '?' : '&'}pv=1`;\r\n };\r\n\r\n const placeLoyaltyOrderAfterPaymentTriggered = async () => {\r\n props.context.actionContext.requestContext.cookies.set('is_payment_triggered', 'false');\r\n const checkoutState = await getCheckoutState(props.context.actionContext);\r\n // if (props.data.customerInformation.result?.Email) {\r\n // await checkoutState.checkoutCart.updateReceiptEmail({ newEmail: props.data.customerInformation.result?.Email });\r\n // }\r\n\r\n if (!checkoutState.cardPaymentAcceptResult && checkoutState.isPaymentVerificationRedirection && checkoutState.shouldEnableSinglePaymentAuthorizationCheckout) {\r\n const { requestFormData, query } = props.context.request;\r\n const settings = {\r\n ReturnUrl: getReturnUrl(),\r\n ...(props.config.paymentConnectorId && { PaymentConnectorId: props.config.paymentConnectorId })\r\n };\r\n const formData = btoa(JSON.stringify(requestFormData ?? { redirectResult: query?.redirectResult }));\r\n const cardPaymentAcceptResult: CardPaymentAcceptResult = {\r\n AccessCode: formData,\r\n Settings: settings\r\n };\r\n\r\n await checkoutState\r\n .updateCardPaymentAcceptResult({ newCardPaymentAcceptResult: cardPaymentAcceptResult })\r\n }\r\n \r\n if (checkoutState.checkoutCart.cart.CartLines && checkoutState.checkoutCart.cart.CartLines.length && checkoutState.checkoutCart.cart.CartLines[0].ProductId) {\r\n const response = await getByIdAsync({ callerContext: props.context.actionContext }, checkoutState.checkoutCart.cart.CartLines[0].ProductId, props.context.actionContext.requestContext.apiSettings.channelId);\r\n const simpleProduct = Array.isArray(response) ? response[0] : response;\r\n if (props.data.customerInformation.result?.Email) {\r\n await checkoutState.checkoutCart.updateReceiptEmail({ newEmail: props.data.customerInformation.result?.Email });\r\n }\r\n if (props.data.customerInformation.result?.Email) {\r\n await checkoutState.updateGuestCheckoutEmail({newGuestCheckoutEmail: props.data.customerInformation.result?.Email});\r\n }\r\n if (props.data.customerInformation.result?.Addresses && props.data.customerInformation.result?.Addresses.length) {\r\n await checkoutState.checkoutCart.updateShippingAddress({ newShippingAddress: props.data.customerInformation.result?.Addresses[0] });\r\n }\r\n if (props.data.customerInformation.result?.Addresses && props.data.customerInformation.result?.Addresses.length) {\r\n await checkoutState.updateShippingAddress({ newShippingAddress: props.data.customerInformation.result?.Addresses[0] });\r\n }\r\n const cl = checkoutState.checkoutCart.cart.CartLines.length && checkoutState.checkoutCart.cart.CartLines[0];\r\n if (checkoutState.checkoutCart.cart.DeliveryMode !== props.config.modeOfDeliveryId! || (cl && cl.DeliveryMode !== props.config.modeOfDeliveryId!)) {\r\n const updateCartDeliverySpecificationInput = {\r\n deliveryModeId: props.config.modeOfDeliveryId!,\r\n shippingAddress: props.data.customerInformation.result?.Addresses && props.data.customerInformation.result?.Addresses.length ? props.data.customerInformation.result?.Addresses[0] : false\r\n };\r\n await checkoutState.checkoutCart.updateCartDeliverySpecification(updateCartDeliverySpecificationInput).then(async response => {\r\n if (response.status === 'FAILED') {\r\n console.log('delivery options selection failed or doesnt exist.', response.errorDetails);\r\n } else {\r\n console.log('Delivery option call has been completed');\r\n const updatedCartVersion = await updateCartLineEmailAddress(checkoutState.guestCheckoutEmail, checkoutState);\r\n placeOrder(props.context.actionContext, checkoutState, [simpleProduct], false, updatedCartVersion, checkoutState.isPaymentVerificationRedirection, updateCustomerDDAttribute).then(async resp => {\r\n console.log('Placed loyalty order', resp);\r\n await updateCustomerDDAttribute();\r\n const transactionIdCookie = props.context.actionContext.requestContext.cookies.get('cp_sales_transaction_id')?.value || '';\r\n window.location.assign(`/dobbiesclub/clubplus-confirmation?transactionId=${transactionIdCookie}`);\r\n }).catch(e => {\r\n console.log('Error placing loyalty order', e);\r\n })\r\n }\r\n })\r\n .catch(() => {\r\n console.log(`Couldn't updated delivery options`);\r\n });\r\n } else {\r\n const updatedCartVersion = await updateCartLineEmailAddress(checkoutState.guestCheckoutEmail, checkoutState);\r\n placeOrder(props.context.actionContext, checkoutState, [simpleProduct], false, updatedCartVersion, checkoutState.isPaymentVerificationRedirection, updateCustomerDDAttribute).then(async resp => {\r\n console.log('Placed loyalty order', resp);\r\n await updateCustomerDDAttribute();\r\n const transactionIdCookie = props.context.actionContext.requestContext.cookies.get('cp_sales_transaction_id')?.value || '';\r\n window.location.assign(`/dobbiesclub/clubplus-confirmation?transactionId=${transactionIdCookie}`);\r\n }).catch(e => {\r\n console.log('Error placing loyalty order', e);\r\n })\r\n }\r\n }\r\n setIsPaymentTriggered(false);\r\n }\r\n\r\n const placeLoyaltyOrder = async () => {\r\n const checkoutState = await getCheckoutState(props.context.actionContext);\r\n // if (props.data.customerInformation.result?.Email) {\r\n // await checkoutState.checkoutCart.updateReceiptEmail({ newEmail: props.data.customerInformation.result?.Email });\r\n // }\r\n \r\n\r\n if (checkoutState.checkoutCart.cart.CartLines && checkoutState.checkoutCart.cart.CartLines.length && checkoutState.checkoutCart.cart.CartLines[0].ProductId) {\r\n const response = await getByIdAsync({ callerContext: props.context.actionContext }, checkoutState.checkoutCart.cart.CartLines[0].ProductId, props.context.actionContext.requestContext.apiSettings.channelId);\r\n const simpleProduct = Array.isArray(response) ? response[0] : response;\r\n if (props.data.customerInformation.result?.Email) {\r\n await checkoutState.checkoutCart.updateReceiptEmail({ newEmail: props.data.customerInformation.result?.Email });\r\n }\r\n if (props.data.customerInformation.result?.Email) {\r\n await checkoutState.updateGuestCheckoutEmail({newGuestCheckoutEmail: props.data.customerInformation.result?.Email});\r\n }\r\n if (props.data.customerInformation.result?.Addresses && props.data.customerInformation.result?.Addresses.length) {\r\n await checkoutState.checkoutCart.updateShippingAddress({ newShippingAddress: props.data.customerInformation.result?.Addresses[0] });\r\n }\r\n if (props.data.customerInformation.result?.Addresses && props.data.customerInformation.result?.Addresses.length) {\r\n await checkoutState.updateShippingAddress({ newShippingAddress: props.data.customerInformation.result?.Addresses[0] });\r\n }\r\n // if (props.data.customerInformation.result?.Addresses && props.data.customerInformation.result?.Addresses.length) {\r\n // if (useBillingSameAsShipping) {\r\n // await checkoutState.updateBillingAddress({ newBillingAddress: props.data.customerInformation.result?.Addresses[0] });\r\n // } else {\r\n // if (props.data.customerInformation.result?.Addresses && props.data.customerInformation.result?.Addresses.length > 1) {\r\n // await checkoutState.updateBillingAddress({ newBillingAddress: props.data.customerInformation.result?.Addresses[1] });\r\n // }\r\n // }\r\n // }\r\n const cl = checkoutState.checkoutCart.cart.CartLines.length && checkoutState.checkoutCart.cart.CartLines[0];\r\n if (checkoutState.checkoutCart.cart.DeliveryMode !== props.config.modeOfDeliveryId! || (cl && cl.DeliveryMode !== props.config.modeOfDeliveryId!)) {\r\n const updateCartDeliverySpecificationInput = {\r\n deliveryModeId: props.config.modeOfDeliveryId!,\r\n shippingAddress: props.data.customerInformation.result?.Addresses && props.data.customerInformation.result?.Addresses.length ? props.data.customerInformation.result?.Addresses[0] : false\r\n };\r\n await checkoutState.checkoutCart.updateCartDeliverySpecification(updateCartDeliverySpecificationInput).then(async response => {\r\n if (response.status === 'FAILED') {\r\n console.log('delivery options selection failed or doesnt exist.', response.errorDetails);\r\n } else {\r\n console.log('Delivery option call has been completed');\r\n const updatedCartVersion = await updateCartLineEmailAddress(checkoutState.guestCheckoutEmail, checkoutState);\r\n \r\n // await placeOrder(\r\n // actionContext,\r\n // this.props.data.checkout.result,\r\n // this.props.data.products.result,\r\n // !hasOrderConfirmation,\r\n // updatedCartVersion,\r\n // this.props.data.checkout.result?.isPaymentVerificationRedirection,\r\n // this.updateCustomerDDAttribute\r\n // )\r\n \r\n const shouldEnableSinglePaymentAuthorizationCheckout =\r\n checkoutState.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\r\n \r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const isExpressCheckoutApplied = checkoutState.isExpressCheckoutApplied ?? false;\r\n if (!isExpressCheckoutApplied && shouldEnableSinglePaymentAuthorizationCheckout) {\r\n triggerPaymentWithPlaceOrder();\r\n } else {\r\n placeOrder(props.context.actionContext, checkoutState, [simpleProduct], false, updatedCartVersion, checkoutState.isPaymentVerificationRedirection, updateCustomerDDAttribute).then(async resp => {\r\n console.log('Placed loyalty order', resp);\r\n await updateCustomerDDAttribute();\r\n const transactionIdCookie = props.context.actionContext.requestContext.cookies.get('cp_sales_transaction_id')?.value || '';\r\n window.location.assign(`/dobbiesclub/clubplus-confirmation?transactionId=${transactionIdCookie}`);\r\n }).catch(e => {\r\n console.log('Error placing loyalty order', e);\r\n })\r\n }\r\n }\r\n })\r\n .catch(() => {\r\n console.log(`Couldn't updated delivery options`);\r\n });\r\n } else {\r\n const updatedCartVersion = await updateCartLineEmailAddress(checkoutState.guestCheckoutEmail, checkoutState);\r\n const shouldEnableSinglePaymentAuthorizationCheckout =\r\n checkoutState.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\r\n const isExpressCheckoutApplied = checkoutState.isExpressCheckoutApplied ?? false;\r\n if (!isExpressCheckoutApplied && shouldEnableSinglePaymentAuthorizationCheckout) {\r\n triggerPaymentWithPlaceOrder();\r\n } else {\r\n placeOrder(props.context.actionContext, checkoutState, [simpleProduct], false, updatedCartVersion, checkoutState.isPaymentVerificationRedirection, updateCustomerDDAttribute).then(async resp => {\r\n console.log('Placed loyalty order', resp);\r\n await updateCustomerDDAttribute();\r\n const transactionIdCookie = props.context.actionContext.requestContext.cookies.get('cp_sales_transaction_id')?.value || '';\r\n window.location.assign(`/dobbiesclub/clubplus-confirmation?transactionId=${transactionIdCookie}`);\r\n }).catch(e => {\r\n console.log('Error placing loyalty order', e);\r\n })\r\n }\r\n }\r\n\r\n\r\n \r\n \r\n }\r\n // else {\r\n // const response = await getByIdAsync({ callerContext: props.context.actionContext }, 5637327545, props.context.actionContext.requestContext.apiSettings.channelId);\r\n // const simpleProduct = Array.isArray(response) ? response[0] : response;\r\n // if (props.data.customerInformation.result?.Email) {\r\n // await checkoutState.checkoutCart.updateReceiptEmail({ newEmail: props.data.customerInformation.result?.Email });\r\n // }\r\n // if (props.data.customerInformation.result?.Email) {\r\n // await checkoutState.updateGuestCheckoutEmail({newGuestCheckoutEmail: props.data.customerInformation.result?.Email});\r\n // }\r\n // if (props.data.customerInformation.result?.Addresses && props.data.customerInformation.result?.Addresses.length) {\r\n // await checkoutState.checkoutCart.updateShippingAddress({ newShippingAddress: props.data.customerInformation.result?.Addresses[0] });\r\n // }\r\n // if (props.data.customerInformation.result?.Addresses && props.data.customerInformation.result?.Addresses.length) {\r\n // await checkoutState.updateShippingAddress({ newShippingAddress: props.data.customerInformation.result?.Addresses[0] });\r\n // }\r\n // if (props.data.customerInformation.result?.Addresses && props.data.customerInformation.result?.Addresses.length) {\r\n // await checkoutState.updateBillingAddress({ newBillingAddress: props.data.customerInformation.result?.Addresses[0] });\r\n // }\r\n // const updateCartDeliverySpecificationInput = {\r\n // deliveryModeId: 'Nodel',\r\n // shippingAddress: true\r\n // };\r\n // await checkoutState.checkoutCart.updateCartDeliverySpecification(updateCartDeliverySpecificationInput).then(response => {\r\n // if (response.status === 'FAILED') {\r\n // console.log('delivery options selection failed or doesnt exist.');\r\n // } else {\r\n // console.log('Delivery option call has been completed');\r\n // }\r\n // })\r\n // .catch(() => {\r\n // console.log(`Couldn't updated delivery options`);\r\n // });\r\n // placeOrder(props.context.actionContext, checkoutState, [simpleProduct], checkoutState.isPaymentVerificationRedirection, checkoutState.checkoutCart.cart.Version, checkoutState.isPaymentVerificationRedirection, updateCustomerDDAttribute)\r\n // }\r\n }\r\n\r\n // const updateGenderValue = (event: React.ChangeEvent): void => {\r\n // const selectedGender = event.target.value;\r\n // SetError('');\r\n // setGender(setAttributeValue(selectedGender, gender, false));\r\n // };\r\n const updateLocalStore = (event: React.ChangeEvent): void => {\r\n const selectedLocalStore = event.target.value;\r\n // SetError('');\r\n setLocalStore(setAttributeValue(selectedLocalStore, localStore, false));\r\n };\r\n const updateTitle = (event: React.ChangeEvent): void => {\r\n const selectedTitle = event.target.value;\r\n // SetError('');\r\n setTitle(setAttributeValue(selectedTitle, title, false));\r\n };\r\n\r\n /** VSI Customization -- END */\r\n const renderDropDownOptionsForAttribute = (attribute: string) => {\r\n const attr = props.data.attributeDefinitions?.result?.find(x => x.AttributeTypeName?.toLowerCase() === attribute.toLowerCase());\r\n return attr?.EnumerationDetails?.map(e => {\r\n return (\r\n \r\n );\r\n });\r\n };\r\n // Render dropdown options for localstore attribute\r\n const renderLocalStores = () => {\r\n const { localStoreAttribute } = props.config;\r\n const localStoreAttr = props.data.attributeDefinitions?.result?.find(\r\n x => x.AttributeTypeName?.toLowerCase() === localStoreAttribute.toLowerCase()\r\n );\r\n const localStores = localStoreAttr?.EnumerationDetails?.sort((a, b) => a.EnumerationValue!.localeCompare(b.EnumerationValue!));\r\n // Move none value to the start of array\r\n const noneVal =\r\n localStores &&\r\n localStores.find(store => {\r\n return store.EnumerationValue && store.EnumerationValue.toLowerCase() === 'none';\r\n });\r\n localStores?.sort((x, y) => {\r\n return x.EnumerationValue === noneVal?.EnumerationValue ? -1 : y === noneVal?.EnumerationValue ? 1 : 0;\r\n });\r\n return localStores?.map(e => {\r\n if(e.EnumerationValue == noneVal?.EnumerationValue) {\r\n return ()\r\n }\r\n return (\r\n \r\n );\r\n });\r\n };\r\n\r\n /* VSI-Customization -- Update button attribute disabled (true or false) based on certain checkbox checked or not */\r\n const handleTermsCheck = (e: React.ChangeEvent) => {\r\n // update state (toggle) based on terms and conditions checkbox checked or not\r\n // setDisabled(!e.target.checked);\r\n setTAndRChecked(e.target.checked);\r\n };\r\n\r\n // const doNotUseSameBillingAddressAsShipping = (e: React.ChangeEvent) => {\r\n // // update state (toggle) based on terms and conditions checkbox checked or not\r\n // setUseBillingSameAsShipping(false);\r\n // checkOnlyOne(e.target);\r\n // };\r\n // const doUseSameBillingAddressAsShipping = (e: React.ChangeEvent) => {\r\n // // update state (toggle) based on terms and conditions checkbox checked or not\r\n // const target = e.target;\r\n // checkOnlyOne(target);\r\n // getCheckoutState(props.context.actionContext).then(checkoutState => {\r\n // if (props.data.customerInformation.result?.Addresses && props.data.customerInformation.result?.Addresses.length) {\r\n // checkoutState.updateBillingAddress({ newBillingAddress: props.data.customerInformation.result?.Addresses[0]}).then(resp => {\r\n // setUseBillingSameAsShipping(true);\r\n // });\r\n // }\r\n // }).catch(e => {\r\n // uncheckCheckbox(target);\r\n // });\r\n // };\r\n\r\n // const uncheckCheckbox = (checkbox: HTMLInputElement): void => {\r\n // const checkboxes = document.getElementsByName(checkbox.name) as NodeListOf;\r\n // checkboxes.forEach((item) => {\r\n // if (item === checkbox) item.checked = false;\r\n // });\r\n // };\r\n\r\n // const checkOnlyOne = (checkbox: HTMLInputElement): void => {\r\n // const checkboxes = document.getElementsByName(checkbox.name) as NodeListOf;\r\n // checkboxes.forEach((item) => {\r\n // if (item !== checkbox) item.checked = false;\r\n // });\r\n // };\r\n \r\n\r\n /* VSI Customization -- Check if gender is not selected, display error message */\r\n // const _genderNotSelectedErrorMsg = () => {\r\n // const { validGenderErrorText } = props.resources;\r\n // // Dont display error on adding dob input i.e. before clicking Next button\r\n // if (dateError !== '') {\r\n // return;\r\n // }\r\n // if (error !== '' && gender && gender.AttributeValue && gender.AttributeValue.StringValue === '') {\r\n // return {validGenderErrorText};\r\n // }\r\n // return;\r\n // };\r\n // /* VSI Customization -- Check if title is not selected, display error message */\r\n // const titleNotSelectedErrorMsg = () => {\r\n // const { titleErrorMessage } = props.resources;\r\n // // Dont display error on adding dob input i.e. before clicking Next button\r\n // if (dateError !== '') {\r\n // return;\r\n // }\r\n // if (error !== '' && title && title.AttributeValue && title.AttributeValue.StringValue === '') {\r\n // return {titleErrorMessage};\r\n // }\r\n // return;\r\n // };\r\n // Render loyalty terms link\r\n const _renderLoyaltyTermsLink = () => {\r\n return (\r\n

\r\n {query?.tier === 'club' ? 'I have read and agree to the terms and conditions of Club' : 'I have read and agree to the terms and conditions of Club Plus'}\r\n

\r\n );\r\n };\r\n // event handler for mobile field\r\n const handleMobileNumber = (event: React.ChangeEvent) => {\r\n const value = event.target.value;\r\n setMobileNumber(setAttributeValue(value, mobileNumber, false));\r\n };\r\n // Event handler for marketing consent attributes\r\n // const handleMarketingConsent = (event: React.ChangeEvent) => {\r\n // const {\r\n // contactableEmailAttribute,\r\n // contactableMobileAttribute,\r\n // contactablePostAttribute,\r\n // contactableProfilingAttribute,\r\n // contactableResearchAttribute\r\n // } = props.config;\r\n // const targetName = event.target.name.toLowerCase();\r\n // const isChecked = event.target.checked;\r\n // if (targetName === contactablePostAttribute.toLowerCase()) {\r\n // setIsPostChecked(setAttributeValue(isChecked, isPostChecked, true));\r\n // setInputCheck(prevData => \r\n // prevData.map(item => \r\n // item.Name.toLowerCase() === targetName ? { ...item, BooleanValue: isChecked } : item\r\n // ));\r\n // }\r\n // if (targetName === contactableEmailAttribute.toLowerCase()) {\r\n // setIsEmailChecked(setAttributeValue(isChecked, isEmailChecked, true));\r\n // setInputCheck(prevData => \r\n // prevData.map(item => \r\n // item.Name.toLowerCase() === targetName ? { ...item, BooleanValue: isChecked } : item\r\n // ));\r\n // }\r\n // if (targetName === contactableResearchAttribute.toLowerCase()) {\r\n // setIsResearchChecked(setAttributeValue(isChecked, isResearchChecked, true));\r\n // }\r\n // if (targetName === contactableMobileAttribute.toLowerCase()) {\r\n // setIsSmsChecked(setAttributeValue(isChecked, isSmsChecked, true));\r\n // setInputCheck(prevData => \r\n // prevData.map(item => \r\n // item.Name.toLowerCase() === targetName ? { ...item, BooleanValue: isChecked } : item\r\n // ));\r\n // }\r\n // if (targetName === contactableProfilingAttribute.toLowerCase()) {\r\n // setIsProfilingChecked(setAttributeValue(isChecked, isProfilingChecked, true));\r\n // }\r\n // };\r\n // Render Marketing consent attributes section\r\n // const renderMarketingConsentSection = () => {\r\n // const cardNumber = props.data.loyaltyCard.result?.CardNumber;\r\n // const {\r\n // marketingPreferenceHeading,\r\n // clubMarketingConsentDescription,\r\n // clubPlusMarketingConsentDescription,\r\n // updatePreferenceText\r\n // } = props.resources;\r\n // const { clubPlusMarketingConsentAttributes, simpleMarketingConsentAttributes } = props.config;\r\n // if (!cardNumber) {\r\n // return (\r\n // <>\r\n //
\r\n //
\r\n //

{marketingPreferenceHeading}

\r\n //

{clubMarketingConsentDescription}

\r\n //
\r\n // {/* Render club marketing consent attributes section */}\r\n //
\r\n // {simpleMarketingConsentAttributes && renderMarketingConsentAttributes(simpleMarketingConsentAttributes)}\r\n //
\r\n //

{clubPlusMarketingConsentDescription}

\r\n //
\r\n // {/* Render club plus marketing consent attributes section */}\r\n //
\r\n // {clubPlusMarketingConsentAttributes &&\r\n // renderMarketingConsentAttributes(clubPlusMarketingConsentAttributes)}\r\n //
\r\n //
\r\n //

{updatePreferenceText}

\r\n //
\r\n //
\r\n //
\r\n // {props.signInLink}\r\n // \r\n // );\r\n // }\r\n // return;\r\n // };\r\n // Render checkboxes for marketing consent attributes\r\n // const renderMarketingConsentAttributes = (marketingConsentAttributes: ISimpleMarketingConsentAttributesData[]) => {\r\n // return marketingConsentAttributes.map(attr => {\r\n // const { attributeLabel, attributeName } = attr;\r\n // const filteredInputCheck = inputCheck.find(attr2 => attr2.Name === attributeName && attr2.BooleanValue);\r\n // if(filteredInputCheck){\r\n // return (\r\n // \r\n // \r\n // \r\n // \r\n // );\r\n // }else{\r\n // return(\r\n // \r\n // \r\n // \r\n // \r\n // )\r\n // }\r\n // });\r\n // };\r\n // Render date of birth field and display error message if occurs\r\n const renderDateOfBirthField = () => {\r\n // const { dateOfBirthLabel } = props.resources;\r\n const queryTier = props.context.request.query?.tier.toLowerCase();\r\n return day && day.AttributeValue?.StringValue && month && month.AttributeValue?.StringValue && year && year.AttributeValue?.StringValue ? (\r\n
\r\n
\r\n {queryTier?.toLowerCase() !== 'club' ? :\r\n }\r\n {/* */}\r\n {\r\n handleMask(e, '99/99/9999');\r\n updateDOB(e);\r\n }} value={dateOfBirth.AttributeValue?.StringValue} />\r\n {/* slot will be rendered for dob description text */}\r\n {dateOfBirthText && dateOfBirthText}\r\n \r\n {_invalidDobErrorMsg(\r\n displayNotification,\r\n error,\r\n dateError,\r\n isValidDob,\r\n overEighteen,\r\n props.resources,\r\n isYearOutOfRange,\r\n minYear,\r\n maxYear\r\n )}\r\n
\r\n ): (\r\n
\r\n
\r\n {queryTier?.toLowerCase() !== 'club' ? :\r\n }\r\n {/* */}\r\n \r\n {/* slot will be rendered for dob description text */}\r\n {dateOfBirthText && dateOfBirthText}\r\n \r\n {_invalidDobErrorMsg(\r\n displayNotification,\r\n error,\r\n dateError,\r\n isValidDob,\r\n overEighteen,\r\n props.resources,\r\n isYearOutOfRange,\r\n minYear,\r\n maxYear\r\n )}\r\n
\r\n );\r\n };\r\n // Render local store select element\r\n const renderLocalStoreField = () => {\r\n // const { storeLabel } = props.resources;\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n };\r\n // Render mobile field\r\n const renderMobileField = () => {\r\n const { mobileLabel } = props.resources;\r\n return mobileNumber && mobileNumber.AttributeValue?.StringValue ? (\r\n
\r\n {/* */}\r\n \r\n
\r\n ): (\r\n
\r\n {/* */}\r\n \r\n
\r\n );\r\n };\r\n // Render select element for given attribute\r\n const renderSelectElement = (\r\n label: string,\r\n onChangeHandler: React.ChangeEventHandler,\r\n dropdownLabel: string,\r\n attribute: string\r\n ) => {\r\n return title && title.AttributeValue?.StringValue ? (\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\n const handlePromoCodeChange = (e: React.ChangeEvent) => {\r\n setPromoCode(e.currentTarget.value);\r\n };\r\n const renderPromoCodeField = () => {\r\n const {\r\n resources: { promoCodeLabel }\r\n } = props;\r\n // const cardNumber = props.data.loyaltyCard.result?.CardNumber;\r\n // if (cardNumber || (!cardNumber && query?.tier?.toLowerCase() === 'club-plus')) {\r\n return (\r\n
\r\n

We'll send your member card number to your email address after payment - this may take up to an hour to show in your inbox (remember to check your spam folder)

\r\n \r\n
\r\n );\r\n // }\r\n // return;\r\n };\r\n\r\n // Render Loyalty terms and conditions section with Action button\r\n const renderLoyaltyTermsAndConditionsSection = () => {\r\n // const { joinLoyaltyButtonText } = props.resources;\r\n return (\r\n
\r\n
\r\n
Terms and conditions
\r\n
\r\n

\r\n {query?.tier === 'club' ? 'By joining Dobbies Club, you will get access to exclusive member offers and benefits. It is a condition of joining Club that you agree with our' :'By joining Dobbies Club Plus, you will get access to exclusive member offers and benefits. It is a condition of joining Club Plus that you agree with our'}\r\n terms and conditions\r\n

\r\n
\r\n
\r\n
\r\n \r\n {_renderLoyaltyTermsLink()}\r\n
\r\n {/* To handle click functionality overriding the loyalty sign up button */}\r\n {/* {\r\n \r\n } */}\r\n
\r\n );\r\n };\r\n\r\n const addProductToCart = async () => {\r\n // get product from data that we want to add into cart.\r\n\r\n // VSI CUSTOMIZATION - START\r\n const context = props.context.actionContext;\r\n // props.props.context.request.channel!.RecordId\r\n\r\n // Clear cart on page load\r\n const cartState = await getCartState(props.context.actionContext);\r\n\r\n const lineItemIdsToRemove = [];\r\n let productToAdd: ISelectedProduct | null;\r\n\r\n const activeCart = cartState.cart;\r\n for (const activeCartLine of activeCart.CartLines || []) {\r\n lineItemIdsToRemove.push(activeCartLine.LineId!);\r\n }\r\n\r\n if (lineItemIdsToRemove.length > 0) {\r\n try {\r\n await cartState.removeCartLines({ cartLineIds: lineItemIdsToRemove });\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n if (!props.context.request.query?.tier) {\r\n return;\r\n }\r\n\r\n const tier = props.context.request.query.tier.toLowerCase();\r\n\r\n if (tier === TierType.ClubPremium) {\r\n const variantInput = new SelectedVariantInput(clubPremiumTierId!, props.context.request.channel!.RecordId);\r\n const newProduct = await getSelectedVariant(variantInput, context);\r\n\r\n productToAdd = newProduct;\r\n } else if (tier === TierType.ClubPlusFreeTrial) {\r\n const variantInput = new SelectedVariantInput(clubPlusTrialTierId!, props.context.request.channel!.RecordId);\r\n const newProduct = await getSelectedVariant(variantInput, context);\r\n\r\n productToAdd = newProduct;\r\n } else if (tier === 'club-plus-bolton') {\r\n const loyaltGroups = props.data.loyaltyCard.result?.LoyaltyGroups![0];\r\n if (loyaltGroups) {\r\n const highestActiveLoyaltyCardTier = loyaltGroups.HighestActiveLoyaltyCardTier;\r\n const activatedTier = loyaltGroups.LoyaltyCardTiers!.find(card => card.RecordId === highestActiveLoyaltyCardTier);\r\n console.log('activeTier', activatedTier);\r\n if (activatedTier?.TierId === 'Club Plus') {\r\n const variantInput = new SelectedVariantInput(clubPlusBoltOnId!, props.context.request.channel!.RecordId);\r\n const newProduct = await getSelectedVariant(variantInput, context);\r\n productToAdd = newProduct;\r\n } else if (\r\n activatedTier?.TierId === 'Club Plus Free Trial' &&\r\n props.config.allowBoltonsPurcharseForClubPlusFreeTrial\r\n ) {\r\n const variantInput = new SelectedVariantInput(clubPlusBoltOnId!, props.context.request.channel!.RecordId);\r\n const newProduct = await getSelectedVariant(variantInput, context);\r\n productToAdd = newProduct;\r\n } else {\r\n window.location.assign('/loyalty');\r\n }\r\n }\r\n } else {\r\n const variantInput = new SelectedVariantInput(clubPlusTierId!, props.context.request.channel!.RecordId);\r\n const newProduct = await getSelectedVariant(variantInput, context);\r\n\r\n productToAdd = newProduct;\r\n }\r\n\r\n // if cartLines is empty add product to cart\r\n if (cartState.cart.CartLines && cartState.cart.CartLines.length === 0) {\r\n await cartState.addProductToCart({ product: productToAdd!, count: 1, enableStockCheck: false });\r\n const newCartState = await getCartState(props.context.actionContext);\r\n setCurrCartState(newCartState);\r\n setCurrStep(2);\r\n // After adding product to cart redirects user to checkout page\r\n // setItemAdded(true);\r\n }\r\n // const checkoutLink = Msdyn365.getUrlSync('checkout', props.props.context.actionContext) || '';\r\n\r\n // if (tier === TierType.ClubPremium) {\r\n // window.location.assign(`${checkoutLink}?tier=club-premium`);\r\n // } else if (tier === TierType.ClubPlus) {\r\n // window.location.assign(`${checkoutLink}?tier=club-plus`);\r\n // } else if (tier === 'club-plus-bolton') {\r\n // window.location.assign(`${checkoutLink}?tier=club-plus-bolton`);\r\n // } else {\r\n // window.location.assign(`${checkoutLink}`);\r\n // }\r\n };\r\n\r\n\r\n\r\n const matchTiersAndAddProductToCart = () => {\r\n const tier = props.context.request.query?.tier.toLowerCase();\r\n const loyaltyGroups = props.data.loyaltyCard.result?.LoyaltyGroups;\r\n if (tier && tier.toLowerCase() !== clubPlusText?.toLowerCase()) {\r\n // !itemAdded && addProductToCart();\r\n addProductToCart();\r\n // TODO: if tier is expired what to do\r\n } else if (\r\n tier &&\r\n tier.toLowerCase() === clubPlusText?.toLowerCase() &&\r\n loyaltyGroups &&\r\n loyaltyGroups.length &&\r\n loyaltyGroups[0].LoyaltyCardTiers &&\r\n loyaltyGroups[0].LoyaltyCardTiers.length\r\n ) {\r\n\r\n const highestTier = getTier(props);\r\n const validToDate = highestTier && highestTier.ValidTo;\r\n const endDate = new Date(validToDate ?? '');\r\n const today = new Date();\r\n const timeDifference = endDate.getTime() - today.getTime() + 24 * 60 * 60 * 1000;\r\n const remainingDays = Math.ceil(timeDifference / (1000 * 60 * 60 * 24));\r\n const daysLimit = props.context?.app?.config?.clubPlusRenewalDays || 30;\r\n if (remainingDays <= daysLimit) {\r\n // !itemAdded && addProductToCart();\r\n addProductToCart();\r\n } else {\r\n // const loyaltyLink = props.context?.app?.config?.loyaltyLink;\r\n // window.location.assign(loyaltyLink);\r\n }\r\n } else {\r\n // redirects user to loyalty page (so he can view his points)\r\n // const loyaltyLink = props.context?.app?.config?.loyaltyLink;\r\n // window.location.assign(loyaltyLink);\r\n }\r\n }\r\n\r\n const validateInputs = () => {\r\n if(!Msdyn365.msdyn365Commerce.isBrowser || !document) {\r\n return;\r\n }\r\n const inputElements = document.getElementsByClassName('user-data-field');\r\n if (inputElements && inputElements.length) {\r\n for (let i = 0; i < inputElements.length; i++) {\r\n if (inputElements[i] instanceof HTMLSelectElement) {\r\n const inputElem = inputElements[i] as HTMLSelectElement;\r\n if ((!inputElem.value && !title?.AttributeValue?.StringValue) || inputElem.value === 'Not stated' || title?.AttributeValue?.StringValue === 'Not stated' || inputElem.value === 'Title*' || title?.AttributeValue?.StringValue === 'Title*') {\r\n return false;\r\n }\r\n } else if (inputElements[i] instanceof HTMLInputElement) {\r\n const inputElem = inputElements[i] as HTMLInputElement;\r\n if (!inputElem.value) {\r\n return false;\r\n }\r\n } else if (inputElements[i] instanceof HTMLDivElement) {\r\n const inputElem = inputElements[i] as HTMLDivElement;\r\n const inputElement = inputElem.querySelector('input');\r\n const queryTier = props.context.request.query?.tier?.toLowerCase();\r\n \r\n if (inputElement instanceof HTMLInputElement) {\r\n const divInput = inputElement as HTMLInputElement;\r\n if (queryTier === 'club' && !divInput.value) {\r\n if (error) {\r\n SetError('');\r\n }\r\n if (dateError) {\r\n SetDateError('');\r\n }\r\n continue;\r\n }\r\n if (!divInput.value || divInput.value.includes('MM/')) {\r\n return false;\r\n }\r\n try {\r\n if(!validateDOB(divInput.value)) {\r\n SetError('DOB Error');\r\n return false;\r\n }\r\n } catch (e) {\r\n console.log('DOB error', e);\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n const _getSlot = (slotName: string): React.ReactNode[] | null => {\r\n const { slots } = props;\r\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\r\n }\r\n const validateStepOneInputs = () => {\r\n if (Msdyn365.msdyn365Commerce.isBrowser && window) {\r\n const allAddressInputs = document.getElementsByClassName('msc-address-form__input-text');\r\n const addressValues: string[] = [];\r\n if (allAddressInputs && allAddressInputs.length) {\r\n for (let i = 0; i < allAddressInputs.length; i++) {\r\n if (allAddressInputs[i] instanceof HTMLInputElement) {\r\n const inputElem = allAddressInputs[i] as HTMLInputElement;\r\n if (!inputElem.value) {\r\n return false;\r\n }\r\n addressValues.push(inputElem.value);\r\n }\r\n }\r\n }\r\n if (!tAndRChecked) {\r\n return false;\r\n }\r\n if (addressValues.length === allAddressInputs.length) {\r\n const storeSelectorElem = document.getElementById('loyalty-store-selector') as HTMLSelectElement;\r\n if (storeSelectorElem && storeSelectorElem.value && storeSelectorElem.value.toLowerCase() !== 'local store *') {\r\n return true;\r\n }\r\n if (localStore && localStore.AttributeValue?.StringValue && localStore.AttributeValue?.StringValue !== 'local store *' ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n return false\r\n };\r\n\r\n const capitalizeFirstLetter = (str: string) => {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n }\r\n // Render full view for loyalty sign up page\r\n const renderLoyaltySignUpView = () => {\r\n // const { titleLabel, pleaseSelectText, genderLabel } = props.resources;\r\n const { titleLabel, pleaseSelectText } = props.resources;\r\n // const { nonClubMemberStatement, memberStatement } = props.config;\r\n // const { titleAttribute, genderAttribute } = props.config;\r\n const { titleAttribute } = props.config;\r\n const CardNumber = props.data.loyaltyCard.result?.CardNumber;\r\n let formattedPrice: number | string | undefined;\r\n /* VSI Customization - START - 24/08/21 */\r\n \r\n let price = currCartState?.cart.CartLines && currCartState?.cart.CartLines.length ? currCartState?.cart.CartLines[0].Price : 0;\r\n if (price === 0) {\r\n formattedPrice = '£0.00';\r\n } else {\r\n formattedPrice = price && props.context.cultureFormatter.formatCurrency(price, props.context.request.channel?.Currency);\r\n }\r\n\r\n if (Msdyn365.msdyn365Commerce.isBrowser && window) {\r\n if (window.location.href.includes('step=3') && currStep !== 2) {\r\n return <>;\r\n }\r\n } else {\r\n if (props.context.actionContext.requestContext.url.requestUrl.href.includes('step=3') && currStep !== 2) {\r\n return <>;\r\n }\r\n }\r\n // const tierID = tierId?.toLowerCase();\r\n if (CardNumber && currStep === 0) {\r\n // setCurrStep(1);\r\n }\r\n const tier = props.context.request.query?.tier.toLowerCase();\r\n \r\n let nextButtonText = '';\r\n if (currStep === 0 && tier === TierType.Club) {\r\n nextButtonText = 'Continue to final step';\r\n } else if (currStep === 1 && (tier === TierType.ClubPlus || tier === TierType.ClubPremium || tier === TierType.ClubPlusFreeTrial)) {\r\n nextButtonText = 'Continue to final step';\r\n } else if (currStep === 1) {\r\n nextButtonText = `Join ${capitalizeFirstLetter('club')}`;\r\n } else if (currStep === 2) {\r\n try {\r\n let tierText = '';\r\n const tierTextSplitted = tier?.split('-');\r\n if (tierTextSplitted && tierTextSplitted.length > 1) {\r\n for (const splittedTxt of tierTextSplitted) {\r\n tierText = tierText.concat(` ${capitalizeFirstLetter(splittedTxt)}`);\r\n }\r\n }\r\n nextButtonText = `Join ${tierText}`;\r\n } catch (e) {\r\n console.log('Error splitting tier', e);\r\n nextButtonText = 'Join Club Plus Tiers Membership';\r\n }\r\n } else {\r\n nextButtonText = 'Next';\r\n }\r\n let stepClassName = '';\r\n if (currStep === 0) {\r\n stepClassName = 'step-one';\r\n } else if (currStep === 1) {\r\n stepClassName = 'step-two';\r\n } else if (currStep === 2) {\r\n stepClassName = 'step-three';\r\n }\r\n let billingModule = null;\r\n try {\r\n billingModule = _getSlot('checkoutBillingAddress');\r\n } catch (e) {\r\n console.log('Error getting Billing Module', e);\r\n }\r\n console.log('Billing Module', billingModule);\r\n const inputsAreValid = validateInputs();\r\n if (inputsAreValid !== undefined && showBtnDisabled !== (!inputsAreValid) && currStep == 0) {\r\n setShowButtonDisabled(!inputsAreValid);\r\n }\r\n if (!disabled && !validateStepOneInputs() && currStep === 1) {\r\n setDisabled(true);\r\n } else if (validateStepOneInputs() && disabled && currStep === 1) {\r\n setDisabled(false);\r\n }\r\n\r\n const shouldBtnBeDisabledVar = (currStep === 0 && showBtnDisabled) || (currStep === 1 && disabled) || (currStep === 2 && !props.data.inputsValidations.result?.areAllFieldsValid);\r\n \r\n if (shouldBtnBeDisabled !== shouldBtnBeDisabledVar) {\r\n setShouldBtnBeDisabled(shouldBtnBeDisabledVar);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

Join Now

\r\n

You’re just a few simple steps away from becoming a {query?.tier === 'club' ? 'Club member!':'Club Plus member!'}

\r\n
\r\n {query?.tier === 'club' ?
    \r\n
  • {\r\n iconOneClicked();\r\n }}>\r\n
    \r\n \"\"\r\n \"\"\r\n
    \r\n

    \r\n Step 1:

    Personal details\r\n

    \r\n
  • \r\n
  • {\r\n iconTwoClicked();\r\n }}>\r\n
    \r\n \"\"\r\n \"\"\r\n
    \r\n

    \r\n Step 2:

    Address\r\n

    \r\n
  • \r\n
:
    \r\n
  • {\r\n iconOneClicked();\r\n }}>\r\n
    \r\n \"\"\r\n \"\"\r\n
    \r\n

    \r\n Step 1:

    Personal details\r\n

    \r\n
  • \r\n
  • {\r\n iconTwoClicked();\r\n }}>\r\n
    \r\n \"\"\r\n \"\"\r\n
    \r\n

    \r\n Step 2:

    Address\r\n

    \r\n
  • \r\n
  • {\r\n iconThreeClicked();\r\n }}>\r\n
    \r\n \"\"\r\n \"\"\r\n
    \r\n

    \r\n Step 3:

    Payment\r\n

    \r\n
  • \r\n
}\r\n
\r\n {<>\r\n {currStep === 0 &&
\r\n {renderSelectElement(titleLabel, updateTitle, pleaseSelectText, titleAttribute)}\r\n {/* {`First name: ${props.data.customerInformation.result?.FirstName}`}\r\n {`Last name: ${props.data.customerInformation.result?.LastName}`} */}\r\n {renderFirstAndLastName(props)}\r\n

{`Email: ${props.data.customerInformation.result?.Email}`}

\r\n {renderMobileField()}\r\n {renderDateOfBirthField()}\r\n
}\r\n {currStep === 1 &&
\r\n {props.slots.address}\r\n {renderLocalStoreField()}\r\n {renderLoyaltyTermsAndConditionsSection()}\r\n
}\r\n {currStep === 2 && \r\n
\r\n {/*
\r\n

Use the same address for my billing address:

\r\n
\r\n Yes\r\n No\r\n
\r\n
*/}\r\n {billingModule}\r\n {renderPromoCodeField()}\r\n\r\n
\r\n

Order Summary

\r\n
    \r\n
  • \r\n Club Plus {formattedPrice}\r\n
  • \r\n
  • \r\n Total {formattedPrice}\r\n
  • \r\n
\r\n
\r\n\r\n {props.slots.checkoutSectionContainer && props.slots.checkoutSectionContainer[0]}\r\n {props.slots.checkoutSlot && props.slots.checkoutSlot[0]}\r\n \r\n
}\r\n \r\n \r\n }\r\n {/* \r\n
\r\n
\r\n {displayHeading(props)}\r\n
\r\n {tierID === 'club' ?

{memberStatement}

:

{nonClubMemberStatement}

}\r\n
\r\n
\r\n
\r\n
\r\n {renderMainHeading(props)}\r\n {!CardNumber && (\r\n <>\r\n {renderSelectElement(titleLabel, updateTitle, pleaseSelectText, titleAttribute)}\r\n {titleNotSelectedErrorMsg()}\r\n {renderFirstAndLastName(props)}\r\n {renderMobileField()}\r\n {renderDateOfBirthField()}\r\n \r\n )}\r\n {props.slots.address}\r\n {addressError !== '' && {addressError}}\r\n {!CardNumber && (\r\n <>\r\n {renderSelectElement(genderLabel, updateGenderValue, pleaseSelectText, genderAttribute)}\r\n {_genderNotSelectedErrorMsg()}\r\n {renderLocalStoreField()}\r\n \r\n )}\r\n {renderPromoCodeField()}\r\n
\r\n {renderMarketingConsentSection()}\r\n {renderLoyaltyTermsAndConditionsSection()}\r\n
*/}\r\n
\r\n
\r\n );\r\n };\r\n\r\n const isLoyaltyAboutToExpire = () => {\r\n const highestTier = getTier(props);\r\n const validToDate = highestTier && highestTier.ValidTo;\r\n const endDate = new Date(validToDate ?? '');\r\n const today = new Date();\r\n const timeDifference = endDate.getTime() - today.getTime() + 24 * 60 * 60 * 1000;\r\n const remainingDays = Math.ceil(timeDifference / (1000 * 60 * 60 * 24));\r\n const daysLimit = props.context?.app?.config?.clubPlusRenewalDays || 30;\r\n if (remainingDays > daysLimit) {\r\n return false;\r\n } \r\n return true;\r\n}\r\n // Due to use of useState hooks inside this function need to disable tslint\r\n // tslint:disable-next-line: max-func-body-length\r\n const renderJSX = (): JSX.Element => {\r\n const { redirectingLoaderText, authenticationMessage } = props.resources;\r\n let { clubFreeTierText, clubPlusTierText } = props.config;\r\n clubFreeTierText = clubFreeTierText?.toLowerCase();\r\n clubPlusTierText = clubPlusTierText?.toLowerCase();\r\n const tierID = tierId?.toLowerCase();\r\n const queryParam = query?.tier?.toLowerCase();\r\n const CardNumber = props.data.loyaltyCard.result?.CardNumber;\r\n if (!props.context.request.user.isAuthenticated) {\r\n return ;\r\n } else if (CardNumber && tierID === clubFreeTierText && queryParam === 'club-free') {\r\n return ;\r\n } \r\n else if (CardNumber && tierID === clubPlusTierText && ((queryParam === 'club-plus' && !isLoyaltyAboutToExpire()) || queryParam === 'club-plus-trial')) {\r\n return ;\r\n } \r\n else if (CardNumber && tierID === clubPlusTierText && queryParam === 'club-free') {\r\n return ;\r\n } else {\r\n return <>{renderLoyaltySignUpView()};\r\n }\r\n };\r\n // Here's the main rendering\r\n return <>{renderJSX()};\r\n};\r\n// Custom hook to get custom address count\r\nconst useGetAddressesCount = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps) => {\r\n const [addressCount, setAddressCount] = useState([]);\r\n useEffect(() => {\r\n setAddressCount(props.data.getCustomerAddress.result?.addresses);\r\n });\r\n return addressCount;\r\n};\r\n\r\n// Provide the TierId of user's loyalty\r\nconst getTierId = (loyaltyGroup: LoyaltyGroup | undefined) => {\r\n // highestLoyaltCardTier\r\n const highestActiveLoyaltyCardTier = loyaltyGroup && loyaltyGroup.HighestActiveLoyaltyCardTier;\r\n const loyaltyCardTiers = loyaltyGroup && loyaltyGroup.LoyaltyCardTiers;\r\n if (loyaltyCardTiers && loyaltyCardTiers?.length > 0) {\r\n for (const [_, loyaltyCardTier] of loyaltyCardTiers.entries()) {\r\n if (loyaltyCardTier.RecordId === highestActiveLoyaltyCardTier) {\r\n return loyaltyCardTier.TierId;\r\n }\r\n }\r\n }\r\n return;\r\n};\r\n\r\n// const renderMainHeading = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps) => {\r\n// if (!props.data.loyaltyCard.result?.CardNumber) {\r\n// return (\r\n// <>\r\n// {renderHeading(props.config.memberHeading)}\r\n//
\r\n//

{props.resources.additionalDetailsLabel}

\r\n//
\r\n// \r\n// );\r\n// }\r\n// return;\r\n// };\r\n// this will return attribute which we need to for club plus members like (direct debit, promo code).\r\nconst getCustomAttribute = (\r\n props: ILoyaltySignUpViewProps & ILoyaltySignUpProps,\r\n attribute: string,\r\n value: string\r\n): CustomerAttribute => {\r\n // const { directDebitAttribute, directDebitAttributeValue} = props.config;\r\n const defaultAttribute = props.data.attributeDefinitions.result?.find(attr => attr.Name?.toLowerCase() === attribute?.toLowerCase());\r\n return {\r\n ['AttributeValue']: {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CommercePropertyValue',\r\n StringValue: value\r\n },\r\n ['@odata.type']: '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CustomerAttribute',\r\n ['ExtensionProperties@odata.type']: '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.CommerceProperty)',\r\n ['NameTranslations@odata.type']: '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.TextValueTranslation)',\r\n ['NameTranslations']: [],\r\n ['DataTypeValue']: defaultAttribute && defaultAttribute.DataTypeValue,\r\n ['KeyName']: defaultAttribute && defaultAttribute.Name,\r\n ['Name']: defaultAttribute && defaultAttribute.Name,\r\n ['RecordId']: defaultAttribute && defaultAttribute.RecordId,\r\n ['ExtensionProperties']: []\r\n };\r\n};\r\n// This function will render generic headings\r\n// const renderHeading = (heading: (IHeadingData & IHeadingData) | undefined) => {\r\n// return heading?.text && ;\r\n// };\r\n// Render Customer's first and last name\r\nconst renderFirstAndLastName = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps) => {\r\n const {\r\n customerInformation: { result }\r\n } = props.data;\r\n return (\r\n
\r\n
\r\n

First name: {result?.FirstName}

\r\n
\r\n
\r\n

Last name: {result?.LastName}

\r\n
\r\n
\r\n );\r\n};\r\n// Function for setting attribute default value\r\nconst setAttrDefaultValues = (attribute: CustomerAttribute) => {\r\n return {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CustomerAttribute',\r\n Attribute: undefined,\r\n DataTypeValue: attribute.DataTypeValue,\r\n KeyName: attribute.Name,\r\n Name: attribute.Name,\r\n RecordId: attribute.RecordId,\r\n Units: undefined,\r\n AttributeValue: {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CommercePropertyValue',\r\n StringValue: attribute.DataTypeValue === 5 ? '' : null,\r\n BooleanValue: attribute.DataTypeValue === 6 ? false : null\r\n },\r\n 'ExtensionProperties@odata.type': '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.CommerceProperty)',\r\n ExtensionProperties: [],\r\n 'NameTranslations@odata.type': '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.TextValueTranslation)',\r\n NameTranslations: []\r\n };\r\n};\r\n\r\nconst setAttributeValue = (value: string | boolean, attribute: CustomerAttribute, isBoolean: boolean) => {\r\n return {\r\n ['AttributeValue']: {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CommercePropertyValue',\r\n IntegerValue: null,\r\n BooleanValue: isBoolean ? value : null,\r\n StringValue: isBoolean ? null : value,\r\n DecimalValue: null\r\n },\r\n ['@odata.type']: '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CustomerAttribute',\r\n ['ExtensionProperties@odata.type']: '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.CommerceProperty)',\r\n ['NameTranslations@odata.type']: '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.TextValueTranslation)',\r\n ['NameTranslations']: [],\r\n ['DataTypeValue']: (attribute && attribute.DataTypeValue) || '',\r\n ['KeyName']: (attribute && attribute.Name) || '',\r\n ['Name']: (attribute && attribute.Name) || '',\r\n ['RecordId']: (attribute && attribute.RecordId) || '',\r\n ['ExtensionProperties']: []\r\n };\r\n};\r\n// Will render generic loader with given message\r\nconst RenderErrorMessageWithLoader: React.FC<{ message: string }> = ({ message }) => {\r\n return (\r\n
\r\n
\r\n \r\n {message}\r\n
\r\n
\r\n );\r\n};\r\nconst getTier = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps) => {\r\n const loyaltyGroup = props.data.loyaltyCard.result?.LoyaltyGroups && props.data.loyaltyCard.result?.LoyaltyGroups[0];\r\n // highestLoyaltCardTier\r\n const highestActiveLoyaltyCardTier = loyaltyGroup && loyaltyGroup.HighestActiveLoyaltyCardTier;\r\n const loyaltyCardTiers = loyaltyGroup && loyaltyGroup.LoyaltyCardTiers;\r\n // Get TierId based on the active cardTier\r\n if (loyaltyCardTiers && loyaltyCardTiers?.length > 0) {\r\n for (const [_, loyaltyCardTier] of loyaltyCardTiers.entries()) {\r\n if (loyaltyCardTier.RecordId === highestActiveLoyaltyCardTier) {\r\n return loyaltyCardTier;\r\n }\r\n }\r\n }\r\n return;\r\n};\r\n// Redirects the user based on certain criteria defined inside function\r\nconst redirectUserIfTierExist = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps, tierId: string | undefined) => {\r\n const { clubFreeTierText, clubPlusTierText } = props.config;\r\n const {\r\n data: { loyaltyCard },\r\n context: {\r\n request: { query }\r\n }\r\n } = props;\r\n // -1 If user is already dobbies club free member and wants to enroll for it again\r\n // redirects him to loyalty page\r\n if (\r\n loyaltyCard.result?.CardNumber &&\r\n tierId?.toLowerCase() === clubFreeTierText?.toLowerCase() &&\r\n query?.tier?.toLowerCase() === 'club-free'\r\n ) {\r\n // redirects him to loyalty page.\r\n // window.location.assign(Msdyn365.getUrlSync('/loyalty', props.context.actionContext) || '');\r\n window.location.assign('/loyalty');\r\n return;\r\n }\r\n /* -2 If user is already dobbies club plus member and wants to enroll for it again redirects him to loyalty page */\r\n if (\r\n loyaltyCard.result?.CardNumber &&\r\n tierId?.toLowerCase() === clubPlusTierText?.toLowerCase() &&\r\n query?.tier?.toLowerCase() === 'club-plus'\r\n ) {\r\n // redirects him to loyalty page.\r\n // window.location.assign(Msdyn365.getUrlSync('/loyalty', props.context.actionContext) || '');\r\n const highestTier = getTier(props);\r\n const validToDate = highestTier && highestTier.ValidTo;\r\n const endDate = new Date(validToDate ?? '');\r\n const today = new Date();\r\n const timeDifference = endDate.getTime() - today.getTime() + 24 * 60 * 60 * 1000;\r\n const remainingDays = Math.ceil(timeDifference / (1000 * 60 * 60 * 24));\r\n const daysLimit = props.context?.app?.config?.clubPlusRenewalDays || 30;\r\n if (remainingDays > daysLimit) {\r\n window.location.assign('/loyalty');\r\n return;\r\n }\r\n\r\n \r\n }\r\n\r\n /* -3 If user is club plus member now he mistakenly wants to enroll in free tier redirects him to loyalty page */\r\n if (\r\n loyaltyCard.result?.CardNumber &&\r\n tierId?.toLowerCase() === clubPlusTierText?.toLowerCase() &&\r\n query?.tier?.toLowerCase() === 'club-free'\r\n ) {\r\n // redirects him to loyalty page.\r\n // window.location.assign(Msdyn365.getUrlSync('/loyalty', props.context.actionContext) || '');\r\n window.location.assign('/loyalty');\r\n return;\r\n }\r\n\r\n /* -4 If user is already dobbies club plus member and wants to enroll in dobbies free club trial redirects him to loyalty page */\r\n};\r\n\r\n\r\nconst _invalidDobErrorMsg = (\r\n displayNotification: boolean,\r\n error: string,\r\n dateError: string,\r\n isValidDob: Boolean,\r\n overEighteen: boolean,\r\n resources: ILoyaltySignUpResources,\r\n isYearOutOfRange: boolean,\r\n minYear: number,\r\n maxYear: number\r\n) => {\r\n // const { validDateErrorText, ageRestrictionError, validYearErrorText } = resources;\r\n // const { validDateErrorText } = resources;\r\n // const yearRangeErrorText = validYearErrorText.replace('{minYear}', minYear.toString()).replace('{maxYear}', maxYear.toString());\r\n // if ((error !== '' || dateError !== '') && displayNotification && !isYearOutOfRange) {\r\n if ((error !== '' || dateError !== '')) {\r\n return (\r\n \r\n {/* {!isValidDob ? validDateErrorText : !overEighteen ? ageRestrictionError : undefined} */}\r\n {!isValidDob ? 'Please enter a valid date of birth' : undefined}\r\n \r\n );\r\n }\r\n // if (error !== '' && isValidDob && isYearOutOfRange) {\r\n // return {yearRangeErrorText};\r\n // }\r\n return;\r\n};\r\n\r\n// const _renderTermsAndConditionsText = (\r\n// termsAndConditionLink: ITermsAndConditionsLinkData,\r\n// termsAndConditionsText: string,\r\n// linkClass: string,\r\n// textClass: string\r\n// ) => {\r\n// const termsAndConditionLinkData: Msdyn365.ILinksData = {\r\n// ariaLabel: termsAndConditionLink.ariaLabel || undefined,\r\n// className: linkClass,\r\n// linkText: termsAndConditionLink.linkText,\r\n// linkUrl: termsAndConditionLink.linkUrl && termsAndConditionLink.linkUrl.destinationUrl\r\n// };\r\n// return (\r\n// \r\n// {termsAndConditionsText}\r\n// \r\n// \r\n// );\r\n// };\r\n// Display main heading on page to differentiate b/w Club and Club Plus page\r\n// const displayHeading = (props: ILoyaltySignUpViewProps & ILoyaltySignUpProps) => {\r\n// const { joiningClubPlusText, joiningClubText, joiningClubPlusTrialText } = props.resources;\r\n// const query = props.context.request.query;\r\n// if (query?.tier?.toLowerCase() === 'club-free') {\r\n// return

{joiningClubText}

;\r\n// } else if (query?.tier?.toLowerCase() === 'club-plus-trial') {\r\n// return

{joiningClubPlusTrialText}

;\r\n// } else if (query?.tier?.toLowerCase() === 'club-plus') {\r\n// return

{joiningClubPlusText}

;\r\n// } else {\r\n// return

{joiningClubText}

;\r\n// }\r\n// };\r\n// Will update state after getting maxYear and minYear from values coming from D365 for Year Attribute\r\n// tslint:disable-next-line: max-line-length\r\nconst setMinAndMaxYear = (\r\n props: ILoyaltySignUpViewProps & ILoyaltySignUpProps,\r\n SetMinYear: React.Dispatch>,\r\n minYear: number,\r\n SetMaxYear: React.Dispatch>,\r\n maxYear: number\r\n): void => {\r\n useEffect(() => {\r\n if (minYear === -1 && maxYear === -1) {\r\n // const attributes = props.data.attributeDefinitions.result;\r\n // const yearAttr = attributes?.find(x => x.Name?.toLowerCase() === 'year');\r\n // let years: number[] | undefined = [];\r\n // let _minYear;\r\n // if (yearAttr) {\r\n // years = yearAttr.EnumerationDetails?.map(enumeration => {\r\n // // tslint:disable-next-line: radix\r\n // return parseInt(enumeration.EnumerationValue!);\r\n // });\r\n // _minYear = years && Math.min.apply(null, years);\r\n // }\r\n SetMinYear(1900);\r\n // Now calculate max year as 18 years back from current date\r\n const date = new Date();\r\n const maximumYear = date.getFullYear() - 18;\r\n SetMaxYear(maximumYear);\r\n }\r\n });\r\n};\r\n// Provide dynamic class based on query param for club and club plus\r\nconst getDynamicClass = (\r\n query: Msdyn365.IDictionary | undefined,\r\n props: React.PropsWithChildren>\r\n) => {\r\n let dynamicClass: string = 'dobbies-club-free';\r\n let loyaltyTermsLinkText: string = '';\r\n const queryParam = query && query.tier && query.tier.toLowerCase();\r\n if (queryParam === 'club-free') {\r\n dynamicClass = 'dobbies-club-free';\r\n loyaltyTermsLinkText = props.resources.loyaltyTermsLinkText;\r\n } else if (queryParam === 'club-plus' || queryParam === 'club-plus-trial') {\r\n dynamicClass = 'dobbies-club-plus club-signup-bg';\r\n loyaltyTermsLinkText = props.resources.loyaltyPlusTermsLinkText;\r\n }\r\n return { loyaltyTermsLinkText, dynamicClass };\r\n};\r\nexport default LoyaltySignUpView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['loyalty-sign-up'] = {\n c: () => require('@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-sign-up/loyalty-sign-up'),\n $type: 'contentModule',\n da: [{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'loyalty-sign-up',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-sign-up'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|dobbies|views|loyalty-sign-up'] = {\n c: () => require('partner/themes/dobbies/views/loyalty-sign-up.view.tsx'),\n cn: '__local__-__local__-loyalty-sign-up'\n };\nviewDictionary['__local__|__local__|themes|dobbiesclub|views|loyalty-sign-up'] = {\n c: () => require('partner/themes/dobbiesclub/views/loyalty-sign-up.view.tsx'),\n cn: '__local__-__local__-loyalty-sign-up'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|loyalty-sign-up|loyalty-sign-up'] = {\n c: () => require('@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-sign-up/loyalty-sign-up.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-loyalty-sign-up'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React from 'react';\n\nexport const SignUpText: React.FC<{ text: string }> = (props: { text: string }) => {\n return

{props.text}

;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { issueLoyalty, IssueLoyaltyInput } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { SignUpText } from './components/loyalty-sign-up-small-components';\nimport { ILoyaltySignUpData } from './loyalty-sign-up.data';\nimport { ILoyaltySignUpProps } from './loyalty-sign-up.props.autogenerated';\n\nexport interface IAccountLoyaltyJoinState {\n clicked: boolean;\n}\nexport interface ILoyaltySignUpViewProps extends ILoyaltySignUpProps {\n LoyaltySignUp: IModuleProps;\n heading: React.ReactNode;\n memberHeading: React.ReactNode;\n signInLink: React.ReactElement;\n signUpText: React.ReactElement;\n signUpButton: React.ReactElement;\n detailsLink: React.ReactElement;\n termsLink: React.ReactElement;\n loading: boolean;\n infoMessageBar?: React.ReactNode;\n}\n\n/**\n *\n * LoyaltySignUp component.\n * @extends {React.Component>}\n */\n@observer\nclass LoyaltySignUp extends React.Component, IAccountLoyaltyJoinState> {\n private readonly telemetryContent?: ITelemetryContent;\n private readonly loyaltySignInAttributes: Msdyn365.IDictionary | undefined;\n private readonly loyaltySignUpAttributes: Msdyn365.IDictionary | undefined;\n private readonly loyaltyDetailsLinkAttributes: Msdyn365.IDictionary | undefined;\n private readonly loyaltyTermsLinkAttributes: Msdyn365.IDictionary | undefined;\n\n constructor(props: ILoyaltySignUpProps) {\n super(props);\n this.state = { clicked: false };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n this.loyaltySignInAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.SignUp;\n this.loyaltySignUpAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyDetailLink;\n this.loyaltyDetailsLinkAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyTermsLink;\n this.loyaltyTermsLinkAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n }\n\n public shouldComponentUpdate(nextProps: ILoyaltySignUpProps, nextState: IAccountLoyaltyJoinState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, heading, memberHeading },\n resources,\n context: {\n actionContext,\n request: {\n user: { signInUrl, isAuthenticated }\n }\n },\n data\n } = this.props;\n\n const termsUrl = Msdyn365.getUrlSync('loyaltyTerms', actionContext);\n let loyaltyJoinUrl = `${Msdyn365.getUrlSync('loyaltyJoin', actionContext)}?joiningLoyalty=true`;\n if (MsDyn365.isBrowser) {\n loyaltyJoinUrl = `${window.location.origin}${loyaltyJoinUrl}`;\n }\n const signInurl = `${signInUrl}?ru=${loyaltyJoinUrl}`;\n const completeClass = classname('ms-loyalty-signup', className);\n const loyaltyCard = data.loyaltyCard;\n const hasLoyaltyAccount = loyaltyCard.result && loyaltyCard.result.CardTenderTypeValue !== undefined;\n const customerInformation = data.customerInformation?.result;\n\n const invalidAsyncCustomerState: boolean =\n (this.props.context.app?.config?.canRenderAsyncCustomerDataAsUnmodifiable || false) &&\n (customerInformation?.IsAsyncCustomer || false);\n const viewProps = {\n ...this.props,\n className: completeClass,\n LoyaltySignUp: {\n moduleProps: this.props,\n className: completeClass\n },\n infoMessageBar: invalidAsyncCustomerState && (\n \n ),\n loading: !this.props.context.request.params.isEditor && loyaltyCard?.status === 'LOADING',\n heading: !hasLoyaltyAccount && heading && heading.text && (\n \n ),\n memberHeading: hasLoyaltyAccount && memberHeading && memberHeading.text && (\n \n ),\n signInLink: !isAuthenticated && (\n \n ),\n signUpText: !hasLoyaltyAccount && ,\n signUpButton: !hasLoyaltyAccount && isAuthenticated && (\n \n {this.props.resources.joinLoyaltyButtonText}\n \n ),\n detailsLink: hasLoyaltyAccount && (\n \n {this.props.resources.viewLoyaltyPageText}\n \n ),\n termsLink: !hasLoyaltyAccount && (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public handleMemberHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.memberHeading!.text = event.target.value);\n\n private readonly _issueLoyalty = () => {\n if (this.props.context.request.user.isAuthenticated && !this.state.clicked) {\n this.setState({ clicked: true });\n const input = new IssueLoyaltyInput(this.props.context.request.apiSettings);\n\n issueLoyalty(input, this.props.context.actionContext)\n .then(() => {\n if (MsDyn365.isBrowser) {\n window.location.assign(Msdyn365.getUrlSync('loyalty', this.props.context.actionContext) || '');\n }\n })\n .catch((error: Error) => {\n this.setState({ clicked: false });\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Unable to issue loyalty card');\n });\n }\n };\n}\n\nexport default LoyaltySignUp;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILoyaltySignUpViewProps } from './loyalty-sign-up';\n\nconst LoyaltySignUpView: React.FC = props => {\n const {\n LoyaltySignUp,\n heading,\n memberHeading,\n signInLink,\n signUpText,\n signUpButton,\n detailsLink,\n termsLink,\n loading,\n infoMessageBar\n } = props;\n\n if (loading) {\n props.context.telemetry.error('LoyaltySignUp data is empty, module wont render');\n return null;\n }\n\n return (\n \n {infoMessageBar}\n {memberHeading}\n {heading}\n {detailsLink}\n {signUpText}\n {termsLink}\n {signUpButton}\n {signInLink}\n \n );\n};\n\nexport default LoyaltySignUpView;\n","var map = {\n\t\"./af\": 745,\n\t\"./af.js\": 745,\n\t\"./ar\": 746,\n\t\"./ar-dz\": 747,\n\t\"./ar-dz.js\": 747,\n\t\"./ar-kw\": 748,\n\t\"./ar-kw.js\": 748,\n\t\"./ar-ly\": 749,\n\t\"./ar-ly.js\": 749,\n\t\"./ar-ma\": 750,\n\t\"./ar-ma.js\": 750,\n\t\"./ar-ps\": 751,\n\t\"./ar-ps.js\": 751,\n\t\"./ar-sa\": 752,\n\t\"./ar-sa.js\": 752,\n\t\"./ar-tn\": 753,\n\t\"./ar-tn.js\": 753,\n\t\"./ar.js\": 746,\n\t\"./az\": 754,\n\t\"./az.js\": 754,\n\t\"./be\": 755,\n\t\"./be.js\": 755,\n\t\"./bg\": 756,\n\t\"./bg.js\": 756,\n\t\"./bm\": 757,\n\t\"./bm.js\": 757,\n\t\"./bn\": 758,\n\t\"./bn-bd\": 759,\n\t\"./bn-bd.js\": 759,\n\t\"./bn.js\": 758,\n\t\"./bo\": 760,\n\t\"./bo.js\": 760,\n\t\"./br\": 761,\n\t\"./br.js\": 761,\n\t\"./bs\": 762,\n\t\"./bs.js\": 762,\n\t\"./ca\": 763,\n\t\"./ca.js\": 763,\n\t\"./cs\": 764,\n\t\"./cs.js\": 764,\n\t\"./cv\": 765,\n\t\"./cv.js\": 765,\n\t\"./cy\": 766,\n\t\"./cy.js\": 766,\n\t\"./da\": 767,\n\t\"./da.js\": 767,\n\t\"./de\": 768,\n\t\"./de-at\": 769,\n\t\"./de-at.js\": 769,\n\t\"./de-ch\": 770,\n\t\"./de-ch.js\": 770,\n\t\"./de.js\": 768,\n\t\"./dv\": 771,\n\t\"./dv.js\": 771,\n\t\"./el\": 772,\n\t\"./el.js\": 772,\n\t\"./en-au\": 773,\n\t\"./en-au.js\": 773,\n\t\"./en-ca\": 774,\n\t\"./en-ca.js\": 774,\n\t\"./en-gb\": 775,\n\t\"./en-gb.js\": 775,\n\t\"./en-ie\": 776,\n\t\"./en-ie.js\": 776,\n\t\"./en-il\": 777,\n\t\"./en-il.js\": 777,\n\t\"./en-in\": 778,\n\t\"./en-in.js\": 778,\n\t\"./en-nz\": 779,\n\t\"./en-nz.js\": 779,\n\t\"./en-sg\": 780,\n\t\"./en-sg.js\": 780,\n\t\"./eo\": 781,\n\t\"./eo.js\": 781,\n\t\"./es\": 782,\n\t\"./es-do\": 783,\n\t\"./es-do.js\": 783,\n\t\"./es-mx\": 784,\n\t\"./es-mx.js\": 784,\n\t\"./es-us\": 785,\n\t\"./es-us.js\": 785,\n\t\"./es.js\": 782,\n\t\"./et\": 786,\n\t\"./et.js\": 786,\n\t\"./eu\": 787,\n\t\"./eu.js\": 787,\n\t\"./fa\": 788,\n\t\"./fa.js\": 788,\n\t\"./fi\": 789,\n\t\"./fi.js\": 789,\n\t\"./fil\": 790,\n\t\"./fil.js\": 790,\n\t\"./fo\": 791,\n\t\"./fo.js\": 791,\n\t\"./fr\": 792,\n\t\"./fr-ca\": 793,\n\t\"./fr-ca.js\": 793,\n\t\"./fr-ch\": 794,\n\t\"./fr-ch.js\": 794,\n\t\"./fr.js\": 792,\n\t\"./fy\": 795,\n\t\"./fy.js\": 795,\n\t\"./ga\": 796,\n\t\"./ga.js\": 796,\n\t\"./gd\": 797,\n\t\"./gd.js\": 797,\n\t\"./gl\": 798,\n\t\"./gl.js\": 798,\n\t\"./gom-deva\": 799,\n\t\"./gom-deva.js\": 799,\n\t\"./gom-latn\": 800,\n\t\"./gom-latn.js\": 800,\n\t\"./gu\": 801,\n\t\"./gu.js\": 801,\n\t\"./he\": 802,\n\t\"./he.js\": 802,\n\t\"./hi\": 803,\n\t\"./hi.js\": 803,\n\t\"./hr\": 804,\n\t\"./hr.js\": 804,\n\t\"./hu\": 805,\n\t\"./hu.js\": 805,\n\t\"./hy-am\": 806,\n\t\"./hy-am.js\": 806,\n\t\"./id\": 807,\n\t\"./id.js\": 807,\n\t\"./is\": 808,\n\t\"./is.js\": 808,\n\t\"./it\": 809,\n\t\"./it-ch\": 810,\n\t\"./it-ch.js\": 810,\n\t\"./it.js\": 809,\n\t\"./ja\": 811,\n\t\"./ja.js\": 811,\n\t\"./jv\": 812,\n\t\"./jv.js\": 812,\n\t\"./ka\": 813,\n\t\"./ka.js\": 813,\n\t\"./kk\": 814,\n\t\"./kk.js\": 814,\n\t\"./km\": 815,\n\t\"./km.js\": 815,\n\t\"./kn\": 816,\n\t\"./kn.js\": 816,\n\t\"./ko\": 817,\n\t\"./ko.js\": 817,\n\t\"./ku\": 818,\n\t\"./ku-kmr\": 819,\n\t\"./ku-kmr.js\": 819,\n\t\"./ku.js\": 818,\n\t\"./ky\": 820,\n\t\"./ky.js\": 820,\n\t\"./lb\": 821,\n\t\"./lb.js\": 821,\n\t\"./lo\": 822,\n\t\"./lo.js\": 822,\n\t\"./lt\": 823,\n\t\"./lt.js\": 823,\n\t\"./lv\": 824,\n\t\"./lv.js\": 824,\n\t\"./me\": 825,\n\t\"./me.js\": 825,\n\t\"./mi\": 826,\n\t\"./mi.js\": 826,\n\t\"./mk\": 827,\n\t\"./mk.js\": 827,\n\t\"./ml\": 828,\n\t\"./ml.js\": 828,\n\t\"./mn\": 829,\n\t\"./mn.js\": 829,\n\t\"./mr\": 830,\n\t\"./mr.js\": 830,\n\t\"./ms\": 831,\n\t\"./ms-my\": 832,\n\t\"./ms-my.js\": 832,\n\t\"./ms.js\": 831,\n\t\"./mt\": 833,\n\t\"./mt.js\": 833,\n\t\"./my\": 834,\n\t\"./my.js\": 834,\n\t\"./nb\": 835,\n\t\"./nb.js\": 835,\n\t\"./ne\": 836,\n\t\"./ne.js\": 836,\n\t\"./nl\": 837,\n\t\"./nl-be\": 838,\n\t\"./nl-be.js\": 838,\n\t\"./nl.js\": 837,\n\t\"./nn\": 839,\n\t\"./nn.js\": 839,\n\t\"./oc-lnc\": 840,\n\t\"./oc-lnc.js\": 840,\n\t\"./pa-in\": 841,\n\t\"./pa-in.js\": 841,\n\t\"./pl\": 842,\n\t\"./pl.js\": 842,\n\t\"./pt\": 843,\n\t\"./pt-br\": 844,\n\t\"./pt-br.js\": 844,\n\t\"./pt.js\": 843,\n\t\"./ro\": 845,\n\t\"./ro.js\": 845,\n\t\"./ru\": 846,\n\t\"./ru.js\": 846,\n\t\"./sd\": 847,\n\t\"./sd.js\": 847,\n\t\"./se\": 848,\n\t\"./se.js\": 848,\n\t\"./si\": 849,\n\t\"./si.js\": 849,\n\t\"./sk\": 850,\n\t\"./sk.js\": 850,\n\t\"./sl\": 851,\n\t\"./sl.js\": 851,\n\t\"./sq\": 852,\n\t\"./sq.js\": 852,\n\t\"./sr\": 853,\n\t\"./sr-cyrl\": 854,\n\t\"./sr-cyrl.js\": 854,\n\t\"./sr.js\": 853,\n\t\"./ss\": 855,\n\t\"./ss.js\": 855,\n\t\"./sv\": 856,\n\t\"./sv.js\": 856,\n\t\"./sw\": 857,\n\t\"./sw.js\": 857,\n\t\"./ta\": 858,\n\t\"./ta.js\": 858,\n\t\"./te\": 859,\n\t\"./te.js\": 859,\n\t\"./tet\": 860,\n\t\"./tet.js\": 860,\n\t\"./tg\": 861,\n\t\"./tg.js\": 861,\n\t\"./th\": 862,\n\t\"./th.js\": 862,\n\t\"./tk\": 863,\n\t\"./tk.js\": 863,\n\t\"./tl-ph\": 864,\n\t\"./tl-ph.js\": 864,\n\t\"./tlh\": 865,\n\t\"./tlh.js\": 865,\n\t\"./tr\": 866,\n\t\"./tr.js\": 866,\n\t\"./tzl\": 867,\n\t\"./tzl.js\": 867,\n\t\"./tzm\": 868,\n\t\"./tzm-latn\": 869,\n\t\"./tzm-latn.js\": 869,\n\t\"./tzm.js\": 868,\n\t\"./ug-cn\": 870,\n\t\"./ug-cn.js\": 870,\n\t\"./uk\": 871,\n\t\"./uk.js\": 871,\n\t\"./ur\": 872,\n\t\"./ur.js\": 872,\n\t\"./uz\": 873,\n\t\"./uz-latn\": 874,\n\t\"./uz-latn.js\": 874,\n\t\"./uz.js\": 873,\n\t\"./vi\": 875,\n\t\"./vi.js\": 875,\n\t\"./x-pseudo\": 876,\n\t\"./x-pseudo.js\": 876,\n\t\"./yo\": 877,\n\t\"./yo.js\": 877,\n\t\"./zh-cn\": 878,\n\t\"./zh-cn.js\": 878,\n\t\"./zh-hk\": 879,\n\t\"./zh-hk.js\": 879,\n\t\"./zh-mo\": 880,\n\t\"./zh-mo.js\": 880,\n\t\"./zh-tw\": 881,\n\t\"./zh-tw.js\": 881\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1497;","module.exports = React;","module.exports = ReactDOM;","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = isNullOrUndefined(regexp) ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n"],"names":["TierType","props","itemAdded","setItemAdded","React","isAuthenticated","context","request","user","authenticationMessage","loadingDobbiesExperienceMessage","resources","clubPremiumTierId","clubPlusTierId","clubPlusTrialTierId","clubPlusBoltOnId","clubPlusBoltOnSecondId","config","_props$props$data$loy4","addProductToCart","async","_props$props$context$","actionContext","cartState","getCartState","lineItemIdsToRemove","productToAdd","activeCart","cart","activeCartLine","CartLines","push","LineId","length","removeCartLines","cartLineIds","error","query","tier","toLowerCase","boltonProductToAdd","productNumber","ClubPremium","variantInput","SelectedVariantInput","channel","RecordId","getSelectedVariant","ClubPlusFreeTrial","_props$props$data$loy3","loyaltGroups","data","loyaltyCard","result","LoyaltyGroups","highestActiveLoyaltyCardTier","HighestActiveLoyaltyCardTier","activatedTier","LoyaltyCardTiers","find","card","console","log","TierId","allowBoltonsPurcharseForClubPlusFreeTrial","_props$props$context$2","_props$props$context$3","window","location","assign","product","count","enableStockCheck","checkoutLink","newSignupJourneyURL","ClubPlus","loyaltyGroups","_props$props$context$4","_props$props$context$5","_props$props$context$6","_props$props$data$loy5","userActiveTier","_props$props$data$loy","_props$props$data$loy2","loyaltyGroup","loyaltyCardTiers","_","loyaltyCardTier","entries","getTier","shouldRedirectToBoltonsLandingPage","boltons_url_path","cookies","get","value","_props$props$config$c","_props$props$config$c2","clubPlusText","_props$props$context","_props$props$context$9","_props$props$context$10","validToDate","ValidTo","endDate","Date","today","timeDifference","getTime","Math","ceil","app","clubPlusRenewalDays","_props$props$context2","loyaltyLink","_props$props$context$11","_props$props$context$12","_props$props$context3","_props$props$context$7","_props$props$context$8","signinLink","signInUrl","className","Waiting","OPERATIONS","getCardTypeId","ctx","cardPrefix","arguments","undefined","response","resolveCardTypesAsync","callerContext","CardType","Unknown","TypeId","telemetry","findTenderIdTypeByOperationId","tenderTypes","operationId","matchedTenderType","tenderType","OperationId","TenderTypeId","roundNumber","Number","toFixed","CartCheckout","updatedCartVersion","isPaymentVerificationRedirection","checkoutState","getCheckoutState","catch","checkoutCart","channelConfiguration","requestContext","Object","keys","Error","giftCardExtends","tokenizedPaymentCard","guestCheckoutEmail","billingAddress","loyaltyAmount","cardPaymentAcceptResult","shouldEnableSinglePaymentAuthorizationCheckout","isExpressCheckoutApplied","isExpressAddressApplied","Currency","cartTenderLines","amountDue","AmountDue","getTenderLinePromises","loyaltyCardNumber","LoyaltyCardId","chargedAmount","min","loyaltyTenderLinePromise","Amount","getTenderTypesAsync","queryResultSettings","getLoyaltyTenderLine","information","some","giftCardExtend","Balance","_giftCardExtend$Expir","_giftCardExtend$Expir2","tenderTypeId","giftCardPin","Pin","giftCardExpirationYear","ExpirationDate","parseInt","split","giftCardExpirationMonth","creditCardTenderLinePromise","GiftCardId","GiftCardPin","GiftCardExpirationYear","GiftCardExpirationMonth","getGiftCardTenderLine","Id","customerAccountAmount","customerAccountTenderLinePromise","CustomerId","createCustomerAccountTenderLine","amount","currency","TokenizedPaymentCard","_objectSpread","House","Phone","Country","ThreeLetterISORegionName","Address1","Street","City","State","Zip","ZipCode","CardPaymentAcceptResult","getCreditCardTenderLineForSinglePaymentAuth","_tokenizedPaymentCard","cartTypeId","CardTypeId","TenderType","cardTenderLine","CardTokenInfo","getCreditCardTenderLine","Promise","all","cartVersion","Version","salesOrder","checkoutAsync","bypassCache","_error$data","_error$data2","_cardPaymentAcceptRes","_cardPaymentAcceptRes2","AdditionalContext","warning","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","updateRedirectAdditionalContext","newRedirectAdditionalContext","updateRedirectPaymentConnectorId","newRedirectPaymentConnectorId","Settings","PaymentConnectorId","updateIsCheckoutCallFailed","newIsCheckoutCallFailed","updateCheckoutErrorPaymentConnectorId","newCheckoutErrorPaymentConnectorId","refreshCart","updateIsExpressCheckoutApplied","newIsExpressCheckoutApplied","PlaceOrder","orderedProducts","redirect","updateCustomerDDAttribute","isFromApplePay","resolve","reject","_salesOrder","set","expires","orderConfirmationUrl","getUrlSync","separator","includes","url","checkoutCartLine","removeAllPromoCodes","removeCheckoutCartId","EmptyActiveCart","updateSalesOrder","newSalesOrder","newOrderedProducts","status","useGetAddressesCount","addressCount","setAddressCount","useState","useEffect","_props$data$getCustom","getCustomerAddress","addresses","getTierId","renderMainHeading","_props$data$loyaltyCa8","CardNumber","renderHeading","memberHeading","additionalDetailsLabel","getCustomAttribute","attribute","_props$data$attribute3","defaultAttribute","attributeDefinitions","attr","_attr$Name2","Name","StringValue","DataTypeValue","heading","text","Msdyn365","tag","renderFirstAndLastName","customerInformation","firstNameLabel","FirstName","lastNameLabel","LastName","setAttrDefaultValues","Attribute","KeyName","Units","AttributeValue","BooleanValue","ExtensionProperties","NameTranslations","setAttributeValue","isBoolean","IntegerValue","DecimalValue","RenderErrorMessageWithLoader","_ref","message","redirectUserIfTierExist","tierId","_loyaltyCard$result5","_query$tier4","_loyaltyCard$result6","_query$tier5","_loyaltyCard$result7","_query$tier6","_loyaltyCard$result8","_query$tier7","_loyaltyCard$result9","_query$tier8","clubFreeTierText","clubPlusTierText","_invalidDobErrorMsg","displayNotification","dateError","isValidDob","overEighteen","isYearOutOfRange","minYear","maxYear","validDateErrorText","ageRestrictionError","validYearErrorText","yearRangeErrorText","replace","toString","Node","_renderTermsAndConditionsText","termsAndConditionLink","termsAndConditionsText","linkClass","textClass","termsAndConditionLinkData","ariaLabel","linkText","linkUrl","destinationUrl","link","displayHeading","_query$tier9","_query$tier10","_query$tier11","joiningClubPlusText","joiningClubText","joiningClubPlusTrialText","setMinAndMaxYear","SetMinYear","SetMaxYear","attributes","yearAttr","x","_x$Name2","_minYear","years","_yearAttr$Enumeration","EnumerationDetails","map","enumeration","EnumerationValue","apply","maximumYear","getFullYear","getDynamicClass","dynamicClass","loyaltyTermsLinkText","queryParam","loyaltyPlusTermsLinkText","_loyaltyCard$result","_loyaltyCard$result2","LoyaltySignUp","termsAndConditionsLink","loading","slots","dateOfBirthText","moduleWontRenderErrorText","attributeDefinition","mask","setMask","maskString","setMaskString","dateOfBirth","setdateOfBirth","localStore","setLocalStore","title","setTitle","gender","setGender","mobileNumber","setMobileNumber","promoCode","setPromoCode","isEmailChecked","setIsEmailChecked","isPostChecked","setIsPostChecked","isResearchChecked","setIsResearchChecked","isSmsChecked","setIsSmsChecked","isProfilingChecked","setIsProfilingChecked","day","setDay","month","setMonth","year","setYear","disabled","setDisabled","SetError","SetDisplayNotification","SetOverEighteen","SetIsValidDob","setIsYearOutOfRange","SetDateError","isAddressError","setIsAddressError","addressError","setAddressError","inputCheck","setInputCheck","dobbiesClubSiteUrl","patternAttribute","pattern","_customerInformation$","incomingMarketingAttributes","Attributes","_attr$AttributeValue","_attr$AttributeValue3","_attr$AttributeValue5","prevData","item","_attr$AttributeValue2","_attr$AttributeValue4","_attr$AttributeValue6","_props$data$loyaltyCa","_props$data$loyaltyCa2","_props$data$loyaltyCa3","validTill","ValidFrom","expiryDate","validNumberOfDays","CheckValidityForTheNumberOfDays","setDate","getDate","differenceInDays","loyaltyProgramText","updateDOB","e","isInvalid","ageRestriction","invalidYear","futureDate","dob","target","moment","format","inputDob","isValidInput","isValid","inputDate","currentYear","dobYear","fromNow","diffYears","yearLabel","trim","_difference","difference","updateDayMonthYearAttributes","prevState","invalidDate","setAttributeDefaultValues","genderAttribute","titleAttribute","contactableEmailAttribute","contactableMobileAttribute","contactablePostAttribute","mobileAttribute","contactableProfilingAttribute","contactableResearchAttribute","dayAttribute","monthAttribute","yearAttribute","localStoreAttribute","forEach","_attr$Name","handleClubPlusScenario","validateAttributeValuesForClubPlus","_loyaltyCard$result3","_query$tier","_query$tier2","_loyaltyCard$result4","directDebitAttribute","directDebitAttr","directDebitAttributeValue","promoCodeAttribute","promoCodeAttr","_customer$Attributes","customer","AccountNumber","filteredAttributes","filter","_x$Name","input","updateCustomerAttributesInput","apiSettings","updateCustomerAttributes","then","_issueLoyalty","addressRequiredError","updateAttributes","_props$data$loyaltyCa4","_context$request$quer","_context$request$quer2","validateAttributeValues","validGenderErrorText","titleErrorMessage","_customer","err","IssueLoyaltyInput","customerAccountNumber","issueLoyalty","debug","loyaltyCardIssue","updateGenderValue","event","selectedGender","updateLocalStore","selectedLocalStore","updateTitle","selectedTitle","D","M","Y","handleTermsCheck","checked","handleMobileNumber","handleMarketingConsent","targetName","name","isChecked","renderMarketingConsentAttributes","marketingConsentAttributes","attributeLabel","attributeName","filteredInputCheck","attr2","key","type","id","onChange","htmlFor","renderLocalStoreField","storeLabel","renderLocalStores","_props$data$attribute2","_localStoreAttr$Enume","localStoreAttr","_x$AttributeTypeName2","AttributeTypeName","localStores","sort","a","b","localeCompare","noneVal","store","y","renderSelectElement","label","onChangeHandler","dropdownLabel","_props$data$attribute","_attr$EnumerationDeta","_x$AttributeTypeName","renderDropDownOptionsForAttribute","handlePromoCodeChange","currentTarget","renderLoyaltyTermsAndConditionsSection","joinLoyaltyButtonText","_renderLoyaltyTermsLink","termsUrl","Button","href","onClick","renderLoyaltySignUpView","_props$data$loyaltyCa6","titleLabel","pleaseSelectText","genderLabel","nonClubMemberStatement","memberStatement","tierID","Module","titleNotSelectedErrorMsg","renderMobileField","mobileLabel","renderDateOfBirthField","dateOfBirthLabel","MaskInput","alwaysShowMask","address","_genderNotSelectedErrorMsg","renderPromoCodeField","promoCodeLabel","renderMarketingConsentSection","_props$data$loyaltyCa5","cardNumber","marketingPreferenceHeading","clubMarketingConsentDescription","clubPlusMarketingConsentDescription","updatePreferenceText","clubPlusMarketingConsentAttributes","simpleMarketingConsentAttributes","signInLink","renderJSX","_clubFreeTierText","_clubPlusTierText","_query$tier3","_props$data$loyaltyCa7","redirectingLoaderText","handleMask","stopPropagation","preventDefault","charCode","c","String","fromCharCode","match","val","substring","selectionStart","substr","selectionEnd","pos","nan","maskParts","txt","im","iv","maskChar","charAt","str","n","i","_props$data$attribute4","_attr$Name11","_props$context3","highestTier","_props$data$loyaltyCa9","_props$data$loyaltyCa10","_props$data$inputsVal3","_tier$TierId","currStep","setCurrStep","showBtnDisabled","setShowButtonDisabled","tAndRChecked","setTAndRChecked","currCartState","setCurrCartState","shouldBtnBeDisabled","setShouldBtnBeDisabled","isPaymentTriggered","setIsPaymentTriggered","_props$data$inputsVal","_props$data$inputsVal2","inputsValidations","areAllFieldsValid","_props$context$reques","promoCodeCurrVal","getPromoCodeAttrCurrValue","setTimeout","btn","document","getElementById","btnElems","getElementsByClassName","classList","remove","isBackAfterPayment","_props$context$reques2","placeLoyaltyOrderAfterPaymentTriggered","isBrowser","allowed_tiers","Club","validateDOB","isEighteenYearOld","yearOOR","isDayLoaded","isMonthLoaded","isYearLoaded","dayStr","monthStr","yearStr","_customerTitleAttr$At","customerTitleAttr","_customerTitleAttr$At2","_customer$Attributes2","_customerMobileAttr$A","customerMobileAttr","_attr$Name3","_customerMobileAttr$A2","_customer$Attributes3","_customerDay$Attribut","customerDay","_attr$Name4","_customerDay$Attribut2","_customerDay$Attribut3","_customer$Attributes4","_customerMonth$Attrib","customerMonth","_attr$Name5","_customerMonth$Attrib2","_customerMonth$Attrib3","_customer$Attributes5","_customerYear$Attribu","customerYear","_attr$Name6","_customerYear$Attribu2","_customerYear$Attribu3","_customer$Attributes6","_localStoreSelected$A","localStoreSelected","_attr$Name7","_localStoreSelected$A2","iconOneClicked","iconTwoClicked","stepOneNextClickedCookie","validateInputs","_mobileNumber$Attribu","phoneNum","areAttributesNew","_customer$Attributes8","at","_customer$Attributes9","_cAt$AttributeValue","_at$AttributeValue","cAt","_day$AttributeValue","_month$AttributeValue","_year$AttributeValue","_props$context$reques3","isClub","_props$context$reques4","queryTier","_customer$Attributes7","matchTiersAndAddProductToCart","promoCodeInputElement","addEventListener","updatePromoCodeAttr","res","_customer$Attributes10","_promoCodeAttribute$A","_attr$Name8","_customer$Attributes11","targetElem","_attr$Name9","_filteredAttributes$i","splice","resp","cpOrder","_checkoutState$should","_checkoutState$isPaym","canPlaceOrder","updateIsPlaceOrderEnabledInRedirection","newIsPlaceOrderEnabledInRedirection","redirectAdditionalContext","updateIsEnabledRedirection","triggerPaymentWithPlaceOrder","updateShouldTriggerPaymentWithPlaceOrder","newShouldTriggerPaymentWithPlaceOrder","shouldTriggerPaymentWithPlaceOrder","_props$context$reques6","_props$context$reques7","customerAttr","boltonAttrSet","newAttributes","_props$context$reques5","attrValue","_attrValue","_attrValue2","_attr$Name10","exception","_props$context$reques8","urlTier","cookieTier","updateCartLineEmailAddress","newGuestCheckoutEmail","_props$context$reques9","_checkoutState$checko","emailDeliveryModeCode","EmailDeliveryModeCode","emailDeliveryCartLines","cartLine","DeliveryMode","lineDeliverySpecifications","line","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","DeliveryPreferenceType","ElectronicDelivery","ElectronicDeliveryEmailAddress","updateLineDeliverySpecificationsAsync","updatedCart","getReturnUrl","returnUrl","isAbsoluteUrl","RegExp","test","origin","requestFormData","settings","ReturnUrl","paymentConnectorId","AccessCode","btoa","JSON","stringify","redirectResult","updateCardPaymentAcceptResult","newCardPaymentAcceptResult","ProductId","_props$data$customerI","_props$data$customerI3","_props$data$customerI5","_props$data$customerI6","_props$data$customerI8","_props$data$customerI9","getByIdAsync","channelId","simpleProduct","Array","isArray","_props$data$customerI2","_props$data$customerI4","_props$data$customerI7","_props$data$customerI10","Email","updateReceiptEmail","newEmail","updateGuestCheckoutEmail","Addresses","updateShippingAddress","newShippingAddress","cl","modeOfDeliveryId","_props$data$customerI11","_props$data$customerI12","_props$data$customerI13","updateCartDeliverySpecificationInput","deliveryModeId","shippingAddress","updateCartDeliverySpecification","errorDetails","placeOrder","_props$context$action","transactionIdCookie","_props$context$action2","_props$context$reques11","newCartState","_props$context$reques12","_props$context","inputElements","HTMLSelectElement","_title$AttributeValue3","_title$AttributeValue4","_title$AttributeValue5","inputElem","HTMLInputElement","HTMLDivElement","_props$context$reques13","inputElement","querySelector","divInput","validateStepOneInputs","allAddressInputs","addressValues","_localStore$Attribute","_localStore$Attribute2","storeSelectorElem","capitalizeFirstLetter","toUpperCase","slice","_props$context$reques15","_props$data$inputsVal4","_props$data$customerI27","formattedPrice","price","Price","_props$context$reques14","cultureFormatter","formatCurrency","requestUrl","nextButtonText","tierText","tierTextSplitted","splittedTxt","concat","stepClassName","billingModule","slotName","_getSlot","inputsAreValid","shouldBtnBeDisabledVar","src","alt","_title$AttributeValue","_title$AttributeValue2","_mobileNumber$Attribu2","_mobileNumber$Attribu3","placeholder","_props$context$reques10","_day$AttributeValue2","_month$AttributeValue2","_year$AttributeValue2","_dateOfBirth$Attribut","onKeyPress","checkoutSectionContainer","checkoutSlot","_mobileNumber$Attribu4","_props$data$customerI14","_props$data$customerI16","_props$data$customerI18","_props$data$customerI19","_props$data$customerI21","_props$data$customerI22","_props$data$customerI15","_props$data$customerI17","_props$data$customerI20","_props$data$customerI23","_props$data$customerI24","_props$data$customerI25","_props$data$customerI26","_checkoutState$should2","_checkoutState$isExpr","_props$context$action3","_checkoutState$should3","_checkoutState$isExpr2","_props$context$action4","placeLoyaltyOrder","isLoyaltyAboutToExpire","_props$context2","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","require","$type","da","path","runOn","iNM","ns","p","pdp","md","__bindings__","viewDictionary","cn","SignUpText","constructor","super","handleHeadingChange","this","handleMemberHeadingChange","state","clicked","setState","MsDyn365","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","payLoad","getPayloadObject","TelemetryConstant","SignIn","loyaltySignInAttributes","getTelemetryAttributes","contentAction","etext","SignUp","loyaltySignUpAttributes","LoyaltyDetailLink","loyaltyDetailsLinkAttributes","LoyaltyTermsLink","loyaltyTermsLinkAttributes","shouldComponentUpdate","nextProps","nextState","render","_data$customerInforma","_this$props$context$a","loyaltyJoinUrl","signInurl","completeClass","classname","hasLoyaltyAccount","CardTenderTypeValue","invalidAsyncCustomerState","canRenderAsyncCustomerDataAsUnmodifiable","IsAsyncCustomer","viewProps","moduleProps","infoMessageBar","accountProcessingPendingInfoMessage","params","isEditor","editProps","onEdit","signUpText","signUpButton","detailsLink","viewLoyaltyPageText","termsLink","renderView","__decorate","observer","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","module","exports","ReactDOM","call","fixRegExpWellKnownSymbolLogic","anObject","isNullOrUndefined","toLength","requireObjectCoercible","getMethod","advanceStringIndex","regExpExec","MATCH","nativeMatch","maybeCallNative","regexp","O","matcher","string","rx","S","done","global","fullUnicode","unicode","lastIndex","A","matchStr"],"sourceRoot":""}