{"version":3,"file":"static/js/1673568b25b4d2566b3e.bundle.js","mappings":"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","sources":["webpack://Dobbies.Commerce/./src/dotdigital-extension/DataServiceEntities.g.ts?cecd","webpack://Dobbies.Commerce/./src/dotdigital-extension/DataActionExtension.g.ts?36a7","webpack://Dobbies.Commerce/./src/modules/dobbies-footer-newsletter/components/dobbies-modal.tsx?9e69","webpack://Dobbies.Commerce/./src/modules/dobbies-footer-newsletter/dobbies-footer-newsletter.tsx?4e45","webpack://Dobbies.Commerce/./src/modules/dobbies-footer-newsletter/dobbies-footer-newsletter.view.tsx?110a","webpack://Dobbies.Commerce/./lib/dobbies-footer-newsletter/module-registration.js?c557","webpack://Dobbies.Commerce/external var \"React\"?0d3b","webpack://Dobbies.Commerce/external var \"ReactDOM\"?853b"],"sourcesContent":["// tslint:disable\r\n/* eslint-disable security/detect-object-injection */\r\nimport * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\nimport * as Entities from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\n/**\r\n * VSIRestAPIHandler entity interface.\r\n */\r\nexport interface IVSIRestAPIHandler {\r\n Id: number;\r\n result?: string;\r\n ExtensionProperties?: Entities.CommerceProperty[];\r\n}\r\n\r\n/**\r\n * VSIRestAPIHandler entity class.\r\n */\r\nexport class VSIRestAPIHandlerExtensionClass implements IVSIRestAPIHandler {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Id: number;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public result: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ExtensionProperties: Entities.CommerceProperty[];\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Id = odataObject.Id;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.result = odataObject.result;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties = undefined;\r\n if (odataObject.ExtensionProperties) {\r\n this.ExtensionProperties = [];\r\n for (var i = 0; i < odataObject.ExtensionProperties.length; i++) {\r\n if (odataObject.ExtensionProperties[i]) {\r\n if (odataObject.ExtensionProperties[i]['@odata.type']) {\r\n var className: string = odataObject.ExtensionProperties[i]['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat('Class');\r\n if (EntityClasses[className]) {\r\n this.ExtensionProperties[i] = new EntityClasses[className](odataObject.ExtensionProperties[i]);\r\n }\r\n } else {\r\n this.ExtensionProperties[i] = new EntityClasses.CommercePropertyClass(odataObject.ExtensionProperties[i]);\r\n }\r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties[i] = undefined;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n * THIS FILE IS AN AUTOGENERATED TYPESCRIPT PROXY EXTENSION.\r\n * TO USE THIS FILE, IT MUST BE ADDED TO A D365COMMERCE APPLICATION\r\n */\r\n// tslint:disable\r\nimport { AsyncResult, callActionOrExecute, DataServiceQuery, IContext, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\r\n// @ts-ignore\r\nimport * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\nimport * as DataServiceEntities from './DataServiceEntities.g';\r\n\r\n// @ts-ignore\r\nfunction vSIGetAPIResponseQuery(id?: number): DataServiceQuery {\r\n const key = id ? { Id: id } : null;\r\n return new DataServiceQuery('VSIGetRestAPIResponse', 'VSIRestAPIHandler', DataServiceEntities.VSIRestAPIHandlerExtensionClass, key);\r\n}\r\n\r\nexport function createVSIInitiateRestCallInput(\r\n targetSystem: string,\r\n methodType: string,\r\n requestHeader: string,\r\n requestBody: string,\r\n urlParams: string,\r\n servicePath: string\r\n): IDataServiceRequest {\r\n const query = vSIGetAPIResponseQuery();\r\n return query.createDataServiceRequestForOperation(\r\n 'VSI_CallGenericRestAPIHandler',\r\n true,\r\n DataServiceEntities.VSIRestAPIHandlerExtensionClass,\r\n 'false',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.IVSIRestAPIHandler' },\r\n {\r\n targetSystem: targetSystem,\r\n methodType: methodType,\r\n requestHeader: requestHeader,\r\n requestBody: requestBody,\r\n urlParams: urlParams,\r\n servicePath: servicePath\r\n }\r\n );\r\n}\r\n\r\nexport function vSIInitiateRestCallAsync(\r\n context: IContext,\r\n targetSystem: string,\r\n methodType: string,\r\n requestHeader: string,\r\n requestBody: string,\r\n urlParams: string,\r\n servicePath: string\r\n): AsyncResult {\r\n const request = createVSIInitiateRestCallInput(targetSystem, methodType, requestHeader, requestBody, urlParams, servicePath);\r\n return callActionOrExecute(request, context.callerContext);\r\n}\r\n","import { 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 * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable security/detect-unsafe-regex */\r\nimport * as React from 'react';\r\n\r\nimport { IDobbiesFooterNewsletterProps, INewsletterheadingData } from './dobbies-footer-newsletter.props.autogenerated';\r\n\r\nimport { Button, IModuleProps, INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport { vSIInitiateRestCallAsync } from '../../dotdigital-extension/DataActionExtension.g';\r\nimport DobbiesModal from './components/dobbies-modal';\r\n\r\nexport interface IDobbiesFooterNewsletterViewProps extends IDobbiesFooterNewsletterProps<{}> {\r\n moduleProps: IModuleProps;\r\n contentProps: INodeProps;\r\n newsletterheading: React.ReactNode;\r\n newsletterDescription: React.ReactNode;\r\n joinNow: React.ReactNode;\r\n subscribeForm: React.ReactNode | undefined;\r\n}\r\nexport interface IDobbiesFooterNewsletterState {\r\n isPopupOpen: boolean;\r\n firstName: string;\r\n lastName: string;\r\n emailAddress: string;\r\n privacyPolicyChecked: boolean;\r\n firstNameError: boolean;\r\n lastNameError: boolean;\r\n emailError: boolean;\r\n requiredError: boolean;\r\n emailValidationError: boolean;\r\n privacyPolicyError: boolean;\r\n recaptchaError: boolean;\r\n responseReceived: boolean;\r\n responseError: boolean;\r\n reCaptchaChecked: boolean;\r\n}\r\nexport interface ISubscribeNewsletterForm {\r\n FormWrapper: INodeProps;\r\n FormContainer: INodeProps;\r\n nameInput: React.ReactNode;\r\n emailInput: React.ReactNode;\r\n checkboxPrivacyPolicy: React.ReactNode;\r\n subscribeButtton: React.ReactNode;\r\n}\r\nexport interface IErrorMessage {\r\n message: string;\r\n}\r\ninterface IDataField {\r\n key: string;\r\n value: string;\r\n}\r\n// Contact created Result\r\nexport interface IContactCreatedResponse {\r\n id: number;\r\n email: string;\r\n optInType: string;\r\n emailType: string;\r\n dataFields: IDataField[];\r\n status: string;\r\n}\r\n// To add contact in program\r\ninterface IPreferenceProgram {\r\n programId: number;\r\n contacts: number[];\r\n}\r\n/**\r\n *\r\n * DobbiesFooterNewsletter component\r\n * @extends {React.PureComponent, IDobbiesFooterNewsletterState>}\r\n */\r\nclass DobbiesFooterNewsletter extends React.PureComponent, IDobbiesFooterNewsletterState> {\r\n private _FirstNameInputRef: React.RefObject;\r\n private _LastNameInputRef: React.RefObject;\r\n private _EmailAddressInputRef: React.RefObject;\r\n private _PrivacyPolicyRef: React.RefObject;\r\n private hasFirstNameValue: boolean = false;\r\n private hasLastNameValue: boolean = false;\r\n private hasEmailAddressValue: boolean = false;\r\n private hasFormContainValues: boolean = false;\r\n private requiredErrorMessage: string | undefined;\r\n private emailValidationErrorMessage: string | undefined;\r\n private privacyPolicyErrorMessage: string | undefined;\r\n private responseMessage: string | undefined;\r\n\r\n constructor(props: IDobbiesFooterNewsletterProps<{}>, state: IDobbiesFooterNewsletterState) {\r\n super(props);\r\n this._FirstNameInputRef = React.createRef();\r\n this._LastNameInputRef = React.createRef();\r\n this._EmailAddressInputRef = React.createRef();\r\n this._PrivacyPolicyRef = React.createRef();\r\n this._handleSubscribe = this._handleSubscribe.bind(this);\r\n\r\n this.state = {\r\n isPopupOpen: false,\r\n firstName: '',\r\n lastName: '',\r\n emailAddress: '',\r\n privacyPolicyChecked: false,\r\n firstNameError: false,\r\n lastNameError: false,\r\n emailError: false,\r\n requiredError: false,\r\n emailValidationError: false,\r\n privacyPolicyError: false,\r\n recaptchaError: false,\r\n responseReceived: false,\r\n responseError: false,\r\n reCaptchaChecked: false\r\n };\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n config: { newsletterheading, newsletterDescription, className },\r\n resources: { joinNowLabel, joinNowButtonAriaLabel }\r\n } = this.props;\r\n const viewProps = {\r\n ...this.props,\r\n moduleProps: { className: classnames('ms-dobbies-footer-newsletter', className), moduleProps: this.props, tag: 'div' },\r\n contentProps: { className: 'ms-dobbies-footer-newsletter__content', tag: 'div' },\r\n newsletterheading: this._getHeading(newsletterheading, className),\r\n newsletterDescription: this._getNewsLetterText(newsletterDescription, className),\r\n joinNow: this._getJoinNowButton(joinNowLabel, joinNowButtonAriaLabel, className),\r\n subscribeForm: this.state.isPopupOpen && this._renderPopUp()\r\n };\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /* Following function renders heading of newsletter */\r\n private _getHeading = (newsletterheading: INewsletterheadingData | undefined, className: string | undefined): React.ReactNode => {\r\n return (\r\n \r\n {newsletterheading && (\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n /* Following function renders description of newsletter */\r\n private _getNewsLetterText = (newsletterDescription: Msdyn365.RichText | undefined, className: string | undefined): React.ReactNode => {\r\n return (\r\n
\r\n {newsletterDescription && }\r\n
\r\n );\r\n };\r\n\r\n /* Following function renders Join Now Button */\r\n private _getJoinNowButton = (\r\n joinNowLabel: string | undefined,\r\n joinNowAriaLabel: string | undefined,\r\n className: string | undefined\r\n ): React.ReactNode => {\r\n return (\r\n \r\n {joinNowLabel}\r\n \r\n );\r\n };\r\n // Open popup\r\n private _togglePopup = (event: React.MouseEvent) => {\r\n this.setState({ isPopupOpen: true });\r\n };\r\n // Open popup by clicking on join now button\r\n private _renderPopUp = () => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n // Render Popup title\r\n private _renderPopupTitle = () => {\r\n const { popUpHeading } = this.props.config;\r\n return (\r\n \r\n \r\n {popUpHeading && (\r\n \r\n )}\r\n \r\n );\r\n };\r\n // Render popup footer\r\n private _renderPopupFooter = () => {\r\n return <>;\r\n };\r\n // Render popup body to show input fields\r\n private _renderPopupBody = () => {\r\n const subscribeResponse = this._getSubscribeResponse();\r\n const subscribeForm = this._renderForm();\r\n const { FormWrapper, FormContainer, nameInput, emailInput, checkboxPrivacyPolicy, subscribeButtton } = subscribeForm;\r\n return (\r\n \r\n {subscribeResponse}\r\n \r\n {nameInput}\r\n {emailInput}\r\n {checkboxPrivacyPolicy}\r\n {subscribeButtton}\r\n \r\n \r\n \r\n );\r\n };\r\n // Close popup and reset state\r\n private _closePopup = () => {\r\n this.setState({\r\n isPopupOpen: false,\r\n firstName: '',\r\n lastName: '',\r\n emailAddress: '',\r\n privacyPolicyChecked: false,\r\n firstNameError: false,\r\n lastNameError: false,\r\n emailError: false,\r\n requiredError: false,\r\n emailValidationError: false,\r\n privacyPolicyError: false,\r\n recaptchaError: false,\r\n responseReceived: false,\r\n responseError: false,\r\n reCaptchaChecked: false\r\n });\r\n };\r\n\r\n // Get all input fields and return as form fields\r\n private _renderForm(): ISubscribeNewsletterForm {\r\n return {\r\n FormWrapper: {\r\n className: 'newsletter-subscription',\r\n tag: 'div'\r\n },\r\n FormContainer: {\r\n className: 'newsletter-subscription-div',\r\n tag: 'div'\r\n },\r\n nameInput: this._renderFirstAndLastNameInput(),\r\n emailInput: this._renderEmailInput(),\r\n checkboxPrivacyPolicy: this._renderCheckboxPrivacyPolicy(),\r\n subscribeButtton: this._renderSubscribeButton()\r\n };\r\n }\r\n\r\n private _renderFirstAndLastNameInput(): React.ReactNode {\r\n return (\r\n
\r\n
\r\n {this.state.firstNameError ? this._renderAlert('first-name-input') : ''}\r\n {this.state.lastNameError ? this._renderAlert('last-name-input') : ''}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderEmailInput(): React.ReactNode {\r\n return (\r\n
\r\n {this.state.emailError || this.state.emailValidationError ? this._renderAlert('email-address-input') : ''}\r\n \r\n
\r\n );\r\n }\r\n\r\n private _isEmailValid = (email: string): boolean => {\r\n const regex = /^(([^<>()\\[\\]\\\\.,;:\\s@']+(\\.[^<>()\\[\\]\\\\.,;:\\s@']+)*)|('.+'))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return regex.test(email);\r\n };\r\n\r\n private _renderCheckboxPrivacyPolicy(): React.ReactNode {\r\n return (\r\n
\r\n {this.state.privacyPolicyError ? this._renderAlert('checkbox-privacy-policy') : ''}\r\n
\r\n \r\n \r\n

\r\n I accept the Privacy Policy\r\n

\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderSubscribeButton(): React.ReactNode {\r\n return (\r\n
\r\n \r\n {this.props.resources.subscribeButtonLabel}\r\n \r\n
\r\n );\r\n }\r\n // Store input fields value to state\r\n private _handleChange = (name: string) => (e: React.ChangeEvent) => {\r\n const value = e.target.value;\r\n switch (name) {\r\n case 'firstName': {\r\n this.setState({\r\n firstName: value,\r\n firstNameError: false,\r\n requiredError: false,\r\n emailValidationError: false,\r\n privacyPolicyError: false\r\n });\r\n break;\r\n }\r\n case 'lastName': {\r\n this.setState({\r\n lastName: value,\r\n lastNameError: false,\r\n requiredError: false,\r\n emailValidationError: false,\r\n privacyPolicyError: false\r\n });\r\n break;\r\n }\r\n case 'emailAddress': {\r\n this.setState({\r\n emailAddress: value,\r\n emailError: false,\r\n requiredError: false,\r\n emailValidationError: false,\r\n privacyPolicyError: false\r\n });\r\n break;\r\n }\r\n case 'privacyPolicy': {\r\n const isChecked =\r\n this._PrivacyPolicyRef.current && this._PrivacyPolicyRef.current.checked\r\n ? this._PrivacyPolicyRef.current.checked\r\n : false;\r\n this.setState({\r\n privacyPolicyChecked: isChecked,\r\n requiredError: false,\r\n emailValidationError: false,\r\n privacyPolicyError: false\r\n });\r\n break;\r\n }\r\n default: {\r\n this.setState({ requiredError: false, emailValidationError: false, privacyPolicyError: false });\r\n }\r\n }\r\n };\r\n // Show error message on invalid email or if checkbox is not checked\r\n private _renderAlert(className: string): JSX.Element {\r\n const inputBoxErrors = this.state.firstNameError || this.state.lastNameError || this.state.emailError;\r\n if (inputBoxErrors) {\r\n this.requiredErrorMessage = this.props.resources.requiredTextErrorMessage;\r\n }\r\n if (this.state.emailAddress !== '' && this.state.emailValidationError) {\r\n this.emailValidationErrorMessage = this.props.resources.emailValidationErrorMessage;\r\n }\r\n if (!this.state.privacyPolicyChecked) {\r\n this.privacyPolicyErrorMessage = this.props.resources.privacyPolicyErrorMessage;\r\n }\r\n const requiredError = this.state.requiredError;\r\n const emailValidationError = this.state.emailValidationError;\r\n const privacyPolicyError = this.state.privacyPolicyError;\r\n return (\r\n <>\r\n {requiredError && (\r\n \r\n {this.requiredErrorMessage && (\r\n <>\r\n \r\n )}\r\n {emailValidationError && (\r\n \r\n {this.emailValidationErrorMessage && (\r\n <>\r\n \r\n )}\r\n {privacyPolicyError && (\r\n \r\n {this.privacyPolicyErrorMessage && (\r\n <>\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n // Get API response\r\n private _getSubscribeResponse(): React.ReactNode {\r\n return this.state.responseReceived && this.responseMessage ? (\r\n
\r\n

\r\n {this.responseMessage}\r\n

\r\n
\r\n ) : null;\r\n }\r\n\r\n private _hasFirstNameValue = () => {\r\n return this._FirstNameInputRef && this._FirstNameInputRef.current && this._FirstNameInputRef.current.value ? true : false;\r\n };\r\n\r\n private _hasLastNameValue = () => {\r\n return this._LastNameInputRef && this._LastNameInputRef.current && this._LastNameInputRef.current.value ? true : false;\r\n };\r\n\r\n private _hasEmailAddressValue = () => {\r\n return this._EmailAddressInputRef && this._EmailAddressInputRef.current && this._EmailAddressInputRef.current.value ? true : false;\r\n };\r\n\r\n private _hasFormContainValues = () => {\r\n return this.hasFirstNameValue && this.hasLastNameValue && this.hasEmailAddressValue ? true : false;\r\n };\r\n\r\n private async _handleSubscribe(\r\n e: React.MouseEvent | React.KeyboardEvent | React.FormEvent\r\n ): Promise {\r\n this.hasFirstNameValue = this._hasFirstNameValue();\r\n this.hasLastNameValue = this._hasLastNameValue();\r\n this.hasEmailAddressValue = this._hasEmailAddressValue();\r\n const email = this.hasEmailAddressValue ? this._EmailAddressInputRef.current!.value : '';\r\n if (!this.hasFirstNameValue) {\r\n this.setState({\r\n firstNameError: true,\r\n requiredError: true\r\n });\r\n } else if (!this.hasLastNameValue) {\r\n this.setState({ lastNameError: true, requiredError: true });\r\n } else if (!this.hasEmailAddressValue) {\r\n this.setState({ emailError: true, requiredError: true });\r\n } else if (!this._isEmailValid(email)) {\r\n this.setState({ emailValidationError: true });\r\n } else if (!this._PrivacyPolicyRef.current!.checked) {\r\n this.setState({ privacyPolicyChecked: false, privacyPolicyError: true });\r\n } else {\r\n this.hasFormContainValues = this._hasFormContainValues();\r\n if (this.hasFormContainValues && this.state.privacyPolicyChecked && !this.state.emailValidationError) {\r\n try {\r\n // Make subscribe newsletter data-action call here with user data\r\n const contact = {\r\n email: this.state.emailAddress,\r\n emailType: 'Html',\r\n dataFields: [\r\n { key: 'FIRSTNAME', value: this.state.firstName },\r\n { key: 'LASTNAME', value: this.state.lastName }\r\n ],\r\n status: 'Subscribed'\r\n };\r\n const {\r\n context: { actionContext },\r\n config: { programID },\r\n resources: { programErrorMessage, programSuccessMessage }\r\n } = this.props;\r\n let isError = false;\r\n if (programID) {\r\n // call api here to create contact\r\n const response = await vSIInitiateRestCallAsync(\r\n { callerContext: actionContext },\r\n 'DotDigital',\r\n 'post',\r\n \"{'cache-control':'no-cache' , 'Accept':'application/json'}\",\r\n JSON.stringify(contact),\r\n '',\r\n `v2/contacts`\r\n );\r\n if (response.result) {\r\n const responseResult = JSON.parse(response.result);\r\n const errorMessage: IErrorMessage = responseResult;\r\n if (errorMessage.message && errorMessage.message.length > 0) {\r\n // Address book isn't found or any other issue So set error message\r\n isError = true;\r\n } else {\r\n // Contact created so now add contact in program\r\n // Get contact id\r\n const contactCreated: IContactCreatedResponse = responseResult;\r\n if (contactCreated.id) {\r\n // add this id in given programId\r\n const program: IPreferenceProgram = {\r\n contacts: [contactCreated.id],\r\n programId: programID\r\n };\r\n const programResponse = await vSIInitiateRestCallAsync(\r\n { callerContext: actionContext },\r\n 'DotDigital',\r\n 'post',\r\n \"{'cache-control':'no-cache' , 'Accept':'application/json'}\",\r\n JSON.stringify(program),\r\n '',\r\n `v2/programs/enrolments`\r\n );\r\n if (programResponse.result) {\r\n const programResponseResult = JSON.parse(programResponse.result);\r\n const error: IErrorMessage = programResponseResult;\r\n if (error.message && error.message.length > 0) {\r\n // Error in adding contact in Program\r\n // display error alert\r\n isError = true;\r\n } else {\r\n this.responseMessage = programSuccessMessage;\r\n // Contact has been added to address book\r\n this.setState({\r\n responseReceived: true,\r\n responseError: false,\r\n firstName: '',\r\n lastName: '',\r\n emailAddress: '',\r\n privacyPolicyChecked: false,\r\n requiredError: false,\r\n emailValidationError: false,\r\n recaptchaError: false\r\n });\r\n this._clearValues();\r\n }\r\n } else {\r\n isError = true;\r\n }\r\n } else {\r\n isError = true;\r\n }\r\n }\r\n }\r\n } else {\r\n // display error alert\r\n isError = true;\r\n }\r\n if (isError) {\r\n this.responseMessage = programErrorMessage;\r\n this.setState({ responseReceived: true, responseError: true });\r\n }\r\n } catch (e) {\r\n // @ts-ignore\r\n this.props.telemetry.error(e);\r\n this.responseMessage = this.props.resources.programErrorMessage;\r\n this.setState({ responseReceived: true, responseError: true });\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _clearValues(): void {\r\n if (this._PrivacyPolicyRef.current) {\r\n this._PrivacyPolicyRef.current.checked = false;\r\n }\r\n }\r\n}\r\n\r\nexport default DobbiesFooterNewsletter;\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 { IDobbiesFooterNewsletterViewProps } from './dobbies-footer-newsletter';\r\n\r\nexport default (props: IDobbiesFooterNewsletterViewProps) => {\r\n const { moduleProps, contentProps, newsletterheading, newsletterDescription, joinNow, subscribeForm } = props;\r\n\r\n /* VSI Customization - START */\r\n /* condition either to show or hide the footer newsletter */\r\n\r\n if (props.context.request.query!.onlyBody && props.context.request.query!.onlyBody === 'true') {\r\n return null;\r\n }\r\n /* VSI Customization - END */\r\n\r\n return (\r\n \r\n \r\n {newsletterheading}\r\n {newsletterDescription}\r\n {joinNow}\r\n \r\n {subscribeForm}\r\n \r\n );\r\n};\r\n","const binding = { modules: {}, dataActions: {} };\n\n (binding.modules['dobbies-footer-newsletter'] = {\n c: () => require('partner/modules/dobbies-footer-newsletter/dobbies-footer-newsletter.tsx'),\n $type: 'contentModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'dobbies-footer-newsletter',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/dobbies-footer-newsletter'\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-footer-newsletter|dobbies-footer-newsletter'] = {\n c: () => require('partner/modules/dobbies-footer-newsletter/dobbies-footer-newsletter.view.tsx'),\n cn: '__local__-__local__-dobbies-footer-newsletter'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["VSIRestAPIHandlerExtensionClass","constructor","odataObject","this","Id","result","ExtensionProperties","undefined","i","length","className","substr","lastIndexOf","concat","EntityClasses","createVSIInitiateRestCallInput","targetSystem","methodType","requestHeader","requestBody","urlParams","servicePath","id","key","DataServiceQuery","DataServiceEntities","vSIGetAPIResponseQuery","createDataServiceRequestForOperation","bypassCache","returnEntity","vSIInitiateRestCallAsync","context","request","callActionOrExecute","callerContext","props","React","Modal","isOpen","applicationNode","autoFocus","modalTitle","ModalHeader","modalBodySlots","ModalBody","modalBodyElement","modalFooter","ModalFooter","DobbiesFooterNewsletter","state","super","hasFirstNameValue","hasLastNameValue","hasEmailAddressValue","hasFormContainValues","_getHeading","newsletterheading","Msdyn365","Object","assign","tag","classnames","text","_getNewsLetterText","newsletterDescription","_getJoinNowButton","joinNowLabel","joinNowAriaLabel","Button","title","color","onClick","_togglePopup","event","setState","isPopupOpen","_renderPopUp","DobbiesModal","_renderPopupTitle","_renderPopupBody","_renderPopupFooter","popUpHeading","config","Node","role","_closePopup","subscribeResponse","_getSubscribeResponse","subscribeForm","_renderForm","FormWrapper","FormContainer","nameInput","emailInput","checkboxPrivacyPolicy","subscribeButtton","resources","cancelButtonTitle","firstName","lastName","emailAddress","privacyPolicyChecked","firstNameError","lastNameError","emailError","requiredError","emailValidationError","privacyPolicyError","recaptchaError","responseReceived","responseError","reCaptchaChecked","_isEmailValid","email","test","_handleChange","name","e","value","target","isChecked","_PrivacyPolicyRef","current","checked","_hasFirstNameValue","_FirstNameInputRef","_hasLastNameValue","_LastNameInputRef","_hasEmailAddressValue","_EmailAddressInputRef","_hasFormContainValues","_handleSubscribe","bind","render","joinNowButtonAriaLabel","viewProps","_objectSpread","moduleProps","contentProps","joinNow","renderView","_renderFirstAndLastNameInput","_renderEmailInput","_renderCheckboxPrivacyPolicy","_renderSubscribeButton","_renderAlert","ref","type","onChange","placeholder","firstNamePlaceholderText","required","lastNamePlaceholderText","emailAddressPlaceholderText","href","privacyPolicyLink","subscribeButtonLabel","requiredErrorMessage","requiredTextErrorMessage","emailValidationErrorMessage","privacyPolicyErrorMessage","responseMessage","contact","emailType","dataFields","status","actionContext","programID","programErrorMessage","programSuccessMessage","isError","response","JSON","stringify","responseResult","parse","errorMessage","message","contactCreated","program","contacts","programId","programResponse","error","_clearValues","telemetry","query","onlyBody","Module","binding","modules","dataActions","c","require","$type","da","iNM","ns","n","p","pdp","md","window","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}