{"version":3,"sources":["webpack:///./src/modules/citta-user-subscribed/citta-user-subscribed.view.tsx?c06b","webpack:///./src/modules/citta-unsubscribe/citta-unsubscribe.view.tsx?06b7","webpack:///./src/modules/citta-user-subscribed/citta-user-subscribed.tsx?5c91","webpack:///./src/modules/citta-account-subscription/citta-account-subscription.tsx?2618","webpack:///./src/modules/citta-homepage-banner/components/additional-content.tsx?50d4","webpack:///./src/modules/citta-homepage-banner/components/links.tsx?cafc","webpack:///./src/modules/citta-homepage-banner/citta-homepage-banner.props.autogenerated.ts?e3c5","webpack:///./src/modules/citta-homepage-banner/citta-homepage-banner.tsx?0f9b","webpack:///./src/modules/citta-homepage-banner/citta-homepage-banner.view.tsx?d5e3","webpack:///./src/modules/citta-account-subscription/citta-account-subscription.view.tsx?3b5f","webpack:///./src/data-actions/subscribe-email/subscribe-email-data.ts?2b0a","webpack:///./src/modules/citta-unsubscribe/citta-unsubscribe.tsx?0c73"],"names":["props","unsubscribeContainer","alertMessage","unsubscribeHeading","unsubscribeInput","unsubscribeButton","React","Module","Object","assign","CittaUserSubscribed","constructor","super","this","cittaTelemetry","CittaTelemetry","context","app","config","cittaInstrumentationKey","url","decodeURI","window","location","search","urlParams","URLSearchParams","delete","_logMessage","toString","isNewUser","request","user","newUserKey","isSubscribedToNewsletter","subscriptionKey","userEmail","emailAddress","subscribeEmailAction","SubscribeEmailDataActionInput","actionContext","e","telemetry","error","render","moduleprops","_objectSpread","renderView","message","Id","TotalItems","data","activeCart","result","trace","CittaAccountSubscription","_this$props$data$acco","_handleSubscribeClick","async","_handleButtonClick","_handleUnsubscribeClick","state","setState","isProcessing","response","_setSubscriptionState","subscribe","Result","Message","isSuccess","_isSuccess","alertClass","bind","email","accountInformation","Email","subscribed","_getSubscriptionState","hasDetails","undefined","isSubscribed","hasAccountDetails","componentDidUpdate","prevProps","_this$props$data$acco2","hasDetails1","CittaAccountSubscriptionViewProps","AccountSubscriptionWrapper","moduleProps","className","classnames","AccountSubscriptionAttribute","AccountSubscriptionProcessing","AccountSubscriptionUnSubscribe","subscribeResponse","_getSubscribeResponse","processingMessage","_renderProcessing","subUnsubButtton","_renderButtons","subscribeAlert","_renderSubscribeAlert","subscribeNote","_renderSubscribeNote","accountInfo","attributes","Attributes","length","forEach","attr","_attr$AttributeValue","Name","resources","optInAttributeName","AttributeValue","BooleanValue","subscribtionText","subscribtionStatus","noSubscribtionStatus","subscribtionMailText","missingInfoMessage","emailHeadingText","processingLabel","Button","color","onClick","disabled","unsubscribeButtonLabel","subscribeButtonLabel","pleaseNoteMessage","assembleNode","item","itemIndex","_item$links","heading","renderHeading","additionalContentHeading","requestContext","Msdyn365","text","tag","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","editableLinks","payLoad","getPayloadObject","telemetryContent","contentAction","etext","getTelemetryAttributes","btnClass","additionalProperties","onTelemetryClick","actionableRegion","textplacement","textalignmentmobile","textalignment","imageplacement","texttheme","textthememobile","HeadingTag","ContentBlock","getTelemetryObject","telemetryPageName","friendlyName","handleTextChange","target","value","handleParagraphChange","paragraph","handleLinkTextChange","Number","_updateIsMobile","msdyn365Commerce","isBrowser","isMobile","innerWidth","componentDidMount","addEventListener","componentWillUnmount","removeEventListener","_heading$tag","_this$props$context$r","_this$props$config$im","image","imageAriaLabel","mobileImage","fillbutton","additionalClassNames","contentBlockTitle","imageProps","gridSettings","imageSettings","contentBlockLinks","ArrayExtensions","hasElements","LinksComponent","msdyn365__moduleLayout","contentBlockText","contentBlockImage","preserveImageSpace","moduleType","typeName","imagePropertyName","moduleId","id","layout","shouldSkipToMainImage","_this$props$config$mo","contentBlockviewProps","title","moduleClass","contentBlockContainer","imageContainer","detailsContainer","contentBlockAnchorTag","imageLink","_getImageLink","handleAdditionalParagraphChange","handleAdditionalText","handleAdditionalParagraph","additionalContentObject","region","imageAndLinks","__decorate","observable","observer","renderAdditionalContent","_additionalContent$ad","Node","ContentBlockView","href","CittaAccountSubscriptionView","getCacheKey","getCacheObjectType","dataCacheType","input","ctx","dXC_SubscribeEmailAsync","callerContext","console","log","Array","isArray","createObservableDataAction","action","args","CittaUnsubscribe","_handleInputChange","inputEmail","_callUnsubscribeAPI","viewProps","_renderAlertMessage","_renderUnsubscribeHeading","_renderUnsubscribeInput","_renderUnsubscribeButton","Heading","headingTag","displayAlert","onChange","type","placeholder","buttonText"],"mappings":"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","file":"static/js/29.1bbb0b17efdfa21d0f36.chunk.js","sourcesContent":["/*!\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 { ICittaUserSubscribedViewProps } from './citta-user-subscribed';\r\n\r\nexport default (props: ICittaUserSubscribedViewProps) => {\r\n return (null);\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 { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICittaUnsubscribeViewProps } from './citta-unsubscribe';\r\n\r\nexport default (props: ICittaUnsubscribeViewProps) => {\r\n const { unsubscribeContainer, alertMessage, unsubscribeHeading, unsubscribeInput, unsubscribeButton } = props;\r\n return (\r\n \r\n {alertMessage}\r\n {unsubscribeHeading}\r\n {unsubscribeInput}\r\n {unsubscribeButton}\r\n \r\n );\r\n};","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\nimport CittaTelemetry from '../../common/telemetry/citta-telemetry';\r\nimport { subscribeEmailAction, SubscribeEmailDataActionInput } from '../../data-actions/subscribe-email/subscribe-email-data';\r\nimport { ICittaUserSubscribedData } from './citta-user-subscribed.data';\r\nimport { ICittaUserSubscribedProps } from './citta-user-subscribed.props.autogenerated';\r\n\r\nexport interface ICittaUserSubscribedViewProps extends ICittaUserSubscribedProps {}\r\n\r\n/**\r\n *\r\n * CittaUserSubscribed component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass CittaUserSubscribed extends React.PureComponent> {\r\n private cittaTelemetry: CittaTelemetry;\r\n\r\n constructor(props: ICittaUserSubscribedProps) {\r\n super(props);\r\n this.cittaTelemetry = new CittaTelemetry(this.props.context.app.config.cittaInstrumentationKey);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const url = decodeURI(window.location.search);\r\n const urlParams = new URLSearchParams(url);\r\n urlParams.delete('token'); // laybuy\r\n urlParams.delete('orderToken'); // afterpay\r\n urlParams.delete('sessionid'); // payment express\r\n\r\n this._logMessage(`Citta user subscribed loaded ${urlParams.toString()}`);\r\n\r\n /* tslint:disable:no-string-literal */\r\n const isNewUser = (this.props.context.request && this.props.context.request.user && this.props.context.request.user['userClaims'] &&\r\n this.props.context.request.user['userClaims'][this.props.config.newUserKey || 'IsNewUser'] &&\r\n this.props.context.request.user['userClaims'][this.props.config.newUserKey || 'IsNewUser'] === 'true') ? true : false;\r\n const isSubscribedToNewsletter = (this.props.context.request && this.props.context.request.user && this.props.context.request.user['userClaims'] &&\r\n this.props.context.request.user['userClaims'][this.props.config.subscriptionKey || 'SubscribeToNewsletter'] &&\r\n this.props.context.request.user['userClaims'][this.props.config.subscriptionKey || 'SubscribeToNewsletter'] === 'true') ? true : false;\r\n const userEmail = this.props.context.request.user && this.props.context.request.user.emailAddress || '';\r\n\r\n if (isNewUser && isSubscribedToNewsletter) {\r\n try {\r\n await subscribeEmailAction(new SubscribeEmailDataActionInput(userEmail, isSubscribedToNewsletter), this.props.context.actionContext);\r\n } catch(e) {\r\n this.props.telemetry.error(`Something went wrong ------${e}`);\r\n }\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const moduleprops = {\r\n ...this.props\r\n };\r\n return this.props.renderView(moduleprops) as React.ReactElement;\r\n }\r\n\r\n private _logMessage(message: string): void {\r\n const {\r\n Id,\r\n TotalItems\r\n } = this.props.data.activeCart.result!;\r\n\r\n this.cittaTelemetry.trace(`CartId:${Id} TotalItem:${TotalItems} - ${message}`);\r\n }\r\n}\r\n\r\nexport default CittaUserSubscribed;\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\nimport * as React from 'react';\r\n\r\nimport { Button, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\n\r\nimport { ICittaAccountSubscriptionData } from './citta-account-subscription.data';\r\nimport { ICittaAccountSubscriptionProps } from './citta-account-subscription.props.autogenerated';\r\n\r\nimport { IDXC_SubscribeNewsletterRealtimeResponse } from '../../data-actions/generated/DataServiceEntities.g';\r\nimport { subscribeEmailAction, SubscribeEmailDataActionInput } from './../../data-actions/subscribe-email/subscribe-email-data';\r\n\r\nexport interface ICittaAccountSubscriptionViewProps extends ICittaAccountSubscriptionProps {\r\n hasAccountDetails: boolean;\r\n isProcessing: boolean;\r\n subUnsubButtton: React.ReactNode;\r\n subscribeNote: React.ReactNode;\r\n subscribeAlert: React.ReactNode;\r\n AccountSubscriptionWrapper: IModuleProps;\r\n subscribeResponse: React.ReactNode;\r\n AccountSubscriptionAttribute: INodeProps;\r\n AccountSubscriptionProcessing: INodeProps;\r\n AccountSubscriptionUnSubscribe: INodeProps;\r\n processingMessage: React.ReactNode;\r\n}\r\n\r\ninterface ICittaAccountSubscriptionState {\r\n alertMessage: string;\r\n alertClass: string;\r\n userEmail: string;\r\n isSubscribed: boolean;\r\n hasAccountDetails: boolean;\r\n isProcessing: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * CittaAccountSubscription component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass CittaAccountSubscription extends React.PureComponent, ICittaAccountSubscriptionState> {\r\n constructor(props: ICittaAccountSubscriptionViewProps) {\r\n super(props);\r\n this._handleSubscribeClick = this._handleSubscribeClick.bind(this);\r\n this._handleUnsubscribeClick = this._handleUnsubscribeClick.bind(this);\r\n const email = this.props.data && this.props.data.accountInformation && this.props.data.accountInformation.result?.Email;\r\n const subscribed = this._getSubscriptionState();\r\n const hasDetails = email !== undefined && subscribed !== undefined;\r\n\r\n this.state = {\r\n alertMessage: '',\r\n alertClass: '',\r\n userEmail: email || '',\r\n isSubscribed: subscribed || false,\r\n hasAccountDetails: hasDetails,\r\n isProcessing: false\r\n };\r\n }\r\n\r\n public componentDidUpdate(prevProps: ICittaAccountSubscriptionViewProps): void {\r\n if (this.props.data !== prevProps.data) {\r\n const { result } = this.props.data.accountInformation;\r\n if (result) {\r\n const email: string = this.props.data.accountInformation.result?.Email || '';\r\n const subscribed: boolean = this._getSubscriptionState() || false;\r\n const hasDetails1 = email !== undefined && subscribed !== undefined;\r\n this.setState({ userEmail: email, isSubscribed: subscribed, hasAccountDetails: hasDetails1 });\r\n }\r\n }\r\n\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { hasAccountDetails, isProcessing } = this.state;\r\n const { config } = this.props;\r\n const CittaAccountSubscriptionViewProps = {\r\n ...this.props,\r\n AccountSubscriptionWrapper: {\r\n moduleProps: this.props,\r\n className: classnames('citta-account-subscription', config.className)\r\n },\r\n AccountSubscriptionAttribute: {\r\n className: 'citta-account-has-account'\r\n },\r\n AccountSubscriptionProcessing: {\r\n className: 'citta-account-subscription-processing'\r\n },\r\n AccountSubscriptionUnSubscribe: {\r\n className: 'citta-account-subscription-unsubscription'\r\n },\r\n subscribeResponse: this._getSubscribeResponse(),\r\n hasAccountDetails: hasAccountDetails,\r\n isProcessing: isProcessing,\r\n processingMessage: this._renderProcessing(),\r\n subUnsubButtton: this._renderButtons(),\r\n subscribeAlert: this._renderSubscribeAlert(),\r\n subscribeNote: this._renderSubscribeNote()\r\n };\r\n return this.props.renderView(CittaAccountSubscriptionViewProps) as React.ReactElement;\r\n }\r\n private _getSubscriptionState(): boolean | undefined {\r\n const accountInfo = this.props.data.accountInformation.result;\r\n if (accountInfo) {\r\n const attributes = accountInfo.Attributes;\r\n if (attributes && attributes.length > 0) {\r\n let isSubscribed;\r\n attributes.forEach(attr => {\r\n if (attr.Name === this.props.resources.optInAttributeName) {\r\n isSubscribed = attr.AttributeValue?.BooleanValue;\r\n }\r\n });\r\n return isSubscribed;\r\n }\r\n }\r\n return;\r\n }\r\n private _getSubscribeResponse(): React.ReactNode {\r\n const { isSubscribed, hasAccountDetails } = this.state;\r\n const { resources } = this.props;\r\n const message = hasAccountDetails\r\n ?

{resources.subscribtionText} {isSubscribed ? resources.subscribtionStatus : resources.noSubscribtionStatus}{resources.subscribtionMailText}

\r\n :

{resources.missingInfoMessage}

;\r\n\r\n return (\r\n
\r\n

{resources.emailHeadingText}

\r\n {message}\r\n
\r\n );\r\n }\r\n\r\n private _renderProcessing(): React.ReactNode {\r\n const { resources } = this.props;\r\n return (\r\n
\r\n

{resources.processingLabel}

\r\n
\r\n );\r\n }\r\n\r\n // Render subscribe/unsubscribe button\r\n private _renderButtons(): React.ReactNode {\r\n const { resources } = this.props;\r\n const { isSubscribed, isProcessing } = this.state;\r\n if (isSubscribed) {\r\n return (\r\n {isProcessing ? resources.processingLabel : resources.unsubscribeButtonLabel}\r\n \r\n );\r\n } else {\r\n return (\r\n {isProcessing ? resources.processingLabel : resources.subscribeButtonLabel}\r\n \r\n );\r\n }\r\n }\r\n\r\n // Set-subscription alert message\r\n private _renderSubscribeAlert(): React.ReactNode {\r\n const { alertMessage, alertClass } = this.state;\r\n const displayAlert: boolean = (alertMessage ? alertMessage !== '' : false);\r\n if (displayAlert) {\r\n return (\r\n
\r\n

{alertMessage}

\r\n
\r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n private _renderSubscribeNote(): React.ReactNode {\r\n const { resources } = this.props;\r\n return (\r\n
\r\n

{resources.pleaseNoteMessage}

\r\n
\r\n );\r\n }\r\n\r\n private _handleSubscribeClick = async () => {\r\n await this._handleButtonClick(true);\r\n }\r\n\r\n private _handleUnsubscribeClick = async () => {\r\n await this._handleButtonClick(false);\r\n }\r\n\r\n private _handleButtonClick = async (subscribe: boolean) => {\r\n const { userEmail } = this.state;\r\n this.setState({\r\n isProcessing: true\r\n });\r\n // Update subscription state for user\r\n const response = await this._setSubscriptionState(userEmail, subscribe);\r\n if (response.Result && response.Message) {\r\n const isSuccess = this._isSuccess(subscribe, response.Message);\r\n this.setState({\r\n alertMessage: `${response.Message}`,\r\n alertClass: isSuccess ? 'alert-green' : 'alert-yellow',\r\n isProcessing: false\r\n });\r\n } else {\r\n this.setState({\r\n alertMessage: 'Error processing request',\r\n alertClass: 'alert-yellow',\r\n isProcessing: false\r\n });\r\n }\r\n }\r\n\r\n private async _setSubscriptionState(email: string, subscribed: boolean): Promise {\r\n try {\r\n return await subscribeEmailAction(new SubscribeEmailDataActionInput(email, subscribed), this.props.context.actionContext);\r\n } catch (e) {\r\n throw this.props.telemetry.error(`Something went wrong ------${e}`);\r\n }\r\n }\r\n\r\n private _isSuccess(subscribe: boolean, message: string): boolean {\r\n if (subscribe) {\r\n return message === 'Subscribed successfully.';\r\n } else {\r\n return message === 'Unsubscribed successfully.';\r\n }\r\n }\r\n}\r\n\r\nexport default CittaAccountSubscription;\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 '../citta-homepage-banner.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\n\r\nimport { ILinksData } from '../citta-homepage-banner.props.autogenerated';\r\n\r\nexport interface IContentCardLinks {\r\n links: ILinksData[];\r\n requestContext: Msdyn365.IRequestContext;\r\n telemetryContent: ITelemetryContent;\r\n role?: 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 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: 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 * ICittaHomepageBanner 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 textplacement {\r\n left = 'left',\r\n right = 'right',\r\n center = 'center'\r\n}\r\n\r\nexport const enum textalignmentmobile {\r\n top = 'top',\r\n bottom = 'bottom',\r\n center = 'center'\r\n}\r\n\r\nexport const enum textalignment {\r\n top = 'top',\r\n bottom = 'bottom',\r\n center = 'center'\r\n}\r\n\r\nexport const enum imageplacement {\r\n top = 'top',\r\n bottom = 'bottom',\r\n right = 'right',\r\n left = 'left'\r\n}\r\n\r\nexport const enum texttheme {\r\n dark = 'dark',\r\n light = 'light'\r\n}\r\n\r\nexport const enum textthememobile {\r\n dark = 'dark',\r\n light = 'light'\r\n}\r\n\r\nexport interface ICittaHomepageBannerConfig extends Msdyn365.IModuleConfig {\r\n heading?: IHeadingData;\r\n paragraph?: Msdyn365.RichText;\r\n image?: Msdyn365.IImageData;\r\n mobileImage?: 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 textplacement?: textplacement;\r\n textalignmentmobile?: textalignmentmobile;\r\n textalignment?: textalignment;\r\n imageplacement?: imageplacement;\r\n texttheme?: texttheme;\r\n textthememobile?: textthememobile;\r\n fillbutton?: 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 ICittaHomepageBannerProps extends Msdyn365.IModule {\r\n config: ICittaHomepageBannerConfig;\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 msdyn365Commerce, * 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 { observer } from 'mobx-react';\r\nimport { observable } from 'mobx';\r\n\r\nimport { contentBlockAdditionalContent, IContentBlockAdditionalContentViewProps } from './components/additional-content';\r\nimport LinksComponent from './components/links';\r\nimport { actionableRegion as region, ICittaHomepageBannerConfig, ICittaHomepageBannerProps } from './citta-homepage-banner.props.autogenerated';\r\n\r\nexport interface IContentBlockViewProps extends ICittaHomepageBannerProps<{}> {\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}\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface IContentBlockStates {\r\n \r\n isMobile: boolean;\r\n }\r\n/**\r\n * Site-builder configuration for the module.\r\n */\r\nexport interface IContentBlockFullConfig extends ICittaHomepageBannerConfig {\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\n/**\r\n * ContentCard component.\r\n * @extends {React.Component}\r\n */\r\n@observer\r\n\r\nexport class ContentBlock extends React.Component, IContentBlockStates> {\r\n @observable\r\n // private viewport: GridSize;\r\n private 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 //@ts-ignore\r\n constructor(props) {\r\n super(props);\r\n this.state = {isMobile: false};\r\n this._updateIsMobile = this._updateIsMobile.bind(this);\r\n }\r\n public componentDidMount(): void {\r\n this._updateIsMobile();\r\n window.addEventListener('resize', this._updateIsMobile);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('resize', this._updateIsMobile);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { heading, paragraph, image, links, className, imageAriaLabel, textplacement, textalignment, texttheme, mobileImage, textthememobile, fillbutton, textalignmentmobile } = this.props.config;\r\n\r\n let additionalClassNames = '';\r\n if(textplacement) {\r\n additionalClassNames = ` textplacement__${textplacement}`;\r\n }\r\n if(texttheme) {\r\n additionalClassNames += ` texttheme__${texttheme}`;\r\n }\r\n if(textthememobile) {\r\n additionalClassNames += ` textthememobile__${textthememobile}`;\r\n }\r\n if (textalignment) {\r\n additionalClassNames += ` textalignment__${textalignment}`;\r\n }\r\n if (textalignmentmobile) {\r\n additionalClassNames += ` textalignmentmobile__${textalignmentmobile}`;\r\n }\r\n\r\n if(fillbutton) {\r\n additionalClassNames += ' fillbutton';\r\n }\r\n\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 const contentBlockText = paragraph && (\r\n \r\n ); \r\n \r\n let contentBlockImage = (\r\n \r\n );\r\n\r\n if (this.state.isMobile) {\r\n contentBlockImage = \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 citta-homepage-banner ${additionalClassNames}`, 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 };\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\n private _updateIsMobile = () => {\r\n if (msdyn365Commerce.isBrowser) {\r\n this.setState({\r\n isMobile: window.innerWidth < 768\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default ContentBlock;\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IContentBlockAdditionalContentItemViewProps, IContentBlockAdditionalContentViewProps } from './components/additional-content';\r\nimport { IContentBlockViewProps } from './citta-homepage-banner';\r\n\r\n/**\r\n * Render Additional Content.\r\n * @param additionalContent - Additional content view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderAdditionalContent = (additionalContent: IContentBlockAdditionalContentViewProps) => {\r\n return (\r\n \r\n {additionalContent.additionalContentItems?.map((item: IContentBlockAdditionalContentItemViewProps) => {\r\n return (\r\n <>\r\n {item.heading}\r\n \r\n {item.text}\r\n {item.links}\r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst ContentBlockView: React.FC = props => {\r\n const {\r\n contentBlockContainer,\r\n imageContainer,\r\n detailsContainer,\r\n title,\r\n text,\r\n links,\r\n image,\r\n contentBlockAnchorTag,\r\n imageLink,\r\n imageAriaLabel,\r\n additionalContent\r\n } = props;\r\n\r\n if (imageLink) {\r\n return (\r\n \r\n \r\n {image}\r\n \r\n {title}\r\n {text}\r\n {links}\r\n {additionalContent && renderAdditionalContent(additionalContent)}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return (\r\n \r\n {image}\r\n \r\n {title}\r\n {text}\r\n {links}\r\n {additionalContent && renderAdditionalContent(additionalContent)}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ContentBlockView;\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\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICittaAccountSubscriptionViewProps } from './citta-account-subscription';\r\n\r\nconst CittaAccountSubscriptionView: React.FC = props => {\r\n const {\r\n AccountSubscriptionWrapper,\r\n AccountSubscriptionAttribute,\r\n AccountSubscriptionProcessing,\r\n AccountSubscriptionUnSubscribe,\r\n subscribeResponse,\r\n subUnsubButtton,\r\n isProcessing,\r\n hasAccountDetails,\r\n processingMessage,\r\n subscribeAlert,\r\n subscribeNote } = props;\r\n return (\r\n \r\n {subscribeResponse}\r\n {hasAccountDetails &&\r\n \r\n {isProcessing ?\r\n \r\n {processingMessage}\r\n :\r\n \r\n {subUnsubButtton}\r\n {subscribeAlert}\r\n {subscribeNote}\r\n }\r\n \r\n }\r\n \r\n );\r\n};\r\n\r\nexport default CittaAccountSubscriptionView;\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\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\r\nimport { dXC_SubscribeEmailAsync } from '../generated/DataActionExtension.g';\r\nimport { IDXC_SubscribeNewsletterRealtimeResponse } from '../generated/DataServiceEntities.g';\r\n\r\n/**\r\n * SubmitSubscribeFormDataActionInput Input Action\r\n */\r\n\r\nexport class SubscribeEmailDataActionInput implements IActionInput {\r\n public emailAddress: string;\r\n public subscribe: boolean;\r\n\r\n // Construct the input needed to run the action\r\n constructor(emailAddress: string, subscribe: boolean) {\r\n this.emailAddress = emailAddress;\r\n this.subscribe = subscribe;\r\n }\r\n\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 = () => 'SubscribeEmail2020';\r\n public getCacheObjectType = () => 'SubscribeEmail';\r\n public dataCacheType = (): CacheType => 'request';\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 = (args: SubscribeEmailDataActionInput): IActionInput => {\r\n return args;\r\n};\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 subscribeEmailAction(\r\n input: SubscribeEmailDataActionInput,\r\n ctx: IActionContext\r\n): Promise {\r\n // Input only needs token\r\n let result: IDXC_SubscribeNewsletterRealtimeResponse = {};\r\n try {\r\n result = await dXC_SubscribeEmailAsync({ callerContext: ctx }, input.emailAddress, input.subscribe);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n return Array.isArray(result) ? result[0] : result;\r\n}\r\n\r\nexport const ISubscribeEmailDataActionAction = createObservableDataAction({\r\n action: >subscribeEmailAction,\r\n input: createInput\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Button, Heading, IModuleProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IDXC_SubscribeNewsletterRealtimeResponse } from '../../data-actions/generated/DataServiceEntities.g';\r\nimport { subscribeEmailAction, SubscribeEmailDataActionInput } from './../../data-actions/subscribe-email/subscribe-email-data';\r\nimport { ICittaUnsubscribeData } from './citta-unsubscribe.data';\r\nimport { ICittaUnsubscribeProps } from './citta-unsubscribe.props.autogenerated';\r\n\r\nexport interface ICittaUnsubscribeViewProps extends ICittaUnsubscribeProps {\r\n unsubscribeContainer: IModuleProps;\r\n alertMessage?: React.ReactNode;\r\n unsubscribeHeading?: React.ReactNode;\r\n unsubscribeInput?: React.ReactNode;\r\n unsubscribeButton?: React.ReactNode ;\r\n}\r\n\r\ninterface ICittaUnsubscribeState {\r\n alertMessage: string;\r\n alertClass: string;\r\n inputEmail: string;\r\n}\r\n\r\n/**\r\n *\r\n * CittaUnsubscribe component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass CittaUnsubscribe extends React.PureComponent, ICittaUnsubscribeState> {\r\n constructor(props: ICittaUnsubscribeViewProps) {\r\n super(props);\r\n this._handleButtonClick = this._handleButtonClick.bind(this);\r\n this._handleInputChange = this._handleInputChange.bind(this);\r\n\r\n this.state = {\r\n alertMessage: '',\r\n alertClass: '',\r\n inputEmail: ''\r\n };\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const viewProps: ICittaUnsubscribeViewProps = {\r\n ...(this.props as ICittaUnsubscribeProps),\r\n unsubscribeContainer: {\r\n moduleProps: this.props,\r\n className: 'container citta-unsubscribe'\r\n },\r\n alertMessage: this._renderAlertMessage(),\r\n unsubscribeHeading: this._renderUnsubscribeHeading(),\r\n unsubscribeInput: this._renderUnsubscribeInput(),\r\n unsubscribeButton: this._renderUnsubscribeButton()\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n\r\n // tslint:disable-next-line: no-any\r\n private _handleInputChange = (event: any) => {\r\n this.setState({\r\n inputEmail: event.target.value\r\n });\r\n }\r\n\r\n private _handleButtonClick = async () => {\r\n const response = await this._callUnsubscribeAPI(this.state.inputEmail);\r\n if (response.Result && response.Message) {\r\n this.setState({\r\n alertMessage: `${response.Message}`,\r\n alertClass: response.Message === 'Unsubscribed successfully.' ? 'alert-green' : 'alert-yellow'\r\n });\r\n }\r\n }\r\n\r\n private async _callUnsubscribeAPI(email: string): Promise {\r\n try {\r\n return await subscribeEmailAction(new SubscribeEmailDataActionInput(email, false), this.props.context.actionContext);\r\n } catch (e) {\r\n throw this.props.telemetry.error(`Something went wrong ------${e}`);\r\n }\r\n }\r\n\r\n private _renderUnsubscribeHeading(): React.ReactNode {\r\n const { unsubscribeHeading } = this.props.config;\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _renderAlertMessage(): React.ReactNode {\r\n const { alertMessage, alertClass } = this.state;\r\n const displayAlert: boolean = (alertMessage ? alertMessage !== '' : false);\r\n return (\r\n <>\r\n {displayAlert ?
\r\n

{alertMessage}

\r\n
: null}\r\n \r\n );\r\n }\r\n\r\n private _renderUnsubscribeInput(): React.ReactNode {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private _renderUnsubscribeButton(): React.ReactNode {\r\n const { resources } = this.props;\r\n return (\r\n {resources.buttonText}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default CittaUnsubscribe;"],"sourceRoot":""}