{"version":3,"sources":["webpack:///./node_modules/core-js/modules/es.regexp.to-string.js","webpack:///./node_modules/core-js/modules/es.array.slice.js","webpack:///./src/js/modules/concerns-form.js"],"names":["anObject","fails","flags","DESCRIPTORS","nativeToString","NOT_GENERIC","call","source","INCORRECT_NAME","name","RegExp","prototype","R","this","concat","undefined","unsafe","isObject","isArray","toAbsoluteIndex","toLength","toIndexedObject","createProperty","SPECIES","nativeSlice","slice","max","Math","SPECIES_SUPPORT","target","proto","forced","start","end","Constructor","result","n","O","length","k","fin","constructor","Array","ConcernsForm","dom","$form","el","querySelector","$checkboxes","querySelectorAll","$errors","$globalError","$fieldWrappers","$ohNoInput","$campus","$formLoader","$submitButton","$successMessage","selectText","innerHTML","currentCampus","dataset","authorization","endpoint","styleSelect","forEach","checkbox","addEventListener","e","toggleCheckboxes","onSubmitForm","checked","value","campusList","window","SOU_CAMPUS_LISTING","campusChoices","Choices","itemSelectText","searchEnabled","shouldSort","setValue","label","setChoices","map","enable","find","setChoiceByValue","from","filter","input","$","attr","hidden","hide","show","preventDefault","isHoneypotClean","data","getFormData","errors","validationSchema","validate","updateFormState","showLoader","submitForm","classList","add","scrollTo","top","document","offsetTop","left","behavior","hideLoader","global","params","serialize","hash","axios","get","field","type","getAttribute","Schema","String","required","message","getErrorMessage","campus","use","isPlaceholder","val","toLowerCase","match","comments","remove","resetFormState","error","path","errorEl","Component"],"mappings":"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","file":"19.047dbdd79353b71aa917.js","sourcesContent":["'use strict';\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\nvar flags = require('../internals/regexp-flags');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar TO_STRING = 'toString';\nvar nativeToString = /./[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n require('../internals/redefine')(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? flags.call(R) : undefined);\n }, { unsafe: true });\n}\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar SPECIES = require('../internals/well-known-symbol')('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\nvar SPECIES_SUPPORT = require('../internals/array-method-has-species-support')('slice');\n\n// `Array.prototype.slice` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\nrequire('../internals/export')({ target: 'Array', proto: true, forced: !SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","import { Component } from '@verndale/core';\nimport axios from 'axios';\nimport serialize from 'form-serialize';\nimport Schema from 'validate';\nimport Choices from 'choices.js';\n\nclass ConcernsForm extends Component {\n setupDefaults() {\n this.dom = {\n $form: this.el.querySelector('form'),\n $checkboxes: this.el.querySelectorAll('input[type=\"checkbox\"]'),\n $errors: this.el.querySelectorAll('.concerns-form__error-wrapper'),\n $globalError: this.el.querySelector('.concerns-form__global-error-wrapper'),\n $fieldWrappers: this.el.querySelectorAll('.concerns-form__field-wrapper'),\n $ohNoInput: this.el.querySelectorAll('.oh-no-input'),\n $campus: this.el.querySelector('[data-field=\"campus\"]'),\n $formLoader: this.el.querySelector('.concerns-form__loader'),\n $submitButton: this.el.querySelector('.concerns-form__submit'),\n $successMessage: this.el.querySelector('.concerns-form__success')\n }\n this.selectText = this.dom.$campus.querySelector('option').innerHTML;\n this.currentCampus = this.el.dataset.currentCampus;\n this.authorization = null;\n this.endpoint = this.el.dataset.endpoint;\n this.styleSelect();\n }\n\n addListeners() {\n this.dom.$checkboxes.forEach(checkbox => (\n checkbox.addEventListener('change', e => this.toggleCheckboxes(e))\n ));\n this.dom.$form.addEventListener('submit', e => this.onSubmitForm(e))\n }\n\n toggleCheckboxes(e) {\n this.dom.$checkboxes.forEach(checkbox => checkbox.checked = false);\n e.target.checked = true;\n this.authorization = e.target.value;\n }\n\n styleSelect() {\n const defaultOptions = {\n itemSelectText: '',\n searchEnabled: false,\n shouldSort: false\n };\n const campusList = window.SOU_CAMPUS_LISTING;\n this.campusChoices = new Choices('.concerns-form form [data-field=\"campus\"] .concerns-form__field--select', defaultOptions)\n .setValue({ label: this.selectText, value: this.selectText })\n .setChoices([{ label: this.selectText, value: '' }, ...campusList].map(({ value, label }) => (\n { value, label }\n )), 'value', 'label', true)\n .enable();\n if (this.currentCampus && campusList.find(({ value }) => value === this.currentCampus)) {\n this.campusChoices.setChoiceByValue(this.currentCampus);\n }\n }\n\n isHoneypotClean() {\n return !Array.from(this.dom.$ohNoInput).filter(input => input.value).length\n }\n\n showLoader() {\n $(this.dom.$formLoader).attr({\n 'aria-hidden': false,\n hidden: false\n });\n $(this.dom.$submitButton).hide();\n }\n\n hideLoader() {\n $(this.dom.$formLoader).attr({\n 'aria-hidden': true,\n hidden: true\n });\n $(this.dom.$submitButton).show();\n }\n\n async onSubmitForm(e) {\n e.preventDefault();\n if (!this.isHoneypotClean()) return;\n const data = this.getFormData();\n const errors = this.validationSchema().validate(data);\n if (errors.length) return this.updateFormState(errors);\n this.updateFormState(errors);\n try {\n this.showLoader();\n await this.submitForm();\n this.dom.$form.classList.add('hidden');\n this.dom.$successMessage.classList.add('active');\n window.scrollTo({\n top: document.querySelector('.tabbed-content').offsetTop,\n left: 0,\n behavior: 'smooth'\n });\n } catch (error) {\n this.hideLoader();\n window.scrollTo({\n top: document.querySelector('.tabbed-content').offsetTop,\n left: 0,\n behavior: 'smooth'\n });\n this.dom.$globalError.innerHTML = `${error.global}`\n }\n }\n\n async submitForm() {\n const params = serialize(this.dom.$form, { hash: true })\n const { data } = await axios.get(this.endpoint, { params })\n if (data.errors && data.errors.global) throw data.errors;\n }\n\n\n getFormData() {\n const data = {};\n this.dom.$form.querySelectorAll('[data-field]').forEach(el => {\n const { field } = el.dataset;\n if (field === 'authorization') return data[field] = this.authorization;\n if (field)\n data[field] = el.querySelector('.concerns-form__field').value;\n })\n return data;\n }\n\n getErrorMessage(field, type) {\n return this.el.querySelector(`[data-field=${field}]`).getAttribute(`data-msg-${type}`);\n }\n\n validationSchema() {\n const isPlaceholder = val => val.toLowerCase() !== 'select';\n\n return new Schema({\n 'full-name': {\n type: String,\n required: true,\n message: {\n required: this.getErrorMessage('full-name', 'required')\n }\n },\n campus: {\n type: String,\n required: true,\n use: { isPlaceholder },\n message: {\n required: this.getErrorMessage('campus', 'required')\n }\n },\n 'complaints-affiliation': {\n type: String,\n required: true,\n message: {\n required: this.getErrorMessage('complaints-affiliation', 'required')\n }\n },\n 'complaints-email': {\n type: String,\n required: true,\n match: /^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$/,\n message: {\n required: this.getErrorMessage('complaints-email', 'required'),\n match: this.getErrorMessage('complaints-email', 'valid')\n }\n },\n 'complaints-phone': {\n type: String,\n required: true,\n match: /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\s\\./0-9]*$/,\n message: {\n required: this.getErrorMessage('complaints-phone', 'required'),\n match: this.getErrorMessage('complaints-phone', 'valid')\n }\n },\n comments: {\n type: String,\n required: true,\n message: {\n required: this.getErrorMessage('comments', 'required')\n }\n },\n authorization: {\n type: String,\n required: true,\n message: {\n required: this.getErrorMessage('authorization', 'required')\n }\n }\n })\n }\n resetFormState() {\n this.dom.$errors.forEach(el => el.innerHTML = '');\n this.dom.$fieldWrappers.forEach(el => el.classList.remove('error'));\n }\n\n updateFormState(errors) {\n this.resetFormState();\n errors.forEach(error => {\n const field = this.dom.$form.querySelector(`[data-field=${error.path}]`);\n if (field) {\n const errorEl = field.querySelector('.concerns-form__error-wrapper');\n field.classList.add('error');\n errorEl.innerHTML = `${error.message}`;\n }\n })\n }\n}\n\nexport default ConcernsForm;\n"],"sourceRoot":""}