{"version":3,"file":"static/js/1294a26def3dfec18589.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?62da"],"sourcesContent":["/* tslint:disable:max-func-body-length */\r\n\r\nimport { Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport * 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}\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 = 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 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\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());\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 // 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 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.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 // 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 \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 // 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\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\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 window.location.assign('/loyalty');\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 window.location.assign('/loyalty');\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 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 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 window.location.assign('/loyalty');\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 { 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\": 740,\n\t\"./af.js\": 740,\n\t\"./ar\": 741,\n\t\"./ar-dz\": 742,\n\t\"./ar-dz.js\": 742,\n\t\"./ar-kw\": 743,\n\t\"./ar-kw.js\": 743,\n\t\"./ar-ly\": 744,\n\t\"./ar-ly.js\": 744,\n\t\"./ar-ma\": 745,\n\t\"./ar-ma.js\": 745,\n\t\"./ar-ps\": 746,\n\t\"./ar-ps.js\": 746,\n\t\"./ar-sa\": 747,\n\t\"./ar-sa.js\": 747,\n\t\"./ar-tn\": 748,\n\t\"./ar-tn.js\": 748,\n\t\"./ar.js\": 741,\n\t\"./az\": 749,\n\t\"./az.js\": 749,\n\t\"./be\": 750,\n\t\"./be.js\": 750,\n\t\"./bg\": 751,\n\t\"./bg.js\": 751,\n\t\"./bm\": 752,\n\t\"./bm.js\": 752,\n\t\"./bn\": 753,\n\t\"./bn-bd\": 754,\n\t\"./bn-bd.js\": 754,\n\t\"./bn.js\": 753,\n\t\"./bo\": 755,\n\t\"./bo.js\": 755,\n\t\"./br\": 756,\n\t\"./br.js\": 756,\n\t\"./bs\": 757,\n\t\"./bs.js\": 757,\n\t\"./ca\": 758,\n\t\"./ca.js\": 758,\n\t\"./cs\": 759,\n\t\"./cs.js\": 759,\n\t\"./cv\": 760,\n\t\"./cv.js\": 760,\n\t\"./cy\": 761,\n\t\"./cy.js\": 761,\n\t\"./da\": 762,\n\t\"./da.js\": 762,\n\t\"./de\": 763,\n\t\"./de-at\": 764,\n\t\"./de-at.js\": 764,\n\t\"./de-ch\": 765,\n\t\"./de-ch.js\": 765,\n\t\"./de.js\": 763,\n\t\"./dv\": 766,\n\t\"./dv.js\": 766,\n\t\"./el\": 767,\n\t\"./el.js\": 767,\n\t\"./en-au\": 768,\n\t\"./en-au.js\": 768,\n\t\"./en-ca\": 769,\n\t\"./en-ca.js\": 769,\n\t\"./en-gb\": 770,\n\t\"./en-gb.js\": 770,\n\t\"./en-ie\": 771,\n\t\"./en-ie.js\": 771,\n\t\"./en-il\": 772,\n\t\"./en-il.js\": 772,\n\t\"./en-in\": 773,\n\t\"./en-in.js\": 773,\n\t\"./en-nz\": 774,\n\t\"./en-nz.js\": 774,\n\t\"./en-sg\": 775,\n\t\"./en-sg.js\": 775,\n\t\"./eo\": 776,\n\t\"./eo.js\": 776,\n\t\"./es\": 777,\n\t\"./es-do\": 778,\n\t\"./es-do.js\": 778,\n\t\"./es-mx\": 779,\n\t\"./es-mx.js\": 779,\n\t\"./es-us\": 780,\n\t\"./es-us.js\": 780,\n\t\"./es.js\": 777,\n\t\"./et\": 781,\n\t\"./et.js\": 781,\n\t\"./eu\": 782,\n\t\"./eu.js\": 782,\n\t\"./fa\": 783,\n\t\"./fa.js\": 783,\n\t\"./fi\": 784,\n\t\"./fi.js\": 784,\n\t\"./fil\": 785,\n\t\"./fil.js\": 785,\n\t\"./fo\": 786,\n\t\"./fo.js\": 786,\n\t\"./fr\": 787,\n\t\"./fr-ca\": 788,\n\t\"./fr-ca.js\": 788,\n\t\"./fr-ch\": 789,\n\t\"./fr-ch.js\": 789,\n\t\"./fr.js\": 787,\n\t\"./fy\": 790,\n\t\"./fy.js\": 790,\n\t\"./ga\": 791,\n\t\"./ga.js\": 791,\n\t\"./gd\": 792,\n\t\"./gd.js\": 792,\n\t\"./gl\": 793,\n\t\"./gl.js\": 793,\n\t\"./gom-deva\": 794,\n\t\"./gom-deva.js\": 794,\n\t\"./gom-latn\": 795,\n\t\"./gom-latn.js\": 795,\n\t\"./gu\": 796,\n\t\"./gu.js\": 796,\n\t\"./he\": 797,\n\t\"./he.js\": 797,\n\t\"./hi\": 798,\n\t\"./hi.js\": 798,\n\t\"./hr\": 799,\n\t\"./hr.js\": 799,\n\t\"./hu\": 800,\n\t\"./hu.js\": 800,\n\t\"./hy-am\": 801,\n\t\"./hy-am.js\": 801,\n\t\"./id\": 802,\n\t\"./id.js\": 802,\n\t\"./is\": 803,\n\t\"./is.js\": 803,\n\t\"./it\": 804,\n\t\"./it-ch\": 805,\n\t\"./it-ch.js\": 805,\n\t\"./it.js\": 804,\n\t\"./ja\": 806,\n\t\"./ja.js\": 806,\n\t\"./jv\": 807,\n\t\"./jv.js\": 807,\n\t\"./ka\": 808,\n\t\"./ka.js\": 808,\n\t\"./kk\": 809,\n\t\"./kk.js\": 809,\n\t\"./km\": 810,\n\t\"./km.js\": 810,\n\t\"./kn\": 811,\n\t\"./kn.js\": 811,\n\t\"./ko\": 812,\n\t\"./ko.js\": 812,\n\t\"./ku\": 813,\n\t\"./ku-kmr\": 814,\n\t\"./ku-kmr.js\": 814,\n\t\"./ku.js\": 813,\n\t\"./ky\": 815,\n\t\"./ky.js\": 815,\n\t\"./lb\": 816,\n\t\"./lb.js\": 816,\n\t\"./lo\": 817,\n\t\"./lo.js\": 817,\n\t\"./lt\": 818,\n\t\"./lt.js\": 818,\n\t\"./lv\": 819,\n\t\"./lv.js\": 819,\n\t\"./me\": 820,\n\t\"./me.js\": 820,\n\t\"./mi\": 821,\n\t\"./mi.js\": 821,\n\t\"./mk\": 822,\n\t\"./mk.js\": 822,\n\t\"./ml\": 823,\n\t\"./ml.js\": 823,\n\t\"./mn\": 824,\n\t\"./mn.js\": 824,\n\t\"./mr\": 825,\n\t\"./mr.js\": 825,\n\t\"./ms\": 826,\n\t\"./ms-my\": 827,\n\t\"./ms-my.js\": 827,\n\t\"./ms.js\": 826,\n\t\"./mt\": 828,\n\t\"./mt.js\": 828,\n\t\"./my\": 829,\n\t\"./my.js\": 829,\n\t\"./nb\": 830,\n\t\"./nb.js\": 830,\n\t\"./ne\": 831,\n\t\"./ne.js\": 831,\n\t\"./nl\": 832,\n\t\"./nl-be\": 833,\n\t\"./nl-be.js\": 833,\n\t\"./nl.js\": 832,\n\t\"./nn\": 834,\n\t\"./nn.js\": 834,\n\t\"./oc-lnc\": 835,\n\t\"./oc-lnc.js\": 835,\n\t\"./pa-in\": 836,\n\t\"./pa-in.js\": 836,\n\t\"./pl\": 837,\n\t\"./pl.js\": 837,\n\t\"./pt\": 838,\n\t\"./pt-br\": 839,\n\t\"./pt-br.js\": 839,\n\t\"./pt.js\": 838,\n\t\"./ro\": 840,\n\t\"./ro.js\": 840,\n\t\"./ru\": 841,\n\t\"./ru.js\": 841,\n\t\"./sd\": 842,\n\t\"./sd.js\": 842,\n\t\"./se\": 843,\n\t\"./se.js\": 843,\n\t\"./si\": 844,\n\t\"./si.js\": 844,\n\t\"./sk\": 845,\n\t\"./sk.js\": 845,\n\t\"./sl\": 846,\n\t\"./sl.js\": 846,\n\t\"./sq\": 847,\n\t\"./sq.js\": 847,\n\t\"./sr\": 848,\n\t\"./sr-cyrl\": 849,\n\t\"./sr-cyrl.js\": 849,\n\t\"./sr.js\": 848,\n\t\"./ss\": 850,\n\t\"./ss.js\": 850,\n\t\"./sv\": 851,\n\t\"./sv.js\": 851,\n\t\"./sw\": 852,\n\t\"./sw.js\": 852,\n\t\"./ta\": 853,\n\t\"./ta.js\": 853,\n\t\"./te\": 854,\n\t\"./te.js\": 854,\n\t\"./tet\": 855,\n\t\"./tet.js\": 855,\n\t\"./tg\": 856,\n\t\"./tg.js\": 856,\n\t\"./th\": 857,\n\t\"./th.js\": 857,\n\t\"./tk\": 858,\n\t\"./tk.js\": 858,\n\t\"./tl-ph\": 859,\n\t\"./tl-ph.js\": 859,\n\t\"./tlh\": 860,\n\t\"./tlh.js\": 860,\n\t\"./tr\": 861,\n\t\"./tr.js\": 861,\n\t\"./tzl\": 862,\n\t\"./tzl.js\": 862,\n\t\"./tzm\": 863,\n\t\"./tzm-latn\": 864,\n\t\"./tzm-latn.js\": 864,\n\t\"./tzm.js\": 863,\n\t\"./ug-cn\": 865,\n\t\"./ug-cn.js\": 865,\n\t\"./uk\": 866,\n\t\"./uk.js\": 866,\n\t\"./ur\": 867,\n\t\"./ur.js\": 867,\n\t\"./uz\": 868,\n\t\"./uz-latn\": 869,\n\t\"./uz-latn.js\": 869,\n\t\"./uz.js\": 868,\n\t\"./vi\": 870,\n\t\"./vi.js\": 870,\n\t\"./x-pseudo\": 871,\n\t\"./x-pseudo.js\": 871,\n\t\"./yo\": 872,\n\t\"./yo.js\": 872,\n\t\"./zh-cn\": 873,\n\t\"./zh-cn.js\": 873,\n\t\"./zh-hk\": 874,\n\t\"./zh-hk.js\": 874,\n\t\"./zh-mo\": 875,\n\t\"./zh-mo.js\": 875,\n\t\"./zh-tw\": 876,\n\t\"./zh-tw.js\": 876\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 = 1478;","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","Msdyn365","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$context2","_props$props$context$9","_props$props$context$10","validToDate","ValidTo","endDate","Date","today","timeDifference","getTime","Math","ceil","app","clubPlusRenewalDays","_props$props$context3","loyaltyLink","_props$props$context$11","_props$props$context$12","_props$props$context4","_props$props$context$7","_props$props$context$8","_props$props$context","loyaltyJoinLink","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","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$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","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","isBrowser","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","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","_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","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":""}