{"version":3,"file":"static/js/bb854bb26223c3aea970.bundle.js","mappings":"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","sources":["webpack://Dobbies.Commerce/./src/modules/dobbies-marketing-content-block/components/dobbies-modal.tsx?7007","webpack://Dobbies.Commerce/./src/modules/dobbies-marketing-content-block/components/links.tsx?e4fe","webpack://Dobbies.Commerce/./src/modules/dobbies-marketing-content-block/dobbies-marketing-content-block.props.autogenerated.ts?b949","webpack://Dobbies.Commerce/./src/modules/dobbies-marketing-content-block/dobbies-marketing-content-block.tsx?3e0d","webpack://Dobbies.Commerce/./src/modules/dobbies-marketing-content-block/dobbies-marketing-content-block.view.tsx?3568","webpack://Dobbies.Commerce/./lib/dobbies-marketing-content-block/module-registration.js?fdba","webpack://Dobbies.Commerce/external var \"React\"?0d3b","webpack://Dobbies.Commerce/external var \"ReactDOM\"?853b"],"sourcesContent":["import { Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface IDobbiesModalProps {\r\n modalBodySlots?: React.ReactNode[];\r\n modalBodyElement?: JSX.Element;\r\n isOpen: boolean;\r\n className: string;\r\n modalTitle: JSX.Element;\r\n modalFooter: JSX.Element;\r\n}\r\n\r\nconst DobbiesModal: React.FC = (props: IDobbiesModalProps) => {\r\n return (\r\n \r\n {props.modalTitle && {props.modalTitle}}\r\n {props.modalBodySlots && {props.modalBodySlots}}\r\n {props.modalBodyElement && {props.modalBodyElement}}\r\n {props.modalFooter && {props.modalFooter}}\r\n \r\n );\r\n};\r\n\r\nexport default DobbiesModal;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nimport { ILinksData } from '../dobbies-marketing-content-block.props.autogenerated';\r\n\r\nexport interface IContentCardLinks {\r\n links: ILinksData[];\r\n requestContext: Msdyn365.IRequestContext;\r\n telemetryContent: ITelemetryContent;\r\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\r\n}\r\n\r\n/**\r\n *\r\n * ContentCardLinks component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class ContentCardLinks extends React.PureComponent {\r\n public render(): JSX.Element {\r\n const editableLinks = this._mapEditableLinks(this.props.links);\r\n return (\r\n
\r\n {editableLinks && editableLinks.length > 0 ? (\r\n \r\n ) : null}\r\n
\r\n );\r\n }\r\n\r\n private readonly _mapEditableLinks = (linkdata: ILinksData[]): Msdyn365.ILinksData[] | null => {\r\n if (!linkdata || linkdata.length === 0) {\r\n return null;\r\n }\r\n const editableLinks: Msdyn365.ILinksData[] = [];\r\n linkdata.forEach((link, index) => {\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\r\n const linkText = link.linkText ? link.linkText : '';\r\n payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\r\n const btnClass = index === 0 ? 'msc-cta__primary' : 'msc-cta__secondary';\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: btnClass,\r\n linkText: link.linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: 'button',\r\n additionalProperties: attributes,\r\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\r\n };\r\n editableLinks.push(editableLink);\r\n });\r\n\r\n return editableLinks;\r\n };\r\n}\r\nexport default ContentCardLinks;\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IDobbiesMarketingContentBlock contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum actionableRegion {\r\n imageAndLinks = 'imageAndLinks',\r\n linksOnly = 'linksOnly'\r\n}\r\n\r\nexport interface IDobbiesMarketingContentBlockConfig extends Msdyn365.IModuleConfig {\r\n heading?: IHeadingData;\r\n popUpHeading?: IPopUpHeadingData;\r\n statusMessage?: string;\r\n paragraph?: Msdyn365.RichText;\r\n image?: Msdyn365.IImageData;\r\n links?: ILinksData[];\r\n clubPlusTrialLoyaltyURL?: string;\r\n clubPlusLoyaltyURL?: string;\r\n actionableRegion?: actionableRegion;\r\n imageLink?: Msdyn365.ILinkData;\r\n imageAriaLabel?: string;\r\n className?: string;\r\n}\r\n\r\nexport interface IDobbiesMarketingContentBlockResources {\r\n cancelButtonTitle: string;\r\n}\r\n\r\nexport const enum HeadingTag {\r\n h1 = 'h1',\r\n h2 = 'h2',\r\n h3 = 'h3',\r\n h4 = 'h4',\r\n h5 = 'h5',\r\n h6 = 'h6'\r\n}\r\n\r\nexport interface IHeadingData {\r\n text: string;\r\n tag?: HeadingTag;\r\n}\r\n\r\nexport const enum PopUpHeadingTag {\r\n h1 = 'h1',\r\n h2 = 'h2',\r\n h3 = 'h3',\r\n h4 = 'h4',\r\n h5 = 'h5',\r\n h6 = 'h6'\r\n}\r\n\r\nexport interface IPopUpHeadingData {\r\n text: string;\r\n tag?: PopUpHeadingTag;\r\n}\r\n\r\nexport interface ILinksData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n}\r\n\r\nexport interface IDobbiesMarketingContentBlockProps extends Msdyn365.IModule {\r\n resources: IDobbiesMarketingContentBlockResources;\r\n config: IDobbiesMarketingContentBlockConfig;\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n/* eslint-disable security/detect-object-injection */\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { IDobbiesMarketingContentBlockData } from './dobbies-marketing-content-block.data';\r\n\r\nimport LinksComponent from './components/links';\r\nimport { actionableRegion as region, IDobbiesMarketingContentBlockProps } from './dobbies-marketing-content-block.props.autogenerated';\r\n\r\nexport interface IContentBlockViewProps extends IDobbiesMarketingContentBlockProps {\r\n title?: React.ReactNode;\r\n text?: React.ReactNode;\r\n image?: React.ReactNode;\r\n links?: React.ReactNode;\r\n className?: string;\r\n contentBlockContainer: IModuleProps;\r\n imageContainer: INodeProps;\r\n detailsContainer: INodeProps;\r\n contentBlockAnchorTag?: INodeProps;\r\n imageLink?: string;\r\n imageAriaLabel?: string;\r\n}\r\n\r\n/**\r\n *\r\n * ContentCard component.\r\n * @extends {React.PureComponent>}\r\n */\r\n\r\nclass ContentBlock extends React.PureComponent> {\r\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n\r\n public render(): JSX.Element | null {\r\n const { heading, paragraph, image, links, className, imageAriaLabel } = this.props.config;\r\n\r\n const contentBlockTitle = heading && (\r\n \r\n );\r\n\r\n const imageProps = {\r\n gridSettings: this.props.context.request.gridSettings || {},\r\n imageSettings: image && image.imageSettings\r\n };\r\n const contentBlockLinks = links && links.length > 0 && (\r\n \r\n );\r\n const contentBlockText = paragraph && (\r\n \r\n );\r\n const contentBlockImage = (\r\n \r\n );\r\n\r\n if (!contentBlockTitle && !contentBlockText && !contentBlockLinks) {\r\n this.props.context.telemetry.error('Content block content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n const contentBlockviewProps = {\r\n ...this.props,\r\n title: contentBlockTitle,\r\n text: contentBlockText,\r\n image: contentBlockImage,\r\n links: contentBlockLinks,\r\n moduleClass: this.props.config.className,\r\n contentBlockContainer: {\r\n moduleProps: this.props,\r\n className: classnames('ms-content-block', className)\r\n },\r\n imageContainer: { className: 'ms-content-block__image' },\r\n detailsContainer: { className: 'ms-content-block__details' },\r\n contentBlockAnchorTag: {\r\n tag: 'a',\r\n className: 'ms-content-block__link',\r\n role: 'link'\r\n },\r\n imageLink: this._getImageLink(),\r\n imageAriaLabel\r\n };\r\n\r\n return this.props.renderView(contentBlockviewProps) as React.ReactElement;\r\n }\r\n\r\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\r\n\r\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.paragraph = event.target.value);\r\n\r\n /* Handle link text change*/\r\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\r\n if (this.props.config.links && this.props.config.links[linkIndex]) {\r\n this.props.config.links[linkIndex].linkText = event.target.value;\r\n }\r\n };\r\n\r\n private _getImageLink(): string | null {\r\n const { imageLink, links, actionableRegion } = this.props.config;\r\n if (actionableRegion === region.imageAndLinks) {\r\n if (imageLink && imageLink.destinationUrl) {\r\n return imageLink.destinationUrl;\r\n } else if (links && links.length > 0 && links[0].linkUrl) {\r\n return links[0].linkUrl.destinationUrl;\r\n }\r\n return null;\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nexport default ContentBlock;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\n/* tslint:disable:max-func-body-length */\r\n\r\nimport { Button, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport DobbiesModal from './components/dobbies-modal';\r\nimport { IContentBlockViewProps } from './dobbies-marketing-content-block';\r\n\r\nconst ContentBlockView: React.FC = props => {\r\n const { contentBlockContainer, imageContainer, detailsContainer, title, text, image } = props;\r\n\r\n const [isPopupOpen, setIsPopupOpen] = React.useState(false);\r\n\r\n // Open popup by clicking on join now button\r\n\r\n // Render Popup title\r\n const _renderPopupTitle = () => {\r\n const { popUpHeading } = props.config;\r\n return (\r\n \r\n \r\n {popUpHeading && (\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n // Render popup footer\r\n const _renderPopupFooter = () => {\r\n return <>;\r\n };\r\n // Render popup body to show input fields\r\n const _renderPopupBody = () => {\r\n return (\r\n
\r\n

Start using your benefits as soon as you sign up, all for just £12 a year.

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n const redirectToClubPlus = () => {\r\n setIsPopupOpen(false);\r\n window.location.assign(props.config.clubPlusLoyaltyURL!);\r\n };\r\n\r\n const _closePopup = () => {\r\n setIsPopupOpen(false);\r\n };\r\n\r\n const redirectToClubPlusTrial = () => {\r\n setIsPopupOpen(false);\r\n window.location.assign(props.config.clubPlusTrialLoyaltyURL!);\r\n };\r\n\r\n // const getTier = (props: IContentBlockViewProps) => {\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 handleClickSignup = () => {\r\n // const tier = getTier(props);\r\n // if (tier && tier.TierId !== 'Club') {\r\n // // CHECK WHAT THE NUMBER OF DAYS SETUP IN CMS IS\r\n // // CHECK THE LOYALTY EXPIRY DATE\r\n // // MATCH THE TWO DATES, if value less than or equals to 0 from cms, then allow it, otherwise, go back to club plus\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\r\n // if (differenceInDays <= 0) {\r\n // setIsPopupOpen(true);\r\n // } else {\r\n // // If the user is a club plus trial member, redirect them to dobbies club plus signup\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 && activatedTier.TierId === 'Club Plus Free Trial') {\r\n // window.location.assign(props.config.clubPlusLoyaltyURL!);\r\n // } else {\r\n // setIsPopupOpen(true);\r\n // }\r\n // }\r\n // } else {\r\n // setIsPopupOpen(true);\r\n // }\r\n // };\r\n const isLoyaltyinProgress = props.context.request.cookies.get(props.context.request.user.customerAccountNumber!);\r\n return (\r\n \r\n {image}\r\n \r\n {title}\r\n {text}\r\n\r\n
\r\n {/* href=\"https://dobbies-ecommerce.commerce.dynamics.com/dobbies/loyalty-join?tier=club-plus\" */}\r\n {isLoyaltyinProgress.value === 'true' ? (\r\n props.config.statusMessage\r\n ) : (\r\n \r\n
Sign up
\r\n \r\n )}\r\n
\r\n\r\n {/* {_renderPopUp()} */}\r\n\r\n {isPopupOpen && (\r\n \r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ContentBlockView;\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['dobbies-marketing-content-block'] = {\n c: () => require('partner/modules/dobbies-marketing-content-block/dobbies-marketing-content-block.tsx'),\n $type: 'contentModule',\n da: [{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'dobbies-marketing-content-block',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/dobbies-marketing-content-block'\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__|modules|dobbies-marketing-content-block|dobbies-marketing-content-block'] = {\n c: () => require('partner/modules/dobbies-marketing-content-block/dobbies-marketing-content-block.view.tsx'),\n cn: '__local__-__local__-dobbies-marketing-content-block'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["props","React","Modal","isOpen","applicationNode","autoFocus","className","modalTitle","ModalHeader","modalBodySlots","ModalBody","modalBodyElement","modalFooter","ModalFooter","ContentCardLinks","constructor","_mapEditableLinks","linkdata","length","editableLinks","forEach","link","index","payLoad","getPayloadObject","this","telemetryContent","linkText","contentAction","etext","attributes","getTelemetryAttributes","btnClass","editableLink","ariaLabel","linkUrl","destinationUrl","openInNewTab","role","additionalProperties","onClick","onTelemetryClick","push","render","links","Msdyn365","editProps","onTextChange","requestContext","actionableRegion","HeadingTag","PopUpHeadingTag","ContentBlock","getTelemetryObject","context","request","telemetryPageName","friendlyName","telemetry","handleTextChange","event","config","heading","text","target","value","handleParagraphChange","paragraph","handleLinkTextChange","linkIndex","image","imageAriaLabel","contentBlockTitle","tag","onEdit","imageProps","gridSettings","imageSettings","contentBlockLinks","LinksComponent","Object","assign","contentBlockText","contentBlockImage","key","moduleType","typeName","imagePropertyName","layout","msdyn365__moduleLayout","error","contentBlockviewProps","_objectSpread","title","moduleClass","contentBlockContainer","moduleProps","classnames","imageContainer","detailsContainer","contentBlockAnchorTag","imageLink","_getImageLink","renderView","region","imageAndLinks","isPopupOpen","setIsPopupOpen","redirectToClubPlus","window","location","clubPlusLoyaltyURL","_closePopup","redirectToClubPlusTrial","clubPlusTrialLoyaltyURL","isLoyaltyinProgress","cookies","get","user","customerAccountNumber","Module","Node","statusMessage","href","DobbiesModal","_renderPopupTitle","popUpHeading","Button","binding","modules","dataActions","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}