{"version":3,"file":"emailoptions.255e5fd4c0f64bbc7d20.js","mappings":"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","sources":["webpack://front-end-build-system/./src/smartpak/httpstatus.js","webpack://front-end-build-system/./src/smartpak/modal.js","webpack://front-end-build-system/./src/utils/fetch.js","webpack://front-end-build-system/./src/validation/unobtrusivehelpers.js","webpack://front-end-build-system/./src/views/emailsignup/viewmodels/emailoptionsviewmodel.js","webpack://front-end-build-system/./src/views/emailsignup/emailoptions.js","webpack://front-end-build-system/./src/views/emailsignup/emailsignupdata.js","webpack://front-end-build-system/external var \"jQuery\"","webpack://front-end-build-system/external var \"ko\""],"sourcesContent":["/* eslint-disable one-var */\nexport const HTTP_STATUS_OK = 200;\nexport const HTTP_STATUS_CREATED = 201;\nexport const HTTP_STATUS_NOCONTENT = 204;\nexport const HTTP_STATUS_BADREQUEST = 400;\nexport const HTTP_STATUS_UNAUTHORIZED = 401;\nexport const HTTP_STATUS_NOTFOUND = 404;\nexport const HTTP_STATUS_INTERNALSERVERERROR = 500;\nexport const HTTP_STATUS_SERVICEUNAVAILABLE = 503;\n","/* eslint-disable switch-colon-spacing */\r\n// Add modal HTML here\r\n\r\n/* prevents unit tests from blowing up */\r\nconst Dialog = window.ds && window.ds.Dialog ? window.ds.Dialog : class Noop{};\r\nclass Modal extends Dialog{\r\n constructor(content, opts){\r\n super(content, opts);\r\n }\r\n}\r\nexport default function modal(content, options) {\r\n return new Modal(content, options);\r\n}","export function antiForgeryPost(url, options){\n let opts = {\n method: 'POST',\n ...(options || {})\n };\n\n if(smartPak.pageData && smartPak.pageData.antiForgeryToken){\n opts.headers = {\n ...opts.headers,\n 'x-requestverificationtoken': smartPak.pageData.antiForgeryToken\n };\n }\n\n return fetch(url, opts);\n}\n","import $ from 'jquery';\n\nexport function parseDynamicFormElements($form) {\n if (!$form || !$form.length) {\n return;\n }\n\n $form\n .removeData('validator') /* added by the raw jquery.validate plugin */\n .removeData('unobtrusiveValidation'); /* added by the jquery unobtrusive plugin*/\n\n $.validator.setDefaults({\n ignore: []\n });\n $.validator.unobtrusive.parse($form);\n}\n\nexport function isDynamicFormValid($form) {\n if (!$form || !$form.length) {\n return false;\n }\n\n parseDynamicFormElements($form);\n\n return $form.valid();\n}\n\nexport function isValidShipDate(inputDate) {\n const shipDate = new Date(inputDate);\n const todaysDate = new Date();\n const sunday = 0;\n const saturday = 6;\n const maxYearThreshold = 5;\n\n shipDate.setHours(0, 0, 0, 0);\n todaysDate.setHours(0, 0, 0, 0);\n\n if (new RegExp(`${saturday}|${sunday}`).test(shipDate.getDay())) {\n return false;\n }\n\n if (shipDate.getFullYear() - todaysDate.getFullYear() > maxYearThreshold) {\n return false;\n }\n\n return shipDate >= todaysDate;\n}\n","import {antiForgeryPost} from '../../../utils/fetch';\nimport ko from 'knockout';\n\nfunction EmailOptionsViewModel(data){\n const unsubSelectedValue = 'unsubscribe';\n\n this.email = ko.observable();\n this.options = ko.observableArray([\n {\n displayText: 'Please change the frequency',\n value: 'frequency'\n },\n {\n displayText: 'Please unsubscribe me',\n value: unsubSelectedValue\n }\n ]);\n this.frequency = ko.observableArray(data.frequency);\n this.selectedFrequency = ko.observable();\n this.selectedOption = ko.observable();\n\n this.showFrequencyOptions = ko.observable(false);\n\n this.selectedOption.subscribe(option => {\n if(option === unsubSelectedValue){\n this.selectedFrequency(undefined);\n this.showFrequencyOptions(false);\n }else{\n this.showFrequencyOptions(true);\n }\n });\n}\n\nEmailOptionsViewModel.prototype.save = function(){\n if(this.selectedOption() === 'frequency'){\n return antiForgeryPost('/api/CustomerContact/EmailSubscribe', {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n 'email': this.email(),\n 'frequency': this.selectedFrequency()\n })\n })\n .then(function(response){\n return response.json();\n })\n .catch(function(){\n // eslint-disable-next-line no-console\n console.error('A call to \\'/api/CustomerContact/EmailSubscribe\\' failed');\n });\n }\n\n return antiForgeryPost('/api/CustomerContact/Unsubscribe', {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json' \n },\n body: JSON.stringify({\n Email: this.email()\n })\n })\n .then(function(response){\n return response.json();\n })\n .catch(function(){\n // eslint-disable-next-line no-console\n console.error('A call to \\'/api/CustomerContact/Unsubscribe\\' failed');\n });\n};\n\nexport default EmailOptionsViewModel;","/* eslint-disable sort-imports */\nimport $ from 'jquery';\nimport ko from 'knockout';\nimport {getFormData} from './emailsignupdata';\nimport {isDynamicFormValid} from '../../validation/unobtrusivehelpers';\nimport {HTTP_STATUS_OK, HTTP_STATUS_NOCONTENT} from '../../smartpak/httpstatus';\nimport EmailOptionsViewModel from './viewmodels/emailoptionsviewmodel';\nimport modal from '../../smartpak/modal';\n\ngetFormData().then(response => {\n if (response.status === HTTP_STATUS_OK) {\n const $form = document.getElementById('email-options-form'),\n emailOptionsViewModel = new EmailOptionsViewModel(response.content);\n\n if ($form) {\n ko.applyBindings(emailOptionsViewModel, $form);\n\n const $button = $form.querySelector('.button.primary');\n\n if ($button) {\n $button.addEventListener('click', e => {\n e.preventDefault();\n handleSubmit($form, emailOptionsViewModel);\n });\n }\n }\n }\n\n function handleSubmit($form, emailOptionsViewModel) {\n const $container = document.getElementById('email-options'),\n $success = document.getElementById('email-options-success');\n \n if (isDynamicFormValid($($form))) {\n emailOptionsViewModel.save()\n .then(response => {\n if ($container && $success && response.Status === HTTP_STATUS_NOCONTENT) {\n $container.classList.add('jsHide');\n $success.classList.remove('jsHide');\n }else{\n showFailedRequestModal(response.Content);\n }\n })\n .catch(() => showFailedRequestModal());\n }\n }\n});\n\nfunction showFailedRequestModal(errorMessage){\n const $div = document.createElement('div');\n \n $div.innerHTML = errorMessage || 'Something went wrong, please try again';\n modal($div, {\n title: 'Error',\n removeContents: true\n });\n}","export function getFormData(){\n return fetch('/api/CustomerContact/GetEmarsysChoiceData')\n .then(function(response){\n return response.json();\n })\n .then(function(response){\n return {\n ...response,\n content: format(response.content)\n };\n });\n}\n\nexport function getContent(){\n return fetch('/api/CustomerContact/EmailSignUp').then(r => r.text());\n}\n\nexport function format(content){\n return (content || []).reduce(function(obj, item){\n var key = item.section.substring(0, 1).toLowerCase() + item.section.substring(1);\n if(!obj[key]){\n obj[key] = [];\n }\n\n obj[key].push(item);\n\n return obj;\n }, {});\n}","module.exports = jQuery;","module.exports = ko;"],"names":["HTTP_STATUS_OK","HTTP_STATUS_CREATED","HTTP_STATUS_NOCONTENT","HTTP_STATUS_BADREQUEST","HTTP_STATUS_UNAUTHORIZED","HTTP_STATUS_NOTFOUND","HTTP_STATUS_INTERNALSERVERERROR","HTTP_STATUS_SERVICEUNAVAILABLE","Modal","_Dialog","content","opts","_classCallCheck","_callSuper","_inherits","_createClass","window","ds","Dialog","Noop","modal","options","antiForgeryPost","url","_objectSpread","method","smartPak","pageData","antiForgeryToken","headers","fetch","isDynamicFormValid","$form","length","removeData","$","setDefaults","ignore","unobtrusive","parse","parseDynamicFormElements","valid","isValidShipDate","inputDate","shipDate","Date","todaysDate","setHours","RegExp","concat","test","getDay","getFullYear","EmailOptionsViewModel","data","_this","unsubSelectedValue","this","email","ko","displayText","value","frequency","selectedFrequency","selectedOption","showFrequencyOptions","subscribe","option","undefined","prototype","save","body","JSON","stringify","then","response","json","console","error","Email","showFailedRequestModal","errorMessage","$div","document","createElement","innerHTML","title","removeContents","getFormData","status","getElementById","emailOptionsViewModel","$button","querySelector","addEventListener","e","preventDefault","$container","$success","Status","classList","add","remove","Content","handleSubmit","reduce","obj","item","key","section","substring","toLowerCase","push","getContent","r","text","module","exports","jQuery"],"sourceRoot":""}