{"version":3,"file":"static/js/c79d8a97e756f1753e3b.bundle.js","mappings":"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","sources":["webpack://Dobbies.Commerce/./src/actions/show-cookie-dialog-state.ts?b775","webpack://Dobbies.Commerce/./src/modules/dobbies-content-block/components/additional-content.tsx?e768","webpack://Dobbies.Commerce/./src/modules/dobbies-content-block/components/links.tsx?9c31","webpack://Dobbies.Commerce/./src/modules/dobbies-content-block/dobbies-content-block.props.autogenerated.ts?cdcd","webpack://Dobbies.Commerce/./src/modules/dobbies-content-block/dobbies-content-block.tsx?6536","webpack://Dobbies.Commerce/./src/modules/dobbies-content-block/dobbies-content-block.view.tsx?c81b","webpack://Dobbies.Commerce/./src/themes/dobbies/actions/modules-state-share-action.ts?117d","webpack://Dobbies.Commerce/./lib/dobbies-content-block/module-registration.js?def8","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\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\n/**\r\n * CheckoutModulesStateShare Input Action\r\n */\r\nexport class ShowCookieManageModalInput implements IActionInput {\r\n // TODO: Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => `showCookieManageModal`;\r\n public getCacheObjectType = () => 'showCookieManageModal';\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n// TODO: Create a data model here or import one to capture the response of the action\r\nexport interface IShowCookieManageModalState {\r\n showCookieManageModal?: boolean;\r\n}\r\n/**\r\n * TODO: Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new ShowCookieManageModalInput();\r\n};\r\n/**\r\n * TODO: Use this function to call your action and process the results as needed\r\n */\r\nexport async function updateCartStateAction(input: ShowCookieManageModalInput, ctx: IActionContext): Promise {\r\n return {\r\n showCookieManageModal: undefined\r\n };\r\n}\r\n/**\r\n * SampleState - create action\r\n */\r\nexport default createObservableDataAction({\r\n action: >updateCartStateAction,\r\n input: createInput\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 * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IAdditionalContentData, ILinksData } from '../dobbies-content-block.props.autogenerated';\r\n\r\n/**\r\n * IContentBlockAdditionalContentProps: Interface for\r\n * Content Block Additional Content Component props.\r\n */\r\nexport interface IContentBlockAdditionalContentProps {\r\n requestContext: Msdyn365.IRequestContext;\r\n additionalContent: IAdditionalContentData[] | undefined;\r\n handleAdditionalTextChange(index: number, event: Msdyn365.ContentEditableEvent): void;\r\n handleAdditionalParagraphChange(index: number, event: Msdyn365.ContentEditableEvent): void;\r\n handleAdditionalLinkTextChange(linkIndex: number, index: number, event: Msdyn365.ContentEditableEvent): void;\r\n}\r\n\r\n/**\r\n * IContentBlockAdditionalContentProps: Interface for\r\n * Content Block Additional Content view props.\r\n */\r\nexport interface IContentBlockAdditionalContentViewProps {\r\n additionalContentNode: INodeProps;\r\n additionalContentItems?: IContentBlockAdditionalContentItemViewProps[];\r\n}\r\n\r\n/**\r\n * IContentBlockAdditionalContentProps: Interface for\r\n * Content Block Additional Content Item view props.\r\n */\r\nexport interface IContentBlockAdditionalContentItemViewProps {\r\n heading: React.ReactNode;\r\n text: React.ReactNode;\r\n links: React.ReactNode;\r\n additionalContentItemContainer: INodeProps;\r\n additionalContentItemLinks: INodeProps;\r\n}\r\n\r\n/**\r\n * Renders additional content heading.\r\n * @param additionalContentHeading - Additional content heading.\r\n * @param props - Content Block Additional content component props.\r\n * @param itemIndex - Item index.\r\n * @returns Heading Node.\r\n */\r\nconst renderHeading = (additionalContentHeading: string, props: IContentBlockAdditionalContentProps, itemIndex: number) => {\r\n const requestContext = props.requestContext;\r\n return (\r\n {\r\n props.handleAdditionalTextChange(itemIndex, event);\r\n },\r\n requestContext\r\n }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Renders additional content heading.\r\n * @param additionalContentParagraphText - Additional content paragraph text.\r\n * @param props - Content Block Additional content component props.\r\n * @param itemIndex - Item index.\r\n * @returns Paragraph Node.\r\n */\r\nconst renderParagraph = (additionalContentParagraphText: string, props: IContentBlockAdditionalContentProps, itemIndex: number) => {\r\n const requestContext = props.requestContext;\r\n return (\r\n {\r\n props.handleAdditionalTextChange(itemIndex, event);\r\n },\r\n requestContext\r\n }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Renders additional content heading.\r\n * @param ctaLink - Additional content link.\r\n * @param props - Content Block Additional content component props.\r\n * @param itemIndex - Item index.\r\n * @param linkIndex - Additional content link index.\r\n * @returns Link Node.\r\n */\r\nconst renderLinks = (ctaLink: ILinksData, props: IContentBlockAdditionalContentProps, itemIndex: number, linkIndex: number) => {\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: ctaLink.ariaLabel,\r\n className: 'ms-content-block__details__additional-content-cta-links',\r\n linkText: ctaLink.linkText,\r\n linkUrl: ctaLink.linkUrl.destinationUrl,\r\n openInNewTab: ctaLink.openInNewTab,\r\n role: 'link'\r\n };\r\n const requestContext = props.requestContext;\r\n return (\r\n {\r\n props.handleAdditionalLinkTextChange(linkIndex, itemIndex, event);\r\n },\r\n requestContext\r\n }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Create node for each additonal content item.\r\n * @param item - Content block additonal content item props.\r\n * @param props - Content Block Additional content component props.\r\n * @param itemIndex - Item index.\r\n * @returns IContentBlockAdditionalContentItemViewProps.\r\n */\r\nconst assembleNode = (\r\n item: IAdditionalContentData,\r\n props: IContentBlockAdditionalContentProps,\r\n itemIndex: number\r\n): IContentBlockAdditionalContentItemViewProps => {\r\n const headingNode = item.heading && renderHeading(item.heading, props, itemIndex);\r\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props, itemIndex);\r\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\r\n return renderLinks(ctaLink, props, itemIndex, index);\r\n });\r\n\r\n return {\r\n heading: headingNode,\r\n text: paragraphNode,\r\n links: linksNode,\r\n additionalContentItemContainer: { className: 'ms-content-block__details__additional-content__container' },\r\n additionalContentItemLinks: { className: 'ms-content-block__details__additional-content-cta' }\r\n };\r\n};\r\n\r\n/**\r\n * ContentBlockAdditionalContent component.\r\n * @param props - Content Block Additional content component props.\r\n * @returns Content Block Additional content view props.\r\n */\r\nexport const contentBlockAdditionalContent = (\r\n props: IContentBlockAdditionalContentProps\r\n): IContentBlockAdditionalContentViewProps | undefined => {\r\n const { additionalContent } = props;\r\n if (!additionalContent) {\r\n return undefined;\r\n }\r\n\r\n const reactNodes: IContentBlockAdditionalContentItemViewProps[] = [];\r\n additionalContent.map((item, index: number) => {\r\n return reactNodes.push(assembleNode(item, props, index));\r\n });\r\n\r\n return {\r\n additionalContentNode: { className: 'ms-content-block__details__additional-content' },\r\n additionalContentItems: reactNodes\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 * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { ILinksData } from '../dobbies-content-block.props.autogenerated';\r\nimport { IDobbiesContentBlockData } from '../dobbies-content-block.data';\r\nimport { ShowCookieManageModalInput } from '../../../actions/show-cookie-dialog-state';\r\nimport { RichText } from '@msdyn365-commerce/core';\r\nexport interface IContentCardLinks {\r\n links: ILinksData[];\r\n requestContext: Msdyn365.IRequestContext;\r\n telemetryContent: ITelemetryContent;\r\n role?: string;\r\n context: ICoreContext;\r\n showLoyaltyBoltonDialog?(msg: string | Msdyn365.RichText): void;\r\n data?: IDobbiesContentBlockData;\r\n alreadyPurchasedBoltonsMsg?: string;\r\n clubPlusPurchasedMsg?: RichText;\r\n isShowCookiesManageModal?: boolean;\r\n shouldShowLoyaltyBoltonDialog?: boolean;\r\n currentUserTierId?: string;\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 redirectToSignin = () => {\r\n // const signInUrl = `${this.props.context.actionContext.requestContext.url.requestUrl.origin}/_msdyn365/signin`;\r\n // window.location.href = signInUrl;\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: this.props.role,\r\n additionalProperties: attributes,\r\n onClick: event => {\r\n if (this.props.isShowCookiesManageModal) {\r\n this.props.context?.actionContext.update(new ShowCookieManageModalInput(), {\r\n showCookieManageModal: true\r\n });\r\n return;\r\n }\r\n if (this.props.shouldShowLoyaltyBoltonDialog) {\r\n const isAuthenticated = this.props.context.request.user.isAuthenticated;\r\n // if (!isAuthenticated) {\r\n // event.preventDefault();\r\n // this.redirectToSignin();\r\n // return;\r\n // }\r\n const url = window.location.href;\r\n const splittedUrl = url.split('/');\r\n if (splittedUrl && splittedUrl.length) {\r\n const urlPath = splittedUrl[splittedUrl.length - 1];\r\n this.props.context.request.cookies.set('boltons_url_path', urlPath);\r\n }\r\n const boltonAttr = this.props.data?.customerInformation.result?.Attributes?.find(\r\n attr => attr.Name?.toLowerCase() === 'IsBoltonMember'.toLowerCase()\r\n );\r\n if (boltonAttr && boltonAttr.AttributeValue?.StringValue === 'Yes' && this.props.showLoyaltyBoltonDialog) {\r\n const msg = this.props.alreadyPurchasedBoltonsMsg\r\n ? this.props.alreadyPurchasedBoltonsMsg\r\n : 'You’ve already purchased Club Plus Double Up with this account';\r\n this.props.showLoyaltyBoltonDialog(msg);\r\n event.preventDefault();\r\n return;\r\n } else {\r\n if (\r\n isAuthenticated &&\r\n ((!this.props.currentUserTierId && this.props.showLoyaltyBoltonDialog) ||\r\n (this.props.currentUserTierId === 'Club' && this.props.showLoyaltyBoltonDialog))\r\n ) {\r\n const msg = this.props.clubPlusPurchasedMsg\r\n ? this.props.clubPlusPurchasedMsg\r\n : 'This offer is for Club Plus only. If you have recently upgraded, please allow up to an hour for your account to update. Club Plus Double Up will then be available to purchase. If you’re Club member, you can upgrade here: Club | Dobbies Garden Centres';\r\n this.props.showLoyaltyBoltonDialog(msg);\r\n event.preventDefault();\r\n return;\r\n }\r\n const cookie = this.props.context.request.cookies.get('club_plus_purchased');\r\n if (cookie && (cookie.value === true || cookie.value === 'true') && this.props.showLoyaltyBoltonDialog) {\r\n const msg = this.props.clubPlusPurchasedMsg\r\n ? this.props.clubPlusPurchasedMsg\r\n : 'This offer is for Club Plus only. If you have recently upgraded, please allow up to an hour for your account to update. Club Plus Double Up will then be available to purchase. If you’re Club member, you can upgrade here: Club | Dobbies Garden Centres';\r\n this.props.showLoyaltyBoltonDialog(msg);\r\n event.preventDefault();\r\n return;\r\n }\r\n }\r\n }\r\n onTelemetryClick(this.props.telemetryContent, payLoad, linkText);\r\n }\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 * IDobbiesContentBlock 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 const enum imagePlacement {\r\n right = 'right',\r\n left = 'left'\r\n}\r\n\r\nexport interface IDobbiesContentBlockConfig extends Msdyn365.IModuleConfig {\r\n heading?: IHeadingData;\r\n paragraph?: Msdyn365.RichText;\r\n image?: Msdyn365.IImageData;\r\n links?: ILinksData[];\r\n additionalContent?: IAdditionalContentData[];\r\n actionableRegion?: actionableRegion;\r\n imageLink?: Msdyn365.ILinkData;\r\n imageAriaLabel?: string;\r\n className?: string;\r\n clientRender?: boolean;\r\n isCategoryNameTitle?: boolean;\r\n imageForMobile?: Msdyn365.IImageData;\r\n hideClubPlusBanner?: boolean;\r\n clubPlusTierId?: string;\r\n imagePlacement?: imagePlacement;\r\n showCategoryHierarchy?: boolean;\r\n alreadyPurchasedBoltonsMsg?: string;\r\n clubPlusPurchasedMsg?: Msdyn365.RichText;\r\n showManageCookiesModalContentBlock?: boolean;\r\n shouldShowLoyaltyBoltonDialog?: boolean;\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 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 IAdditionalContentData {\r\n heading?: string;\r\n subtext?: string;\r\n links?: ILinksData[];\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 IDobbiesContentBlockProps extends Msdyn365.IModule {\r\n config: IDobbiesContentBlockConfig;\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 * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { ICategoryHierarchyViewProps } from '../../modules/dobbies-search-result-container/dobbies-search-result-container';\r\nimport { contentBlockAdditionalContent, IContentBlockAdditionalContentViewProps } from './components/additional-content';\r\nimport LinksComponent from './components/links';\r\nimport {\r\n actionableRegion as region,\r\n IDobbiesContentBlockConfig,\r\n IDobbiesContentBlockProps\r\n} from './dobbies-content-block.props.autogenerated';\r\nimport { Link, Separator } from '../../modules/dobbies-search-result-container/components';\r\nimport { CategoryHierarchy as CategoryHierarchyData } from '@msdyn365-commerce/commerce-entities';\r\nimport { Modal, ModalBody, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport { IDobbiesContentBlockData } from './dobbies-content-block.data';\r\nimport { RichTextComponent } from '@msdyn365-commerce/core';\r\n\r\nexport interface IContentBlockViewProps extends IDobbiesContentBlockProps<{}> {\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 additionalContent?: IContentBlockAdditionalContentViewProps;\r\n handleAdditionalText?(): void;\r\n handleAdditionalParagraph?(): void;\r\n handleAdditionalLinkTextChange?(): void;\r\n categoryHierarchy?: ICategoryHierarchyViewProps;\r\n loyaltyBoltonsDialog?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Site-builder configuration for the module.\r\n */\r\nexport interface IContentBlockFullConfig extends IDobbiesContentBlockConfig {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- This field comes from SDK.\r\n msdyn365__moduleLayout?: string;\r\n}\r\n\r\nexport interface IDobbiesContentBlockState {\r\n showDialog: boolean;\r\n dialogMsg?: Msdyn365.RichText;\r\n}\r\n\r\n/**\r\n * ContentCard component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class ContentBlock extends React.PureComponent, IDobbiesContentBlockState> {\r\n constructor(props: IDobbiesContentBlockProps) {\r\n super(props);\r\n this.state = { showDialog: false };\r\n }\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 private _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\r\n const { data } = this.props;\r\n const categoryHierarchy = data.categoryHierarchy.result;\r\n const categoryLinks =\r\n categoryHierarchy &&\r\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\r\n return ;\r\n });\r\n const categoryLinkSeparator = ;\r\n\r\n return {\r\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\r\n categoryHierarchyList: categoryLinks,\r\n categoryHierarchySeparator: categoryLinkSeparator\r\n };\r\n };\r\n\r\n private showDialogWithMsg = (msg: Msdyn365.RichText) => {\r\n this.setState({ dialogMsg: msg, showDialog: true });\r\n };\r\n\r\n private showLoyaltyBoltonDialog = (msg: Msdyn365.RichText) => {\r\n this.showDialogWithMsg(msg);\r\n };\r\n\r\n private onDialogClose = () => {\r\n this.setState({ showDialog: false });\r\n };\r\n\r\n private getDialog = () => {\r\n let headerMSG = '';\r\n let boltonState = '';\r\n if (this.state.dialogMsg?.includes('recently upgraded')) {\r\n headerMSG = 'THIS OFFER IS FOR CLUB PLUS ONLY';\r\n boltonState = 'already-purchased';\r\n } else {\r\n headerMSG = 'You’ve already purchased Club Plus Double Up with this account';\r\n boltonState = 'not-purchased';\r\n }\r\n return (\r\n \r\n {headerMSG}\r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n private getTier = (props: IDobbiesContentBlockProps) => {\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 public render(): JSX.Element | null {\r\n const { heading, paragraph, image, links, className, imageAriaLabel } = this.props.config;\r\n const contentBlockTitle = heading && (\r\n \r\n );\r\n const imageProps = {\r\n gridSettings: this.props.context.request.gridSettings ?? {},\r\n imageSettings: image?.imageSettings\r\n };\r\n const contentBlockLinks = links && ArrayExtensions.hasElements(links) && (\r\n \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 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 additionalContent: contentBlockAdditionalContent({\r\n requestContext: this.props.context.request,\r\n additionalContent: this.props.config.additionalContent,\r\n handleAdditionalTextChange: this.handleAdditionalTextChange,\r\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\r\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\r\n }),\r\n handleAdditionalText: this.handleAdditionalTextChange,\r\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\r\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange,\r\n categoryHierarchy: this.props.config.showCategoryHierarchy && this._getCategoryHierarchy(),\r\n loyaltyBoltonsDialog: this.state.showDialog && this.getDialog()\r\n };\r\n\r\n return this.props.renderView(contentBlockviewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * To handle text change.\r\n * @param event - To handle text change event.\r\n * @name - HandleTextChange\r\n * @public\r\n * @returns - The Text value.\r\n */\r\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\r\n\r\n /**\r\n * To handle paragraph change.\r\n * @param event - To handle text change event.\r\n * @name - HandleParagraphChange\r\n * @public\r\n * @returns - The Paragraph value.\r\n */\r\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.paragraph = event.target.value);\r\n\r\n /**\r\n * Handle link text change.\r\n * @param linkIndex - The link index.\r\n * @returns - Void.\r\n */\r\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\r\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\r\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\r\n }\r\n };\r\n\r\n public handleAdditionalTextChange(index: number, event: Msdyn365.ContentEditableEvent): void {\r\n if (this.props.config.additionalContent) {\r\n this.props.config.additionalContent[Number(index)].heading = event.target.value;\r\n }\r\n }\r\n\r\n public handleAdditionalLinkTextChange(linkIndex: number, index: number, event: Msdyn365.ContentEditableEvent): void {\r\n const additionalContentObject =\r\n (this.props.config.additionalContent &&\r\n ArrayExtensions.hasElements(this.props.config.additionalContent) &&\r\n this.props.config.additionalContent[Number(index)]) ||\r\n {};\r\n if (additionalContentObject.links) {\r\n additionalContentObject.links[Number(linkIndex)].linkText = event.target.value;\r\n }\r\n }\r\n\r\n public handleAdditionalParagraphChange(index: number, event: Msdyn365.ContentEditableEvent): void {\r\n if (this.props.config.additionalContent) {\r\n this.props.config.additionalContent[Number(index)].subtext = 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?.destinationUrl) {\r\n return imageLink.destinationUrl;\r\n } else if (links && ArrayExtensions.hasElements(links) && 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 * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { IContentBlockViewProps } from './dobbies-content-block';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { ICoreContext, Image } from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { IDobbiesContentBlockProps } from './dobbies-content-block.props.autogenerated';\r\nimport { IDobbiesContentBlockData } from './dobbies-content-block.data';\r\nimport { ICategoryHierarchyViewProps } from '../../modules/dobbies-search-result-container/dobbies-search-result-container';\r\n\r\nconst ContentBlockView: React.FC> = props => {\r\n const {\r\n config: { isCategoryNameTitle, hideClubPlusBanner, clubPlusTierId },\r\n data: {\r\n modulesSharedState: { result: modulesSharedState }\r\n },\r\n contentBlockContainer,\r\n imageContainer,\r\n detailsContainer,\r\n text,\r\n links,\r\n image,\r\n contentBlockAnchorTag,\r\n imageLink,\r\n imageAriaLabel,\r\n context,\r\n title,\r\n loyaltyBoltonsDialog\r\n } = props;\r\n\r\n const {\r\n request: {\r\n urlTokens: { pageType }\r\n }\r\n } = context;\r\n\r\n /* VSI Cutomization - START - 11/11/20 */\r\n const [isMobile, SetIsMobile] = useState(false);\r\n const [categoryName, SetCategoryName] = useState();\r\n const [isClubPlus, SetIsClubPlus] = useState(undefined);\r\n const [isImageAvailable, setIsImageAvailable] = useState();\r\n\r\n const renderCategoryHierarchy = (categoryHeirarchyData: ICategoryHierarchyViewProps): JSX.Element | null => {\r\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = categoryHeirarchyData;\r\n if (categoryHierarchyList) {\r\n return (\r\n \r\n {categoryHierarchyList.map((category, index) => (\r\n \r\n {category}\r\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\r\n \r\n ))}\r\n \r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n useEffect(() => {\r\n const _isMobile = isMobileView(context);\r\n SetIsMobile(_isMobile);\r\n\r\n // Check if pageType is Category and state is not set yet, get its category name\r\n if (categoryName === undefined && pageType && pageType.toLowerCase() === 'category') {\r\n if (isCategoryNameTitle) {\r\n SetCategoryName(modulesSharedState?.categoryName);\r\n }\r\n if (isImageAvailable === undefined) {\r\n const isImage = props.config.image ? true : false;\r\n setIsImageAvailable(isImage);\r\n }\r\n }\r\n // Check if clubplus banner is set to hide on my account page for club plus members and state is not set yet i.e. undefined\r\n if (hideClubPlusBanner && isClubPlus === undefined) {\r\n modulesSharedState?.customerLoyaltyTierId === clubPlusTierId?.toLowerCase() ? SetIsClubPlus(true) : SetIsClubPlus(false);\r\n }\r\n });\r\n\r\n // Dont show banner for club plus members on my account or if tier id is not set yet\r\n if (hideClubPlusBanner && (isClubPlus === undefined || isClubPlus === true)) {\r\n return <>;\r\n }\r\n\r\n const mobileImage = _renderImageForMobile(props);\r\n\r\n const categoryHeading = title;\r\n\r\n // const doNoImageMagic = isImageAvailable === false && !isMobile;\r\n\r\n // const checkMobileImageAvailable = isImageAvailable === false && isMobile === true;\r\n // const detailsStyles = checkMobileImageAvailable ? {display : 'none'}: {}\r\n // const detailsStyles = doNoImageMagic ? {} : { display: 'none' };\r\n\r\n /* VSI Cutomization - END */\r\n const checkClassName = () => {\r\n if (isImageAvailable === true && isMobile === false) {\r\n return classnames(contentBlockContainer.className, '');\r\n } else if (isImageAvailable === true && isMobile === true) {\r\n return classnames(contentBlockContainer.className, '');\r\n } else if (isImageAvailable === false && isMobile === false) {\r\n return classnames(contentBlockContainer.className, '');\r\n } else if (isImageAvailable === false && isMobile === true) {\r\n return classnames(contentBlockContainer.className, '');\r\n } else {\r\n return classnames(contentBlockContainer.className, '');\r\n }\r\n };\r\n\r\n // const categoryHeirarchy = _getCategoryHierarchy();\r\n if (imageLink) {\r\n return (\r\n <>\r\n {props.categoryHierarchy ? (\r\n
\r\n {renderCategoryHierarchy(props.categoryHierarchy)}\r\n
\r\n ) : (\r\n <>\r\n )}\r\n \r\n \r\n {/* VSI Cutomization - START - 11/11/20 */}\r\n {isMobile === true && mobileImage ? mobileImage : image}\r\n {/* VSI Cutomization - END */}\r\n \r\n \r\n {categoryHeading}\r\n {text}\r\n {links}\r\n \r\n \r\n {loyaltyBoltonsDialog ? loyaltyBoltonsDialog : <>}\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n {props.categoryHierarchy ? (\r\n
\r\n {renderCategoryHierarchy(props.categoryHierarchy)}\r\n
\r\n ) : (\r\n <>\r\n )}\r\n \r\n {/* VSI Cutomization - START - 11/11/20 */}\r\n {isMobile === true && mobileImage ? mobileImage : image}\r\n {/* VSI Cutomization - END */}\r\n \r\n {categoryHeading}\r\n {text}\r\n {links}\r\n \r\n \r\n {loyaltyBoltonsDialog ? loyaltyBoltonsDialog : <>}\r\n \r\n );\r\n }\r\n};\r\n\r\n/* VSI Cutomization - START - 11/11/20 */\r\n\r\n/* Following function renders if mobile view has different image than that of desktop image.\r\nThis function is specifically written for sale banner on homepage but can be used anywhere user want to add separate image for mobile. */\r\nconst _renderImageForMobile = (props: IContentBlockViewProps & IDobbiesContentBlockProps<{}>): JSX.Element | undefined => {\r\n const {\r\n config: { imageForMobile },\r\n context: { request }\r\n } = props;\r\n if (imageForMobile === undefined) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n/* Following function checks device type and handles state accordingly if view changes, state will be updated and view will be shown according to device. */\r\nconst isMobileView = (context: ICoreContext): boolean => {\r\n if (typeof window !== undefined && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return true;\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return true;\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return false;\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return false;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/* VSI Cutomization - END */\r\n\r\nexport default ContentBlockView;\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\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\n\r\n/**\r\n * LoyaltyCardState Input Action\r\n */\r\n\r\nexport class ModulesStateShareInput implements IActionInput {\r\n // TODO: Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => `modulesSharedState`;\r\n public getCacheObjectType = () => 'modulesSharedState';\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\n// TODO: Create a data model here or import one to capture the response of the action\r\nexport interface IModulesSharedState {\r\n customerLoyaltyTierId: string | undefined;\r\n categoryName: string | undefined;\r\n}\r\n\r\n/**\r\n * TODO: Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new ModulesStateShareInput();\r\n};\r\n/**\r\n * TODO: Use this function to call your action and process the results as needed\r\n */\r\nexport async function sampleStateAction(input: ModulesStateShareInput, ctx: IActionContext): Promise {\r\n return { customerLoyaltyTierId: undefined, categoryName: undefined };\r\n}\r\n\r\n/**\r\n * SampleState - create action\r\n */\r\nexport default createObservableDataAction({\r\n action: >sampleStateAction,\r\n input: createInput\r\n});\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-content-block'] = {\n c: () => require('partner/modules/dobbies-content-block/dobbies-content-block.tsx'),\n $type: 'contentModule',\n da: [{name:'categoryHierarchy', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy', runOn: 0},{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},{name:'modulesSharedState', path:'themes/dobbies/actions/modules-state-share-action', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'dobbies-content-block',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/dobbies-content-block'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\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 const sanitizedActionPath = 'themes/dobbies/actions/modules-state-share-action';\n let dataAction = require('partner/themes/dobbies/actions/modules-state-share-action');\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-content-block|dobbies-content-block'] = {\n c: () => require('partner/modules/dobbies-content-block/dobbies-content-block.view.tsx'),\n cn: '__local__-__local__-dobbies-content-block'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["ShowCookieManageModalInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","async","updateCartStateAction","input","ctx","showCookieManageModal","undefined","createObservableDataAction","action","inputData","assembleNode","item","props","itemIndex","_item$links","heading","renderHeading","additionalContentHeading","requestContext","React","Msdyn365","text","tag","className","editProps","onEdit","event","handleAdditionalTextChange","subtext","renderParagraph","additionalContentParagraphText","links","map","ctaLink","index","renderLinks","linkIndex","editableLink","ariaLabel","linkText","linkUrl","destinationUrl","openInNewTab","role","key","link","onTextChange","handleAdditionalLinkTextChange","additionalContentItemContainer","additionalContentItemLinks","contentBlockAdditionalContent","additionalContent","reactNodes","push","additionalContentNode","additionalContentItems","ContentCardLinks","_mapEditableLinks","linkdata","length","editableLinks","forEach","payLoad","getPayloadObject","this","telemetryContent","contentAction","etext","attributes","getTelemetryAttributes","btnClass","additionalProperties","onClick","isShowCookiesManageModal","_this$props$context","context","actionContext","update","shouldShowLoyaltyBoltonDialog","_this$props$data","_boltonAttr$Attribute","isAuthenticated","request","user","splittedUrl","window","location","href","split","urlPath","cookies","set","boltonAttr","data","customerInformation","result","Attributes","find","attr","_attr$Name","Name","toLowerCase","AttributeValue","StringValue","showLoyaltyBoltonDialog","msg","alreadyPurchasedBoltonsMsg","preventDefault","currentUserTierId","clubPlusPurchasedMsg","cookie","get","value","onTelemetryClick","render","actionableRegion","imagePlacement","HeadingTag","ContentBlock","super","getTelemetryObject","telemetryPageName","friendlyName","telemetry","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","Link","Url","categoryHierarchySeparator","Separator","separator","showDialogWithMsg","setState","dialogMsg","showDialog","onDialogClose","getDialog","_this$state$dialogMsg","headerMSG","boltonState","state","includes","Modal","isOpen","toggle","ModalHeader","ModalBody","RichTextComponent","getTier","_props$data$loyaltyCa","_props$data$loyaltyCa2","loyaltyGroup","loyaltyCard","LoyaltyGroups","highestActiveLoyaltyCardTier","HighestActiveLoyaltyCardTier","loyaltyCardTiers","LoyaltyCardTiers","_","loyaltyCardTier","entries","RecordId","handleTextChange","config","target","handleParagraphChange","paragraph","handleLinkTextChange","Number","_heading$tag","_this$props$context$r","_this$getTier","_this$props$config$im","image","imageAriaLabel","contentBlockTitle","imageProps","gridSettings","imageSettings","contentBlockLinks","ArrayExtensions","hasElements","LinksComponent","Object","assign","showManageCookiesModalContentBlock","TierId","msdyn365__moduleLayout","contentBlockText","contentBlockImage","preserveImageSpace","moduleType","typeName","imagePropertyName","moduleId","id","layout","shouldSkipToMainImage","error","contentBlockviewProps","_objectSpread","title","moduleClass","contentBlockContainer","moduleProps","classnames","imageContainer","detailsContainer","contentBlockAnchorTag","imageLink","_getImageLink","handleAdditionalParagraphChange","handleAdditionalText","handleAdditionalParagraph","showCategoryHierarchy","loyaltyBoltonsDialog","renderView","additionalContentObject","region","imageAndLinks","_renderImageForMobile","imageForMobile","Image","loadFailureBehavior","isMobileView","innerWidth","xs","w","sm","md","lg","isCategoryNameTitle","hideClubPlusBanner","clubPlusTierId","modulesSharedState","urlTokens","pageType","isMobile","SetIsMobile","useState","categoryName","SetCategoryName","isClubPlus","SetIsClubPlus","isImageAvailable","setIsImageAvailable","renderCategoryHierarchy","categoryHeirarchyData","Node","category","useEffect","_isMobile","isImage","customerLoyaltyTierId","mobileImage","categoryHeading","checkClassName","Module","ModulesStateShareInput","sampleStateAction","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}