{"version":3,"file":"static/js/4945d5000ba19a66b460.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/eve-form/context/FormContext.ts?30cf","webpack://Msdyn365.Commerce.Online/./src/modules/eve-form/eve-form.tsx?d25b","webpack://Msdyn365.Commerce.Online/./src/modules/eve-form/eve-form.view.tsx?acc0","webpack://Msdyn365.Commerce.Online/./src/utilities/normalizeName.ts?3142","webpack://Msdyn365.Commerce.Online/./lib/eve-form/module-registration.js?50a5","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*\r\n * EVENICA FORM CONTEXT\r\n * Author: Michael Reed-Bennet\r\n */\r\n\r\nimport { createContext } from 'react';\r\n\r\n/* INTERFACE: IFormField\r\n * Purpose: Holds individual field information.\r\n */\r\nexport interface IFormField {\r\n name: string;\r\n value: string;\r\n isRequired: boolean;\r\n validation: IFieldValidation[];\r\n errors: string[];\r\n reset: () => void;\r\n friendly: string;\r\n}\r\n\r\n/* INTERFACE: IFieldValidation\r\n * Purpose: Generic Interface for taking validation regexes from individual field modules.\r\n */\r\nexport interface IFieldValidation {\r\n regex: string;\r\n errorMessage: string;\r\n isRequiredValidation?: boolean;\r\n invalidSelection?: string;\r\n}\r\n\r\n/* INTERFACE: IFormContext\r\n * Purpose: Context interface for use with eve-form and it's child modules.\r\n */\r\nexport interface IFormContext {\r\n registerField: (fieldData: IFormField) => void;\r\n updateField: (fieldName: string, fieldValue: string, friendlyName: string) => void;\r\n fields: Record;\r\n}\r\n\r\nconst fields: Record = {};\r\nconst _errorMsg = 'Must be used within a provider';\r\n\r\nconst updateField = (fieldName: string, fieldValue: string, friendlyName: string) => {\r\n throw Error(_errorMsg);\r\n};\r\nconst registerField = (fieldData: IFormField) => {\r\n throw Error(_errorMsg);\r\n};\r\n\r\nexport const FormContext = createContext({ registerField, updateField, fields });\r\n\r\nconst { Consumer: FormConsumer, Provider: FormProvider } = FormContext;\r\nexport { FormConsumer, FormProvider };\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport { postFormDataAsync } from '../../actions/DataActionExtension.g';\r\nimport { IFormSubmissionValue } from '../../actions/DataServiceEntities.g';\r\nimport { normalizeName } from '../../utilities/normalizeName';\r\nimport { FormProvider, IFieldValidation, IFormField } from './context/FormContext';\r\n\r\nimport { IEveFormData } from './eve-form.data';\r\nimport { IEveFormProps } from './eve-form.props.autogenerated';\r\n\r\nexport interface IEveFormViewProps extends IEveFormProps {\r\n handleSubmit: () => {};\r\n resetForm: () => {};\r\n statusMessage: string;\r\n}\r\n\r\nexport interface IEveFormState {\r\n fields: Record;\r\n statusMessage: string;\r\n}\r\n\r\n/**\r\n *\r\n * EveForm component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass EveForm extends React.PureComponent, IEveFormState> {\r\n constructor(props: Readonly>) {\r\n super(props);\r\n\r\n this.state = { fields: {}, statusMessage: '' };\r\n\r\n this.registerField = this.registerField.bind(this);\r\n this.updateField = this.updateField.bind(this);\r\n this.resetForm = this.resetForm.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n /**\r\n * Registers a field to context so it can be updated and read by the form.\r\n * @param fieldData\r\n */\r\n private registerField(fieldData: IFormField): void {\r\n const fieldName = normalizeName(fieldData.name);\r\n if (!(fieldName in this.state.fields)) {\r\n this.setState(prevState => ({\r\n fields: {\r\n ...prevState.fields,\r\n [fieldName]: fieldData\r\n }\r\n }));\r\n }\r\n }\r\n\r\n /**\r\n * When called, updates the field with the given name to have the value that is given.\r\n * @param fieldName\r\n * @param fieldValue\r\n * @returns\r\n */\r\n private updateField(fieldName: string, fieldValue: string, friendlyName: string) {\r\n const normalizedName = normalizeName(fieldName);\r\n if (!(normalizedName in this.state.fields)) {\r\n return;\r\n }\r\n\r\n const fields = { ...this.state.fields };\r\n const fieldToModify = fields[normalizedName];\r\n fields[normalizedName] = {\r\n ...fieldToModify,\r\n value: fieldValue,\r\n friendly: friendlyName,\r\n errors: []\r\n };\r\n\r\n this.setState({ fields });\r\n }\r\n\r\n /**\r\n * Handles the submission of the form. Validates all fields and then makes CSU call if all fields pass validation.\r\n * @returns void\r\n */\r\n private handleSubmit(): void {\r\n // validate\r\n const fields = { ...this.state.fields };\r\n const keys = Object.keys(fields);\r\n let hasErrors: boolean = false;\r\n keys.forEach(key => {\r\n const f = fields[key];\r\n const fieldErrors = this.validateField(f.validation, f.value);\r\n if (fieldErrors.length) {\r\n hasErrors = true;\r\n }\r\n fields[key] = {\r\n ...f,\r\n errors: fieldErrors\r\n };\r\n });\r\n\r\n if (hasErrors) {\r\n this.setState({ fields, statusMessage: this.props.resources.validationFailMessage });\r\n return;\r\n }\r\n\r\n const formValues: IFormSubmissionValue[] = [];\r\n keys.forEach(key => {\r\n const f = fields[key];\r\n formValues.push({ Name: key, Value: f.value, Friendly: f.friendly });\r\n });\r\n\r\n postFormDataAsync(\r\n { callerContext: this.props.context.actionContext },\r\n 'eve',\r\n formValues,\r\n this.props.config.formTitle ? this.props.config.formTitle : '',\r\n this.props.config.mailTo ? this.props.config.mailTo : ''\r\n ).then(response => {\r\n if (response.Success) {\r\n this.setState({ statusMessage: this.props.resources.successMessage });\r\n this.resetForm();\r\n } else {\r\n this.setState({ statusMessage: this.props.resources.failMessage });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Validates the given field with the given validation objects. Returns an array of strings containing error messages.\r\n * @param validationRules\r\n * @param fieldValue\r\n * @returns string []\r\n */\r\n private validateField(validationRules: IFieldValidation[], fieldValue: string): string[] {\r\n const errors: string[] = [];\r\n validationRules.forEach(rule => {\r\n if (rule.isRequiredValidation) {\r\n if (!fieldValue) {\r\n errors.push(rule.errorMessage);\r\n }\r\n } else if (rule.invalidSelection && rule.invalidSelection === fieldValue) {\r\n errors.push(rule.errorMessage);\r\n }\r\n\r\n if (errors.length === 0) {\r\n const regex = new RegExp(rule.regex, 'g');\r\n const isValid = regex.test(`${fieldValue}`);\r\n if (!isValid) {\r\n errors.push(rule.errorMessage);\r\n }\r\n }\r\n });\r\n return errors;\r\n }\r\n\r\n /**\r\n * resets all fields in the form to their default state\r\n */\r\n private resetForm() {\r\n const fields = { ...this.state.fields };\r\n for (const key in fields) {\r\n if (fields.hasOwnProperty(key)) {\r\n fields[key].reset();\r\n }\r\n }\r\n this.setState({ statusMessage: '', fields });\r\n }\r\n\r\n /**\r\n * This renders the module.\r\n * @returns JSX.Element | Null\r\n */\r\n public render(): JSX.Element | null {\r\n const { registerField, updateField } = this;\r\n const { fields } = this.state;\r\n return (\r\n \r\n {this.props.renderView({\r\n ...this.props,\r\n handleSubmit: this.handleSubmit,\r\n resetForm: this.resetForm,\r\n statusMessage: this.state.statusMessage\r\n })}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default EveForm;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport { Button } from 'reactstrap';\r\nimport { IEveFormViewProps } from './eve-form';\r\nimport { RichTextComponent } from '@msdyn365-commerce/core-internal';\r\n\r\nexport default (props: IEveFormViewProps) => {\r\n const {\r\n handleSubmit,\r\n resetForm,\r\n statusMessage,\r\n config: { formTitle, formInstructions, resetButtonText, showResetButton, submitButtonText }\r\n } = props;\r\n\r\n const items = props.slots && props.slots.content && props.slots.content.length > 0 ? props.slots.content : [];\r\n\r\n return (\r\n
\r\n

{formTitle}

\r\n \r\n {items}\r\n

{statusMessage}

\r\n
\r\n \r\n {showResetButton ? (\r\n \r\n ) : (\r\n <>\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n","export const normalizeName = (name: string) => name.replace(/ /, '').toLowerCase();\r\n","const binding = { modules: {}, dataActions: {} };\n\n (binding.modules['eve-form'] = {\n c: () => require('partner/modules/eve-form/eve-form.tsx'),\n $type: 'containerModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'eve-form',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/eve-form'\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|eve-form|eve-form'] = {\n c: () => require('partner/modules/eve-form/eve-form.view.tsx'),\n cn: '__local__-__local__-eve-form'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["_errorMsg","FormContext","createContext","registerField","fieldData","Error","updateField","fieldName","fieldValue","friendlyName","fields","Consumer","FormConsumer","Provider","FormProvider","EveForm","React","constructor","props","super","this","state","statusMessage","bind","resetForm","handleSubmit","normalizeName","name","setState","prevState","_objectSpread","normalizedName","fieldToModify","value","friendly","errors","keys","Object","hasErrors","forEach","key","f","fieldErrors","validateField","validation","length","resources","validationFailMessage","formValues","push","Name","Value","Friendly","postFormDataAsync","callerContext","context","actionContext","config","formTitle","mailTo","then","response","Success","successMessage","failMessage","validationRules","rule","isRequiredValidation","errorMessage","invalidSelection","RegExp","regex","test","hasOwnProperty","reset","render","renderView","formInstructions","resetButtonText","showResetButton","submitButtonText","items","slots","content","className","RichTextComponent","text","Button","onClick","replace","toLowerCase","binding","modules","dataActions","c","require","$type","da","iNM","ns","n","p","pdp","md","window","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}