{"version":3,"sources":["../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/FieldTypes.js","../node_modules/@sitecore-jss/sitecore-jss-forms/dist/esm/FormField.js","../node_modules/@sitecore-jss/sitecore-jss-forms/dist/esm/getFieldValueFromModel.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/ValidationDataModels.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/section.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/text.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/field-validation-errors.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/file-upload.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/single-line-text.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/button.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/checkbox.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/checkbox-list.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/dropdown-list.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/date.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/email.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/list-box.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/multiple-line-text.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/number.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/password.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/radio-button-list.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/telephone.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/field-factory.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/default-field-factory.js","../node_modules/@sitecore-jss/sitecore-jss-forms/dist/esm/submitForm.js","../node_modules/@sitecore-jss/sitecore-jss-forms/dist/esm/FormTracker.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/default-error.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/form.js","../node_modules/@sitecore-jss/sitecore-jss-forms/dist/esm/JssFormData.js","../node_modules/@sitecore-jss/sitecore-jss-forms/dist/esm/serializeForm.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@sitecore-jss/sitecore-jss-react-forms/dist/esm/components/field-templates/label.js","../node_modules/@sitecore-jss/sitecore-jss-forms/dist/esm/ViewModel.js"],"names":["FieldTypes","instanceOfValueFormField","object","instanceOfButtonFormField","instanceOfFormFieldSection","getFieldValueFromModel","field","instanceOfListViewModel","model","items","filter","item","selected","map","value","instanceOfInputViewModel","ValidationDataModels","Section","fieldFactory","React","createElement","className","cssClass","fields","TextField","Tag","htmlTag","text","__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","FieldValidationErrors","props","fieldValidationErrorsComponent","CustomError","errorsComponentProps","assign","errors","error","index","key","FileUpload","arguments","fileInputRef","createRef","SIZE_UNITS","onChangeField","files","cb","fileSizeValidator","getEnabledValidation","FileSizeValidator","fileCountValidator","FileCountValidator","fileTypeValidator","FileTypeValidator","list","errorMessages","valid","Array","fill","forEach","_","idx","fileSize","size","fileSizeUnit","maxFileSize","msg","message","replace","toString","getFileSizeUnitName","push","some","file","ext","name","split","pop","allowedContentTypes","maxFileCount","title","required","valueField","prevProps","this","current","itemId","validationDataModels","find","validation","onChange","tracker","Fragment","Label","ref","type","accept","undefined","multiple","isMultiple","id","target","onFocus","onFocusField","onBlur","onBlurField","Component","SingleLineText","maxLength","placeholder","placeholderText","fieldValue","callback","handleOnChange","Button","onButtonClick","buttonField","onClick","Checkbox","checked","CheckboxList","v","originalFieldValue","changedElement","DropdownList","newValue","showEmptyItem","label","formatValue","substring","DateField","min","max","Email","ListBox","finalValue","multipleSelection","rows","options","newValues","MultipleLineText","NumberField","step","Password","RadioButtonList","Telephone","FieldFactory","_fieldMap","Map","_defaultComponent","fieldTypeItemId","component","set","Result","get","Default","createDefaultFieldFactory","defaultFieldFactory","setComponent","submitForm","formData","endpoint","fetcher","fetch","body","toMultipartFormData","method","credentials","then","res","json","createFetchBasedFormFetcher","EventIds","FormTracker","_currentField","_fetcher","JSON","stringify","createFetchBasedTrackerFetcher","_endpoint","formId","formSessionId","enableTracking","_formId","_formSessionId","_enableTracking","isTrackingEnabled","_startTrackingField","_resetField","validationErrors","trackableField","blurredAtTick","Date","getTime","duration","focusedAtTick","Math","round","fieldChanged","fieldIdField","_isValueChanged","originalValue","clientEvent","_buildEvent","FieldCompleted","validationEvents","FieldError","_trackEvents","isArray","eventId","Error","sessionId","fieldId","fieldName","events","DefaultError","formErrors","fieldErrors","state","Form","nextForm","submitButton","createFieldComponent","bind","getCurrentFieldState","collectCurrentFieldValues","_tracker","sitecoreApiHost","sitecoreApiKey","trackerFetcher","form","metadata","action","htmlPrefix","contextItemId","setFormData","formItemId","fieldComponents","ErrorComponent","errorComponent","isValid","onSubmit","onFieldChange","labelComponent","DefaultFieldFactory","fieldWrapperComponent","Wrapper","fieldState","result","buttonName","setState","preventDefault","fieldValues","serializeForm","submitButtonName","mergeOverwritingExisting","submitUrl","formFetcher","success","redirectUrl","onRedirect","window","location","href","stateUpdate","keys","fieldKey","resetFieldsState","console","log","stateReset","reduce","acc","JssFormData","data","remove","append","entry","values","FormData","encodeURIComponent","join","fieldValueParser","pushField","antiForgeryToken","pageItemId","pushFields","endsWith","fileUploadField","indexField","navigationButtonsField","navigationStepField","overrideValue","pushFieldValue","_toConsumableArray","arr","arrayLikeToArray","iter","Symbol","iterator","from","unsupportedIterableToArray","TypeError","CustomLabel","labelComponentProps","children","labelCssClass","htmlFor"],"mappings":"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","file":"static/js/15.c4fd0cc5.chunk.js","sourcesContent":["export var FieldTypes;\n(function (FieldTypes) {\n FieldTypes[\"Section\"] = \"{447AA745-6D29-4B65-A5A3-8173AA8AF548}\";\n FieldTypes[\"TextField\"] = \"{983BFA5F-C6B6-4AEE-A3BB-46B95D52E7DF}\";\n FieldTypes[\"FileUpload\"] = \"{7E9A0903-A52C-4843-BBE1-5B26BD162BED}\";\n FieldTypes[\"Button\"] = \"{7CE25CAB-EF3A-4F73-AB13-D33BDC1E4EE2}\";\n FieldTypes[\"SingleLineText\"] = \"{4EE89EA7-CEFE-4C8E-8532-467EF64591FC}\";\n FieldTypes[\"MultipleLineText\"] = \"{A296A1C1-0DA0-4493-A92E-B8191F43AEC6}\";\n FieldTypes[\"DateField\"] = \"{38137D30-7B2A-47D5-BBD8-133252C01B28}\";\n FieldTypes[\"Email\"] = \"{04C39CAC-8976-4910-BE0D-879ED3368429}\";\n FieldTypes[\"NumberField\"] = \"{5B153FC0-FC3F-474F-8CB8-233FB1BEF292}\";\n FieldTypes[\"Checkbox\"] = \"{4DA85E8A-3B48-4BC6-9565-8C1F5F36DD1B}\";\n FieldTypes[\"Telephone\"] = \"{DF74F55B-47E6-4D1C-92F8-B0D46A7B2704}\";\n FieldTypes[\"DropdownList\"] = \"{E0CFADEE-1AC0-471D-A820-2E70D1547B4B}\";\n FieldTypes[\"CheckboxList\"] = \"{D86A361A-D4FF-46B2-9E97-A37FC5B1FE1A}\";\n FieldTypes[\"ListBox\"] = \"{222A2121-D370-4C6F-80A3-03C930B718BF}\";\n FieldTypes[\"RadioButtonList\"] = \"{EDBD38A8-1AE9-42EC-8CCD-F5B0E2998B4F}\";\n FieldTypes[\"Password\"] = \"{668A1C37-9D6B-483B-B7C1-340C92D04BA4}\";\n})(FieldTypes || (FieldTypes = {}));\n","/**\n * @param {object} object\n */\nexport function instanceOfFormField(object) {\n return 'model' in object;\n}\n/**\n * @param {FormField} object\n */\nexport function instanceOfValueFormField(object) {\n return 'indexField' in object;\n}\n/**\n * @param {FormField} object\n */\nexport function instanceOfButtonFormField(object) {\n return 'buttonField' in object;\n}\n/**\n * @param {FormField} object\n */\nexport function instanceOfFormFieldSection(object) {\n return 'fields' in object;\n}\n","import { instanceOfInputViewModel, instanceOfListViewModel } from './ViewModel';\n/** Retrieves the current value of a form field from the form model returned from the JSON API\n * @param {FormField} field\n * @returns {string | string[] | boolean} field value\n */\nexport function getFieldValueFromModel(field) {\n if (instanceOfListViewModel(field.model)) {\n // field state from API view-model items (list fields with possible multi-select)\n // we map this into an array of selected values\n return field.model.items.filter((item) => item.selected).map((item) => item.value);\n }\n if (instanceOfInputViewModel(field.model)) {\n // field state from API view-model value (single valued fields)\n // false literal is a falsy value we want to keep (used in checkboxes)\n if (field.model.value === false) {\n return field.model.value;\n }\n // otherwise, we never want a null or undefined value so we default falsy to empty strings\n return field.model.value || '';\n }\n // the model cannot be null or undefined as in React a controlled field must be bound to a non-null value\n return '';\n}\n","export var ValidationDataModels;\n(function (ValidationDataModels) {\n ValidationDataModels[\"FileSizeValidator\"] = \"{8F2B6077-FE63-4FB2-8740-EF3807BBDB84}\";\n ValidationDataModels[\"FileTypeValidator\"] = \"{D81E056F-6C2E-4414-BD46-BA464AC05202}\";\n ValidationDataModels[\"FileCountValidator\"] = \"{F42833A6-F364-4721-ABFC-337E0CC3FD75}\";\n})(ValidationDataModels || (ValidationDataModels = {}));\n","import React from 'react';\nconst Section = ({ field, fieldFactory, }) => React.createElement(\"fieldset\", { className: field.model.cssClass }, field.fields.map(fieldFactory));\nexport default Section;\n","import React from 'react';\nconst TextField = ({ field, }) => {\n const Tag = (field.model.htmlTag || 'p');\n return React.createElement(Tag, { className: field.model.cssClass }, field.model.text);\n};\nexport default TextField;\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nconst FieldValidationErrors = (props) => {\n if (props.fieldValidationErrorsComponent) {\n const CustomError = props.fieldValidationErrorsComponent;\n // strip the errors component from the custom component props\n // (prevents infinite loop rendering if someone reuses this component as a custom error component)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { fieldValidationErrorsComponent } = props, errorsComponentProps = __rest(props, [\"fieldValidationErrorsComponent\"]);\n return React.createElement(CustomError, Object.assign({}, errorsComponentProps));\n }\n const { errors } = props;\n if (!errors || errors.length === 0) {\n return null;\n }\n return (React.createElement(\"div\", { className: \"invalid\" }, errors.map((error, index) => (React.createElement(\"p\", { key: index }, error)))));\n};\nexport { FieldValidationErrors };\n","import React, { Component, Fragment, createRef } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nimport { ValidationDataModels } from '../../ValidationDataModels';\nclass FileUpload extends Component {\n constructor() {\n super(...arguments);\n this.fileInputRef = createRef();\n this.SIZE_UNITS = {\n '1': 'Bytes',\n '1024': 'KB',\n '1048576': 'MB',\n '1073741824': 'GB',\n };\n this.onChangeField = (files, field, cb) => {\n const fileSizeValidator = this.getEnabledValidation(ValidationDataModels.FileSizeValidator);\n const fileCountValidator = this.getEnabledValidation(ValidationDataModels.FileCountValidator);\n const fileTypeValidator = this.getEnabledValidation(ValidationDataModels.FileTypeValidator);\n const list = [];\n const errorMessages = [];\n let valid = true;\n if (files) {\n Array(files.length)\n .fill(null)\n .forEach((_, idx) => {\n const fileSize = files[idx].size / field.model.fileSizeUnit;\n if (valid && fileSizeValidator && fileSize > field.model.maxFileSize) {\n const msg = fileSizeValidator.message\n .replace('{0}', field.model.maxFileSize.toString())\n .replace('{1}', this.getFileSizeUnitName(field.model.fileSizeUnit));\n errorMessages.push(msg);\n valid = false;\n }\n list.push(files[idx]);\n });\n }\n if (fileTypeValidator) {\n list.some((file) => {\n const ext = file.name.split('.').pop() || '';\n if (field.model.allowedContentTypes.indexOf(ext) !== -1) {\n return false;\n }\n const msg = fileTypeValidator.message.replace('{0}', field.model.allowedContentTypes);\n errorMessages.push(msg);\n return true;\n });\n }\n if (fileCountValidator && list.length > field.model.maxFileCount) {\n const msg = fileCountValidator.message\n .replace('{0}', field.model.maxFileCount.toString())\n .replace('{1}', field.model.title);\n errorMessages.push(msg);\n valid = false;\n }\n if (field.model.required && !list.length) {\n valid = false;\n errorMessages.push(`${field.model.title} is required`);\n }\n cb(field.valueField.name, list, valid, errorMessages);\n };\n }\n componentDidUpdate(prevProps) {\n if (prevProps.value && !this.props.value && this.fileInputRef.current) {\n this.fileInputRef.current.value = '';\n }\n }\n getEnabledValidation(itemId) {\n return this.props.field.model.validationDataModels.find((validation) => validation.itemId === itemId);\n }\n getFileSizeUnitName(value) {\n return this.SIZE_UNITS[value];\n }\n render() {\n const { field, value, onChange, errors, tracker } = this.props;\n const fileTypeValidator = this.getEnabledValidation(ValidationDataModels.FileTypeValidator);\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, this.props)),\n React.createElement(\"input\", { ref: this.fileInputRef, type: \"file\", accept: fileTypeValidator ? field.model.allowedContentTypes : undefined, multiple: field.model.isMultiple, className: field.model.cssClass, id: field.valueField.id, name: field.valueField.name, onChange: (e) => this.onChangeField(e.target.files, field, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) }),\n React.createElement(FieldValidationErrors, Object.assign({}, this.props))));\n }\n}\nexport default FileUpload;\n","import React, { Fragment } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nconst SingleLineText = (props) => {\n const { field, value, onChange, errors, tracker } = props;\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, props)),\n React.createElement(\"input\", { type: \"text\", className: field.model.cssClass, id: field.valueField.id, name: field.valueField.name, value: value, maxLength: field.model.maxLength, placeholder: field.model.placeholderText, onChange: (e) => handleOnChange(field, e.target.value, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) }),\n React.createElement(FieldValidationErrors, Object.assign({}, props))));\n};\n/**\n * @param {ValueFormField} field\n * @param {string} fieldValue\n * @param {FieldChangeCallback} callback\n */\nfunction handleOnChange(field, fieldValue, callback) {\n let valid = true;\n const errorMessages = [];\n // custom client validation logic here\n if (field.model.required && !fieldValue) {\n valid = false;\n errorMessages.push(`${field.model.title} is required`);\n }\n callback(field.valueField.name, fieldValue, valid, errorMessages);\n}\nexport default SingleLineText;\n","import React from 'react';\n// NOTE: onButtonClick is not a submit handler;\n// it signals to the parent form which button invoked the submit action\n// (which is important for multi-step forms where multiple submits can occur i.e. back/forward)\nconst Button = ({ field, onButtonClick }) => (React.createElement(\"button\", { type: \"submit\", className: field.model.cssClass, value: field.model.title, name: field.buttonField.name, id: field.buttonField.id, onClick: () => onButtonClick(field.buttonField.name) }, field.model.title));\nexport default Button;\n","import React, { Fragment } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nconst Checkbox = (props) => {\n const { field, value, onChange, tracker, errors } = props;\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, props),\n React.createElement(\"input\", { type: \"checkbox\", className: field.model.cssClass, id: field.valueField.id, name: field.valueField.name, value: \"true\", checked: value, onChange: (e) => handleOnChange(field, e.target.checked, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) })),\n React.createElement(FieldValidationErrors, Object.assign({}, props))));\n};\n/**\n * @param {ValueFormField} field\n * @param {boolean} fieldValue\n * @param {FieldChangeCallback} callback\n */\nfunction handleOnChange(field, fieldValue, callback) {\n // (fieldName, fieldValue, isValid, validationErrors)\n callback(field.valueField.name, fieldValue, true, []);\n}\nexport default Checkbox;\n","import React, { Fragment } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nconst CheckboxList = (props) => {\n const { field, field: { model: { items }, }, value, onChange, errors, tracker, } = props;\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, props)),\n items.map((item, index) => (React.createElement(\"label\", { key: item.itemId },\n React.createElement(\"input\", { type: \"checkbox\", className: field.model.cssClass, id: field.valueField.id + index, name: field.valueField.name, value: item.value, checked: value.some((v) => v === item.value), onChange: (e) => handleOnChange(field, value, e.target.value, e.target.checked, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) }),\n item.text))),\n React.createElement(FieldValidationErrors, Object.assign({}, props))));\n};\n/**\n * @param {ValueFormField} field\n * @param {string[]} originalFieldValue\n * @param {string} changedElement\n * @param {boolean} checked\n * @param {FieldChangeCallback} callback\n */\nfunction handleOnChange(field, originalFieldValue, changedElement, checked, callback) {\n // we can have multiple selected values. So we need to push ALL the selected\n // values back up to the root form. This is done using an array, which the form\n // serializer knows how to expand into multiple values on post\n let value = originalFieldValue;\n if (checked) {\n value.push(changedElement);\n }\n else {\n value = value.filter((v) => v !== changedElement);\n }\n // (fieldName, fieldValue, isValid, validationErrors)\n callback(field.valueField.name, value, true, []);\n}\nexport default CheckboxList;\n","import React, { Fragment } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nconst DropdownList = (props) => {\n const { field, field: { model: { items }, }, value, onChange, tracker, errors, } = props;\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, props)),\n React.createElement(\"select\", { className: field.model.cssClass, id: field.valueField.id, name: field.valueField.name, value: value[0], onChange: (e) => handleOnChange(field, e.target.value, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) },\n field.model.showEmptyItem ? React.createElement(\"option\", { label: \" \" }) : null,\n items.map((item) => (React.createElement(\"option\", { key: item.itemId, value: item.value }, item.text)))),\n React.createElement(FieldValidationErrors, Object.assign({}, props))));\n};\n/**\n * @param {ValueFormField} field\n * @param {string} newValue\n * @param {FieldChangeCallback} callback\n */\nfunction handleOnChange(field, newValue, callback) {\n let valid = true;\n const errorMessages = [];\n // custom client validation logic here\n if (field.model.required && !newValue) {\n valid = false;\n errorMessages.push(`${field.model.title} is required`);\n }\n callback(field.valueField.name, [newValue], valid, errorMessages);\n}\nexport default DropdownList;\n","import React, { Fragment } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nconst DateField = (props) => {\n const { field, value, onChange, tracker, errors } = props;\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, props)),\n React.createElement(\"input\", { type: \"date\", className: field.model.cssClass, id: field.valueField.id, name: field.valueField.name, value: formatValue(value), min: formatValue(field.model.min), max: formatValue(field.model.max), onChange: (e) => handleOnChange(field, e.target.value, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) }),\n React.createElement(FieldValidationErrors, Object.assign({}, props))));\n};\n/**\n * @param {string} [value]\n */\nfunction formatValue(value) {\n // dates are serialized from the API as full date/times (i.e. 2019-01-11T00:00:00)\n // but the date input expects only the date. Since the format is predictably long,\n // we can just take a substring.\n if (!value || value.length < 10) {\n return value;\n }\n return value.substring(0, 10);\n}\n/**\n * @param {ValueFormField} field\n * @param {string} fieldValue\n * @param {FieldChangeCallback} callback\n */\nfunction handleOnChange(field, fieldValue, callback) {\n let valid = true;\n const errorMessages = [];\n // custom client validation logic here\n if (field.model.required && !fieldValue) {\n valid = false;\n errorMessages.push(`${field.model.title} is required`);\n }\n callback(field.valueField.name, fieldValue, valid, errorMessages);\n}\nexport default DateField;\n","import React, { Fragment } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nconst Email = (props) => {\n const { field, value, onChange, tracker, errors } = props;\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, props)),\n React.createElement(\"input\", { type: \"email\", className: field.model.cssClass, id: field.valueField.id, name: field.valueField.name, value: value, maxLength: field.model.maxLength, placeholder: field.model.placeholderText, onChange: (e) => handleOnChange(field, e.target.value, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) }),\n React.createElement(FieldValidationErrors, Object.assign({}, props))));\n};\n/**\n * @param {ValueFormField} field\n * @param {string} fieldValue\n * @param {FieldChangeCallback} callback\n */\nfunction handleOnChange(field, fieldValue, callback) {\n let valid = true;\n const errorMessages = [];\n // custom client validation logic here\n if (field.model.required && !fieldValue) {\n valid = false;\n errorMessages.push(`${field.model.title} is required`);\n }\n callback(field.valueField.name, fieldValue, valid, errorMessages);\n}\nexport default Email;\n","import React, { Fragment } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nconst ListBox = (props) => {\n const { field, field: { model: { items }, }, value, onChange, tracker, errors, } = props;\n let finalValue = value;\n // react does not like an array as a value unless multiple select is allowed\n // (even if the array is always length 1)\n if (!field.model.multipleSelection) {\n finalValue = value[0];\n }\n // note: the value for list field types is an array (of selected values)\n // dropdown is single-select so we use value[0] for its value\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, props)),\n React.createElement(\"select\", { className: field.model.cssClass, id: field.valueField.id, name: field.valueField.name, value: finalValue, size: field.model.rows, multiple: field.model.multipleSelection, onChange: (e) => handleOnChange(field, e.target.options, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) }, items.map((item) => (React.createElement(\"option\", { key: item.itemId, value: item.value }, item.text)))),\n React.createElement(FieldValidationErrors, Object.assign({}, props))));\n};\n/**\n * @param {ValueFormField} field\n * @param {HTMLOptionsCollection} options\n * @param {FieldChangeCallback} callback\n */\nfunction handleOnChange(field, options, callback) {\n let valid = true;\n const errorMessages = [];\n const newValues = [];\n for (let i = 0; i < options.length; i += 1) {\n if (options[i].selected) {\n newValues.push(options[i].value);\n }\n }\n // custom client validation logic here\n if (field.model.required && newValues.length === 0) {\n valid = false;\n errorMessages.push(`${field.model.title} is required`);\n }\n callback(field.valueField.name, newValues, valid, errorMessages);\n}\nexport default ListBox;\n","import React, { Fragment } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nconst MultipleLineText = (props) => {\n const { field, value, onChange, tracker, errors } = props;\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, props)),\n React.createElement(\"textarea\", { className: field.model.cssClass, id: field.valueField.id, name: field.valueField.name, value: value, rows: field.model.rows, maxLength: field.model.maxLength, placeholder: field.model.placeholderText, onChange: (e) => handleOnChange(field, e.target.value, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) }),\n React.createElement(FieldValidationErrors, Object.assign({}, props))));\n};\n/**\n * @param {ValueFormField} field\n * @param {string} fieldValue\n * @param {FieldChangeCallback} callback\n */\nfunction handleOnChange(field, fieldValue, callback) {\n let valid = true;\n const errorMessages = [];\n // custom client validation logic here\n if (field.model.required && !fieldValue) {\n valid = false;\n errorMessages.push(`${field.model.title} is required`);\n }\n callback(field.valueField.name, fieldValue, valid, errorMessages);\n}\nexport default MultipleLineText;\n","import React, { Fragment } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nconst NumberField = (props) => {\n const { field, value, onChange, tracker, errors } = props;\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, props)),\n React.createElement(\"input\", { type: \"number\", className: field.model.cssClass, id: field.valueField.id, name: field.valueField.name, value: value, step: field.model.step, min: field.model.min, max: field.model.max, onChange: (e) => handleOnChange(field, e.target.value, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) }),\n React.createElement(FieldValidationErrors, Object.assign({}, props))));\n};\n/**\n * @param {ValueFormField} field\n * @param {string} fieldValue\n * @param {FieldChangeCallback} callback\n */\nfunction handleOnChange(field, fieldValue, callback) {\n let valid = true;\n const errorMessages = [];\n // custom client validation logic here\n if (field.model.required && !fieldValue) {\n valid = false;\n errorMessages.push(`${field.model.title} is required`);\n }\n callback(field.valueField.name, fieldValue, valid, errorMessages);\n}\nexport default NumberField;\n","import React, { Fragment } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nconst Password = (props) => {\n const { field, value, onChange, tracker, errors } = props;\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, props)),\n React.createElement(\"input\", { type: \"password\", className: field.model.cssClass, id: field.valueField.id, name: field.valueField.name, value: value, maxLength: field.model.maxLength, placeholder: field.model.placeholderText, onChange: (e) => handleOnChange(field, e.target.value, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) }),\n React.createElement(FieldValidationErrors, Object.assign({}, props))));\n};\n/**\n * @param {ValueFormField} field\n * @param {string} fieldValue\n * @param {FieldChangeCallback} callback\n */\nfunction handleOnChange(field, fieldValue, callback) {\n let valid = true;\n const errorMessages = [];\n // custom client validation logic here\n if (field.model.required && !fieldValue) {\n valid = false;\n errorMessages.push(`${field.model.title} is required`);\n }\n callback(field.valueField.name, fieldValue, valid, errorMessages);\n}\nexport default Password;\n","import React, { Fragment } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nconst RadioButtonList = (props) => {\n const { field, field: { model: { items }, }, value, onChange, tracker, errors, } = props;\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, props)),\n items.map((item, index) => (React.createElement(\"label\", { key: item.itemId },\n React.createElement(\"input\", { type: \"radio\", className: field.model.cssClass, id: field.valueField.id + index, name: field.valueField.name, value: item.value, checked: value.some((v) => v === item.value), onChange: (e) => handleOnChange(field, e.target.value, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) }),\n item.text))),\n React.createElement(FieldValidationErrors, Object.assign({}, props))));\n};\n/**\n * @param {ValueFormField} field\n * @param {string} newValue\n * @param {FieldChangeCallback} callback\n */\nfunction handleOnChange(field, newValue, callback) {\n let valid = true;\n const errorMessages = [];\n // custom client validation logic here\n if (field.model.required && !newValue) {\n valid = false;\n errorMessages.push(`${field.model.title} is required`);\n }\n callback(field.valueField.name, [newValue], valid, errorMessages);\n}\nexport default RadioButtonList;\n","import React, { Fragment } from 'react';\nimport { FieldValidationErrors } from './field-validation-errors';\nimport { Label } from './label';\nconst Telephone = (props) => {\n const { field, value, onChange, tracker, errors } = props;\n return (React.createElement(Fragment, null,\n React.createElement(Label, Object.assign({}, props)),\n React.createElement(\"input\", { type: \"tel\", className: field.model.cssClass, id: field.valueField.id, name: field.valueField.name, value: value, maxLength: field.model.maxLength, placeholder: field.model.placeholderText, onChange: (e) => handleOnChange(field, e.target.value, onChange), onFocus: () => tracker.onFocusField(field, value), onBlur: () => tracker.onBlurField(field, value, errors) }),\n React.createElement(FieldValidationErrors, Object.assign({}, props))));\n};\n/**\n * @param {ValueFormField} field\n * @param {string} fieldValue\n * @param {FieldChangeCallback} callback\n */\nfunction handleOnChange(field, fieldValue, callback) {\n let valid = true;\n const errorMessages = [];\n // custom client validation logic here\n if (field.model.required && !fieldValue) {\n valid = false;\n errorMessages.push(`${field.model.title} is required`);\n }\n callback(field.valueField.name, fieldValue, valid, errorMessages);\n}\nexport default Telephone;\n","import React from 'react';\n/**\n * Maps field type IDs from Sitecore (/sitecore/system/Settings/Forms/Field Types)\n * into an implementing React component - this is very similar to the JSS componentFactory,\n * but it maps form element components instead of layout components\n */\nclass FieldFactory {\n constructor() {\n this._fieldMap = new Map();\n // eslint-disable-next-line react/display-name\n this._defaultComponent = (props) => (React.createElement(\"div\", { key: props.model.fieldTypeItemId },\n props.model.name,\n \": No renderer for form element type \",\n props.model.fieldTypeItemId));\n }\n setComponentNotFoundComponent(component) {\n this._defaultComponent = component;\n }\n setComponent(type, component) {\n this._fieldMap.set(type, component);\n }\n get(field, props) {\n const Result = this._fieldMap.get(field.model.fieldTypeItemId);\n if (!Result) {\n const Default = this._defaultComponent;\n return React.createElement(Default, Object.assign({}, field));\n }\n return React.createElement(Result, Object.assign({}, props));\n }\n}\nexport default FieldFactory;\n","import Section from './components/field-templates/section';\nimport TextField from './components/field-templates/text';\nimport FileUpload from './components/field-templates/file-upload';\nimport SingleLineText from './components/field-templates/single-line-text';\nimport Button from './components/field-templates/button';\nimport Checkbox from './components/field-templates/checkbox';\nimport CheckboxList from './components/field-templates/checkbox-list';\nimport DropdownList from './components/field-templates/dropdown-list';\nimport DateField from './components/field-templates/date';\nimport Email from './components/field-templates/email';\nimport ListBox from './components/field-templates/list-box';\nimport MultipleLineText from './components/field-templates/multiple-line-text';\nimport NumberField from './components/field-templates/number';\nimport Password from './components/field-templates/password';\nimport RadioButtonList from './components/field-templates/radio-button-list';\nimport Telephone from './components/field-templates/telephone';\nimport { FieldTypes } from './FieldTypes';\nimport FieldFactory from './field-factory';\n/**\n * Create default field factory\n */\nexport function createDefaultFieldFactory() {\n const defaultFieldFactory = new FieldFactory();\n defaultFieldFactory.setComponent(FieldTypes.Section, Section);\n defaultFieldFactory.setComponent(FieldTypes.TextField, TextField);\n defaultFieldFactory.setComponent(FieldTypes.Button, Button);\n defaultFieldFactory.setComponent(FieldTypes.SingleLineText, SingleLineText);\n defaultFieldFactory.setComponent(FieldTypes.MultipleLineText, MultipleLineText);\n defaultFieldFactory.setComponent(FieldTypes.DateField, DateField);\n defaultFieldFactory.setComponent(FieldTypes.Email, Email);\n defaultFieldFactory.setComponent(FieldTypes.NumberField, NumberField);\n defaultFieldFactory.setComponent(FieldTypes.Checkbox, Checkbox);\n defaultFieldFactory.setComponent(FieldTypes.Telephone, Telephone);\n defaultFieldFactory.setComponent(FieldTypes.FileUpload, FileUpload);\n defaultFieldFactory.setComponent(FieldTypes.DropdownList, DropdownList);\n defaultFieldFactory.setComponent(FieldTypes.CheckboxList, CheckboxList);\n defaultFieldFactory.setComponent(FieldTypes.ListBox, ListBox);\n defaultFieldFactory.setComponent(FieldTypes.RadioButtonList, RadioButtonList);\n defaultFieldFactory.setComponent(FieldTypes.Password, Password);\n return defaultFieldFactory;\n}\nexport default createDefaultFieldFactory();\n","/**\n * @param {RequestInit} [options]\n */\nexport function createFetchBasedFormFetcher(options) {\n return (formData, endpoint) => fetch(endpoint, Object.assign({ body: formData.toMultipartFormData(), method: 'post', \n // IMPORTANT: Sitecore forms relies on cookies for some state management, so credentials must be included.\n credentials: 'include' }, options))\n .then((res) => res.json())\n .then((res) => res);\n}\n/**\n * @param {JssFormData} formData\n * @param {string} endpoint\n * @param {FormSubmitOptions} [options]\n */\nexport function submitForm(formData, endpoint, options) {\n options = options || {};\n if (!options.fetcher) {\n options.fetcher = createFetchBasedFormFetcher();\n }\n return options.fetcher(formData, endpoint);\n}\n","var EventIds;\n(function (EventIds) {\n EventIds[\"FieldCompleted\"] = \"2ca692cb-bdb2-4c9d-a3b5-917b3656c46a\";\n EventIds[\"FieldError\"] = \"ea27aca5-432f-424a-b000-26ba5f8ae60a\";\n})(EventIds || (EventIds = {}));\n/**\n * @param {RequestInit} [options]\n */\nexport function createFetchBasedTrackerFetcher(options) {\n return (formData, endpoint) => fetch(endpoint, Object.assign({ body: JSON.stringify(formData), method: 'post', \n // IMPORTANT: Sitecore forms relies on cookies for some state management, so credentials must be included.\n credentials: 'include' }, options));\n}\nexport class FormTracker {\n constructor(options) {\n this._currentField = null;\n this._fetcher = options.fetcher || createFetchBasedTrackerFetcher();\n this._endpoint = options.endpoint;\n }\n /**\n * Should be called prior to pushing any events, and again whenever new form schema data is received\n * @param {string} formId\n * @param {string} formSessionId\n * @param {string} enableTracking\n */\n setFormData(formId, formSessionId, enableTracking) {\n this._formId = formId;\n this._formSessionId = formSessionId;\n this._enableTracking = enableTracking;\n }\n onFocusField(field, value) {\n if (!this._enableTracking || !field.model.isTrackingEnabled) {\n this._resetField();\n return;\n }\n this._startTrackingField(field, value);\n }\n onBlurField(field, value, validationErrors) {\n const trackableField = field;\n if (!this._enableTracking || !field.model.isTrackingEnabled) {\n this._resetField();\n return;\n }\n const blurredAtTick = new Date().getTime();\n let duration = trackableField.focusedAtTick\n ? Math.round((blurredAtTick - trackableField.focusedAtTick) / 1000)\n : 0;\n trackableField.focusedAtTick = undefined;\n const fieldChanged = this._currentField &&\n this._currentField.fieldIdField.value !== trackableField.fieldIdField.value;\n if (fieldChanged) {\n this._startTrackingField(field, value);\n duration = 0;\n }\n if (fieldChanged || this._isValueChanged(value)) {\n if (this._currentField) {\n this._currentField.originalValue = value;\n }\n const clientEvent = this._buildEvent(field, EventIds.FieldCompleted, duration);\n const validationEvents = [];\n if (validationErrors) {\n validationErrors.forEach(() => {\n validationEvents.push(this._buildEvent(field, EventIds.FieldError, duration));\n });\n }\n this._trackEvents([...validationEvents, clientEvent]);\n }\n }\n _startTrackingField(field, value) {\n const trackableField = field;\n trackableField.focusedAtTick = new Date().getTime();\n trackableField.originalValue = value;\n this._currentField = trackableField;\n }\n _resetField() {\n this._currentField = null;\n }\n _isValueChanged(newValue) {\n if (!this._currentField || typeof this._currentField.originalValue === 'undefined') {\n return true;\n }\n const originalValue = this._currentField.originalValue;\n if (Array.isArray(newValue)) {\n if (!Array.isArray(originalValue)) {\n return true;\n }\n // array compare\n if (originalValue.length !== newValue.length) {\n return true;\n }\n for (let i = 0; i < originalValue.length; i += 1) {\n if (originalValue[i] !== newValue[i]) {\n return true;\n }\n }\n return false;\n }\n // original value is array but value is not so cannot be equal\n if (Array.isArray(originalValue)) {\n return false;\n }\n // string compare\n return newValue !== this._currentField.originalValue;\n }\n _buildEvent(field, eventId, duration) {\n if (!this._formId || !this._formSessionId) {\n throw new Error('Event was pushed without form data being set.');\n }\n return {\n formId: this._formId,\n sessionId: this._formSessionId,\n eventId,\n fieldId: field.fieldIdField.value,\n duration,\n fieldName: field.model.name,\n };\n }\n _trackEvents(events) {\n return this._fetcher(events, this._endpoint);\n }\n}\n","import React from 'react';\nconst DefaultError = (props) => (React.createElement(\"div\", { className: \"form-errors\" },\n props.formErrors.map((error, index) => (React.createElement(\"div\", { className: \"invalid\", key: `formError-${index}` }, error))),\n props.fieldErrors.map((error, index) => (React.createElement(\"div\", { className: \"invalid\", key: `fieldError-${index}` }, error.state.errors.map((message) => (React.createElement(\"div\", { key: message }, message))))))));\nexport { DefaultError };\n","import React, { Component } from 'react';\nimport { serializeForm, submitForm, instanceOfValueFormField, getFieldValueFromModel, FormTracker, } from '@sitecore-jss/sitecore-jss-forms';\nimport DefaultFieldFactory from '../default-field-factory';\nimport { DefaultError } from './default-error';\nexport class Form extends Component {\n constructor(props) {\n super(props);\n this.state = {\n errors: [],\n // in a multistep form the server can reset the form schema\n // to display further steps; this state property overrides\n // the form passed in from props if present\n nextForm: null,\n submitButton: null,\n };\n this.createFieldComponent = this.createFieldComponent.bind(this);\n this.getCurrentFieldState = this.getCurrentFieldState.bind(this);\n this.collectCurrentFieldValues = this.collectCurrentFieldValues.bind(this);\n this._tracker = new FormTracker({\n endpoint: `${this.props.sitecoreApiHost}/api/jss/fieldtracking/register?sc_apikey=${this.props.sitecoreApiKey}`,\n fetcher: this.props.trackerFetcher,\n });\n }\n render() {\n const form = this.state.nextForm || this.props.form;\n if (!form) {\n return React.createElement(\"div\", null, \"No form data was provided. Need to set a datasource?\");\n }\n if (!form.metadata) {\n return React.createElement(\"div\", null, \"Form data invalid. Forget to set the rendering contents resolver?\");\n }\n const action = `${this.props.sitecoreApiHost}/api/jss/formbuilder?fxb.FormItemId=${form.metadata.itemId}&fxb.HtmlPrefix=${form.htmlPrefix}&sc_apikey=${this.props.sitecoreApiKey}&sc_itemid=${form.contextItemId}`;\n this._tracker.setFormData(form.formItemId.value, form.formSessionId.value, form.metadata.isTrackingEnabled);\n const fieldComponents = form.fields.map(this.createFieldComponent);\n const ErrorComponent = this.props.errorComponent || DefaultError;\n const fieldErrors = this.collectCurrentFieldValues().filter((field) => !field.state.isValid);\n return (React.createElement(\"form\", { className: this.props.className, action: action, method: \"POST\", onSubmit: this.onSubmit.bind(this) },\n React.createElement(ErrorComponent, { form: form, formErrors: this.state.errors, fieldErrors: fieldErrors }),\n fieldComponents));\n }\n /**\n * Creates a field component to render a field based on the form schema data\n * @param {FormField} field\n * @returns {React.ReactNode} field component\n */\n createFieldComponent(field) {\n const props = Object.assign({ field, key: field.model.itemId, onChange: this.onFieldChange.bind(this), onButtonClick: this.onButtonClick.bind(this), fieldFactory: this.createFieldComponent, fieldValidationErrorsComponent: this.props.fieldValidationErrorsComponent, labelComponent: this.props.labelComponent, tracker: this._tracker }, this.getCurrentFieldState(field));\n const component = (this.props.fieldFactory || DefaultFieldFactory).get(field, props);\n if (this.props.fieldWrapperComponent) {\n const Wrapper = this.props.fieldWrapperComponent;\n return React.createElement(Wrapper, Object.assign({}, props), component);\n }\n return component;\n }\n /**\n * Acquires the current form field state for a single field.\n * This state can come from two possible sources:\n * - The form schema/current data (default values, previously saved steps in multistep)\n * - This component's state (the mutated state of the field after user changes)\n * The field state includes both current value as well as current validity.\n * @param {FormField} field\n * @returns {Object | null} field state\n */\n getCurrentFieldState(field) {\n // non-valued fields, i.e. text, section, do not have a value or validity state\n if (!instanceOfValueFormField(field)) {\n return null;\n }\n const fieldName = field.valueField.name || null;\n if (!fieldName) {\n return null;\n }\n const fieldState = this.state[fieldName];\n // field has a value in react state i.e. due to user change\n if (fieldState) {\n const result = {\n isValid: fieldState.isValid,\n errors: fieldState.errors || [],\n };\n if (typeof fieldState.value !== 'undefined') {\n // field state from changed field value (in this.state)\n result.value = fieldState.value;\n }\n else {\n result.value = getFieldValueFromModel(field);\n }\n return result;\n }\n // default state from form API model\n return {\n isValid: true,\n errors: [],\n value: getFieldValueFromModel(field),\n };\n }\n /**\n * Handler triggered by child components that informs us which button triggered a submit.\n * This is important for multistep forms to disambiguate between back and next/submit buttons.\n * @param {string} buttonName\n */\n onButtonClick(buttonName) {\n this.setState({ submitButton: buttonName });\n }\n /**\n * Handler triggered by child components that updates a given field's current value\n * (which we then push back down to the child via prop)\n * @param {string} key Field's name attribute\n * @param {string | string[] | File[]} value New field value\n * @param {boolean} isValid Whether the field is valid or not\n * @param {string[]} errors Validation error message(s) if field is invalid\n */\n onFieldChange(key, value, isValid, errors) {\n this.setState({\n [key]: { value, isValid, errors },\n });\n }\n /**\n * Handler triggered when the form is submitted. May transition its state between\n * steps in a multistep form or handle a final submit.\n * @param {FormEvent} e\n */\n onSubmit(e) {\n e.preventDefault();\n const form = this.state.nextForm || this.props.form;\n const fieldValues = {};\n const currentFieldValues = this.collectCurrentFieldValues();\n currentFieldValues.forEach((field) => {\n if (typeof field.state.value !== 'undefined') {\n fieldValues[field.fieldName] = field.state.value;\n }\n });\n // NOTE: we're not pre-validating the submit on the client because\n // Sitecore won't be able to track validation errors in xConnect\n // serialize the form data that we got from the server\n // (hidden fields with constant values, unchanged default field values, etc)\n const formData = serializeForm(form, { submitButtonName: this.state.submitButton });\n // merge in user-updated field values\n formData.mergeOverwritingExisting(fieldValues);\n const submitUrl = e.target.action;\n if (!submitUrl) {\n throw new Error('Submit URL was not defined. Ensure the form has an action attribute.');\n }\n submitForm(formData, submitUrl, { fetcher: this.props.formFetcher })\n .then((result) => {\n if (result.success && result.redirectUrl) {\n // Process redirect-on-success action.\n if (this.props.onRedirect) {\n this.props.onRedirect(result.redirectUrl);\n }\n else {\n window.location.href = result.redirectUrl;\n }\n }\n if (result.validationErrors) {\n const stateUpdate = {};\n Object.keys(result.validationErrors).forEach((fieldKey) => {\n stateUpdate[fieldKey] = {\n value: (this.state[fieldKey] || {}).value,\n isValid: false,\n errors: result.validationErrors[fieldKey],\n };\n });\n this.setState(stateUpdate);\n }\n if (result.nextForm) {\n this.setState({ nextForm: result.nextForm });\n }\n if (result.success) {\n this.resetFieldsState();\n }\n if (result.errors && result.errors.length > 0) {\n throw result.errors;\n }\n this.setState({ errors: [] });\n })\n .catch((error) => {\n if (Array.isArray(error)) {\n this.setState({ errors: error });\n }\n else if (typeof error === 'string') {\n console.log('Form submit error', error);\n this.setState({ errors: [error] });\n }\n else {\n console.log('Form submit error', error);\n this.setState({ errors: [error.message] });\n }\n });\n }\n collectCurrentFieldValues() {\n return Object.keys(this.state)\n .filter((fieldName) => this.state[fieldName] && typeof this.state[fieldName].isValid !== 'undefined')\n .map((fieldName) => ({ fieldName: fieldName, state: this.state[fieldName] }));\n }\n /**\n * Removes the current fields' mutated state from this.state,\n * which prevents validation issues and mutable field state from following us\n * across steps in a multistep form.\n */\n resetFieldsState() {\n const keys = Object.keys(this.state).filter((key) => key !== 'nextForm' && key !== 'errors' && key !== 'submitButton');\n const stateReset = keys.reduce((acc, v) => (Object.assign(Object.assign({}, acc), { [v]: undefined })), {});\n this.setState(Object.assign(Object.assign({}, stateReset), { errors: [] }));\n }\n}\n","/**\n * Stores the serialized state of a JSS form before it is POSTed back to the server.\n * Similar API to FormData but supports urlencoded forms (needed for Sitecore antiforgery support),\n * and supports append/get which not all browsers do as of this writing.\n */\nexport class JssFormData {\n constructor() {\n this.data = new Array();\n }\n /**\n * Appends a new key/value to the form data. Value will be added to any existing value that may exist.\n * @param {string} key\n * @param {string | File} value\n */\n append(key, value) {\n this.data.push({ key, value });\n }\n /**\n * Sets a key/value, removing any existing value(s) set for that key.\n * @param {string} key\n * @param {string | File} value\n */\n set(key, value) {\n this.remove(key);\n this.append(key, value);\n }\n /**\n * Removes any values for a given key from the form data.\n * @param {string} key\n */\n remove(key) {\n this.data = this.data.filter((entry) => entry.key !== key);\n }\n /**\n * Merges form data from a client-side state store (i.e. the user-specified values), overwriting any existing values for the keys\n * @param {Object} values\n */\n mergeOverwritingExisting(values) {\n Object.keys(values).forEach((key) => {\n const value = values[key];\n // for multi-valued fields, like checkbox lists,\n // we can receive an array of selected values.\n // we want to _set_ the first one to override anything existing,\n // but _append_ anything after that to avoid overwriting our own values\n if (Array.isArray(value)) {\n if (value.length === 0) {\n // if empty array, ensure any pre-filled values are cleared (i.e. user de-selected these)\n this.remove(key);\n }\n else {\n value.forEach((v, index) => {\n if (index === 0) {\n this.set(key, v);\n }\n else {\n this.append(key, v);\n }\n });\n }\n }\n else {\n this.set(key, value.toString());\n }\n });\n }\n /**\n * Gets all key/values in the store. Duplicate keys with different values are possible.\n * @returns {Object} data\n */\n get() {\n return [...this.data];\n }\n /**\n * Converts the store into a FormData that can be POST-ed with fetch as multipart/form-data.\n * @returns {FormData} form data\n */\n toMultipartFormData() {\n const formData = new FormData();\n this.data.forEach((entry) => formData.append(entry.key, entry.value));\n return formData;\n }\n /**\n * Converts the store into a URL-encoded string suitable to POST as application/x-www-form-urlencoded.\n * @returns {string} url encoded form data\n */\n toUrlEncodedFormData() {\n return this.data\n .map((entry) => `${encodeURIComponent(entry.key)}=${encodeURIComponent(entry.value.toString())}`)\n .join('&')\n .replace(/%20/g, '+');\n }\n}\n","import { instanceOfButtonFormField, instanceOfFormFieldSection, instanceOfValueFormField, } from './FormField';\nimport { getFieldValueFromModel } from './getFieldValueFromModel';\nimport { JssFormData } from './JssFormData';\nimport { instanceOfInputViewModel } from './ViewModel';\n/**\n * Serializes a Sitecore Form data into a format ready to POST to the server.\n * @param {SitecoreForm} form The form schema data from the server\n * @param {SerializeFormOptions} [options]\n * @returns {JssFormData} form data\n */\nexport function serializeForm(form, options) {\n if (!options) {\n options = {};\n }\n if (!options.fieldValueParser) {\n options.fieldValueParser = getFieldValueFromModel;\n }\n const result = new JssFormData();\n pushField(result, form.formSessionId);\n pushField(result, form.antiForgeryToken);\n pushField(result, form.formItemId);\n pushField(result, form.pageItemId);\n pushFields(result, form.fields, options);\n return result;\n}\n/**\n * @param {JssFormData} result\n * @param {Array} fields\n * @param {SerializeFormOptions} options\n */\nfunction pushFields(result, fields, options) {\n fields.forEach((field) => {\n if (instanceOfButtonFormField(field) &&\n (!options.submitButtonName || field.buttonField.name === options.submitButtonName)) {\n pushField(result, field.buttonField, field.model.title);\n pushField(result, field.navigationButtonsField);\n pushField(result, field.navigationStepField);\n }\n else if (instanceOfValueFormField(field)) {\n if (field.valueField.name.endsWith('.Files')) {\n const fileUploadField = field;\n if (!fileUploadField.originalValue && !fileUploadField.model.files) {\n return;\n }\n }\n pushField(result, field.indexField);\n pushField(result, field.fieldIdField);\n // get stored value (i.e. if a multistep form)\n if (instanceOfInputViewModel(field.model) && options.fieldValueParser) {\n const fieldValue = options.fieldValueParser(field);\n if (Array.isArray(fieldValue)) {\n fieldValue.forEach((value) => pushField(result, field.valueField, value));\n }\n else {\n pushField(result, field.valueField, fieldValue.toString());\n }\n }\n }\n else if (instanceOfFormFieldSection(field)) {\n pushFields(result, field.fields, options);\n }\n });\n}\n/**\n * @param {JssFormData} result\n * @param {HtmlFormField} field\n * @param {string} [overrideValue]\n */\nfunction pushField(result, field, overrideValue) {\n // the '' fallback prevents serializing 'null' as a string for empty field values ;)\n return pushFieldValue(result, field.name, overrideValue || field.value || '');\n}\n/**\n * @param {JssFormData} result\n * @param {string} fieldName\n * @param {string} fieldValue\n */\nfunction pushFieldValue(result, fieldName, fieldValue) {\n if (!fieldName) {\n throw new Error('Field had no name');\n }\n result.append(fieldName, fieldValue);\n}\n","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from 'react';\nconst Label = (props) => {\n if (props.labelComponent) {\n const CustomLabel = props.labelComponent;\n // strip the label component from the custom component props\n // (prevents infinite loop rendering if someone reuses this component as a custom label component)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { labelComponent } = props, labelComponentProps = __rest(props, [\"labelComponent\"]);\n return React.createElement(CustomLabel, Object.assign({}, labelComponentProps));\n }\n const { field, isValid, children } = props;\n let className = field.model.labelCssClass;\n if (!isValid) {\n className += ' invalid';\n }\n return (React.createElement(\"label\", { htmlFor: field.valueField.id, className: className },\n children,\n field.model.title));\n};\nexport { Label };\n","/** The model for a given field's data elements */\n/**\n * @param {ViewModel} object\n */\nexport function instanceOfInputViewModel(object) {\n return 'value' in object;\n}\n/**\n * @param {ViewModel} object\n */\nexport function instanceOfListViewModel(object) {\n return 'items' in object;\n}\n"],"sourceRoot":""}