{"version":3,"file":"email-preferences-min.js","mappings":"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","sources":["webpack://waves/webpack/bootstrap","webpack://waves/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://waves/webpack/runtime/compat get default export","webpack://waves/webpack/runtime/define property getters","webpack://waves/webpack/runtime/hasOwnProperty shorthand","webpack://waves/./src/domain/hidden-data-provider.ts","webpack://waves/external var \"React\"","webpack://waves/./src/domain/url-provider.ts","webpack://waves/./src/DAL/data-provider.ts","webpack://waves/./src/projects/products/enums/product-department-enum.ts","webpack://waves/./src/projects/shopping-cart/cart-bridger-pay/enums/last-payment-option-enum.ts","webpack://waves/./src/projects/shopping-cart/cart-bridger-pay/enums/payment-tabs-enum.ts","webpack://waves/./src/projects/shopping-cart/cart-bridger-pay/enums/credit-card-service-enum.ts","webpack://waves/./src/projects/shopping-cart/cart-bridger-pay/enums/credit-card-tab.ts","webpack://waves/./node_modules/jwt-decode/build/jwt-decode.esm.js","webpack://waves/./src/projects/membership/enums/external-service-enum.ts","webpack://waves/./src/domain/common.ts","webpack://waves/./src/ui/svg/common/preloader.tsx","webpack://waves/./src/domain/facebook/facebook-types.ts","webpack://waves/./src/domain/external-login/external-login-types.ts","webpack://waves/./src/projects/shopping-cart/cart-bridger-pay/enums/cart-steps.ts","webpack://waves/./src/projects/membership/dal/data-provider.ts","webpack://waves/./src/projects/membership/email-preferences/app/app.tsx","webpack://waves/external var \"ReactDOM\"","webpack://waves/./src/projects/membership/email-preferences/index.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/**\r\n * get boolean value from the hidden div\r\n */\r\nexport const getHiddenDataBoolean = (id: string) => {\r\n const $el = document.getElementById(id);\r\n if(!$el) return false;\r\n\r\n return $el.innerText.trim().toLowerCase() === 'true';\r\n};\r\n\r\n/**\r\n * get string value from the hidden div\r\n */\r\nexport const getHiddenDataString = (id: string) => {\r\n const $el = document.getElementById(id);\r\n if(!$el || !$el.innerText) return '';\r\n\r\n return $el.innerText.trim();\r\n};\r\n\r\n/**\r\n * get numeric value from the hidden div\r\n */\r\nexport const getHiddenDataNumber = (id: string) => {\r\n const $el = document.getElementById(id);\r\n if(!$el || !$el.innerText) return 0;\r\n\r\n return Number($el.innerText.trim()) || 0;\r\n};\r\n\r\n\r\n/**\r\n * is user authenticated\r\n */\r\nexport const getIsAuthenticated = () => {\r\n return getHiddenDataBoolean('is-user-authenticated');\r\n};\r\n\r\n/**\r\n * get waves user email printed in the hidden DIV\r\n */\r\nexport const getWavesUserEmail = () => {\r\n const $el = document.getElementById('waves-user-email');\r\n if(!$el || !$el.textContent) return '';\r\n return $el.textContent.trim();\r\n};\r\n\r\n/**\r\n * is china\r\n */\r\nexport const getIsChina = () => {\r\n return getHiddenDataBoolean('is-china');\r\n};\r\n\r\n/**\r\n * is Kentico environment\r\n */\r\nexport const getEnvironment = () => {\r\n return getHiddenDataString('kentico-environment');\r\n};","const __WEBPACK_NAMESPACE_OBJECT__ = React;","import { IIndexable } from './interfaces';\r\n\r\n/**\r\n * Read a page's GET URL variables and return them as an associative array\r\n * search (optional) - '?me=myValue&name2=SomeOtherValue'\r\n *\r\n * Usage:\r\n * ------\r\n * getQueryString(); //window.location.search\r\n * getQueryString('?me=myValue&name2=SomeOtherValue');\r\n * getQueryString()['key'] -> value\r\n *\r\n * Result:\r\n * -------\r\n * {\r\n * \"me\" : \"myValue\",\r\n * \"name2\" : \"SomeOtherValue\"\r\n * }\r\n *\r\n */\r\nexport const getQueryString = (search?: string, caseSensitive: boolean = true) : IIndexable => {\r\n\r\n const result = {} as IIndexable;\r\n\r\n if(!search){\r\n search = window.location.search;\r\n }\r\n\r\n // decode if needed\r\n search = window.decodeURIComponent(search.toString());\r\n\r\n if(!caseSensitive){\r\n search = search?.toLowerCase();\r\n }\r\n\r\n if(search.length <= 1) return result;\r\n\r\n // get hashes\r\n const hashes = search.substring(1).split('&');\r\n\r\n for(let i = 0; i < hashes.length; i++){\r\n\r\n //get hash\r\n const hash = hashes[i];\r\n\r\n //get hash sections\r\n const sections = hash.split('=');\r\n\r\n if(sections.length >= 2){\r\n\r\n let val = '';\r\n\r\n for(let s=1; s 1){\r\n val += '=';\r\n }\r\n\r\n val += sections[s];\r\n }\r\n\r\n //add to the object\r\n result[sections[0]] = val;\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * generate return URL that includes query string and hashes\r\n * https://www.waves.com/login?ReturnUrl=/vocal-mixing-masterclass-leslie-brathwaite?playlist=756640c2-13c0-408b-ad77-0294173d7721\r\n */\r\nexport const getReturnURL = (prefix = '/login') => {\r\n /*\r\n const qs = Object.entries(getQueryString()).map(([key, value], index) => `${key}=${value}`); //\r\n qs.push(`returnurl=${encodeURIComponent(window.location.pathname)}`);\r\n return `/login?${qs.join('&')}`*/\r\n\r\n const returnURL = `ReturnUrl=${window.location.pathname}${window.location.search}${window.location.hash}`;\r\n return `${prefix}?${returnURL}`\r\n};\r\n\r\nexport const removeQueryParamFromUrl = (queryParam: string) => {\r\n if(!queryParam || typeof URLSearchParams === 'undefined') return;\r\n\r\n const url = new URL(window.location.href);\r\n const params = new URLSearchParams(url.search);\r\n if(params.has(queryParam)){\r\n params.delete(queryParam);\r\n url.search = params.toString();\r\n }\r\n\r\n window.history.replaceState({}, '', url.toString());\r\n};","import { IResponse } from '../interfaces/common-interfaces';\r\n\r\nexport const DEFAULT_ERROR = 'An error has occurred.';\r\n\r\n/**\r\n * encode and format the data\r\n */\r\nexport const encodeData = (data: any) => {\r\n\r\n const params = [];\r\n\r\n for(let key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n params.push(key + '=' + window.encodeURIComponent(data[key]));\r\n }\r\n }\r\n\r\n return params.join('&');\r\n};\r\n\r\n/**\r\n * Returns true if access is denied.\r\n */\r\nconst ifShouldDenyOnReadOnly = async (response: Response|null) => {\r\n if(response?.status !== 999) return false;\r\n window.location.href = '/maintenance';\r\n\r\n /*\r\n let isLoggedIn = false;\r\n\r\n try{\r\n // {\"message\":\"Waves.com is undergoing maintenance.\",\"isLoggedIn\":false}\r\n const text = await response.text();\r\n const parsed = JSON.parse(text);\r\n isLoggedIn = parsed.isLoggedIn;\r\n if(isLoggedIn){\r\n window.location.href = '/maintenance';\r\n }\r\n }\r\n catch(ex){\r\n console.log(ex);\r\n }*/\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * get request\r\n */\r\nexport const get = async (url: string, data: any = null) : Promise => {\r\n\r\n if(data){\r\n\r\n const qs = encodeData(data);\r\n url += `?${qs}`;\r\n }\r\n\r\n const headers = new Headers();\r\n headers.append('pragma', 'no-cache');\r\n headers.append('cache-control', 'no-cache');\r\n headers.append('Content-Type', 'application/json');\r\n\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers,\r\n credentials: 'same-origin' //'include', 'omit'\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response.json(),\r\n statusCode: response.status\r\n }\r\n};\r\n\r\n/**\r\n * post request\r\n */\r\nexport const post = async (url: string, data: any) : Promise => {\r\n\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response.json(),\r\n statusCode: response.status\r\n }\r\n};\r\n\r\nexport const del = async (url: string, data: any) : Promise => {\r\n\r\n const response = await fetch(url, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response.json(),\r\n statusCode: response.status\r\n }\r\n};\r\n\r\nexport const put = async (url: string, data: any) : Promise => {\r\n\r\n const response = await fetch(url, {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response.json(),\r\n statusCode: response.status\r\n }\r\n};\r\n\r\n/**\r\n * upload file\r\n */\r\nexport const upload = async (url: string, data: FormData, headers?: any) => {\r\n\r\n let response: Response | null = null;\r\n const config: RequestInit = {\r\n method: 'POST',\r\n body: data\r\n };\r\n\r\n if(headers){\r\n config.headers = headers;\r\n }\r\n\r\n try{\r\n response = await fetch(url, config);\r\n }\r\n catch(ex){\r\n console.log('Error:', ex);\r\n }\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response?.json(),\r\n statusCode: response?.status\r\n }\r\n};\r\n\r\nexport const download = (fileName: string, blob: Blob) => {\r\n const url = window.URL.createObjectURL(blob);\r\n const $a = document.createElement('a');\r\n $a.style.display = 'none';\r\n $a.href = url;\r\n // the filename you want\r\n $a.download = fileName;\r\n document.body.appendChild($a);\r\n $a.click();\r\n window.URL.revokeObjectURL(url);\r\n};\r\n\r\nexport const getDownload = async (fileName: string, url: string, data: any = null) => {\r\n\r\n if(data){\r\n\r\n const qs = encodeData(data);\r\n url += `?${qs}`;\r\n }\r\n\r\n const headers = new Headers();\r\n headers.append('pragma', 'no-cache');\r\n headers.append('cache-control', 'no-cache');\r\n headers.append('Content-Type', 'application/json');\r\n\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers,\r\n credentials: 'same-origin' //'include', 'omit'\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n const blob = await response.blob();\r\n download(fileName, blob);\r\n};\r\n\r\nexport const postDownload = async (fileName: string, url: string, data: any = null) => {\r\n\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n const blob = await response.blob();\r\n download(fileName, blob);\r\n};\r\n\r\n\r\n","export enum ProductDepartmentEnum {\r\n Bundles = 1,\r\n Plugins = 2,\r\n General = 5,\r\n Books = 6,\r\n InactiveItems = 7,\r\n LiveSound = 8,\r\n Hardware = 9,\r\n Software = 10,\r\n Subscription = 12,\r\n Consumer = 13,\r\n RentToOwnDynamic = 14,\r\n RentToOwnStatic = 15,\r\n Merch = 16,\r\n WavesUpdatePlan = 17,\r\n Upgrades = 18,\r\n Courses = 19,\r\n SubscriptionDynamic = 20,\r\n Gifts = 21,\r\n CoursesWithSoftware = 22,\r\n SubscriptionNonRecurring = 23,\r\n Mastering = 24,\r\n}","/**\r\n * https://wavesaudio.atlassian.net/browse/DSWEB-3278\r\n * ap = alipay, pp = paypal, cc = credit card, null = no previous purchase\r\n */\r\nexport enum LastPaymentOption {\r\n NONE = '',\r\n CreditCard = 'cc',\r\n PayPal = 'pp',\r\n AliPay = 'ap',\r\n}","export enum PaymentTabsEnum {\r\n CreditCard = 1,\r\n PayPal = 2,\r\n AliPay = 3,\r\n}","export enum CreditCardServiceEnum {\r\n None = 0,\r\n FirstData = 1,\r\n Pinnacle = 2,\r\n Stripe = 3\r\n}","export enum CreditCardTabTabsEnum {\r\n NewCreditCard = 1,\r\n SavedCreditCards = 2,\r\n}","function e(e){this.message=e}e.prototype=new Error,e.prototype.name=\"InvalidCharacterError\";var r=\"undefined\"!=typeof window&&window.atob&&window.atob.bind(window)||function(r){var t=String(r).replace(/=+$/,\"\");if(t.length%4==1)throw new e(\"'atob' failed: The string to be decoded is not correctly encoded.\");for(var n,o,a=0,i=0,c=\"\";o=t.charAt(i++);~o&&(n=a%4?64*n+o:o,a++%4)?c+=String.fromCharCode(255&n>>(-2*a&6)):0)o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(o);return c};function t(e){var t=e.replace(/-/g,\"+\").replace(/_/g,\"/\");switch(t.length%4){case 0:break;case 2:t+=\"==\";break;case 3:t+=\"=\";break;default:throw\"Illegal base64url string!\"}try{return function(e){return decodeURIComponent(r(e).replace(/(.)/g,(function(e,r){var t=r.charCodeAt(0).toString(16).toUpperCase();return t.length<2&&(t=\"0\"+t),\"%\"+t})))}(t)}catch(e){return r(t)}}function n(e){this.message=e}function o(e,r){if(\"string\"!=typeof e)throw new n(\"Invalid token specified\");var o=!0===(r=r||{}).header?0:1;try{return JSON.parse(t(e.split(\".\")[o]))}catch(e){throw new n(\"Invalid token specified: \"+e.message)}}n.prototype=new Error,n.prototype.name=\"InvalidTokenError\";export default o;export{n as InvalidTokenError};\n//# sourceMappingURL=jwt-decode.esm.js.map\n","export enum ExternalLoginServiceEnum\r\n{\r\n Google = 1,\r\n Facebook = 2,\r\n}","/**\r\n * get JSON from HTML element on the page\r\n */\r\nimport React, {useEffect, useState} from \"react\";\r\n\r\n\r\nexport const getJSONFromHtml = ($el: HTMLElement|null) => {\r\n if(!$el || !$el.textContent) return null;\r\n\r\n let json = null;\r\n\r\n try{\r\n json = JSON.parse($el.textContent);\r\n }\r\n catch(ex){}\r\n\r\n return json;\r\n};\r\n\r\n/**\r\n * get setting fromHTML\r\n *
...
\r\n */\r\nexport const getSettingFromHtml = (id: string) => {\r\n const $div = document.querySelector(`#${ id }`);\r\n if(!$div || !$div.textContent) return '';\r\n return $div.textContent.trim();\r\n};\r\n\r\n/**\r\n * helper: get GUID\r\n */\r\nconst guidHelper = () => {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n};\r\n\r\n/**\r\n * get GUID\r\n */\r\nexport const guid = () => {\r\n return guidHelper() + guidHelper() + '-' + guidHelper() + '-' + guidHelper() + '-' + guidHelper() + '-' + guidHelper() + guidHelper() + guidHelper();\r\n};\r\n\r\n/**\r\n * timeout in milliseconds\r\n */\r\nexport const timeout = (ms: number) => {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n};\r\n\r\n/**\r\n * get page node GUID from meta tag printed in HTML\r\n *
67633544-c1c1-4096-a3cc-880a96fe4713
\r\n */\r\nexport const getPageNodeGUID = () => {\r\n const $div = document.querySelector('#nodeguid');\r\n if(!$div || !$div.textContent) return '';\r\n return $div.textContent.trim();\r\n};\r\n\r\n/**\r\n * get img CDN domain\r\n */\r\nexport const getImgCDNDomain = () => {\r\n const $box = document.getElementById('img-cdn-domain');\r\n const domain = $box?.textContent || '';\r\n return domain.trim().toLowerCase();\r\n};\r\n\r\ndeclare const window: any;\r\nexport const isMobile = () => {\r\n let check = false;\r\n\r\n // eslint-disable-next-line\r\n (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4))) check = true;})( navigator.userAgent||navigator.vendor||window.opera);\r\n return check;\r\n};\r\nexport const isTablet_NOTWORK = () => {\r\n const userAgent = navigator.userAgent.toLowerCase();\r\n const isTablet = /(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/.test(userAgent);\r\n return isTablet;\r\n};\r\nexport const isTablet = () => {\r\n const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n if (isTouchDevice && !isMobile()) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n};\r\n\r\nexport const stopAllYouTubeVideos = () => {\r\n // eslint-disable-next-line\r\n document.querySelectorAll('iframe').forEach(v => { v.src = v.src;});\r\n const cnt = document.querySelectorAll('iframe')?.length;\r\n if(cnt > 0){\r\n window.setTimeout(() => {\r\n window.history.go(cnt-1);\r\n }, 200);\r\n }\r\n //window.history.go(-1);\r\n}\r\n\r\n\r\nexport const getHashByPrefix = (toFind:string, indexToFind:number = 0) => {\r\n let result = \"\";\r\n const _hash = window.location.hash.substring(1);\r\n if(!_hash || _hash === '')\r\n return result;\r\n var a = decodeURIComponent(_hash).split(\"|\"),\r\n i;\r\n\r\n for (i = 0; i < a.length; i++) {\r\n\r\n if(i < indexToFind)\r\n continue;\r\n\r\n if(a[i].startsWith(toFind) || toFind === ''){\r\n result = a[i];\r\n return result;\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const getParents = (elem: any) => {\r\n\r\n // Set up a parent array\r\n var parents = [];\r\n\r\n // Push each parent element to the array\r\n for ( ; elem && elem !== document; elem = elem.parentNode ) {\r\n parents.push(elem);\r\n }\r\n\r\n // Return our parent array\r\n return parents;\r\n\r\n};\r\nexport const isChildOfElementById = (elem: any, parentId: string) => {\r\n\r\n let res = false;\r\n // Push each parent element to the array\r\n for ( ; elem && elem !== document; elem = elem.parentNode ) {\r\n if(elem.id && elem.id === parentId)\r\n res = true;\r\n }\r\n\r\n // Return our parent array\r\n return res;\r\n\r\n};\r\n//Hook for dynamic window size\r\nexport const useWindowSize = () => {\r\n\r\n // Initialize state with undefined width/height so server and client renders match\r\n // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/\r\n const [windowSize, setWindowSize] = useState({\r\n width: undefined,\r\n height: undefined,\r\n });\r\n useEffect(() => {\r\n // Handler to call on window resize\r\n function handleResize() {\r\n // Set window width/height to state\r\n setWindowSize({\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n });\r\n }\r\n // Add event listener\r\n window.addEventListener(\"resize\", handleResize);\r\n // Call handler right away so state gets updated with initial window size\r\n handleResize();\r\n // Remove event listener on cleanup\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, []); // Empty array ensures that effect is only run on mount\r\n\r\n return windowSize;\r\n\r\n};\r\n//Hook for detect if HTML element is overflow\r\nexport const useIsOverflow = (ref : any) => {\r\n const [isOverflow, setIsOverflow] = React.useState(false);\r\n\r\n React.useLayoutEffect(() => {\r\n const { current } = ref;\r\n\r\n const trigger = () => {\r\n const hasOverflow = current.scrollWidth > current.clientWidth;\r\n\r\n setIsOverflow(hasOverflow);\r\n\r\n //if (callback) callback(hasOverflow);\r\n };\r\n\r\n if (current) {\r\n trigger();\r\n }\r\n }, [ ref]);\r\n\r\n return isOverflow;\r\n};\r\n\r\nexport const openWindowPopup = (url: string, title: string, width: number, height: number) => {\r\n const left = (window.screen.width / 2) - (width / 2);\r\n const top = (window.screen.height / 2) - (height / 2);\r\n return window.open(\r\n url,\r\n title,\r\n `toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=${ width }, height=${ height }, top=${ top }, left=${ left }`\r\n );\r\n};","import React from 'react';\r\nimport { IIconProps } from '../interfaces';\r\n\r\nconst Preloader = (props : IIconProps) => {\r\n return (\r\n \r\n Loading...\r\n \r\n \r\n )\r\n};\r\n\r\nexport default Preloader;\r\n","/**\r\n * Allows to TypeScript recognize Facebook namespace\r\n */\r\ndeclare global {\r\n interface Window {\r\n fbq: any;\r\n facebookProductPagesViewContent: any;\r\n fbAsyncInit: Function;\r\n }\r\n}\r\n\r\nexport {}\r\n\r\nexport enum EFacebookStatus {\r\n Error = -1,\r\n LoggedIn = 0,\r\n}\r\n\r\nexport interface IFacebookResponse {\r\n status: EFacebookStatus,\r\n accessToken: string,\r\n userID: string,\r\n}\r\n\r\nexport interface IFacebookUser {\r\n name: string;\r\n email: string;\r\n}\r\n","\r\nexport interface IExternalLoginResult {\r\n isValid: boolean;\r\n isLogin: boolean;\r\n status: ExternalLoginResultStatusCode;\r\n}\r\n\r\nexport enum ExternalLoginResultStatusCode {\r\n GeneralError = -99,\r\n InsertError = -5,\r\n WavesAppValidationFailed = -4,\r\n DisabledUser = -3,\r\n EmailIsNotValid = -2,\r\n FacebookValidationFailed = -1,\r\n OK = 0,\r\n}","export enum CartSteps {\r\n First = 1,\r\n Second = 2,\r\n Third = 3,\r\n}","import { get, post } from '../../../DAL/data-provider';\r\nimport { IServerValidation } from '../../../domain/validation/interfaces';\r\nimport { CreateAccountReferrer } from '../enums/create-account-referrer';\r\nimport { ILocalDataRequest } from '../../shopping-cart/cart-bridger-pay/interfaces';\r\nimport { IsAuthReferrer } from '../enums/is-auth-referrer';\r\nimport { SELECTED_PAYMENT_TAB_STORAGE_KEY } from '../../shopping-cart/cart-bridger-pay/domain/shopping-cart-provider';\r\nimport { ExternalLoginServiceEnum } from '../enums/external-service-enum';\r\nimport { googleSignOut } from '../../../domain/google/google-login-provider';\r\nimport { facebookLogOut } from '../../../domain/facebook/facebook-login-provider';\r\nimport { getSettingFromHtml } from '../../../domain/common';\r\n\r\nexport enum ILoginReferrer {\r\n LoginPage = 0,\r\n CartPage = 1,\r\n MainExternalLogin = 5,\r\n CartExternalLogin = 6,\r\n}\r\n\r\n/**\r\n * perform login\r\n */\r\nexport const login = async (\r\n referrer: ILoginReferrer,\r\n userName: string,\r\n password: string,\r\n isPersistent: boolean,\r\n captchaCode: string,\r\n recaptchaVersion: number,\r\n localData?: ILocalDataRequest,\r\n wavesAppCode = '',\r\n wavesAppTimeToken = 0,\r\n wavesUserGuid = '',\r\n wavesAppLoginToken = ''\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/login', {\r\n userName,\r\n password,\r\n isPersistent,\r\n captchaCode,\r\n recaptchaVersion,\r\n\r\n referrer,\r\n shipAddressLine: localData?.shipAddressLine,\r\n shipCity: localData?.shipCity,\r\n shipZipCode: localData?.shipZipCode,\r\n shipCountry2LetterCode: localData?.shipCountry2LetterCode,\r\n shipState2LetterCode: localData?.shipState2LetterCode,\r\n shippingCode: localData?.shippingCode,\r\n\r\n taxCountry2LetterCode: localData?.taxCountry2LetterCode,\r\n taxState2LetterCode: localData?.taxState2LetterCode,\r\n taxZipCode: localData?.taxZipCode,\r\n\r\n wavesAppCode,\r\n wavesAppTimeToken,\r\n wavesUserGuid,\r\n wavesAppLoginToken,\r\n });\r\n};\r\n\r\nexport const externalLogin = async (\r\n externalService: ExternalLoginServiceEnum,\r\n accessToken: string,\r\n userID: string,\r\n email: string,\r\n name: string,\r\n referrer: ILoginReferrer,\r\n isPersistent: boolean,\r\n isShoppingCart: boolean,\r\n\r\n localData?: ILocalDataRequest,\r\n wavesAppCode = '',\r\n wavesAppTimeToken = 0,\r\n wavesUserGuid = '',\r\n wavesAppLoginToken = '',\r\n\r\n // message gears -------\r\n pageNodeGUID?: string,\r\n firstUTMSource?: string,\r\n firstUTMMedium?: string,\r\n firstUTMCampaign?: string,\r\n lastUTMSource?: string,\r\n lastUTMMedium?: string,\r\n lastUTMCampaign?: string\r\n) : Promise<{ data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/external-login', {\r\n externalService,\r\n accessToken,\r\n userID,\r\n email,\r\n name,\r\n\r\n isPersistent,\r\n isShoppingCart,\r\n referrer,\r\n\r\n shipAddressLine: localData?.shipAddressLine,\r\n shipCity: localData?.shipCity,\r\n shipZipCode: localData?.shipZipCode,\r\n shipCountry2LetterCode: localData?.shipCountry2LetterCode,\r\n shipState2LetterCode: localData?.shipState2LetterCode,\r\n shippingCode: localData?.shippingCode,\r\n\r\n taxCountry2LetterCode: localData?.taxCountry2LetterCode,\r\n taxState2LetterCode: localData?.taxState2LetterCode,\r\n taxZipCode: localData?.taxZipCode,\r\n\r\n wavesAppCode,\r\n wavesAppTimeToken,\r\n wavesUserGuid,\r\n wavesAppLoginToken,\r\n\r\n pageNodeGUID,\r\n firstUTMSource,\r\n firstUTMMedium,\r\n firstUTMCampaign,\r\n lastUTMSource,\r\n lastUTMMedium,\r\n lastUTMCampaign,\r\n });\r\n};\r\n\r\n/**\r\n * perform create account\r\n */\r\nexport const createAccount = async (\r\n referrer: CreateAccountReferrer,\r\n email: string,\r\n password: string,\r\n captchaCode: string,\r\n recaptchaVersion: number,\r\n\r\n // message gears -------\r\n pageNodeGUID?: string,\r\n firstUTMSource?: string,\r\n firstUTMMedium?: string,\r\n firstUTMCampaign?: string,\r\n lastUTMSource?: string,\r\n lastUTMMedium?: string,\r\n lastUTMCampaign?: string\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/create-account', {\r\n referrer,\r\n email,\r\n password,\r\n captchaCode,\r\n recaptchaVersion,\r\n pageNodeGUID,\r\n productGUID: getSettingFromHtml('product-guid'),\r\n firstUTMSource,\r\n firstUTMMedium,\r\n firstUTMCampaign,\r\n lastUTMSource,\r\n lastUTMMedium,\r\n lastUTMCampaign,\r\n });\r\n};\r\n\r\nexport const logout = async () => {\r\n try{\r\n window.sessionStorage.removeItem(SELECTED_PAYMENT_TAB_STORAGE_KEY);\r\n }\r\n catch(ex){}\r\n\r\n try{\r\n googleSignOut();\r\n }\r\n catch (ex){}\r\n\r\n try{\r\n facebookLogOut();\r\n }\r\n catch (ex){}\r\n\r\n return post('/api/membership/logout', {});\r\n};\r\n\r\nexport const logoutFromAllDevices = async () => {\r\n try{\r\n window.sessionStorage.removeItem(SELECTED_PAYMENT_TAB_STORAGE_KEY);\r\n }\r\n catch(ex){}\r\n\r\n try{\r\n googleSignOut();\r\n }\r\n catch (ex){}\r\n\r\n try{\r\n facebookLogOut();\r\n }\r\n catch (ex){}\r\n\r\n return post('/api/membership/logout-all-devices', {});\r\n};\r\n\r\n/**\r\n * resend activation email\r\n */\r\nexport const resendActivationEmail = async (captchaCode: string, recaptchaVersion: number) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n return post('/api/membership/resend-activation-email', {\r\n captchaCode,\r\n recaptchaVersion,\r\n });\r\n};\r\n\r\n/**\r\n * update email\r\n */\r\nexport const updateEmail = async (\r\n newEmail: string,\r\n captchaCode: string,\r\n recaptchaVersion: number,\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/update-email', {\r\n newEmail,\r\n captchaCode,\r\n recaptchaVersion,\r\n });\r\n};\r\n\r\n/**\r\n * get email preferences\r\n */\r\nexport const getEmailPreferences = async (recipientGUID?: string) => {\r\n\r\n let url = '/api/messagegears/email-preferences';\r\n\r\n if(recipientGUID){\r\n url = `${ url }?guid=${ recipientGUID }`;\r\n }\r\n\r\n return get(url);\r\n};\r\n\r\n/**\r\n * update email preferences\r\n */\r\nexport const setEmailPreferences = async (recipientGUID: string, newsletterID: number, isSelected: boolean) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n return post('/api/messagegears/set-email-preferences', {\r\n recipientGUID,\r\n newsletterID,\r\n isSelected\r\n });\r\n};\r\n\r\n/**\r\n * unsubscribe from all newsletters\r\n * https://dev13.waves.com/email-preferences?guid=9C12F487-58F3-478A-AC28-9D01F2557A49&unsub=http%3A%2F%2Ftrack.waves-audio.com%2Fuc%2F3%2FeyJhaSI6MjczNjMyNjEsImUiOiJpZGFuQHdhdmVzLmNvbSIsInJpIjoiNCIsInJxIjoiMDItdDIyMDgxLWQyNjE2YTAzZjU4NjQ5OTViMWIzMDIxYzcyZmY2ZDM1IiwicGgiOm51bGwsIm0iOmZhbHNlfQ%2F6L_jR0-bdCQpbPebxD8fOA&utm_campaifgn=unsubscribe\r\n */\r\nexport const unsubscribe = async (unsub: string, recipientGUID: string) => {\r\n return post('/api/messagegears/unsubscribe', {\r\n recipientGUID,\r\n unsub,\r\n });\r\n};\r\n\r\n/**\r\n * check if user is authenticated\r\n */\r\nexport const isAuthenticated = async (referrer: IsAuthReferrer, localData?: ILocalDataRequest) => {\r\n return post('/api/membership/is-authenticated', {\r\n referrer,\r\n\r\n shipAddressLine: localData?.shipAddressLine,\r\n shipCity: localData?.shipCity,\r\n shipZipCode: localData?.shipZipCode,\r\n shipCountry2LetterCode: localData?.shipCountry2LetterCode,\r\n shipState2LetterCode: localData?.shipState2LetterCode,\r\n shippingCode: localData?.shippingCode,\r\n\r\n taxCountry2LetterCode: localData?.taxCountry2LetterCode,\r\n taxState2LetterCode: localData?.taxState2LetterCode,\r\n taxZipCode: localData?.taxZipCode,\r\n\r\n taxID: localData?.taxID,\r\n });\r\n};\r\n\r\n/**\r\n * change password\r\n */\r\nexport const changePassword = async (\r\n currentPassword: string,\r\n newPassword: string,\r\n confirmPassword: string\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/change-password', {\r\n currentPassword,\r\n newPassword,\r\n confirmPassword,\r\n });\r\n};\r\n\r\n/**\r\n * forgot password\r\n */\r\nexport const forgotPassword = async (\r\n userNameOrEmail: string,\r\n isEmail: boolean,\r\n captchaCode: string,\r\n recaptchaVersion: number,\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/forgot-password', {\r\n userNameOrEmail,\r\n isEmail,\r\n captchaCode,\r\n recaptchaVersion,\r\n });\r\n};\r\n\r\nexport const validateResetPassword = async (isCancel: boolean, hash: string, id: string) => {\r\n return get('/api/membership/reset-password', {\r\n isCancel,\r\n hash,\r\n id,\r\n });\r\n};\r\n\r\nexport const resetPassword = async (\r\n hash: string,\r\n id: string,\r\n password: string,\r\n confirmPassword: string,\r\n captchaCode: string,\r\n recaptchaVersion: number,\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/membership/reset-password', {\r\n hash,\r\n id,\r\n password,\r\n confirmPassword,\r\n captchaCode,\r\n recaptchaVersion,\r\n });\r\n};\r\n\r\nexport const sendPluginsBIConsent = async () => {\r\n return post('/api/membership/pluginsbi-consent', {});\r\n};\r\n\r\n","import { getIsAuthenticated } from '../../../../domain/hidden-data-provider';\r\nimport { useEffect, useState } from 'react';\r\nimport { getQueryString, getReturnURL } from '../../../../domain/url-provider';\r\nimport { getEmailPreferences, setEmailPreferences, unsubscribe } from '../../dal/data-provider';\r\nimport { DEFAULT_ERROR } from '../../../../DAL/data-provider';\r\nimport { IResponse } from '../../../../interfaces/common-interfaces';\r\nimport { IEmailPreference } from '../interfaces';\r\nimport Preloader from '../../../../ui/svg/common/preloader';\r\n\r\nconst COMMON_ERR = 100;\r\nconst CONTACT_NOT_LOGGED_IN = 101;\r\nconst HARD_BOUNCE = 102;\r\n\r\n/**\r\n * Email Preferences\r\n * https://dev13.waves.com/email-preferences?guid=9C12F487-58F3-478A-AC28-9D01F2557A49\r\n * https://wavesaudio.atlassian.net/browse/DSWEB-1837\r\n * https://wavesaudio.atlassian.net/browse/DSWEB-48\r\n */\r\nconst EmailPreferencesApp = () => {\r\n\r\n const [recipientGUID] = useState(getQueryString()['guid']);\r\n const [loggedIn] = useState(getIsAuthenticated());\r\n const [showEmailPreferences] = useState(loggedIn || (!loggedIn && !!recipientGUID));\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [preferences, setPreferences] = useState([]);\r\n const [error, setError] = useState(0);\r\n const [showUnsubscribeOKMessage, setShowUnsubscribeOKMessage] = useState(false);\r\n\r\n\r\n // handle unsubscribe option\r\n // https://wavesaudio.atlassian.net/browse/DSWEB-359\r\n const [hasUnsubscribe, setHasUnsubscribe] = useState(getQueryString().hasOwnProperty('unsub'));\r\n const [unsubscribed, setUnsubscribed] = useState(false);\r\n\r\n /**\r\n * handle server error\r\n * returns true in case of error\r\n */\r\n const handleErrors = (response: IResponse) => {\r\n\r\n if(!response || response.statusCode !== 200 || !response.data) {\r\n setError(COMMON_ERR);\r\n return true;\r\n }\r\n\r\n const data = response.data;\r\n\r\n if(!data.relatedData){\r\n setError(COMMON_ERR);\r\n return true;\r\n }\r\n\r\n const isValid = data.isValid;\r\n\r\n if(!isValid){\r\n const errorCode = data.relatedData.errorCode;\r\n\r\n switch(errorCode){\r\n case 'ESPContactNotLogined': {\r\n setError(CONTACT_NOT_LOGGED_IN);\r\n break;\r\n }\r\n\r\n case -3: {\r\n setError(HARD_BOUNCE);\r\n break;\r\n }\r\n\r\n default: {\r\n setError(COMMON_ERR);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return !isValid;\r\n };\r\n\r\n /**\r\n * get data on page load\r\n */\r\n useEffect(() => {\r\n (async () => {\r\n if(!showEmailPreferences) return;\r\n\r\n setIsLoading(true);\r\n\r\n const response = await getEmailPreferences(recipientGUID);\r\n\r\n setIsLoading(false);\r\n\r\n if(handleErrors(response)) return;\r\n\r\n setPreferences(response.data.relatedData.preferences || []);\r\n })();\r\n }, []);\r\n\r\n /**\r\n * on checkbox change\r\n */\r\n const handleCheckboxChange = async (preference: IEmailPreference, isChecked: boolean) => {\r\n\r\n setError(0);\r\n setShowUnsubscribeOKMessage(false);\r\n\r\n const preferencesCopy = [...preferences];\r\n\r\n const foundIndex = preferencesCopy.findIndex(item => item.newsletterID === preference.newsletterID);\r\n if(foundIndex === -1) return;\r\n\r\n const foundCopy = {...preferencesCopy[foundIndex]};\r\n foundCopy.isLoading = true;\r\n preferencesCopy[foundIndex] = foundCopy;\r\n\r\n setPreferences(preferencesCopy);\r\n\r\n const response = await setEmailPreferences(preference.recipientGUID, preference.newsletterID, isChecked);\r\n\r\n if(handleErrors(response)){\r\n\r\n // remove item preloader in case of a server error\r\n foundCopy.isLoading = false;\r\n preferencesCopy[foundIndex] = foundCopy;\r\n setPreferences(preferencesCopy);\r\n return;\r\n }\r\n\r\n setPreferences(response.data.relatedData.preferences || []);\r\n };\r\n\r\n /**\r\n * unsubscribe from all newsletters\r\n */\r\n const unsubscribeHandler = async () => {\r\n setError(0);\r\n setShowUnsubscribeOKMessage(false);\r\n\r\n // remove the unsub querystring from URL\r\n const unsub = getQueryString()['unsub'];\r\n const updatedURL = window.location.href.replace(`unsub=${encodeURIComponent(unsub)}`, '');\r\n window.history.replaceState({}, '', updatedURL);\r\n\r\n const response = await unsubscribe(unsub, recipientGUID);\r\n if(handleErrors(response)) return;\r\n\r\n setPreferences(response.data.relatedData.preferences || []);\r\n\r\n setShowUnsubscribeOKMessage(true);\r\n setHasUnsubscribe(false);\r\n };\r\n\r\n return (\r\n
\r\n {\r\n !showEmailPreferences &&\r\n
\r\n

\r\n In order to customize your e-mail preferences, please sign up or log in to your account.\r\n

\r\n
\r\n }\r\n\r\n {\r\n showEmailPreferences &&\r\n <>\r\n {\r\n isLoading &&\r\n
\r\n \r\n
\r\n }\r\n\r\n {\r\n !isLoading && error === 0 && (\r\n
\r\n

I would like to receive email updates on the following:

\r\n\r\n {\r\n preferences && preferences.length > 0 &&\r\n <>\r\n
    \r\n {\r\n preferences.map(preference => {\r\n return (\r\n
  • \r\n \r\n
  • \r\n )\r\n })\r\n }\r\n\r\n {\r\n hasUnsubscribe && (\r\n
  • \r\n \r\n\r\n {\r\n unsubscribed &&\r\n
    You can also reduce the numbers of emails you get, by selecting only some of the options above.
    \r\n }\r\n
  • \r\n )\r\n }\r\n
\r\n\r\n

Your Email: { preferences[0].emailAddress }

\r\n\r\n {\r\n !recipientGUID &&\r\n

To change your email: Edit Personal Details

\r\n }\r\n \r\n }\r\n\r\n {\r\n showUnsubscribeOKMessage && (\r\n
You successfully unsubscribed from all our newsletters.
Remember: You can check any of the above options to re-subscribe only to those newsletters.
\r\n )\r\n }\r\n\r\n
\r\n )\r\n }\r\n\r\n {\r\n !isLoading && error !== 0 && (\r\n
\r\n { error === COMMON_ERR &&

{ DEFAULT_ERROR }

}\r\n\r\n { error === CONTACT_NOT_LOGGED_IN &&

In order to customize your e-mail preferences, please sign up or log in to your account.

}\r\n\r\n { error === HARD_BOUNCE &&

We cannot send newsletters to this email address. This may be because the address is invalid or permanently blocks newsletters (\"hard bounce\"), or because you have filed a spam complaint in the past.\r\n Please provide a different email address, or contact our sales team.

}\r\n
\r\n )\r\n }\r\n\r\n \r\n }\r\n
\r\n )\r\n};\r\n\r\nexport default EmailPreferencesApp;","const __WEBPACK_NAMESPACE_OBJECT__ = ReactDOM;","import EmailPreferencesApp from './app/app';\r\nimport ReactDOM from 'react-dom';\r\nimport React from 'react';\r\n\r\n/**\r\n * entry point\r\n */\r\nconst init = () => {\r\n const $root = document.getElementById('react-app');\r\n if (!$root) return;\r\n\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n $root\r\n );\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n init();\r\n});\r\n\r\nexport {};"],"names":["__webpack_require__","obj","key","value","Object","defineProperty","enumerable","configurable","writable","n","module","getter","__esModule","d","a","exports","definition","o","get","prop","prototype","hasOwnProperty","call","React","getQueryString","search","caseSensitive","result","window","location","decodeURIComponent","toString","toLowerCase","length","hashes","substring","split","i","sections","val","s","getReturnURL","prefix","returnURL","pathname","hash","ifShouldDenyOnReadOnly","async","response","status","href","post","url","data","fetch","method","headers","body","JSON","stringify","Error","json","statusCode","ProductDepartmentEnum","LastPaymentOption","PaymentTabsEnum","CreditCardServiceEnum","CreditCardTabTabsEnum","e","this","message","ExternalLoginServiceEnum","name","atob","bind","props","role","className","classes","xmlns","width","height","viewBox","style","fill","color","EFacebookStatus","ExternalLoginResultStatusCode","CartSteps","ILoginReferrer","getEmailPreferences","recipientGUID","qs","params","push","encodeURIComponent","join","encodeData","Headers","append","credentials","COMMON_ERR","useState","loggedIn","id","$el","document","getElementById","innerText","trim","getHiddenDataBoolean","showEmailPreferences","isLoading","setIsLoading","preferences","setPreferences","error","setError","showUnsubscribeOKMessage","setShowUnsubscribeOKMessage","hasUnsubscribe","setHasUnsubscribe","unsubscribed","setUnsubscribed","handleErrors","relatedData","isValid","errorCode","useEffect","title","map","preference","newsletterID","type","checked","isSubscribed","onChange","isChecked","preferencesCopy","foundIndex","findIndex","item","foundCopy","isSelected","setEmailPreferences","handleCheckboxChange","evt","target","newsletterDisplayName","onClick","preventDefault","stopPropagation","unsub","updatedURL","replace","history","replaceState","unsubscribe","unsubscribeHandler","emailAddress","ReactDOM","addEventListener","$root","init"],"sourceRoot":""}