{"version":3,"file":"static/js/30.872cff4a526a1b6f415e.chunk.js","mappings":"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","sources":["webpack://Citta2.0/./src/modules/default-container/default-container.tsx?01c3","webpack://Citta2.0/./src/modules/default-container-2-slots/default-container-2-slots.tsx?8065","webpack://Citta2.0/./src/modules/default-container-3-slots/default-container-3-slots.tsx?ac77","webpack://Citta2.0/./src/modules/citta-contact/citta-contact.tsx?0541","webpack://Citta2.0/./src/modules/citta-contact/citta-contact.view.tsx?2cf3","webpack://Citta2.0/./src/components/container-background-image/container-background-image-helper.ts?ce2e","webpack://Citta2.0/./src/components/container-background-image/container-backgroud-image.tsx?e863","webpack://Citta2.0/./src/components/base-components.tsx?daec","webpack://Citta2.0/./src/utils/classnames.ts?a0ff"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent } from '@msdyn365-commerce/core';\nimport { LogLevel } from '@msdyn365-commerce/telemetry-internal';\nimport * as React from 'react';\nimport { Container, HeadingComponent, IHeadingComponentProps } from '../../components/base-components';\nimport { colWidths } from '../../utils/classnames';\nimport { IDefaultContainerData } from './default-container.data';\nimport { childrenWidth as childrenWidthEnum, IDefaultContainerProps, layout as layoutEnum } from './default-container.props.autogenerated';\n\n/**\n *\n * CoreComponent component\n * @extends {React.PureComponent<IDefaultContainerProps<IDefaultContainerData>>}\n */\nclass DefaultContainer extends React.PureComponent<IDefaultContainerProps<IDefaultContainerData>> {\n constructor(props: IDefaultContainerProps<IDefaultContainerData>) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { slots, telemetry, config, data } = this.props;\n telemetry.log(LogLevel.Debug, \"Default Container rendering for '{id}/{typeName}'\", {\n values: [this.props.id, this.props.typeName]\n });\n\n const heading = config.heading || data.heading;\n const headingProps: IHeadingComponentProps = {\n ...heading,\n handleTextChange: this.handleTextChange,\n requestContext: this.props.context.request\n };\n\n return (\n <Container\n containerType={config.containerType}\n className={config.className}\n typeName={this.props.typeName}\n id={this.props.id}\n request={this.props.context.request}\n backgroundImage={config?.backgroundImage}\n backgroundImageRepeat={config?.backgroundImageRepeat}\n backgroundImageSize={config?.backgroundImageSize}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unnecessary-type-assertion\n moduleLayout={(config as any)?.msdyn365__moduleLayout}\n backgroundColor={this.props.config.backgroundColor}\n >\n {heading && <HeadingComponent className='container-heading' {...headingProps} />}\n {slots &&\n slots.content &&\n slots.content.map((children: React.ReactNode, index: number) => {\n return (\n <div className={this._getChildColClassName()} key={index}>\n {children}\n </div>\n );\n })}\n </Container>\n );\n }\n\n public handleTextChange = (event: ContentEditableEvent) => (this.props.config.heading!.headingText = event.target.value);\n\n private _getChildColClassName(): string {\n const {\n config: { layout, childrenWidth }\n } = this.props;\n switch (layout) {\n case layoutEnum.flow:\n return childrenWidth === childrenWidthEnum.auto ? 'col-12 col-md' : this._getWidthClass(childrenWidth);\n case layoutEnum.stacked:\n default:\n return 'col-12';\n }\n }\n\n private _getWidthClass(s?: childrenWidthEnum): string {\n return colWidths.get(s || childrenWidthEnum.four) || 'col-12';\n }\n}\n\nexport default DefaultContainer;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent } from '@msdyn365-commerce/core';\nimport { LogLevel } from '@msdyn365-commerce/telemetry-internal';\nimport React, { ReactNode } from 'react';\nimport { Container, HeadingComponent, IHeadingComponentProps } from '../../components/base-components';\nimport { getColClassArray, showErrors } from '../../utils/classnames';\nimport { IDefaultContainer2SlotsData } from './default-container-2-slots.data';\nimport { IDefaultContainer2SlotsProps } from './default-container-2-slots.props.autogenerated';\n\ninterface IColSizes {\n left: string[];\n right: string[];\n}\n\n/**\n * Default container that displays 2 modules\n * CoreComponent component\n * @extends {React.PureComponent<IDefaultContainer2SlotsConfig<IDefaultContainer2SlotsData>>}\n */\nclass Default2SlotContainer extends React.PureComponent<IDefaultContainer2SlotsProps<IDefaultContainer2SlotsData>> {\n constructor(props: IDefaultContainer2SlotsProps<IDefaultContainer2SlotsData>) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { slots, telemetry, context, config, data } = this.props;\n telemetry.log(LogLevel.Debug, \"Default 2 Slot Container rendering for '{id}/{typeName}'\", {\n values: [this.props.id, this.props.typeName]\n });\n\n const content = slots && slots.content;\n const slotsClassNames = this._getColClassName();\n if (content && content.length > 2) {\n telemetry.log(LogLevel.Warning, 'Default 2 Slot Container passed more than 2 slots');\n }\n const heading = config.heading || data.heading;\n const headingProps: IHeadingComponentProps = {\n ...heading,\n handleTextChange: this.handleTextChange,\n requestContext: this.props.context.request\n };\n return (\n <Container\n containerType={config.containerType}\n className={config.className}\n typeName={this.props.typeName}\n id={this.props.id}\n request={this.props.context.request}\n backgroundImage={config?.backgroundImage}\n backgroundImageRepeat={config?.backgroundImageRepeat}\n backgroundImageSize={config?.backgroundImageSize}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unnecessary-type-assertion\n moduleLayout={(config as any)?.msdyn365__moduleLayout}\n backgroundColor={this.props.config.backgroundColor}\n >\n {heading && <HeadingComponent className='container-heading' {...headingProps} />}\n {content && content[0] && <div className={slotsClassNames.left.join(' ')}>{content[0]}</div>}\n {content && content[1] && <div className={slotsClassNames.right.join(' ')}>{content[1]}</div>}\n <>\n {showErrors(context) &&\n content &&\n content.slice(2, content.length - 1).map((slot: ReactNode, index: number) => {\n return (\n <div className='col-12' key={index}>\n <div className='card'>\n <div className='card-header text-white bg-danger'>\n Slot exceeded maximum number of slots supported by container. (2)\n </div>\n </div>\n </div>\n );\n })}\n </>\n </Container>\n );\n }\n\n public handleTextChange = (event: ContentEditableEvent) => (this.props.config.heading!.headingText = event.target.value);\n /**\n * Captures left and right column classnames from this.props.config. Returns col if no options specified.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public _getColClassName = (): IColSizes => {\n const { config } = this.props;\n\n const classNames = getColClassArray(config);\n\n if (!classNames.length) {\n return {\n left: ['col'],\n right: ['col']\n };\n }\n\n return classNames.reduce(\n (memo: IColSizes, [left, right]: string[]) => {\n memo.left.push(left);\n memo.right.push(right);\n return memo;\n },\n { left: [], right: [] }\n );\n };\n}\n\nexport default Default2SlotContainer;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent } from '@msdyn365-commerce/core';\nimport { LogLevel } from '@msdyn365-commerce/telemetry-internal';\nimport React, { ReactNode } from 'react';\nimport { Container, HeadingComponent, IHeadingComponentProps } from '../../components/base-components';\nimport { getColClassArray, showErrors } from '../../utils/classnames';\nimport { IDefaultContainer3SlotsData } from './default-container-3-slots.data';\nimport { IDefaultContainer3SlotsProps } from './default-container-3-slots.props.autogenerated';\n\ninterface IColSizes {\n left: string[];\n center: string[];\n right: string[];\n}\n\n/**\n *\n * CoreComponent component\n * @extends {React.PureComponent<IDefaultContainer3SlotsData<IDefaultContainer3SlotsData>>}\n */\nclass Default3SlotContainer extends React.PureComponent<IDefaultContainer3SlotsProps<IDefaultContainer3SlotsData>> {\n constructor(props: IDefaultContainer3SlotsProps<IDefaultContainer3SlotsData>) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { slots, telemetry, context, config, data } = this.props;\n\n const slotsClassNames = this._getColClassName();\n const content = slots && slots.content;\n\n telemetry.log(LogLevel.Debug, \"Default 3 Slot Container rendering for '{id}/{typeName}'\", {\n values: [this.props.id, this.props.typeName]\n });\n if (content && content.length > 3) {\n telemetry.log(LogLevel.Warning, 'Default 3 Slot Container passed more than 3 slots');\n }\n const heading = config.heading || data.heading;\n const headingProps: IHeadingComponentProps = {\n ...heading,\n handleTextChange: this.handleTextChange,\n requestContext: this.props.context.request\n };\n return (\n <Container\n containerType={config.containerType}\n className={config.className}\n typeName={this.props.typeName}\n id={this.props.id}\n request={this.props.context.request}\n backgroundImage={config?.backgroundImage}\n backgroundImageRepeat={config?.backgroundImageRepeat}\n backgroundImageSize={config?.backgroundImageSize}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unnecessary-type-assertion\n moduleLayout={(config as any)?.msdyn365__moduleLayout}\n backgroundColor={this.props.config.backgroundColor}\n >\n {heading && <HeadingComponent className='container-heading' {...headingProps} />}\n {content && content[0] && <div className={slotsClassNames.left.join(' ')}>{content[0]}</div>}\n {content && content[1] && <div className={slotsClassNames.center.join(' ')}>{content[1]}</div>}\n {content && content[2] && <div className={slotsClassNames.right.join(' ')}>{content[2]}</div>}\n <>\n {showErrors(context) &&\n content &&\n content.slice(2, content.length - 1).map((slot: ReactNode, index: number) => {\n return (\n <div className='col-12' key={index}>\n <div className='card'>\n <div className='card-header text-white bg-danger'>\n Slot exceeded maximum number of slots supported by container. (3)\n </div>\n </div>\n </div>\n );\n })}\n </>\n </Container>\n );\n }\n\n public handleTextChange = (event: ContentEditableEvent) => (this.props.config.heading!.headingText = event.target.value);\n /**\n * Captures left and right column classnames from this.props.config. Returns col if no options specified.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public _getColClassName = (): IColSizes => {\n const { config } = this.props;\n\n const classNames = getColClassArray(config);\n\n if (!classNames.length) {\n return {\n left: ['col'],\n center: ['col'],\n right: ['col']\n };\n }\n\n return classNames.reduce(\n (memo: IColSizes, [left, center, right]: string[]) => {\n memo.left.push(left);\n memo.center.push(center);\n memo.right.push(right);\n return memo;\n },\n { left: [], center: [], right: [] }\n );\n };\n}\n\nexport default Default3SlotContainer;\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 { Button, IModuleProps, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport ReCAPTCHA from 'react-google-recaptcha';\r\nimport {\r\n submitContactFormAction,\r\n SubmitContactFormDataActionInput,\r\n} from '../../data-actions/contact/submit-contact-form-data.action';\r\nimport { ICittaContactData } from './citta-contact.data';\r\nimport { ICittaContactProps } from './citta-contact.props.autogenerated';\r\n\r\ninterface ICittaContactFormState {\r\n name: string;\r\n emailAddress: string;\r\n phoneNumber: string;\r\n country: string;\r\n city: string;\r\n reasonForEnquiry: string;\r\n message: string;\r\n inputState: boolean;\r\n nameError: boolean;\r\n eAError: boolean;\r\n pNError: boolean;\r\n countryError: boolean;\r\n cityError: boolean;\r\n reasonEnquiryError: boolean;\r\n messageError: boolean;\r\n reqErrorMsg: boolean;\r\n eAValErrorMsg: boolean;\r\n eAValidationError: boolean;\r\n responseReceived: boolean;\r\n rCCError: boolean;\r\n reCaptchaChecked: boolean;\r\n hideFirstElement: boolean;\r\n selectedValue: string;\r\n}\r\n\r\nexport interface ICittaContactViewProps extends ICittaContactProps<ICittaContactData> {\r\n ContactContainer: IModuleProps;\r\n ContactForm: INodeProps;\r\n Name: React.ReactNode;\r\n EmailAddress: React.ReactNode;\r\n PhoneNumber: React.ReactNode;\r\n Country: React.ReactNode;\r\n City: React.ReactNode;\r\n ReasonForEnquiry: React.ReactNode;\r\n Message: React.ReactNode;\r\n ErrorMessage: React.ReactNode;\r\n Recaptcha: React.ReactNode;\r\n SubmitButton: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * CittaContact component\r\n * @extends {React.PureComponent<ICittaContactProps<ICittaContactData>, ICittaContactFormState>}\r\n */\r\n@observer\r\nclass CittaContact extends React.PureComponent<\r\nICittaContactProps<ICittaContactData>,\r\nICittaContactFormState\r\n> {\r\n public state: ICittaContactFormState = {\r\n name: '',\r\n emailAddress: '',\r\n phoneNumber: '',\r\n country: '',\r\n city: '',\r\n reasonForEnquiry: '',\r\n message: '',\r\n inputState: true,\r\n nameError: false,\r\n eAError: false,\r\n pNError: false,\r\n countryError: false,\r\n cityError: false,\r\n reasonEnquiryError: false,\r\n messageError: false,\r\n reqErrorMsg: false,\r\n eAValErrorMsg: false,\r\n eAValidationError: false,\r\n responseReceived: false,\r\n rCCError: false,\r\n reCaptchaChecked: false,\r\n hideFirstElement: false,\r\n selectedValue: '',\r\n };\r\n private _nameInputRef: React.RefObject<HTMLInputElement>;\r\n private _emailAddressInputRef: React.RefObject<HTMLInputElement>;\r\n private _phoneNumberInputRef: React.RefObject<HTMLInputElement>;\r\n private _countryInputRef: React.RefObject<HTMLInputElement>;\r\n private _cityInputRef: React.RefObject<HTMLInputElement>;\r\n private _reasonForEnquirySelectRef: React.RefObject<HTMLSelectElement>;\r\n private _messageInputRef: React.RefObject<HTMLTextAreaElement>;\r\n private _recaptchaRef: React.RefObject<ReCAPTCHA>;\r\n\r\n private nameValue: boolean = false;\r\n private emailAddressValue: boolean = false;\r\n private phoneNumberValue: boolean = false;\r\n private countryValue: boolean = false;\r\n private cityValue: boolean = false;\r\n private messageValue: boolean = false;\r\n private reasonEnquiryValue: boolean = false;\r\n\r\n private formInputValues: boolean = false;\r\n private requiredErrorMessage: string | undefined;\r\n private eAValidationErrorMessage: string | undefined;\r\n private recaptchaErrorMessage: string | undefined;\r\n private response: boolean = false;\r\n\r\n constructor(props: ICittaContactProps<ICittaContactData>) {\r\n super(props);\r\n this._nameInputRef = React.createRef();\r\n this._emailAddressInputRef = React.createRef();\r\n this._phoneNumberInputRef = React.createRef();\r\n this._countryInputRef = React.createRef();\r\n this._cityInputRef = React.createRef();\r\n this._reasonForEnquirySelectRef = React.createRef();\r\n this._messageInputRef = React.createRef();\r\n this._recaptchaRef = React.createRef();\r\n this._handleSend = this._handleSend.bind(this);\r\n }\r\n\r\n // tslint:disable-next-line: max-func-body-length cyclomatic-complexity\r\n public render(): JSX.Element {\r\n\r\n const formProps = {\r\n className: 'contact-form',\r\n onSubmit: this._handleSend,\r\n tag: 'form' as NodeTag\r\n };\r\n const viewProps = {\r\n ...this.props,\r\n ContactContainer: {\r\n moduleProps: this.props,\r\n className: 'citta-contact',\r\n },\r\n ContactForm: formProps,\r\n Name: this._renderName(),\r\n ErrorMessage: this._renderErrorMessage(),\r\n EmailAddress: this._renderEmailAddress(),\r\n PhoneNumber: this._renderPhoneNumber(),\r\n Country: this._renderCountry(),\r\n City: this._renderCity(),\r\n ReasonForEnquiry: this._renderReasonForEnquiry(),\r\n Message: this._renderMessage(),\r\n Recaptcha: this._renderRecaptcha(),\r\n SubmitButton: this._renderSubmitButton()\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n // return (\r\n // <div className='citta-contact'>\r\n // <form className='contact-form' onSubmit={this._handleSend}>\r\n\r\n // {this.props.config.reCaptchaOption ? (\r\n // <div className='recaptcha'>\r\n // {this.state.rCCError\r\n // ? this._renderRecaptchaAlert('recaptcha-error')\r\n // : ''}\r\n // <ReCAPTCHA\r\n // ref={this._recaptchaRef}\r\n // sitekey={this.props.config.reCaptchaSiteKey!}\r\n // onChange={this.onRecaptchaChange}\r\n // />\r\n // </div>\r\n // ) : null}\r\n // <div className='contact-form-send'>\r\n // <Button\r\n // className='contact-form-send-button'\r\n // title={this.props.resources.contactSendButtonText}\r\n // onClick={this._handleSend}\r\n // aria-label={this.props.resources.contactSendButtonText}\r\n // >\r\n // {this.props.resources.contactSendButtonText}\r\n // </Button>\r\n // </div>\r\n // </form>\r\n // </div>\r\n // );\r\n }\r\n\r\n private _renderErrorMessage(): React.ReactNode {\r\n return (\r\n <div>\r\n {this.state.responseReceived && this.response === true ? (\r\n <div className='response-message'>\r\n <p className='response-message-content'>\r\n {this.props.resources.responseSuccessMessage}\r\n </p>\r\n </div>\r\n ) : null\r\n }\r\n {\r\n this.state.responseReceived && this.response === false ? (\r\n <div className='response-message'>\r\n <p className='response-error-message-content'>\r\n {this.props.resources.responseErrorMessage}\r\n </p>\r\n </div>\r\n ) : null\r\n }\r\n </div>\r\n );\r\n }\r\n\r\n private _renderName(): React.ReactNode {\r\n return (\r\n <div className='contact-form-name'>\r\n {this.state.nameError ? this._renderAlert('contact-form-name') : ''}\r\n <label id='contact-form-name__label' aria-label='name' />\r\n <input\r\n ref={this._nameInputRef}\r\n type='text'\r\n onChange={this.handleChange('nameInput')}\r\n className='contact-form-name-text'\r\n aria-label={this.props.resources.contactNamePlaceholderText}\r\n value={this.state.name}\r\n placeholder={this.props.resources.contactNamePlaceholderText}\r\n aria-labelledby='contact-form-name__label contact-form-name__error'\r\n aria-required='true'\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n private _renderEmailAddress(): React.ReactNode {\r\n return (\r\n <div className='contact-form-emailaddress'>\r\n {this.state.eAError || this.state.eAValidationError\r\n ? this._renderAlert('contact-form-emailaddress')\r\n : ''}\r\n <label\r\n id='contact-form-emailaddress__label'\r\n aria-label='emailaddress'\r\n />\r\n <input\r\n ref={this._emailAddressInputRef}\r\n type='text'\r\n onChange={this.handleChange('emailAddress')}\r\n className='contact-form-emailaddress-text'\r\n aria-label={this.props.resources.contactEmailAddressPlaceholderText}\r\n value={this.state.emailAddress}\r\n placeholder={\r\n this.props.resources.contactEmailAddressPlaceholderText\r\n }\r\n aria-labelledby='contact-form-emailaddress__label contact-form-emailaddress__error'\r\n aria-required='true'\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n private _renderPhoneNumber(): React.ReactNode {\r\n return (\r\n <div className='contact-form-phonenumber'>\r\n {this.state.pNError\r\n ? this._renderAlert('contact-form-phonenumber')\r\n : ''}\r\n <label\r\n id='contact-form-phonenumber__label'\r\n aria-label='phonenumber'\r\n />\r\n <input\r\n ref={this._phoneNumberInputRef}\r\n type='tel'\r\n onChange={this.handleChange('phoneNumber')}\r\n className='contact-form-phonenumber-text'\r\n aria-label={this.props.resources.contactPhoneNumberPlaceholderText}\r\n value={this.state.phoneNumber}\r\n placeholder={this.props.resources.contactPhoneNumberPlaceholderText}\r\n aria-labelledby='contact-form-phonenumber__label contact-form-phonenumber__error'\r\n aria-required='true'\r\n />\r\n </div>\r\n );\r\n }\r\n private _renderCountry(): React.ReactNode {\r\n return (\r\n <div className='contact-form-country'>\r\n {this.state.countryError\r\n ? this._renderAlert('contact-form-country')\r\n : ''}\r\n <label id='contact-form-country__label' aria-label='country' />\r\n <input\r\n ref={this._countryInputRef}\r\n type='text'\r\n onChange={this.handleChange('countryInput')}\r\n className='contact-form-country-text'\r\n aria-label={this.props.resources.contactCountryPlaceholderText}\r\n value={this.state.country}\r\n placeholder={this.props.resources.contactCountryPlaceholderText}\r\n aria-labelledby='contact-form-country__label contact-form-country__error'\r\n aria-required='true'\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n private _renderCity(): React.ReactNode {\r\n return (\r\n <div className='contact-form-city'>\r\n {this.state.cityError ? this._renderAlert('contact-form-city') : ''}\r\n <label id='contact-form-city__label' aria-label='city' />\r\n <input\r\n ref={this._cityInputRef}\r\n type='text'\r\n onChange={this.handleChange('cityInput')}\r\n className='contact-form-city-text'\r\n aria-label={this.props.resources.contactCityPlaceholderText}\r\n value={this.state.city}\r\n placeholder={this.props.resources.contactCityPlaceholderText}\r\n aria-labelledby='contact-form-city__label contact-form-city__error'\r\n aria-required='true'\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n private _renderReasonForEnquiry(): React.ReactNode {\r\n return (\r\n <div className='contact-form-reasonforenquiry'>\r\n {this.state.reasonEnquiryError\r\n ? this._renderAlert('contact-form-reasonforenquiry')\r\n : ''}\r\n <label id='contact-form-reasonforenquiry__label' />\r\n <select\r\n ref={this._reasonForEnquirySelectRef}\r\n className='contact-form-reasonforenquiry-text'\r\n aria-label={this.props.resources.contactReasonForEnquiryOption1Text}\r\n value={this.state.reasonForEnquiry}\r\n onChange={this.onChangeSelect}\r\n aria-labelledby='contact-form-reasonforenquiry__label contact-form-reasonforenquiry__error'\r\n aria-required='true'\r\n >\r\n {!this.state.hideFirstElement && (\r\n <option\r\n aria-selected='true'\r\n aria-hidden='true'\r\n value={this.props.resources.contactReasonForEnquiryOption1Text}\r\n >\r\n {this.props.resources.contactReasonForEnquiryOption1Text}\r\n </option>\r\n )}\r\n <option\r\n aria-selected={\r\n (this.state.selectedValue ===\r\n this.props.resources.contactReasonForEnquiryOption2Text &&\r\n 'true') ||\r\n 'false'\r\n }\r\n value={this.props.resources.contactReasonForEnquiryOption2Text}\r\n >\r\n {this.props.resources.contactReasonForEnquiryOption2Text}\r\n </option>\r\n <option\r\n aria-selected={\r\n (this.state.selectedValue ===\r\n this.props.resources.contactReasonForEnquiryOption3Text &&\r\n 'true') ||\r\n 'false'\r\n }\r\n value={this.props.resources.contactReasonForEnquiryOption3Text}\r\n >\r\n {this.props.resources.contactReasonForEnquiryOption3Text}\r\n </option>\r\n <option\r\n aria-selected={\r\n (this.state.selectedValue ===\r\n this.props.resources.contactReasonForEnquiryOption4Text &&\r\n 'true') ||\r\n 'false'\r\n }\r\n value={this.props.resources.contactReasonForEnquiryOption4Text}\r\n >\r\n {this.props.resources.contactReasonForEnquiryOption4Text}\r\n </option>\r\n <option\r\n aria-selected={\r\n (this.state.selectedValue ===\r\n this.props.resources.contactReasonForEnquiryOption5Text &&\r\n 'true') ||\r\n 'false'\r\n }\r\n value={this.props.resources.contactReasonForEnquiryOption5Text}\r\n >\r\n {this.props.resources.contactReasonForEnquiryOption5Text}\r\n </option>\r\n <option\r\n aria-selected={\r\n (this.state.selectedValue ===\r\n this.props.resources.contactReasonForEnquiryOption6Text &&\r\n 'true') ||\r\n 'false'\r\n }\r\n value={this.props.resources.contactReasonForEnquiryOption6Text}\r\n >\r\n {this.props.resources.contactReasonForEnquiryOption6Text}\r\n </option>\r\n <option\r\n aria-selected={\r\n (this.state.selectedValue ===\r\n this.props.resources.contactReasonForEnquiryOption7Text &&\r\n 'true') ||\r\n 'false'\r\n }\r\n value={this.props.resources.contactReasonForEnquiryOption7Text}\r\n >\r\n {this.props.resources.contactReasonForEnquiryOption7Text}\r\n </option>\r\n <option\r\n aria-selected={\r\n (this.state.selectedValue ===\r\n this.props.resources.contactReasonForEnquiryOption8Text &&\r\n 'true') ||\r\n 'false'\r\n }\r\n value={this.props.resources.contactReasonForEnquiryOption8Text}\r\n >\r\n {this.props.resources.contactReasonForEnquiryOption8Text}\r\n </option>\r\n </select>\r\n </div>\r\n );\r\n }\r\n private _renderMessage(): React.ReactNode {\r\n return (\r\n <div className='contact-form-message'>\r\n {this.state.messageError\r\n ? this._renderAlert('contact-form-message')\r\n : ''}\r\n <label id='contact-form-message__label' aria-label='message' />\r\n <textarea\r\n ref={this._messageInputRef}\r\n onChange={this.onChangeTextArea}\r\n className='contact-form-message-text'\r\n aria-label={this.props.resources.contactMessagePlaceholderText}\r\n value={this.state.message}\r\n placeholder={this.props.resources.contactMessagePlaceholderText}\r\n aria-labelledby='contact-form-message__label contact-form-message__error'\r\n aria-required='true'\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n private _renderRecaptcha(): React.ReactNode {\r\n return (\r\n <div>\r\n {\r\n this.props.config.reCaptchaOption ? <div className='recaptcha'>\r\n {this.state.rCCError ? this._renderRecaptchaAlert('recaptcha-error') : ''}\r\n <ReCAPTCHA\r\n ref={this._recaptchaRef}\r\n sitekey={this.props.config.reCaptchaSiteKey!}\r\n onChange={this.onRecaptchaChange}\r\n />\r\n </div> : null\r\n }\r\n </div>\r\n );\r\n }\r\n\r\n private _renderSubmitButton(): React.ReactNode {\r\n return (\r\n <div className='contact-form-send'>\r\n <Button\r\n className='contact-form-send-button'\r\n title={this.props.resources.contactSendButtonText}\r\n onClick={this._handleSend}\r\n aria-label={this.props.resources.contactSendButtonText}\r\n >\r\n {this.props.resources.contactSendButtonText}\r\n </Button>\r\n </div>\r\n );\r\n }\r\n\r\n private onRecaptchaChange = (value: string | null) => {\r\n if (value) {\r\n this.setState({ reCaptchaChecked: true, rCCError: false });\r\n } else {\r\n this.setState({ reCaptchaChecked: false });\r\n }\r\n };\r\n\r\n private handleChange = (inputText: string) => (\r\n e: React.ChangeEvent<HTMLInputElement>\r\n ) => {\r\n const value = e.target.value;\r\n switch (inputText) {\r\n case 'nameInput': {\r\n this.setState({ name: value, nameError: false, reqErrorMsg: false });\r\n break;\r\n }\r\n case 'emailAddress': {\r\n this.setState({\r\n emailAddress: value,\r\n eAError: false,\r\n reqErrorMsg: false,\r\n eAValErrorMsg: false,\r\n eAValidationError: false,\r\n });\r\n break;\r\n }\r\n case 'phoneNumber': {\r\n this.setState({\r\n phoneNumber: value,\r\n pNError: false,\r\n reqErrorMsg: false,\r\n });\r\n break;\r\n }\r\n case 'countryInput': {\r\n this.setState({\r\n country: value,\r\n countryError: false,\r\n reqErrorMsg: false,\r\n });\r\n break;\r\n }\r\n case 'cityInput': {\r\n this.setState({ city: value, cityError: false, reqErrorMsg: false });\r\n break;\r\n }\r\n default:\r\n null;\r\n }\r\n };\r\n\r\n private onChangeSelect = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n this.setState({\r\n reasonForEnquiry: e.target.value || '',\r\n reasonEnquiryError: false,\r\n reqErrorMsg: false,\r\n hideFirstElement: true,\r\n selectedValue: e.target.value,\r\n });\r\n };\r\n\r\n private onChangeTextArea = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n this.setState({\r\n message: e.target.value || '',\r\n reqErrorMsg: false,\r\n messageError: false,\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 _renderAlert(className: string): JSX.Element {\r\n const inputBoxErrors =\r\n this.state.nameError ||\r\n this.state.eAError ||\r\n this.state.pNError ||\r\n this.state.countryError ||\r\n this.state.cityError ||\r\n this.state.reasonEnquiryError ||\r\n this.state.messageError;\r\n if (inputBoxErrors) {\r\n this.requiredErrorMessage = this.props.resources.requiredTextErrorMessage;\r\n }\r\n if (this.state.emailAddress !== '' && this.state.eAValidationError) {\r\n this.eAValidationErrorMessage = this.props.resources.eAValidationErrorMessage;\r\n }\r\n const reqError = this.state.reqErrorMsg;\r\n const eAValError = this.state.eAValErrorMsg;\r\n return (\r\n <>\r\n {reqError && (\r\n <span\r\n className={`${className}__alert`}\r\n role='alert'\r\n aria-live='assertive'\r\n >\r\n {this.requiredErrorMessage && (\r\n <>\r\n <span\r\n className={`${className}__alert-icon`}\r\n aria-hidden='true'\r\n />\r\n {this.requiredErrorMessage}\r\n </>\r\n )}\r\n </span>\r\n )}\r\n {eAValError && (\r\n <span\r\n className={`${className}__alert`}\r\n role='alert'\r\n aria-live='assertive'\r\n >\r\n {this.eAValidationErrorMessage && (\r\n <>\r\n <span\r\n className={`${className}__alert-icon`}\r\n aria-hidden='true'\r\n />\r\n {this.eAValidationErrorMessage}\r\n </>\r\n )}\r\n </span>\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n private _renderRecaptchaAlert(className: string): JSX.Element {\r\n if (this.props.config.reCaptchaOption) {\r\n if (!this.state.reCaptchaChecked) {\r\n this.recaptchaErrorMessage = this.props.resources.recaptchaErrorMessage;\r\n }\r\n }\r\n\r\n const rCCError = this.state.rCCError;\r\n return (\r\n <>\r\n {rCCError && (\r\n <span\r\n className={`${className}__alert`}\r\n role='alert'\r\n aria-live='assertive'\r\n >\r\n {this.recaptchaErrorMessage && (\r\n <>\r\n <span\r\n className={`${className}__alert-icon`}\r\n aria-hidden='true'\r\n />\r\n {this.recaptchaErrorMessage}\r\n </>\r\n )}\r\n </span>\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // tslint:disable-next-line: max-func-body-length cyclomatic-complexity\r\n private async _handleSend(\r\n e:\r\n | React.MouseEvent<HTMLElement>\r\n | React.KeyboardEvent<HTMLElement>\r\n | React.FormEvent<HTMLFormElement>\r\n ): Promise<void> {\r\n this.nameValue =\r\n this._nameInputRef &&\r\n this._nameInputRef.current &&\r\n this._nameInputRef.current.value\r\n ? true\r\n : false;\r\n this.emailAddressValue =\r\n this._emailAddressInputRef &&\r\n this._emailAddressInputRef.current &&\r\n this._emailAddressInputRef.current.value\r\n ? true\r\n : false;\r\n this.phoneNumberValue =\r\n this._phoneNumberInputRef &&\r\n this._phoneNumberInputRef.current &&\r\n this._phoneNumberInputRef.current.value\r\n ? true\r\n : false;\r\n this.countryValue =\r\n this._countryInputRef &&\r\n this._countryInputRef.current &&\r\n this._countryInputRef.current.value\r\n ? true\r\n : false;\r\n this.cityValue =\r\n this._cityInputRef &&\r\n this._cityInputRef.current &&\r\n this._cityInputRef.current.value\r\n ? true\r\n : false;\r\n const reasonEnquiryInnerText =\r\n this._reasonForEnquirySelectRef &&\r\n this._reasonForEnquirySelectRef.current &&\r\n this._reasonForEnquirySelectRef.current.selectedOptions[0].innerText;\r\n this.reasonEnquiryValue =\r\n reasonEnquiryInnerText ===\r\n this.props.resources.contactReasonForEnquiryOption1Text\r\n ? false\r\n : true;\r\n this.messageValue =\r\n this._messageInputRef &&\r\n this._messageInputRef.current &&\r\n this._messageInputRef.current.value\r\n ? true\r\n : false;\r\n const eAVal = this._emailAddressInputRef.current!.value;\r\n\r\n const nA =\r\n this._nameInputRef &&\r\n this._nameInputRef.current &&\r\n this._nameInputRef.current.value\r\n ? this._nameInputRef.current.value\r\n : '';\r\n const eA =\r\n this._emailAddressInputRef &&\r\n this._emailAddressInputRef.current &&\r\n this._emailAddressInputRef.current.value\r\n ? this._emailAddressInputRef.current.value\r\n : '';\r\n const pN =\r\n this._phoneNumberInputRef &&\r\n this._phoneNumberInputRef.current &&\r\n this._phoneNumberInputRef.current.value\r\n ? this._phoneNumberInputRef.current.value\r\n : '';\r\n const cV =\r\n this._countryInputRef &&\r\n this._countryInputRef.current &&\r\n this._countryInputRef.current.value\r\n ? this._countryInputRef.current.value\r\n : '';\r\n const cI =\r\n this._cityInputRef &&\r\n this._cityInputRef.current &&\r\n this._cityInputRef.current.value\r\n ? this._cityInputRef.current.value\r\n : '';\r\n const rE = this.state.reasonForEnquiry ? this.state.reasonForEnquiry : '';\r\n const mV =\r\n this._messageInputRef &&\r\n this._messageInputRef.current &&\r\n this._messageInputRef.current.value\r\n ? this._messageInputRef.current.value\r\n : '';\r\n\r\n if (!this.nameValue) {\r\n this.setState({ nameError: true, reqErrorMsg: true });\r\n } else if (!this.emailAddressValue) {\r\n this.setState({ eAError: true, reqErrorMsg: true });\r\n } else if (!this.isEmailValid(eAVal)) {\r\n this.setState({ eAValidationError: true, eAValErrorMsg: true });\r\n } else if (!this.phoneNumberValue) {\r\n this.setState({ pNError: true, reqErrorMsg: true });\r\n } else if (!this.countryValue) {\r\n this.setState({ countryError: true, reqErrorMsg: true });\r\n } else if (!this.cityValue) {\r\n this.setState({ cityError: true, reqErrorMsg: true });\r\n } else if (!this.reasonEnquiryValue) {\r\n this.setState({ reasonEnquiryError: true, reqErrorMsg: true });\r\n } else if (!this.messageValue) {\r\n this.setState({ messageError: true, reqErrorMsg: true });\r\n } else if (\r\n this.props.config.reCaptchaOption &&\r\n !this.state.reCaptchaChecked\r\n ) {\r\n this.setState({ rCCError: true });\r\n } else {\r\n this.formInputValues =\r\n this.nameValue &&\r\n this.emailAddressValue &&\r\n this.phoneNumberValue &&\r\n this.countryValue &&\r\n this.cityValue &&\r\n this.messageValue\r\n ? true\r\n : false;\r\n if (this.formInputValues) {\r\n try {\r\n const result = await submitContactFormAction(\r\n new SubmitContactFormDataActionInput(nA, eA, pN, cV, cI, rE, mV),\r\n this.props.context.actionContext\r\n );\r\n this.response = result.success;\r\n if (this.response === true) {\r\n this.setState({\r\n name: '',\r\n emailAddress: '',\r\n phoneNumber: '',\r\n country: '',\r\n city: '',\r\n reasonForEnquiry: '',\r\n message: '',\r\n responseReceived: true,\r\n reqErrorMsg: false,\r\n eAValErrorMsg: false,\r\n rCCError: false,\r\n reCaptchaChecked: false,\r\n hideFirstElement:false\r\n });\r\n this._recaptchaRef.current?.reset();\r\n } else {\r\n this.setState({ responseReceived: true });\r\n }\r\n } catch {\r\n console.log('Please fill the form!');\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default CittaContact;\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 { ICittaContactViewProps } from './citta-contact';\r\n\r\nexport default (props: ICittaContactViewProps) => {\r\n const { ContactContainer, ContactForm, ErrorMessage, Name, EmailAddress, PhoneNumber, Country, City, ReasonForEnquiry, Message, Recaptcha, SubmitButton } = props;\r\n return (\r\n <Module {...ContactContainer}>\r\n <Node {...ContactForm}>\r\n {ErrorMessage}\r\n {Name}\r\n {EmailAddress}\r\n {PhoneNumber}\r\n {Country}\r\n {City}\r\n {ReasonForEnquiry}\r\n {Message}\r\n {Recaptcha}\r\n {SubmitButton}\r\n </Node>\r\n </Module>\r\n );\r\n};","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport msdyn365Commerce, {\n constructViewportInformationForImage,\n getImageResizeUrl,\n getLargestGridSettingViewportName,\n getMinMaxWidth,\n IAny,\n IGeneric,\n IViewPort,\n Viewport\n} from '@msdyn365-commerce/core-internal';\nimport { cloneDeep as _cloneDeep } from 'lodash';\nimport {\n BackgroundImageRepeat,\n BackgroundImageSize,\n IBackgroundImageAttributes,\n IBackgroundImageLazyloadAttributes,\n IBackgroundImageProps,\n IBackgroundImageStyle\n} from './container-background-image-interfaces';\n\nconst getBackgroundRepeatProperty = (size: string | undefined, repeat: string | undefined): BackgroundImageRepeat => {\n if (!size || size === 'cover') {\n return 'no-repeat';\n }\n switch (repeat) {\n case 'noRepeat':\n return 'no-repeat';\n case 'repeat':\n return 'repeat';\n default:\n return 'no-repeat';\n }\n};\n\nconst getBackgroundSizeProperty = (size: string | undefined): BackgroundImageSize => {\n switch (size) {\n case 'cover':\n return 'cover';\n case 'contain':\n return 'contain';\n case 'default':\n default:\n return undefined;\n }\n};\n\nconst getDefaultViewports = (): IViewPort => {\n return {\n xs: {\n w: 800,\n h: 600\n },\n sm: {\n w: 1200,\n h: 900\n },\n md: {\n w: 1600,\n h: 900\n },\n lg: {\n w: 1600,\n h: 700\n },\n xl: {\n w: 1600,\n h: 700\n }\n };\n};\n\nconst getAuthoringViewport = (moduleName: string | undefined, layout: string | undefined): IViewPort | undefined => {\n if (!msdyn365Commerce.isBrowser) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const authoringHelper = (window as any)._msdyn365.authoringHelper;\n if (!authoringHelper) {\n return;\n }\n\n // if authoring helper is setup, component is rendering from site builder. Build viewport based on layout selected.\n return constructViewportInformationForImage(moduleName, layout, 'backgroundImage', authoringHelper?.themeSettings) as IViewPort;\n};\n\nexport const buildBackgroundImageStylesByViewport = (props: IBackgroundImageProps): IGeneric<IBackgroundImageStyle> => {\n const { containerType, image, request, configs } = props;\n\n const gridSettings = request.gridSettings ?? {};\n const imageSettings = image.imageSettings;\n\n const styles: IGeneric<IBackgroundImageStyle> = {};\n\n const largestGridSettingViewportName = getLargestGridSettingViewportName(gridSettings);\n if (largestGridSettingViewportName && imageSettings) {\n // in site builder the layout may change, so use authoring viewports.\n const authoringViewPorts = getAuthoringViewport(containerType, configs?.layout);\n const imgSettings = {\n ...imageSettings,\n viewports: { ..._cloneDeep(authoringViewPorts || imageSettings.viewports || getDefaultViewports()) }\n };\n\n // Skip resizing width and height for background images.\n const skipWidthAndHeightSettings = true;\n Object.keys(imgSettings.viewports).map(vp => {\n const viewport = vp as Viewport;\n const minMaxWidth = getMinMaxWidth(gridSettings, imgSettings, viewport, largestGridSettingViewportName);\n const urlSrc = getImageResizeUrl(\n image.src,\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n imgSettings.viewports[viewport],\n imgSettings,\n skipWidthAndHeightSettings,\n image?.externalProvider,\n request?.apiSettings\n );\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n styles[viewport] = {\n maxWidth: minMaxWidth.max,\n minWidth: minMaxWidth.min,\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n minHeight: imgSettings.viewports[viewport]?.h,\n backgroundImage: urlSrc,\n backgroundRepeat: getBackgroundRepeatProperty(configs?.size, configs?.repeat),\n backgroundSize: getBackgroundSizeProperty(configs?.size),\n backgroundPosition: 'center center'\n };\n });\n }\n\n return styles;\n};\n\nexport const setStyleAttribute = (currentStyle: IBackgroundImageStyle): IGeneric<IAny> => {\n let style: IGeneric<IAny> = {};\n if (currentStyle) {\n style = { ...currentStyle };\n style['minWidth'] = undefined;\n style['width'] = '100%';\n if (currentStyle.backgroundImage) {\n style['backgroundImage'] = `url('${currentStyle.backgroundImage}')`;\n }\n }\n return style;\n};\n\nexport const getBackgroundImageLazyloadAttributes = (\n className: string,\n currentStyle: IBackgroundImageStyle | undefined,\n styles: IGeneric<IBackgroundImageStyle>\n): IBackgroundImageLazyloadAttributes => {\n const attributes = {\n role: 'img',\n className: `${className} lazyload`,\n 'data-bgset': getDataBgSetAttribute(styles)\n };\n\n if (currentStyle) {\n attributes['style'] = setStyleAttribute(currentStyle);\n // On lazyload, lazysizes plugin should pick which background image to use based on data-bgset attribute.\n attributes['style']['backgroundImage'] = undefined;\n }\n return attributes;\n};\n\nexport const getBackgroundImageAttributes = (\n className: string,\n currentStyle: IBackgroundImageStyle | undefined\n): IBackgroundImageAttributes => {\n const attributes = {\n role: 'img',\n className\n };\n\n if (currentStyle) {\n attributes['style'] = setStyleAttribute(currentStyle);\n }\n return attributes;\n};\n\nexport const getBgSetMinMaxWidthAttribute = (style: IBackgroundImageStyle): string => {\n if (style.maxWidth) {\n return `[(max-width: ${style.maxWidth}px)]`;\n }\n return '';\n};\n\nexport const getDataBgSetAttribute = (styles: IGeneric<IBackgroundImageStyle>): string => {\n const dataBgSetAttributes: string[] = [];\n Object.keys(styles).map(vp => {\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n if (styles[vp].backgroundImage) {\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n dataBgSetAttributes.push(`${styles[vp].backgroundImage} ${getBgSetMinMaxWidthAttribute(styles[vp])}`);\n }\n });\n\n return dataBgSetAttributes.join(' | ');\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport msdyn365Commerce, { getLargestGridSettingViewportName, IGeneric, isAuthoringEditEnabled } from '@msdyn365-commerce/core-internal';\nimport * as React from 'react';\nimport { isEqual as _isEqual } from 'lodash';\nimport {\n buildBackgroundImageStylesByViewport,\n getBackgroundImageAttributes,\n getBackgroundImageLazyloadAttributes\n} from './container-background-image-helper';\nimport {\n IBackgroundImageAttributes,\n IBackgroundImageProps,\n IBackgroundImageState,\n IBackgroundImageStyle\n} from './container-background-image-interfaces';\n\nconst BACKGROUND_IMAGE_CLASS_NAME = 'ms-container-background-image';\n\n/**\n * BackgroundImage component\n * @extends {React.PureComponent<IBackgroundImageProps, IBackgroundImageState>}\n */\nexport class BackgroundImage extends React.PureComponent<IBackgroundImageProps, IBackgroundImageState> {\n private stylesByViewport: IGeneric<IBackgroundImageStyle>;\n private currentStyle: IBackgroundImageStyle | undefined;\n private mounted: boolean;\n\n constructor(props: IBackgroundImageProps, state: IBackgroundImageState) {\n super(props);\n this.stylesByViewport = buildBackgroundImageStylesByViewport(this.props);\n this._onChangeHandler = this._onChangeHandler.bind(this);\n this.currentStyle = this._getCurrentStyle();\n this.mounted = false;\n this._componentResize = this._componentResize.bind(this);\n this._getCurrentStyle = this._getCurrentStyle.bind(this);\n this.state = { updateAttributes: false };\n }\n\n public componentDidMount(): void {\n if (msdyn365Commerce.isBrowser) {\n window.addEventListener('resize', this._componentResize);\n this.mounted = true;\n this._componentResize();\n }\n }\n\n public componentWillUnmount(): void {\n if (msdyn365Commerce.isBrowser) {\n window.removeEventListener('resize', this._componentResize);\n this.mounted = false;\n }\n }\n\n public shouldComponentUpdate(nextProps: IBackgroundImageProps, nextState: { updateAttributes: boolean }): boolean {\n if (\n this.state !== nextState ||\n this.props.request?.gridSettings !== nextProps.request?.gridSettings ||\n this.props.configs.repeat !== nextProps.configs.repeat ||\n this.props.configs.size !== nextProps.configs.size ||\n this.props.configs.layout !== nextProps.configs.layout ||\n this.props.image?.imageSettings !== nextProps.image?.imageSettings ||\n this.props.image?.src !== nextProps.image?.src\n ) {\n return true;\n }\n return false;\n }\n\n public render(): JSX.Element | null {\n const { children } = this.props;\n\n try {\n this.stylesByViewport = buildBackgroundImageStylesByViewport(this.props);\n this.currentStyle = this._getCurrentStyle();\n\n if (this.currentStyle) {\n const backgroundImageClassName = isAuthoringEditEnabled(this.props.request)\n ? `${BACKGROUND_IMAGE_CLASS_NAME} ms-editable-field enabled`\n : BACKGROUND_IMAGE_CLASS_NAME;\n const processedAtributes = this._processAttributes(\n backgroundImageClassName,\n this.currentStyle,\n this.stylesByViewport,\n this._isLazyload()\n );\n const attributes = this._getAttributes(processedAtributes);\n const eventHandlers = isAuthoringEditEnabled(this.props.request) ? { onDoubleClick: this._onChangeHandler } : {};\n\n if (this.state.updateAttributes) {\n // Update component with the latest attributes.\n return (\n <div {...eventHandlers} {...attributes}>\n {children}\n </div>\n );\n } else if (this._isLazyload()) {\n // On lazyload, only include the class name on the first render.\n return (\n <div {...eventHandlers} className={backgroundImageClassName}>\n {children}\n </div>\n );\n } else {\n // On lazyload disabled, render the default attributes from server side.\n return (\n <div {...eventHandlers} {...this._getDefaultAttributes()}>\n {children}\n </div>\n );\n }\n } else {\n // in no style is found, return the container content.\n return <>{children}</>;\n }\n } catch {\n // in case of any failure, return the container content.\n return <>{children}</>;\n }\n }\n\n private _processAttributes(\n className: string,\n currentStyle: IBackgroundImageStyle,\n stylesByViewport: IGeneric<IBackgroundImageStyle>,\n lazyLoad: boolean\n ) {\n if (lazyLoad) {\n return getBackgroundImageLazyloadAttributes(className, currentStyle, stylesByViewport);\n } else {\n return getBackgroundImageAttributes(className, currentStyle);\n }\n }\n\n private _getAttributes(processedAtributes: IBackgroundImageAttributes) {\n return { ...processedAtributes, style: { ...processedAtributes?.style } };\n }\n\n private _onChangeHandler(event: React.SyntheticEvent | { target: { value: string } }): void {\n if (event.target === (event as React.SyntheticEvent).currentTarget) {\n const binding: any = this.props.image;\n const eventTarget: any = event.target;\n binding.$type = eventTarget.value;\n }\n }\n\n private _componentResize(): void {\n if (msdyn365Commerce.isBrowser) {\n const selectedStyle = this._getCurrentStyle();\n\n if (this.mounted || (selectedStyle && !_isEqual(this.currentStyle, selectedStyle))) {\n this.setState({ updateAttributes: true });\n }\n }\n }\n\n private _getCurrentStyle(): IBackgroundImageStyle | undefined {\n if (msdyn365Commerce.isBrowser) {\n const winInnerWidth: number = window.innerWidth;\n let selectedStyle: IBackgroundImageStyle | undefined;\n Object.keys(this.stylesByViewport).map(vp => {\n if (\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n (this.stylesByViewport[vp]?.minWidth || this.stylesByViewport[vp]?.maxWidth) &&\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n (this.stylesByViewport[vp]?.minWidth || 0) <= winInnerWidth &&\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n winInnerWidth <= (this.stylesByViewport[vp]?.maxWidth || Number.MAX_SAFE_INTEGER)\n ) {\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n selectedStyle = this.stylesByViewport[vp];\n }\n });\n return selectedStyle;\n } else {\n return this._getDefaultStyle();\n }\n }\n\n private _isLazyload(): boolean {\n // Lazyload by default if nothing is specified\n return !this.props.image?.imageSettings?.disableLazyLoad;\n }\n\n private _getDefaultStyle(): IBackgroundImageStyle | undefined {\n const { request } = this.props;\n const largestGridSettingViewportName = getLargestGridSettingViewportName(request.gridSettings ?? {});\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n return this.stylesByViewport[largestGridSettingViewportName];\n }\n\n private _getDefaultAttributes(): IBackgroundImageAttributes {\n const style = this._getDefaultStyle();\n const processedAtributes = style\n ? this._processAttributes(BACKGROUND_IMAGE_CLASS_NAME, style, this.stylesByViewport, this._isLazyload())\n : {};\n return this._getAttributes(processedAtributes);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent, IImageData, IRequestContext, Text } from '@msdyn365-commerce/core';\nimport * as React from 'react';\nimport { BackgroundImage } from './container-background-image/container-backgroud-image';\n\n/**\n * Heading options\n */\nexport interface IHeadingComponentProps {\n /**\n * Heading text\n */\n headingText?: string;\n /**\n * Heading tag (h1, h2, h3, h4, h5, h6)\n */\n tag?: HeadingTag;\n /**\n * Heading text size (sm, md, lg, xl)\n */\n textSize?: TextSize;\n\n requestContext: IRequestContext;\n\n handleTextChange(event: ContentEditableEvent): string;\n}\n\nexport type HeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\nexport type TextSize = 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Container class options\n */\nexport interface IContainerProps {\n /**\n * CSS class name\n */\n className?: string;\n /**\n * Bootstrap supported container types\n */\n containerType?: string;\n /**\n * type name\n */\n typeName?: string;\n /**\n * id of container\n */\n id?: string;\n /**\n * React children\n */\n children: React.ReactNode;\n /**\n * Request context\n */\n request?: IRequestContext;\n /**\n * background image\n */\n backgroundImage?: IImageData;\n /**\n * background image repeat property\n */\n backgroundImageRepeat?: string;\n /**\n * background image size property\n */\n backgroundImageSize?: string;\n /**\n * module layout property\n */\n moduleLayout?: string;\n /**\n * background color\n */\n backgroundColor?: string;\n}\n\nconst getContainerType = (containerType: string | undefined) => {\n switch (containerType) {\n case 'container':\n return 'container';\n case 'fluid':\n default:\n return 'fluid';\n }\n};\n\n/**\n * HOC to create bootstrap container div. If no container type is specified children are rendered.\n * @param options IContainerClasses\n */\nexport const Container: React.SFC<IContainerProps> = (props: IContainerProps): JSX.Element => {\n const {\n containerType,\n className,\n typeName,\n id,\n children,\n backgroundImage,\n request,\n backgroundImageRepeat,\n backgroundImageSize,\n moduleLayout,\n backgroundColor\n } = props;\n const customClassName = className ? ` ${className}` : '';\n\n let containerContent = children;\n if (containerType) {\n containerContent = <div className='row'>{containerContent}</div>;\n }\n\n if (backgroundImage && backgroundImage.src && backgroundImage.imageSettings && request) {\n containerContent = (\n <BackgroundImage\n containerType={typeName}\n request={request}\n image={backgroundImage}\n configs={{\n repeat: backgroundImageRepeat,\n size: backgroundImageSize,\n layout: moduleLayout\n }}\n >\n {containerContent}\n </BackgroundImage>\n );\n }\n\n const containerStyle: React.CSSProperties | undefined = backgroundColor ? { backgroundColor } : undefined;\n\n return containerType ? (\n <div className={`${typeName} ${id} ${getContainerType(containerType)}${customClassName}`} style={containerStyle}>\n {containerContent}\n </div>\n ) : (\n <div className={`${typeName} ${id}${customClassName}`} style={containerStyle}>\n {containerContent}\n </div>\n );\n};\n\nexport const HeadingComponent = (props: IHeadingComponentProps & { className: string }): JSX.Element | null => {\n const { tag, headingText, textSize, className } = props;\n const Tag = tag || 'h2';\n const classNameWithHeading = textSize ? `heading ${textSize} ${className}` : `heading ${className}`;\n return (\n (headingText && (\n <Text\n className={classNameWithHeading}\n tag={Tag}\n text={headingText}\n editProps={{ onEdit: props.handleTextChange, requestContext: props.requestContext }}\n />\n )) ||\n null\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport * as twoSlots from '../modules/default-container-2-slots/default-container-2-slots.props.autogenerated';\nimport * as threeSlots from '../modules/default-container-3-slots/default-container-3-slots.props.autogenerated';\n\n// eslint-disable-next-line security/detect-unsafe-regex\nconst sizePattern = /col(_(\\d|auto){1,2}){2,}/;\n\nexport interface IShowErrorOptions {\n isDebug?: boolean;\n isEditor?: boolean;\n}\n\nexport interface IViewPortOptions {\n xsmall?: threeSlots.xsmall | twoSlots.xsmall;\n small?: threeSlots.small | twoSlots.small;\n medium?: threeSlots.medium | twoSlots.medium;\n large?: threeSlots.large | twoSlots.large;\n}\n\nconst translatePrefix = (prefix: `large` | `medium` | `small` | `xsmall` | undefined) => {\n switch (prefix && prefix.toLowerCase()) {\n case 'large':\n return 'lg';\n case 'medium':\n return 'md';\n case 'small':\n return 'sm';\n case 'xsmall':\n default:\n return '';\n }\n};\n\n/**\n * converts config option and size to bootstrap col class name\n * If size is auto or config option is invalid col-auto will be returned\n * If size is xsmall or size is invalid col-{config} will be returned\n * @param config configuration option e.g. col_12_12\n * @param size bootstrap gridsize\n */\nexport const getColumnSizes = (config: string, size?: `large` | `medium` | `small` | `xsmall`): string[] | boolean => {\n if (!sizePattern.exec(config)) {\n return false;\n }\n const cols = config.split('_').slice(1);\n const translatedSize = translatePrefix(size);\n const sizePrefix = (translatedSize && `-${translatedSize}`) || '';\n return cols.map((colWidth: string) => `col${sizePrefix}-${colWidth}`);\n};\n\nexport const showErrors = (context?: ICoreContext): Boolean => {\n const { isDebug, isEditor }: IShowErrorOptions = (context && context.request && context.request.params) || {};\n return !!isDebug || !!isEditor;\n};\n\n/**\n * Converts viewport configuration into a two dimensional array of class names\n */\nexport const getColClassArray = (options: IViewPortOptions): string[][] =>\n <string[][]>(\n [\n options.xsmall && getColumnSizes(options.xsmall),\n options.small && getColumnSizes(options.small, 'small'),\n options.medium && getColumnSizes(options.medium, 'medium'),\n options.large && getColumnSizes(options.large, 'large')\n ].filter(Boolean)\n );\n\nexport const colWidths = new Map<string, string>([\n ['one', 'col-md-1'],\n ['two', 'col-md-2'],\n ['three', 'col-md-3'],\n ['four', 'col-md-4'],\n ['six', 'col-md-6'],\n ['twelve', 'col-md-12']\n]);\n"],"names":["DefaultContainer","React","constructor","props","super","handleTextChange","event","this","config","heading","headingText","target","value","render","slots","telemetry","data","log","LogLevel","Debug","values","id","typeName","headingProps","_objectSpread","requestContext","context","request","Container","containerType","className","backgroundImage","backgroundImageRepeat","backgroundImageSize","moduleLayout","msdyn365__moduleLayout","backgroundColor","HeadingComponent","Object","assign","content","map","children","index","_getChildColClassName","key","layout","childrenWidth","_getWidthClass","s","colWidths","get","Default2SlotContainer","_getColClassName","classNames","getColClassArray","length","reduce","memo","_ref","left","right","push","slotsClassNames","Warning","join","showErrors","slice","slot","Default3SlotContainer","center","CittaContact","state","name","emailAddress","phoneNumber","country","city","reasonForEnquiry","message","inputState","nameError","eAError","pNError","countryError","cityError","reasonEnquiryError","messageError","reqErrorMsg","eAValErrorMsg","eAValidationError","responseReceived","rCCError","reCaptchaChecked","hideFirstElement","selectedValue","nameValue","emailAddressValue","phoneNumberValue","countryValue","cityValue","messageValue","reasonEnquiryValue","formInputValues","response","onRecaptchaChange","setState","handleChange","inputText","e","onChangeSelect","onChangeTextArea","isEmailValid","email","test","_nameInputRef","_emailAddressInputRef","_phoneNumberInputRef","_countryInputRef","_cityInputRef","_reasonForEnquirySelectRef","_messageInputRef","_recaptchaRef","_handleSend","bind","formProps","onSubmit","tag","viewProps","ContactContainer","moduleProps","ContactForm","Name","_renderName","ErrorMessage","_renderErrorMessage","EmailAddress","_renderEmailAddress","PhoneNumber","_renderPhoneNumber","Country","_renderCountry","City","_renderCity","ReasonForEnquiry","_renderReasonForEnquiry","Message","_renderMessage","Recaptcha","_renderRecaptcha","SubmitButton","_renderSubmitButton","renderView","resources","responseSuccessMessage","responseErrorMessage","_renderAlert","ref","type","onChange","contactNamePlaceholderText","placeholder","contactEmailAddressPlaceholderText","contactPhoneNumberPlaceholderText","contactCountryPlaceholderText","contactCityPlaceholderText","contactReasonForEnquiryOption1Text","contactReasonForEnquiryOption2Text","contactReasonForEnquiryOption3Text","contactReasonForEnquiryOption4Text","contactReasonForEnquiryOption5Text","contactReasonForEnquiryOption6Text","contactReasonForEnquiryOption7Text","contactReasonForEnquiryOption8Text","contactMessagePlaceholderText","reCaptchaOption","_renderRecaptchaAlert","ReCAPTCHA","sitekey","reCaptchaSiteKey","Button","title","contactSendButtonText","onClick","requiredErrorMessage","requiredTextErrorMessage","eAValidationErrorMessage","reqError","eAValError","role","recaptchaErrorMessage","async","current","reasonEnquiryInnerText","selectedOptions","innerText","eAVal","nA","eA","pN","cV","cI","rE","mV","result","submitContactFormAction","SubmitContactFormDataActionInput","actionContext","_this$_recaptchaRef$c","success","reset","_unused","console","__decorate","observer","Module","Node","getBackgroundRepeatProperty","size","repeat","getBackgroundSizeProperty","buildBackgroundImageStylesByViewport","_request$gridSettings","image","configs","gridSettings","imageSettings","styles","largestGridSettingViewportName","getLargestGridSettingViewportName","authoringViewPorts","getAuthoringViewport","moduleName","msdyn365Commerce","isBrowser","authoringHelper","window","_msdyn365","constructViewportInformationForImage","themeSettings","imgSettings","viewports","_cloneDeep2","xs","w","h","sm","md","lg","xl","skipWidthAndHeightSettings","keys","vp","_imgSettings$viewport","viewport","minMaxWidth","getMinMaxWidth","urlSrc","getImageResizeUrl","src","externalProvider","apiSettings","maxWidth","max","minWidth","min","minHeight","backgroundRepeat","backgroundSize","backgroundPosition","setStyleAttribute","currentStyle","style","undefined","getDataBgSetAttribute","dataBgSetAttributes","BACKGROUND_IMAGE_CLASS_NAME","BackgroundImage","stylesByViewport","_onChangeHandler","_getCurrentStyle","mounted","_componentResize","updateAttributes","componentDidMount","addEventListener","componentWillUnmount","removeEventListener","shouldComponentUpdate","nextProps","nextState","_this$props$request","_nextProps$request","_this$props$image","_nextProps$image","_this$props$image2","_nextProps$image2","backgroundImageClassName","isAuthoringEditEnabled","processedAtributes","_processAttributes","_isLazyload","attributes","_getAttributes","eventHandlers","onDoubleClick","_getDefaultAttributes","lazyLoad","getBackgroundImageLazyloadAttributes","getBackgroundImageAttributes","currentTarget","binding","eventTarget","$type","selectedStyle","_isEqual2","winInnerWidth","innerWidth","_this$stylesByViewpor","_this$stylesByViewpor2","_this$stylesByViewpor3","_this$stylesByViewpor4","Number","MAX_SAFE_INTEGER","_getDefaultStyle","_this$props$image3","disableLazyLoad","getContainerType","customClassName","containerContent","containerStyle","textSize","Tag","classNameWithHeading","Text","text","editProps","onEdit","sizePattern","getColumnSizes","exec","cols","split","translatedSize","prefix","toLowerCase","translatePrefix","sizePrefix","colWidth","isDebug","isEditor","params","options","xsmall","small","medium","large","filter","Boolean","Map"],"sourceRoot":""}