{"version":3,"file":"static/js/63276e1d5c49109595b8.bundle.js","mappings":"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","sources":["webpack://goodwill-loyalty/./src/modules/simple-form/actions/simple-form-submit-action.ts?eed3","webpack://goodwill-loyalty/./src/modules/simple-form/simple-form.tsx?6d67","webpack://goodwill-loyalty/./src/utilities/inject-helper.ts?0256","webpack://goodwill-loyalty/./src/utilities/class-name-helper.ts?dd10","webpack://goodwill-loyalty/./lib/simple-form/module-registration.js?332b","webpack://goodwill-loyalty/external var \"React\"?0d3b","webpack://goodwill-loyalty/external var \"ReactDOM\"?853b"],"sourcesContent":["import { createObservableDataAction, IAction, IActionInput, IActionContext, sendRequest, CacheType } from '@msdyn365-commerce/core';\r\n\r\n/**\r\n * Simple Form Input Action\r\n */\r\nexport class SimpleFormInput implements IActionInput {\r\n\r\n /**\r\n * The user's form data\r\n */\r\n public formData: {};\r\n\r\n /**\r\n * The form service endpoint\r\n */\r\n public serviceEndpoint: string;\r\n\r\n constructor(\r\n formData: {},\r\n serviceEndpoint: string\r\n ) {\r\n this.formData = formData;\r\n this.serviceEndpoint = serviceEndpoint;\r\n }\r\n\r\n public getCacheKey = () => 'SimpleForm';\r\n public getCacheObjectType = () => 'SimpleForm';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n/**\r\n * This data action allows submitting the form to the service\r\n */\r\nasync function submitSimpleForm(input: SimpleFormInput, ctx: IActionContext): Promise {\r\n return sendRequest(input.serviceEndpoint, 'post', input.formData).then((response) => {\r\n if (response.status !== 200 && response.status !== 201) {\r\n throw new Error('[simpleFormAction] Form failed to submit');\r\n }\r\n return 'success';\r\n }).catch(() => {\r\n throw new Error('[simpleFormAction] Form failed to submit');\r\n });\r\n}\r\n\r\nexport const SimpleFormDataAction = createObservableDataAction({\r\n action: >submitSimpleForm\r\n});\r\n\r\nexport default SimpleFormDataAction;\r\n","import * as React from 'react';\r\nimport { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport classnames from 'classnames';\r\n\r\nimport { clsHelper } from '../../utilities/class-name-helper';\r\nimport { injectScript } from '../../utilities/inject-helper';\r\n\r\nimport { RichTextComponent, RichText, IImageData, Image } from '@msdyn365-commerce/core';\r\nimport { Button, Heading, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport { IFormInputsData, FormInputsFieldType, IOptionsData, ISimpleFormProps } from './simple-form.props.autogenerated';\r\nimport { SimpleFormInput, SimpleFormDataAction } from './actions/simple-form-submit-action';\r\n\r\n//==============================================================================\r\n// CLASS NAME UTILITY\r\n//==============================================================================\r\nconst BASE_CLASS = 'simple-form';\r\nconst cls = (fragment: string) => clsHelper(BASE_CLASS, fragment);\r\n\r\n//==============================================================================\r\n// CLASS DEFINITION\r\n//==============================================================================\r\n/**\r\n * SimpleForm component\r\n * @extends {React.Component>}\r\n */\r\n//==============================================================================\r\n@observer\r\nclass SimpleForm extends React.Component> {\r\n //==========================================================================\r\n // VARIABLES\r\n //==========================================================================\r\n @observable private modalIsOpen = true;\r\n @observable private statusMessages: string[] = [];\r\n @observable private statusMessageClass: string = '';\r\n @observable private isSubmitting: boolean = false;\r\n @observable private formSuccess: boolean = false;\r\n private readonly recaptchaSiteKey?: string = this.props.config.recaptchaSiteKey;\r\n\r\n private formData = {};\r\n\r\n private validationFields: {\r\n id: string,\r\n name: string,\r\n fieldType: string,\r\n isRequired: boolean,\r\n regex: string,\r\n error: string\r\n }[] = [];\r\n\r\n private confirmEmailField: IFormInputsData;\r\n\r\n //==========================================================================\r\n // PUBLIC METHODS\r\n //==========================================================================\r\n //------------------------------------------------------\r\n // Constructor\r\n //------------------------------------------------------\r\n constructor(props: ISimpleFormProps<{}>) {\r\n super(props);\r\n\r\n props.config.formInputs?.forEach(input => {\r\n this.formData[input.id] = '';\r\n if (input.isRequired || input.regex) {\r\n this.validationFields.push({\r\n id: input.id,\r\n name: input.label,\r\n fieldType: input.fieldType,\r\n isRequired: !!input.isRequired,\r\n regex: input.regex || '',\r\n error: input.error || ''\r\n });\r\n }\r\n });\r\n\r\n this.confirmEmailField = {\r\n id: 'confirmEmail',\r\n label: props.resources.simpleForm_confirmEmailLabel,\r\n fieldType: 'email' as FormInputsFieldType,\r\n isRequired: true,\r\n className: 'email-confirm'\r\n };\r\n }\r\n\r\n //------------------------------------------------------\r\n // Invoked immediately after component is mounted\r\n //------------------------------------------------------\r\n public componentDidMount(): void {\r\n // Only injects reCAPTCHA script if site key is provided in config\r\n if (this.recaptchaSiteKey) {\r\n injectScript(`https://www.google.com/recaptcha/api.js?render=${this.recaptchaSiteKey}`);\r\n }\r\n }\r\n\r\n //------------------------------------------------------\r\n // Render function\r\n //------------------------------------------------------\r\n public render(): JSX.Element | null {\r\n const isModal = this.props.config.isModal;\r\n\r\n if (isModal) {\r\n return this._renderModal();\r\n }\r\n\r\n return this._renderForm();\r\n\r\n }\r\n\r\n //==========================================================================\r\n // PRIVATE METHODS\r\n //==========================================================================\r\n //------------------------------------------------------\r\n // Close modal if modal mode is selected\r\n //------------------------------------------------------\r\n private readonly _closeModal = (): void => {\r\n this.modalIsOpen = false;\r\n const cookies = this.props.context.request.cookies;\r\n const maxAge = this.props.config.maxAge ? this.props.config.maxAge * 24 * 60 * 60 : undefined;\r\n cookies.set(this.props.config.cookieName!, true, {maxAge: maxAge});\r\n };\r\n\r\n //------------------------------------------------------\r\n // Validate form before submit\r\n //------------------------------------------------------\r\n private readonly _validateForm = (): string[] => {\r\n const { config, resources } = this.props;\r\n const validationErrors: string[] = [];\r\n\r\n this.validationFields.forEach(field => {\r\n if (!this.formData[field.id] && field.isRequired) {\r\n validationErrors.push(`${field.name} ${resources.simpleForm_isRequiredMessage}`);\r\n } else if (this.formData[field.id] && field.regex) {\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n const regex = new RegExp(field.regex);\r\n if (!regex.test(this.formData[field.id])) {\r\n validationErrors.push(field.error);\r\n }\r\n }\r\n\r\n if (field.fieldType === 'email' && config.confirmEmail && this.formData[field.id] !== this.formData[this.confirmEmailField.id]) {\r\n validationErrors.push(resources.simpleForm_confirmEmailError);\r\n }\r\n });\r\n\r\n return validationErrors;\r\n };\r\n\r\n //------------------------------------------------------\r\n // Set success or error message\r\n //------------------------------------------------------\r\n private readonly _setStatusMessage = (messages: string[], isSuccess: boolean): void => {\r\n this.statusMessages = messages;\r\n this.statusMessageClass = isSuccess ? 'success' : 'error';\r\n if (!isSuccess) { return; }\r\n\r\n // Only set a timeout for success message if modal mode is true\r\n if (this.props.config.isModal) {\r\n setTimeout(() => {\r\n this.statusMessages = [];\r\n this.modalIsOpen = !isSuccess;\r\n }, this.props.config.messageTimeout || 3000);\r\n }\r\n };\r\n\r\n //------------------------------------------------------\r\n // Render modal if modal mode is selected\r\n //------------------------------------------------------\r\n private readonly _renderModal = (): JSX.Element | null => {\r\n const cookies = this.props.context.request.cookies;\r\n if (!cookies.isConsentGiven() || cookies.get(this.props.config.cookieName!).value) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {this._renderForm()}\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n //------------------------------------------------------\r\n // Render form\r\n //------------------------------------------------------\r\n private readonly _renderForm = (): JSX.Element => {\r\n const { config, resources, slots } = this.props;\r\n const hasAdditionalContent = !!slots?.additionalContent?.length;\r\n const useRecaptcha = !!this.recaptchaSiteKey;\r\n\r\n return (\r\n
\r\n\r\n
\r\n {config.logoImage && this._renderImage(config.logoImage, this.props, cls('logo'))}\r\n {config.title && }\r\n\r\n {/* Do not render form after successfully submitting it */}\r\n {!this.formSuccess && (\r\n <>\r\n {config.headerText && this._renderRichText(config.headerText, cls('header'))}\r\n
\r\n
\r\n {this.props.config.formInputs?.map((input: IFormInputsData, index: number) => (\r\n \r\n {this._renderInputGroup(input)}\r\n {input.fieldType === 'email' && config.confirmEmail && this._renderInputGroup(this.confirmEmailField)}\r\n \r\n ))}\r\n
\r\n {config.footerText && this._renderRichText(config.footerText, cls('footer'))}\r\n this._onSubmit(this.recaptchaSiteKey)}\r\n disabled={this.isSubmitting}\r\n >\r\n {config.submitText || resources.simpleForm_submitButton}\r\n \r\n
\r\n \r\n )}\r\n\r\n {!!this.statusMessages.length && this._renderMessages()}\r\n\r\n {config.postFooterText && this._renderRichText(config.postFooterText, cls('post-footer'))}\r\n
\r\n\r\n {hasAdditionalContent && this._renderSlotItems(slots.additionalContent, cls('content'))}\r\n\r\n
\r\n );\r\n };\r\n\r\n //------------------------------------------------------\r\n // Render each input group\r\n //------------------------------------------------------\r\n private readonly _renderInputGroup = (input: IFormInputsData): JSX.Element => {\r\n const fieldMap = {\r\n string: this._renderInput,\r\n email: this._renderInput,\r\n checkbox: this._renderInput,\r\n select: this._renderSelect,\r\n textarea: this._renderTextarea\r\n };\r\n\r\n return (\r\n
\r\n \r\n {fieldMap[input.fieldType](input)}\r\n
\r\n );\r\n };\r\n\r\n //------------------------------------------------------\r\n // Render input element\r\n //------------------------------------------------------\r\n private readonly _renderInput = (input: IFormInputsData): JSX.Element => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n //------------------------------------------------------\r\n // Render select dropdown element\r\n //------------------------------------------------------\r\n private readonly _renderSelect = (input: IFormInputsData): JSX.Element => {\r\n // If option has not been selected, assign first option value as default\r\n if (!this.formData[input.id] && input.options?.length) {\r\n this.formData[input.id] = input.options[0].value;\r\n }\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n //------------------------------------------------------\r\n // Render textarea element\r\n //------------------------------------------------------\r\n private readonly _renderTextarea = (input: IFormInputsData): JSX.Element => {\r\n return (\r\n