{"version":3,"file":"static/js/604506af4018756d9a86.bundle.js","mappings":"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","sources":["webpack://Dobbies.Commerce/./src/modules/dobbies-club-renewal/dobbies-club-renewal.tsx?9f83","webpack://Dobbies.Commerce/./src/modules/dobbies-club-renewal/dobbies-club-renewal.view.tsx?a114","webpack://Dobbies.Commerce/./src/themes/dobbies/utilities/formatDate.ts?ae4d","webpack://Dobbies.Commerce/./lib/dobbies-club-renewal/module-registration.js?8581","webpack://Dobbies.Commerce/external var \"React\"?0d3b","webpack://Dobbies.Commerce/external var \"ReactDOM\"?853b"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\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// import { RichText, RichTextComponent, Text } from '@msdyn365-commerce/core';\r\nimport MsDyn365, { ICookieValue, Text } from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { IDobbiesClubRenewalData } from './dobbies-club-renewal.data';\r\nimport { IDobbiesClubRenewalProps } from './dobbies-club-renewal.props.autogenerated';\r\nimport { setDateFormat } from '../../themes/dobbies/utilities/formatDate';\r\nexport interface IDobbiesClubRenewalViewProps extends IDobbiesClubRenewalProps {\r\n isOpen: boolean;\r\n className: string;\r\n heading: JSX.Element;\r\n clubRenewalCTA: JSX.Element;\r\n clubRenewalMessage: JSX.Element;\r\n onCloseModal?(): void;\r\n}\r\n\r\ninterface IPopupModalState {\r\n isModalOpen: boolean;\r\n popupReady: boolean;\r\n daysLeft: number;\r\n expiryDate: string;\r\n customerDDAttribute?: string;\r\n activeTier?: string;\r\n}\r\n\r\nexport type popupModalCookie = {\r\n name: string;\r\n age: number | undefined;\r\n};\r\n\r\n/**\r\n *\r\n * DobbiesClubRenewal component\r\n * @extends {React.PureComponent, IPopupModalState>}\r\n */\r\nclass DobbiesClubRenewal extends React.Component, IPopupModalState> {\r\n private _cookie: popupModalCookie;\r\n private _delayStarted: boolean = false;\r\n\r\n constructor(props: IDobbiesClubRenewalProps) {\r\n super(props);\r\n this._closeModal = this._closeModal.bind(this);\r\n this.state = {\r\n isModalOpen: false,\r\n popupReady: false,\r\n daysLeft: 0,\r\n expiryDate: '',\r\n customerDDAttribute: '',\r\n activeTier: ''\r\n };\r\n this._cookie = {\r\n name: 'Dobbies-club-renewal-cookie',\r\n age: props.config.remindTime || undefined\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n const highestActiveLoyaltyCardTier = this.props.data.loyaltyCard.result?.LoyaltyGroups![0].HighestActiveLoyaltyCardTier;\r\n const activeTier = this.props.data.loyaltyCard.result?.LoyaltyGroups![0].LoyaltyCardTiers!.find(\r\n (card: any) => card.RecordId === highestActiveLoyaltyCardTier\r\n );\r\n this.getCustomerDDAttribute();\r\n this.getLoyaltyRemainingDays();\r\n this.setState({\r\n isModalOpen: true,\r\n activeTier: activeTier?.TierId\r\n });\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (this._cookieExist(this._cookie.name)) {\r\n return null;\r\n }\r\n const daysLimit = this.props.context.app.config.clubPlusRenewalDays || 30;\r\n if (\r\n !this.props.context.request.user.isAuthenticated ||\r\n this.state.daysLeft > daysLimit ||\r\n this.state.activeTier !== 'Club Plus' ||\r\n (this.state.customerDDAttribute !== 'None' && this.state.customerDDAttribute !== 'DDCAN')\r\n ) {\r\n return null;\r\n }\r\n\r\n const { isModalOpen } = this.state;\r\n const { className, heading, clubRenewalCTA, clubRenewalMessage } = this.props.config;\r\n {\r\n this._startDelay();\r\n }\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n className: className,\r\n isOpen: isModalOpen,\r\n heading: heading && this._renderHeading,\r\n clubRenewalCTA: clubRenewalCTA && this._renderClubRenewalCTA,\r\n clubRenewalMessage: clubRenewalMessage && this._renderClubRenewalMessage,\r\n onCloseModal: this._closeModal\r\n };\r\n if (!this.state.popupReady) {\r\n return null;\r\n }\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private getCustomerDDAttribute = () => {\r\n const customer = this.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) {\r\n this.setState({\r\n customerDDAttribute: customerAttr[0].AttributeValue?.StringValue\r\n });\r\n }\r\n };\r\n private getLoyaltyRemainingDays = () => {\r\n const loyaltyGroup =\r\n this.props.data.loyaltyCard?.result?.LoyaltyGroups &&\r\n this.props.data.loyaltyCard?.result?.LoyaltyGroups[0].LoyaltyCardTiers?.find(tier => {\r\n return tier.TierId === 'Club Plus';\r\n });\r\n\r\n const validToDate = loyaltyGroup && loyaltyGroup.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 this.setState({ daysLeft: remainingDays });\r\n }\r\n\r\n const formattedDate = setDateFormat(endDate.toLocaleDateString('en-GB'));\r\n formattedDate && this.setState({ expiryDate: formattedDate });\r\n };\r\n\r\n // Delays the modal to show after specific time span as per delay config\r\n private _startDelay(): void {\r\n if (!this._delayStarted) {\r\n const delayTime = this.props.config.delay || 0;\r\n this._delayStarted = true;\r\n MsDyn365.isBrowser &&\r\n setTimeout(() => {\r\n this.setState({ popupReady: true }, () => {});\r\n }, delayTime * 1000);\r\n }\r\n }\r\n private _cookieExist(name: string): boolean {\r\n const { cookies } = this.props.context.request;\r\n // if cookie exists, don't display\r\n if ((cookies.get as (name: string, isEssential: boolean) => ICookieValue)(name, true).status === 'FOUND') {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n private _setCookie(name: string, deltaDaysFromToday: number): void {\r\n const { cookies } = this.props.context.request;\r\n const expirationDate = new Date(Date.now());\r\n expirationDate.setTime(expirationDate.getTime() + deltaDaysFromToday * 24 * 60 * 60 * 1000);\r\n\r\n cookies.set(name, false, {\r\n expires: deltaDaysFromToday ? expirationDate : null,\r\n isEssential: true\r\n } as {});\r\n }\r\n // method to close modal, reset states and set cookies\r\n private _closeModal(): void {\r\n const remindTime = this.props.config.remindTime || 0;\r\n this._setCookie(this._cookie.name, remindTime);\r\n\r\n this.setState({\r\n isModalOpen: false,\r\n popupReady: false,\r\n daysLeft: 0,\r\n customerDDAttribute: '',\r\n activeTier: ''\r\n });\r\n }\r\n // Heading for Club renewal popup\r\n private get _renderHeading(): JSX.Element {\r\n const { heading } = this.props.config;\r\n return heading ? : <>;\r\n }\r\n // Club renewal CTA\r\n private get _renderClubRenewalCTA(): JSX.Element {\r\n const { clubRenewalCTA } = this.props.config;\r\n return clubRenewalCTA ? (\r\n \r\n {clubRenewalCTA.linkText}\r\n \r\n ) : (\r\n <>\r\n );\r\n }\r\n // Message for Club renewal\r\n private get _renderClubRenewalMessage(): JSX.Element {\r\n const { clubRenewalMessage } = this.props.config;\r\n return

{clubRenewalMessage?.replace('{date}', this.state.expiryDate)}

;\r\n }\r\n}\r\n\r\nexport default DobbiesClubRenewal;\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 { Modal, ModalBody, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IDobbiesClubRenewalViewProps } from './dobbies-club-renewal';\r\n\r\nexport default (props: IDobbiesClubRenewalViewProps) => {\r\n const { isOpen, heading, onCloseModal, clubRenewalCTA, clubRenewalMessage } = props;\r\n\r\n const clubRenewalPopup = (\r\n <>\r\n \r\n <>{heading}\r\n {