{"version":3,"file":"static/js/e4736133aee5844f6add.bundle.js","mappings":"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","sources":["webpack://Dobbies.Commerce/./src/dotdigital-extension/DataServiceEntities.g.ts?cecd","webpack://Dobbies.Commerce/./src/dotdigital-extension/DataActionExtension.g.ts?36a7","webpack://Dobbies.Commerce/./src/themes/dobbies/utilities/formatDate.ts?ae4d","webpack://Dobbies.Commerce/./src/themes/dobbies/utilities/os.ts?f1e0","webpack://Dobbies.Commerce/./src/themes/dobbies/views/custom-components/lost-your-card.tsx?1663","webpack://Dobbies.Commerce/./src/themes/dobbies/views/custom-components/cancel-membership.tsx?0071","webpack://Dobbies.Commerce/./src/themes/dobbies/views/account-loyalty.view.tsx?2da7"],"sourcesContent":["// tslint:disable\r\n/* eslint-disable security/detect-object-injection */\r\nimport * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\nimport * as Entities from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\n/**\r\n * VSIRestAPIHandler entity interface.\r\n */\r\nexport interface IVSIRestAPIHandler {\r\n Id: number;\r\n result?: string;\r\n ExtensionProperties?: Entities.CommerceProperty[];\r\n}\r\n\r\n/**\r\n * VSIRestAPIHandler entity class.\r\n */\r\nexport class VSIRestAPIHandlerExtensionClass implements IVSIRestAPIHandler {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Id: number;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public result: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ExtensionProperties: Entities.CommerceProperty[];\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Id = odataObject.Id;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.result = odataObject.result;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties = undefined;\r\n if (odataObject.ExtensionProperties) {\r\n this.ExtensionProperties = [];\r\n for (var i = 0; i < odataObject.ExtensionProperties.length; i++) {\r\n if (odataObject.ExtensionProperties[i]) {\r\n if (odataObject.ExtensionProperties[i]['@odata.type']) {\r\n var className: string = odataObject.ExtensionProperties[i]['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat('Class');\r\n if (EntityClasses[className]) {\r\n this.ExtensionProperties[i] = new EntityClasses[className](odataObject.ExtensionProperties[i]);\r\n }\r\n } else {\r\n this.ExtensionProperties[i] = new EntityClasses.CommercePropertyClass(odataObject.ExtensionProperties[i]);\r\n }\r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties[i] = undefined;\r\n }\r\n }\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 * THIS FILE IS AN AUTOGENERATED TYPESCRIPT PROXY EXTENSION.\r\n * TO USE THIS FILE, IT MUST BE ADDED TO A D365COMMERCE APPLICATION\r\n */\r\n// tslint:disable\r\nimport { AsyncResult, callActionOrExecute, DataServiceQuery, IContext, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\r\n// @ts-ignore\r\nimport * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\nimport * as DataServiceEntities from './DataServiceEntities.g';\r\n\r\n// @ts-ignore\r\nfunction vSIGetAPIResponseQuery(id?: number): DataServiceQuery {\r\n const key = id ? { Id: id } : null;\r\n return new DataServiceQuery('VSIGetRestAPIResponse', 'VSIRestAPIHandler', DataServiceEntities.VSIRestAPIHandlerExtensionClass, key);\r\n}\r\n\r\nexport function createVSIInitiateRestCallInput(\r\n targetSystem: string,\r\n methodType: string,\r\n requestHeader: string,\r\n requestBody: string,\r\n urlParams: string,\r\n servicePath: string\r\n): IDataServiceRequest {\r\n const query = vSIGetAPIResponseQuery();\r\n return query.createDataServiceRequestForOperation(\r\n 'VSI_CallGenericRestAPIHandler',\r\n true,\r\n DataServiceEntities.VSIRestAPIHandlerExtensionClass,\r\n 'false',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.IVSIRestAPIHandler' },\r\n {\r\n targetSystem: targetSystem,\r\n methodType: methodType,\r\n requestHeader: requestHeader,\r\n requestBody: requestBody,\r\n urlParams: urlParams,\r\n servicePath: servicePath\r\n }\r\n );\r\n}\r\n\r\nexport function vSIInitiateRestCallAsync(\r\n context: IContext,\r\n targetSystem: string,\r\n methodType: string,\r\n requestHeader: string,\r\n requestBody: string,\r\n urlParams: string,\r\n servicePath: string\r\n): AsyncResult {\r\n const request = createVSIInitiateRestCallInput(targetSystem, methodType, requestHeader, requestBody, urlParams, servicePath);\r\n return callActionOrExecute(request, context.callerContext);\r\n}\r\n","import { getMobileOperatingSystem } from './os';\r\n\r\nexport function setDateFormat(originalDate:string){\r\n if (!originalDate) {\r\n return;\r\n }\r\n var dateComponents = originalDate.split('/');\r\n const day = dateComponents[0];\r\n const month = dateComponents[1];\r\n const year = dateComponents[2].slice(-2);\r\n const formattedDate = `${day}/${month}/${year}`;\r\n \r\n return formattedDate;\r\n }\r\n\r\n export function getDateObjFromString(dateString: string, dateDelimiter: string, hasTime: boolean) {\r\n const os = getMobileOperatingSystem();\r\n if (os !== 'iOS') {\r\n return new Date(dateString);\r\n }\r\n try {\r\n const dateTimeSplitted = dateString.split(' ');\r\n const dateMonth = dateTimeSplitted[0].split(dateDelimiter)[0];\r\n const dateDay = dateTimeSplitted[0].split(dateDelimiter)[1];\r\n const dateYear = dateTimeSplitted[0].split(dateDelimiter)[2];\r\n const dateHour = dateTimeSplitted[1].split(':')[0];\r\n const dateMinutes = dateTimeSplitted[1].split(':')[1];\r\n\r\n if (dateString.includes('GMT')) {\r\n // \"2024/04/01 01:00:00 GMT+1\" iOS supported Format\r\n const GMTStr = dateTimeSplitted[dateTimeSplitted.length - 1].includes('GMT') ? dateTimeSplitted[dateTimeSplitted.length - 1] : '';\r\n const d = new Date(`${dateYear.startsWith('20') ? dateYear : `20${dateYear}`}/${dateMonth}/${dateDay} ${dateHour}:${dateMinutes}:00 ${GMTStr}`);\r\n return d;\r\n }\r\n\r\n return new Date(\r\n parseInt(dateYear.startsWith('20') ? dateYear : `20${dateYear}`, 10),\r\n parseInt(dateMonth, 10) - 1,\r\n parseInt(dateDay, 10),\r\n parseInt(dateHour, 10),\r\n parseInt(dateMinutes, 10),\r\n 0\r\n );\r\n } catch(error) {\r\n \r\n }\r\n return new Date(dateString);\r\n }","import MsDyn365 from '@msdyn365-commerce/core';\r\nexport const getMobileOperatingSystem = (): string => {\r\n\r\n if (!MsDyn365.isBrowser) {\r\n return 'unknown';\r\n }\r\n // Get the user agent string\r\n const userAgent: string = navigator.userAgent || navigator.vendor || (window as any).opera;\r\n\r\n // Check for Windows Phone first because its user agent string may contain \"Android\"\r\n if (/windows phone/i.test(userAgent)) {\r\n return 'Windows Phone';\r\n }\r\n\r\n // Check for Android devices\r\n if (/android/i.test(userAgent)) {\r\n return 'Android';\r\n }\r\n\r\n // Check for iOS devices (iPad, iPhone, iPod)\r\n // The condition !window.MSStream ensures that it's not a Windows device\r\n if ((/iPad|iPhone|iPod/.test(userAgent) && !(window as any).MSStream) || userAgent.indexOf('Mac OS X') > 0) {\r\n return 'iOS';\r\n }\r\n\r\n // If no matches, return 'unknown'\r\n return 'unknown';\r\n}","import React from 'react';\r\nimport { updateCustomerAttributes, updateCustomerAttributesInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IAccountLoyaltyResources } from '../../definition-extensions/account-loyalty.ext.props.autogenerated';\r\nimport axios from 'axios';\r\nimport { IAccountLoyaltyData } from '@msdyn365-commerce-modules/account-management';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\n\r\ninterface ILostYourCardProps {\r\n resources: IAccountLoyaltyResources;\r\n onSubmit: () => void;\r\n onCancel: () => void;\r\n disableCardBtn: () => void;\r\n userToken: string | false;\r\n cardNumber: string | undefined;\r\n data: IAccountLoyaltyData;\r\n context: ICoreContext;\r\n tierId?: string;\r\n clubImage?: string;\r\n clubPlusImage?: string;\r\n}\r\n\r\nconst LostYourCard = (props: ILostYourCardProps) => {\r\n const {\r\n resources: {\r\n requestNewCardHeading,\r\n lostYourCardDescriptionText,\r\n proceedText,\r\n cancelText,\r\n requestReceivedText,\r\n requestReceivedHeading,\r\n lostCardLabel\r\n },\r\n onCancel,\r\n onSubmit,\r\n disableCardBtn,\r\n tierId,\r\n clubImage,\r\n clubPlusImage\r\n } = props;\r\n\r\n // React.useEffect(() => {\r\n // replaceCard()\r\n // },[])\r\n\r\n const replaceCard = async () => {\r\n const userToken = props.userToken;\r\n await axios({\r\n method: 'POST',\r\n\r\n url: `${props.context.request.apiSettings.baseUrl}/Commerce/UpdateReplacementCard`,\r\n data: {\r\n CardNumber: props.cardNumber\r\n },\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n OUN: props.context.request.apiSettings.oun,\r\n Authorization: `id_token ${userToken}`\r\n }\r\n })\r\n .then(res => {\r\n // @ts-ignore\r\n const customer = props.data?.customerInformation.result!;\r\n const customerAttr = customer.Attributes;\r\n // @ts-ignore\r\n const newAttributes = customerAttr?.map(attr => {\r\n let attrValue = attr.AttributeValue;\r\n if (attr.Name === 'LostCardDate') {\r\n const value = res.data.Date;\r\n\r\n attrValue = { ...attr.AttributeValue, StringValue: value };\r\n }\r\n return { ...attr, AttributeValue: attrValue };\r\n });\r\n const input = new updateCustomerAttributesInput(\r\n customer.AccountNumber,\r\n newAttributes || [],\r\n props.context.request.apiSettings\r\n );\r\n updateCustomerAttributes(input, props.context.actionContext)\r\n .then(response => {\r\n onCancel();\r\n disableCardBtn();\r\n })\r\n .catch(err => {\r\n console.log(err, 'ERROR');\r\n });\r\n })\r\n .catch(err => {\r\n console.log(err, 'Error');\r\n });\r\n };\r\n\r\n const handleSubmit = () => {\r\n replaceCard();\r\n onSubmit();\r\n };\r\n const [isSubmitted] = React.useState(false);\r\n const currentHeading = isSubmitted ? requestReceivedHeading : lostCardLabel;\r\n const currentDescription = isSubmitted ? requestReceivedText : lostYourCardDescriptionText;\r\n const currentButtons = (\r\n <>\r\n \r\n \r\n {cancelText}\r\n \r\n \r\n );\r\n const imgSrc = tierId?.toLowerCase() === 'club' ? clubImage : clubPlusImage;\r\n\r\n return (\r\n
\r\n {

{currentHeading}

}\r\n
\r\n
\r\n

{requestNewCardHeading}

\r\n

{currentDescription}

\r\n\r\n
{currentButtons}
\r\n
\r\n
\r\n Card Image\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default LostYourCard;\r\n","import React from 'react';\r\nimport { IAccountLoyaltyResources, IAccountLoyaltyConfig } from '../../definition-extensions/account-loyalty.ext.props.autogenerated';\r\n\r\ninterface ICancelMembershipProps {\r\n resources: IAccountLoyaltyResources;\r\n expireDate?: string;\r\n onSubmit: () => void;\r\n onCancel: () => void;\r\n config: IAccountLoyaltyConfig;\r\n}\r\n\r\nconst CancelMembership: React.FC = props => {\r\n const {\r\n resources: {\r\n clubBenefitsHeading,\r\n clubplusSubheading,\r\n clubSubheading,\r\n clubBenefit1,\r\n clubBenefit2,\r\n clubBenefit3,\r\n clubBenefit4,\r\n clubBenefit5,\r\n clubBenefit6,\r\n clubBenefit7,\r\n clubPlusPoints,\r\n clubPlusCostText,\r\n clubCost,\r\n continueMembershipBtn,\r\n cancelMembershipBtn,\r\n homeButtonLabel\r\n },\r\n expireDate,\r\n onCancel,\r\n onSubmit,\r\n config\r\n } = props;\r\n\r\n const [showMessage, setShowMessage] = React.useState(false);\r\n\r\n const handleSubmit = () => {\r\n setShowMessage(true);\r\n onSubmit();\r\n };\r\n\r\n const formatDate = (date: string) => {\r\n const d = new Date(date);\r\n const day = String(d.getDate()).padStart(2, \"0\");\r\n const month = String(d.getMonth() + 1).padStart(2, \"0\");\r\n const year = String(d.getFullYear()).slice(-2);\r\n return ` ${day}/${month}/${year}. `;\r\n }\r\n\r\n const renderMessage = () => {\r\n return (\r\n
\r\n
\r\n

{config.membershipexpireLabel}

\r\n

\r\n {expireDate && config.cardExpireLabelDecription?.replace('{date}', formatDate(expireDate))}\r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n {homeButtonLabel}\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n const renderForm = () => {\r\n return (\r\n
\r\n
\r\n {config.cancelFormHeading &&

{config.cancelFormHeading}

}\r\n

{config.cancelFormDescription}

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

{clubBenefitsHeading}

\r\n
\r\n
\r\n
{clubplusSubheading}
\r\n
{clubSubheading}
\r\n
\r\n
\r\n

{clubBenefit1}

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

{clubBenefit2}

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

{clubBenefit3}

\r\n
\r\n
{clubPlusPoints}
\r\n
{clubPlusPoints}
\r\n
\r\n
\r\n
\r\n

{clubBenefit4}

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

{clubBenefit5}

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

{clubBenefit6}

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

{clubBenefit7}

\r\n
\r\n
{clubPlusCostText.replace(\"{club-plus-cost}\", config.clubPlusCostValue!)}
\r\n
{clubCost}
\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 return
{showMessage ? renderMessage() : renderForm()}
;\r\n};\r\n\r\nexport default CancelMembership;\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\r\n// tslint:disable: max-func-body-length\r\n\r\nimport { updateCustomerAttributes, updateCustomerAttributesInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport React, { useEffect, useState } from 'react';\r\n\r\nimport { IAccountLoyaltyViewProps } from '@msdyn365-commerce-modules/account-management';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { vSIInitiateRestCallAsync } from '../../../dotdigital-extension/DataActionExtension.g';\r\nimport {\r\n IAccountLoyaltyProps,\r\n IUpdatedMyAddressData,\r\n IUpdateMyDetailsLinkData,\r\n IClubRenewalCTAData\r\n} from '../definition-extensions/account-loyalty.ext.props.autogenerated';\r\nimport { IAccountLoyaltyData } from './account-loyalty.data';\r\nimport LostYourCard from './custom-components/lost-your-card';\r\nimport CancelMembership from './custom-components/cancel-membership';\r\nimport { setDateFormat } from '../utilities/formatDate';\r\n\r\ninterface IErrorMessage {\r\n message: string | null;\r\n StatusCode: Number | null;\r\n}\r\ninterface ICard {\r\n Number: string;\r\n Status: string;\r\n PIN: string;\r\n}\r\n\r\ninterface IProgram {\r\n Id: number;\r\n Name: string;\r\n}\r\n\r\ninterface IBalance {\r\n Type: string;\r\n Balance: string;\r\n Currency: string;\r\n}\r\n\r\ninterface ITotalCredit {\r\n Type: string;\r\n Balance: string;\r\n Currency: string;\r\n}\r\n\r\ninterface IAvailableReward {\r\n Id: number;\r\n ItemQuantityAvailable: number;\r\n ItemPrice?: number;\r\n ItemDiscountPercent?: number | null;\r\n StampsRequired?: boolean | null;\r\n StampBalance: number;\r\n}\r\n\r\ninterface ILoyaltyAccount {\r\n Card: ICard;\r\n Program: IProgram;\r\n ProgramTier?: string | null;\r\n Customer?: {} | null;\r\n Balances: IBalance[];\r\n TotalCredits: ITotalCredit[];\r\n AvailableRewards: IAvailableReward[];\r\n}\r\n\r\ninterface ICustomerRewardsInfo {\r\n Id: number;\r\n Status: string;\r\n Name: string;\r\n DisplayDescription: string | null;\r\n Display: string | null;\r\n}\r\n\r\nconst enum ViewStateTypes {\r\n Details,\r\n CancelForm,\r\n LostYourCard\r\n}\r\n\r\nconst AccountLoyaltyView: React.FC> = props => {\r\n const {\r\n AccountLoyalty,\r\n heading,\r\n cardNumber,\r\n config,\r\n totalPoints,\r\n context: { actionContext }\r\n } = props;\r\n const {\r\n lostCardLabel,\r\n downloadAppStatement,\r\n updateInfo,\r\n freeTrialCancelledText,\r\n myDetailLabel,\r\n makeRoomLabel,\r\n moreLabel,\r\n upgradeLabel,\r\n homeStoreLabel,\r\n membershipExpiryLabel,\r\n cancelMembershipBtn,\r\n lostCardSubmittedStatement\r\n } = props.resources;\r\n const {\r\n pointsText,\r\n youGotFirstText,\r\n nameLabel,\r\n cardLabel,\r\n tierLabel,\r\n coffeeIntroText,\r\n coffeePointsText,\r\n drinksLeftText,\r\n requestNewCardText\r\n } = props.resources;\r\n const { localStoreAttribute } = props.config;\r\n //@ts-ignore\r\n const [coffeePerksBalance, setCoffeePerksBalance] = useState(undefined);\r\n const [viewState, setViewState] = useState(ViewStateTypes.Details);\r\n const [activeTier, setActiveTier] = React.useState('');\r\n const [loyaltyExpiryDate, setLoyaltyExpirydate] = React.useState('');\r\n const [customerDDAttribute, setcustomerDDAttribute] = React.useState('');\r\n const [loyaltyRemainingDays, setLoyaltyRemainingDays] = React.useState(0);\r\n // const [showCancel, setShowCancel] = React.useState(false);\r\n // const [cancelMembership, setCancelMembership] = React.useState(false);\r\n //@ts-ignore\r\n const [coffeeMembershipError, setCoffeeMembershipError] = React.useState(false);\r\n const [displayLostCard, setDisplayLostCard] = React.useState(false);\r\n const [isDisabled, setIsDisabled] = React.useState(false);\r\n const [attriVal, setAttriVal] = React.useState('');\r\n const [canSubCheck, setCanSubCheck] = React.useState(false);\r\n\r\n /* VSI-Customization -- START If user is not authenticated route him to signin page */\r\n if (!props.context.request.user.isAuthenticated) {\r\n const signinURL = props.context.request.user.signInUrl;\r\n window.location.assign(signinURL!);\r\n }\r\n /* VSI-Customization -- END */\r\n\r\n useEffect(() => {\r\n if (!coffeePerksBalance) {\r\n // First call to get customer rewards if any\r\n const customerCardNo = props.data.loyaltyCard.result?.CardNumber;\r\n if (customerCardNo && config.programID) {\r\n _getLoyaltyInfo(\r\n actionContext,\r\n customerCardNo,\r\n config.programID,\r\n config.rewardID!,\r\n config.availableRewardID!,\r\n config.extraAvailableRewardID!,\r\n setCoffeePerksBalance,\r\n setCoffeeMembershipError\r\n ).catch(error => error);\r\n }\r\n }\r\n }, []);\r\n useEffect(() => {\r\n const loyaltGroups = props.data.loyaltyCard.result?.LoyaltyGroups![0];\r\n if (loyaltGroups) {\r\n const highestActiveLoyaltyCardTier = loyaltGroups.HighestActiveLoyaltyCardTier;\r\n\r\n const activatedTier = loyaltGroups.LoyaltyCardTiers!.find(card => card.RecordId === highestActiveLoyaltyCardTier);\r\n const loyaltyGroupTier = loyaltGroups.LoyaltyCardTiers?.find(tier => {\r\n return tier.TierId === 'Club Plus';\r\n });\r\n\r\n if (activatedTier) {\r\n //@ts-ignore\r\n setActiveTier(activatedTier.TierId);\r\n }\r\n\r\n if (loyaltyGroupTier) {\r\n const validToDate = loyaltyGroupTier.ValidTo;\r\n\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\r\n if (remainingDays) {\r\n setLoyaltyRemainingDays(remainingDays);\r\n }\r\n const formattedDate = setDateFormat(endDate.toLocaleDateString('en-GB'));\r\n formattedDate && setLoyaltyExpirydate(formattedDate);\r\n }\r\n }\r\n\r\n getCustomerDDAttribute();\r\n }, []);\r\n\r\n useEffect(() => {\r\n const customer = props.data?.customerInformation.result!;\r\n const customerAttr = customer.Attributes;\r\n customerAttr?.map(attr => {\r\n let attrValue = attr.AttributeValue;\r\n\r\n if (attr.Name === 'Direct Debit' && attr.AttributeValue!.StringValue) {\r\n setAttriVal(attr.AttributeValue!.StringValue);\r\n }\r\n\r\n if (attr.Name === 'LostCardDate' && attrValue?.StringValue) {\r\n const lostCardDate = new Date(attrValue?.StringValue);\r\n const todayDate = new Date();\r\n const Difference_In_Time = todayDate.getTime() - lostCardDate.getTime();\r\n const Difference_In_Days = Difference_In_Time / (1000 * 3600 * 24);\r\n if (Difference_In_Days < 10) {\r\n setDisplayLostCard(true);\r\n }\r\n }\r\n });\r\n checkRemDays();\r\n }, []);\r\n\r\n const tierId: string | undefined = getTierId(props);\r\n console.log(tierId, 'TIER ID');\r\n\r\n let loyaltyClass = 'ms-loyalty-free';\r\n if (tierId?.toLowerCase() === config.clubTierFreeText?.toLowerCase()) {\r\n loyaltyClass = 'ms-loyalty-free';\r\n } else if (tierId?.toLowerCase() === config.clubTierPlusText?.toLowerCase()) {\r\n loyaltyClass = 'ms-loyalty-plus';\r\n // loyaltyClass = 'ms-loyalty-premium';\r\n } else if (tierId?.toLowerCase() === config.premiumClubPlusTierText?.toLowerCase()) {\r\n loyaltyClass = 'ms-loyalty-premium';\r\n }\r\n const customerName = props.data.customerInformation.result?.Name;\r\n const localStore = props.data.customerInformation.result?.Attributes?.find(\r\n x => x.Name?.toLowerCase() === localStoreAttribute?.toLowerCase()\r\n );\r\n const { updateMyDetailsLink, updatedMyAddress, cancelButton } = props.config;\r\n const selectedStore = localStore?.AttributeValue?.StringValue || 'None';\r\n let showCancelBtn = false;\r\n\r\n if (props.data.loyaltyCard.result?.LoyaltyGroups![0]) {\r\n const highestActiveLoyaltyCardTier = props.data.loyaltyCard?.result.LoyaltyGroups[0].HighestActiveLoyaltyCardTier;\r\n\r\n const activatedTier = props.data.loyaltyCard?.result.LoyaltyGroups[0].LoyaltyCardTiers!.find(\r\n card => card.RecordId === highestActiveLoyaltyCardTier\r\n );\r\n\r\n if (activatedTier) {\r\n const showBtn = activatedTier?.TierId !== 'Club';\r\n showCancelBtn = showBtn;\r\n }\r\n }\r\n const getCustomerDDAttribute = () => {\r\n const customer = props.data.customerInformation.result!;\r\n const customerAttr = customer?.Attributes?.filter((attr: any) => {\r\n return attr.Name === 'Direct Debit';\r\n });\r\n if (customerAttr && customerAttr.length) {\r\n //@ts-ignore\r\n setcustomerDDAttribute(customerAttr[0].AttributeValue?.StringValue);\r\n }\r\n };\r\n const handleCancelMembership = async () => {\r\n const customer = props.data.customerInformation.result!;\r\n const customerAttr = customer.Attributes;\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 === 'DDRP' ? 'DDCAN' : 'DDRP';\r\n attrValue = { ...attr.AttributeValue, StringValue: value };\r\n }\r\n return { ...attr, AttributeValue: attrValue };\r\n });\r\n\r\n const input = new updateCustomerAttributesInput(customer.AccountNumber, newAttributes || [], props.context.request.apiSettings);\r\n const cancelResponse = await updateCustomerAttributes(input, actionContext).catch();\r\n if (cancelResponse && cancelResponse?.Attributes![3].AttributeValue!.StringValue === 'DDCAN') {\r\n setCanSubCheck(true);\r\n }\r\n };\r\n\r\n const checkRemDays = () => {\r\n const enrollmentDate = props.data.loyaltyCard.result?.LoyaltyGroups![0].LoyaltyCardTiers!.filter(\r\n tier => tier.TierId === 'Club Plus Free Trial'\r\n );\r\n if (enrollmentDate && enrollmentDate.length > 0) {\r\n let validTo: any = enrollmentDate && new Date(enrollmentDate[0].ValidTo);\r\n validTo = new Date(validTo.setDate(validTo.getDate() - 2));\r\n const currentDate: Date = new Date();\r\n currentDate <= validTo ? setIsDisabled(false) : setIsDisabled(true);\r\n\r\n const endDate = new Date(enrollmentDate[0].ValidTo ?? '');\r\n const formattedDate = setDateFormat(endDate.toLocaleDateString('en-GB'));\r\n formattedDate && setLoyaltyExpirydate(formattedDate);\r\n }\r\n };\r\n\r\n const handleLostYourCartRequest = () => {};\r\n\r\n const handleGoBack = () => {\r\n setViewState(ViewStateTypes.Details);\r\n };\r\n\r\n const handleLostYourCard = () => {\r\n setDisplayLostCard(true);\r\n };\r\n\r\n const renderDetails = () => {\r\n const daysLimit = props.context.app.config.clubPlusRenewalDays || 30;\r\n const showRenewMembershipButton =\r\n activeTier === 'Club Plus' && loyaltyRemainingDays <= daysLimit && (customerDDAttribute === 'None' || customerDDAttribute === 'DDCAN');\r\n const { clubRenewalCTA } = props.config;\r\n\r\n return (\r\n
\r\n {heading}\r\n
\r\n
\r\n

{youGotFirstText}

\r\n

\r\n

{totalPoints && totalPoints.toFixed(0)}

\r\n

\r\n

{pointsText}

\r\n
\r\n
\r\n
\r\n \r\n
\r\n {getRemainingPointsMessage(props, totalPoints)}\r\n
\r\n {tierId?.toLowerCase() !== config.clubTierFreeText?.toLowerCase() && (\r\n
\r\n
\r\n \r\n
\r\n {coffeeMembershipError ? (\r\n

{drinksLeftText}

\r\n ) : (\r\n

\r\n {coffeeIntroText} {coffeePerksBalance} {coffeePointsText}\r\n

\r\n )}\r\n
\r\n )}\r\n
\r\n

{myDetailLabel}

\r\n

\r\n {nameLabel} {customerName}\r\n

\r\n

\r\n {cardLabel} {cardNumber}\r\n

\r\n

\r\n {tierLabel} {tierId}\r\n

\r\n {loyaltyExpiryDate && activeTier !== 'Club' && (\r\n

\r\n {membershipExpiryLabel} {loyaltyExpiryDate}\r\n

\r\n )}\r\n

\r\n {homeStoreLabel} {selectedStore}\r\n

\r\n
\r\n {/* /** END -- Conditional renderig of divs */}\r\n
\r\n

{updateInfo}

\r\n \r\n  \r\n \r\n \r\n {showRenewMembershipButton ? _renderLinkButton(clubRenewalCTA, props) : <>}\r\n {_renderLinkButton(updateMyDetailsLink, props)}\r\n {_renderLinkButton(updatedMyAddress, props)}\r\n {/* Remove condition false for displaying cancel button */}\r\n {false &&\r\n showCancelBtn &&\r\n // directDebitAttr?.AttributeValue?.StringValue === 'DDRP' &&\r\n _renderLinkButton(cancelButton, props, () => setViewState(ViewStateTypes.CancelForm))}\r\n {tierId == 'Club Plus Free Trial' &&\r\n (attriVal !== '' && !(attriVal === 'DDCAN') && !canSubCheck ? (\r\n setViewState(ViewStateTypes.CancelForm)}\r\n >\r\n {cancelMembershipBtn}\r\n \r\n ) : (\r\n

{freeTrialCancelledText}

\r\n ))}\r\n
\r\n
\r\n
\r\n

{lostCardLabel}

\r\n
\r\n {/* Hidden Send Detail button */}\r\n setViewState(ViewStateTypes.LostYourCard)}\r\n >\r\n {requestNewCardText}\r\n \r\n {/* VSI-Customization -- START Render request new card link based on tierId */}\r\n {/* {renderRequestNewCardBasedOnTierId(props, tierId, () => setViewState(ViewStateTypes.LostYourCard))} */}\r\n {/* VSI-Customization -- END */}\r\n
\r\n

{displayLostCard ? lostCardSubmittedStatement : downloadAppStatement}

\r\n
\r\n \r\n App Store\r\n \r\n \r\n Google Play\r\n \r\n
\r\n
\r\n {tierId && tierId.toLowerCase() === config.clubTierFreeText?.toLowerCase() ? (\r\n
\r\n

{makeRoomLabel}

\r\n

{moreLabel}

\r\n

{upgradeLabel}

\r\n \r\n
\r\n ) : (\r\n ''\r\n )}\r\n
\r\n
\r\n );\r\n };\r\n\r\n const renderCurrentView = () => {\r\n switch (viewState) {\r\n case ViewStateTypes.Details:\r\n return renderDetails();\r\n case ViewStateTypes.CancelForm:\r\n return (\r\n tier.TierId === 'Club Plus Free Trial')[0]\r\n .ValidTo.toString() || ''\r\n }\r\n config={props.config}\r\n />\r\n );\r\n case ViewStateTypes.LostYourCard:\r\n return (\r\n \r\n );\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return (\r\n \r\n {renderCurrentView()}\r\n \r\n );\r\n};\r\n// Following function gets account loyalty account\r\n// @ts-ignore\r\nexport const _getLoyaltyInfo = async (\r\n actionContext: Msdyn365.IActionContext,\r\n customerCardNo: string,\r\n programId: number,\r\n rewardId: number,\r\n availableRewardId: number,\r\n extraAvailableRewardID: number,\r\n setCoffeePerksBalance: React.Dispatch>,\r\n setCoffeeMembershipError: React.Dispatch>\r\n) => {\r\n try {\r\n const customerRewardsInfo = await vSIInitiateRestCallAsync(\r\n { callerContext: actionContext },\r\n 'Zonal',\r\n 'get',\r\n \"{'cache-control':'no-cache', 'Accept':'application/json'}\",\r\n '',\r\n '',\r\n `/v1/api/programs/${programId}/rewards`\r\n );\r\n let coffeeRewardInfo: ICustomerRewardsInfo | undefined;\r\n let extraCoffeeRewardInfo: ICustomerRewardsInfo | undefined;\r\n if (customerRewardsInfo.result) {\r\n const rewardsInfo: ICustomerRewardsInfo[] = JSON.parse(customerRewardsInfo.result);\r\n coffeeRewardInfo = rewardsInfo.find(reward => reward.Id === rewardId);\r\n extraCoffeeRewardInfo = rewardsInfo.find(reward => reward.Id === extraAvailableRewardID);\r\n if (coffeeRewardInfo?.Status === 'Enabled') {\r\n const customerLoyaltyInfo = await vSIInitiateRestCallAsync(\r\n { callerContext: actionContext },\r\n 'Zonal',\r\n 'get',\r\n \"{'cache-control':'no-cache', 'Accept':'application/json'}\",\r\n '',\r\n '',\r\n `v1/api/programs/${programId}/accounts/${customerCardNo}`\r\n );\r\n if (customerLoyaltyInfo.result) {\r\n const responseError: IErrorMessage = JSON.parse(customerLoyaltyInfo.result);\r\n if (\r\n (responseError.StatusCode && responseError.StatusCode === 404) ||\r\n (responseError.message && responseError.message.length > 0)\r\n ) {\r\n // Error in getting token\r\n setCoffeeMembershipError(true);\r\n console.log('error in getting token');\r\n // this.setState({ submissionErrorMsg: submissionErrorMessage, submissionSuccessMsg: undefined });\r\n return;\r\n } else {\r\n const customerRewards: ILoyaltyAccount = JSON.parse(customerLoyaltyInfo.result);\r\n\r\n // const coffeePerksReward = customerRewards.AvailableRewards.find(reward => reward.Id === 1532); // do not show this reward , only recurringrewardShow.\r\n const coffeePerksRecurringReward = customerRewards.AvailableRewards.find(reward => reward.Id === availableRewardId);\r\n const extraCoffeePerksReward = customerRewards.AvailableRewards.find(\r\n reward => reward.Id === extraAvailableRewardID\r\n );\r\n\r\n const extraCoffeePerksRewardQuantity = extraCoffeePerksReward?.ItemQuantityAvailable ?? 0;\r\n\r\n //const coffeePerkQuantity = coffeePerksReward?.ItemQuantityAvailable ?? 0;\r\n let coffeePerkRecurringQuantity = coffeePerksRecurringReward?.ItemQuantityAvailable ?? 0;\r\n if (extraCoffeeRewardInfo?.Status === 'Enabled') {\r\n coffeePerkRecurringQuantity = coffeePerkRecurringQuantity + extraCoffeePerksRewardQuantity;\r\n }\r\n setCoffeePerksBalance(coffeePerkRecurringQuantity);\r\n return;\r\n }\r\n }\r\n } else {\r\n setCoffeePerksBalance(0);\r\n }\r\n }\r\n } catch (err) {\r\n setCoffeeMembershipError(true);\r\n console.log(err);\r\n }\r\n};\r\n\r\n// Customer\r\n\r\nconst _renderLinkButton = (\r\n link: IUpdateMyDetailsLinkData | IUpdatedMyAddressData | IClubRenewalCTAData | undefined,\r\n props: IAccountLoyaltyViewProps & IAccountLoyaltyProps,\r\n onCancel?: () => void\r\n) => {\r\n if (!link) {\r\n return null;\r\n }\r\n\r\n if (link.linkUrl.destinationUrl === '/dobbies/cancel') {\r\n return (\r\n \r\n );\r\n }\r\n const linkData: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: 'cta__btn',\r\n linkText: link.linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: 'button'\r\n };\r\n return ;\r\n};\r\n\r\nconst getTierId = (props: IAccountLoyaltyViewProps & IAccountLoyaltyProps) => {\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.TierId;\r\n }\r\n }\r\n }\r\n return;\r\n};\r\n\r\nconst getRemainingPointsMessage = (props: IAccountLoyaltyViewProps & IAccountLoyaltyProps, clientPoints: number) => {\r\n const { collectText, collectPointsText } = props.resources;\r\n const totalPointsQuota = props.config.totalPointsToGetVoucher || 150;\r\n const threshold = props.config.pointsThreshold || 50;\r\n const pointValue = props.config.pointValue || 0.5;\r\n const earnedPoints = clientPoints;\r\n\r\n // First calculate voucher value for one point\r\n const voucherForOnePoint = pointValue / threshold;\r\n /* The point calculation here is as following:\r\n * 150pts = £1.50 voucher\r\n * 200pts = £2 voucher\r\n * Each following 50pts adds £0.50 to their voucher. */\r\n\r\n if (earnedPoints < totalPointsQuota) {\r\n // user has less points than to get voucher\r\n // Now multiplies it by totalPointsQuota (total more points to be earned) to get voucher price and format its currency\r\n const voucherPrice = props.context.cultureFormatter.formatCurrency(voucherForOnePoint * totalPointsQuota, props.context.request.channel?.Currency);\r\n return (\r\n

\r\n {collectText} {totalPointsQuota - earnedPoints} {collectPointsText}\r\n {voucherPrice}\r\n

\r\n );\r\n } else if (earnedPoints >= totalPointsQuota) {\r\n // user has more points than minimum points required\r\n const remainder = earnedPoints % threshold;\r\n // Get value of the next voucher points issuing level from earnedPoints e.g. 200 is that value from 220 as 50 is multiple of 200\r\n let nextVoucherPoints = earnedPoints - remainder;\r\n // points needed to get to next voucher level\r\n nextVoucherPoints += threshold;\r\n // points needed for next voucher\r\n const pointsToCollect = threshold - remainder;\r\n\r\n // Now multiplies it by totalPointsQuota (total more points to be earned) to get voucher price and format its currency\r\n const voucherPrice = props.context.cultureFormatter.formatCurrency(voucherForOnePoint * nextVoucherPoints, props.context.request.channel?.Currency);\r\n return (\r\n

\r\n {collectText} {pointsToCollect} {collectPointsText} {voucherPrice}\r\n

\r\n );\r\n }\r\n return;\r\n};\r\n\r\nexport default AccountLoyaltyView;\r\n"],"names":["VSIRestAPIHandlerExtensionClass","constructor","odataObject","this","Id","result","ExtensionProperties","undefined","i","length","className","substr","lastIndexOf","concat","EntityClasses","createVSIInitiateRestCallInput","targetSystem","methodType","requestHeader","requestBody","urlParams","servicePath","id","key","DataServiceQuery","DataServiceEntities","vSIGetAPIResponseQuery","createDataServiceRequestForOperation","bypassCache","returnEntity","vSIInitiateRestCallAsync","context","request","callActionOrExecute","callerContext","setDateFormat","originalDate","dateComponents","split","slice","getDateObjFromString","dateString","dateDelimiter","hasTime","getMobileOperatingSystem","MsDyn365","isBrowser","userAgent","navigator","vendor","window","opera","test","MSStream","indexOf","Date","dateTimeSplitted","dateMonth","dateDay","dateYear","dateHour","dateMinutes","includes","GMTStr","startsWith","parseInt","error","props","resources","requestNewCardHeading","lostYourCardDescriptionText","proceedText","cancelText","requestReceivedText","requestReceivedHeading","lostCardLabel","onCancel","onSubmit","disableCardBtn","tierId","clubImage","clubPlusImage","isSubmitted","React","currentHeading","currentDescription","currentButtons","onClick","handleSubmit","async","userToken","axios","method","url","apiSettings","baseUrl","data","CardNumber","cardNumber","headers","OUN","oun","Authorization","then","res","_props$data","customer","customerInformation","customerAttr","Attributes","newAttributes","map","attr","attrValue","AttributeValue","Name","value","_objectSpread","StringValue","input","updateCustomerAttributesInput","AccountNumber","updateCustomerAttributes","actionContext","response","catch","err","console","log","replaceCard","imgSrc","toLowerCase","src","alt","clubBenefitsHeading","clubplusSubheading","clubSubheading","clubBenefit1","clubBenefit2","clubBenefit3","clubBenefit4","clubBenefit5","clubBenefit6","clubBenefit7","clubPlusPoints","clubPlusCostText","clubCost","continueMembershipBtn","cancelMembershipBtn","homeButtonLabel","expireDate","config","showMessage","setShowMessage","membershipexpireLabel","_config$cardExpireLab","cardExpireLabelDecription","replace","date","d","String","getDate","padStart","getMonth","getFullYear","formatDate","href","cancelFormHeading","cancelFormDescription","clubPlusCostValue","renderMessage","ViewStateTypes","_getLoyaltyInfo","customerCardNo","programId","rewardId","availableRewardId","extraAvailableRewardID","setCoffeePerksBalance","setCoffeeMembershipError","customerRewardsInfo","coffeeRewardInfo","extraCoffeeRewardInfo","_coffeeRewardInfo","rewardsInfo","JSON","parse","find","reward","Status","customerLoyaltyInfo","responseError","StatusCode","message","_extraCoffeePerksRewa","_coffeePerksRecurring","_extraCoffeeRewardInf","customerRewards","coffeePerksRecurringReward","AvailableRewards","extraCoffeePerksReward","extraCoffeePerksRewardQuantity","ItemQuantityAvailable","coffeePerkRecurringQuantity","_renderLinkButton","link","linkUrl","destinationUrl","ariaLabel","linkText","linkData","openInNewTab","role","Msdyn365","editProps","requestContext","getTierId","_props$data$loyaltyCa9","_props$data$loyaltyCa10","loyaltyGroup","loyaltyCard","LoyaltyGroups","highestActiveLoyaltyCardTier","HighestActiveLoyaltyCardTier","loyaltyCardTiers","LoyaltyCardTiers","_","loyaltyCardTier","entries","RecordId","TierId","getRemainingPointsMessage","clientPoints","collectText","collectPointsText","totalPointsQuota","totalPointsToGetVoucher","threshold","pointsThreshold","earnedPoints","voucherForOnePoint","pointValue","_props$context$reques","voucherPrice","cultureFormatter","formatCurrency","channel","Currency","_props$context$reques2","remainder","nextVoucherPoints","pointsToCollect","_config$clubTierFreeT","_config$clubTierPlusT","_config$premiumClubPl","_props$data$customerI","_props$data$customerI2","_localStore$Attribute","_props$data$loyaltyCa3","AccountLoyalty","heading","totalPoints","downloadAppStatement","updateInfo","freeTrialCancelledText","myDetailLabel","makeRoomLabel","moreLabel","upgradeLabel","homeStoreLabel","membershipExpiryLabel","lostCardSubmittedStatement","pointsText","youGotFirstText","nameLabel","cardLabel","tierLabel","coffeeIntroText","coffeePointsText","drinksLeftText","requestNewCardText","localStoreAttribute","coffeePerksBalance","useState","viewState","setViewState","Details","activeTier","setActiveTier","loyaltyExpiryDate","setLoyaltyExpirydate","customerDDAttribute","setcustomerDDAttribute","loyaltyRemainingDays","setLoyaltyRemainingDays","coffeeMembershipError","displayLostCard","setDisplayLostCard","isDisabled","setIsDisabled","attriVal","setAttriVal","canSubCheck","setCanSubCheck","user","isAuthenticated","signinURL","signInUrl","location","assign","useEffect","_props$data$loyaltyCa","programID","rewardID","availableRewardID","_props$data$loyaltyCa2","loyaltGroups","_loyaltGroups$Loyalty","activatedTier","card","loyaltyGroupTier","tier","validToDate","ValidTo","endDate","today","timeDifference","getTime","remainingDays","Math","ceil","formattedDate","toLocaleDateString","getCustomerDDAttribute","lostCardDate","checkRemDays","loyaltyClass","clubTierFreeText","clubTierPlusText","premiumClubPlusTierText","customerName","localStore","x","_x$Name","updateMyDetailsLink","updatedMyAddress","cancelButton","selectedStore","showCancelBtn","_props$data$loyaltyCa4","_props$data$loyaltyCa5","_customer$Attributes","filter","_customerAttr$0$Attri","handleCancelMembership","_attrValue","cancelResponse","_props$data$loyaltyCa6","enrollmentDate","_enrollmentDate$0$Val","validTo","setDate","currentDate","handleLostYourCartRequest","handleGoBack","handleLostYourCard","Module","Object","renderCurrentView","_props$data$loyaltyCa7","_props$data$loyaltyCa8","_props$config$clubCar","_props$config$clubPlu","renderDetails","_config$clubTierFreeT2","_config$clubTierFreeT3","_props$config$upgrade","_props$config$upgrade2","daysLimit","app","clubPlusRenewalDays","showRenewMembershipButton","clubRenewalCTA","toFixed","Node","tag","disabled","CancelForm","LostYourCard","title","target","upgradeNow","CancelMembership","toString","token","clubCardImage","clubPlusCardImage"],"sourceRoot":""}