{"version":3,"file":"message-gears-newsletter-confirm-min.js","mappings":"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","sources":["webpack://waves/webpack/bootstrap","webpack://waves/webpack/runtime/compat get default export","webpack://waves/webpack/runtime/define property getters","webpack://waves/webpack/runtime/hasOwnProperty shorthand","webpack://waves/external var \"React\"","webpack://waves/./src/domain/url-provider.ts","webpack://waves/./src/DAL/data-provider.ts","webpack://waves/./src/projects/message-gears/services/data-provider.ts","webpack://waves/./src/ui/svg/common/preloader.tsx","webpack://waves/./src/projects/message-gears/confirmation/newsletter-confirmation.tsx","webpack://waves/external var \"ReactDOM\"","webpack://waves/./src/projects/message-gears/confirmation/index.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\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))","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","import { IServerValidation } from '../../../domain/validation/interfaces';\r\nimport { post } from '../../../DAL/data-provider';\r\nimport { IUtm } from '../../../domain/marketing/utm/utm-interfaces';\r\n\r\n/**\r\n * message gears subscribe\r\n */\r\nexport const subscribeToMessageGears = async (\r\n formName: string,\r\n email: string,\r\n captchaCode: string,\r\n recaptchaVersion: number,\r\n nodeGuid: string,\r\n utm: IUtm|null,\r\n firstName?: string,\r\n lastName?: string\r\n) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n\r\n return post('/api/messagegears/subscribe', {\r\n formName,\r\n email,\r\n captchaCode,\r\n recaptchaVersion,\r\n nodeGuid,\r\n firstName,\r\n lastName,\r\n\r\n firstUTMSource: utm ? utm.firstSource : '',\r\n firstUTMMedium: utm ? utm.firstMedium : '',\r\n firstUTMCampaign: utm ? utm.firstCampaign : '',\r\n\r\n lastUTMSource: utm ? utm.lastSource : '',\r\n lastUTMMedium: utm ? utm.lastMedium : '',\r\n lastUTMCampaign: utm ? utm.lastCampaign : '',\r\n });\r\n};\r\n\r\n\r\n/**\r\n * Confirm Message Gears subscription when double option is enabled for the given form.\r\n * https://dev13.waves.com/newsletter-subscription-confirmation?RecipientGUID=2f9257c0-e5b6-4edf-aad8-9986530698e2\r\n */\r\nexport const confirmNewsletter = async (guid: string) : Promise<{data: IServerValidation, statusCode: number }> => {\r\n return post('/api/messagegears/confirm-subscription', {\r\n guid,\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","import {useEffect, useState} from 'react';\r\nimport { getQueryString } from '../../../domain/url-provider';\r\nimport { confirmNewsletter } from '../services/data-provider';\r\nimport Preloader from '../../../ui/svg/common/preloader';\r\nimport { DEFAULT_ERROR } from '../../../DAL/data-provider';\r\n\r\nconst maxWidth = '700px';\r\n\r\n/**\r\n * Confirm Message Gears subscription when double option is enabled for the given form.\r\n * https://dev13.waves.com/newsletter-subscription-confirmation?RecipientGUID=2f9257c0-e5b6-4edf-aad8-9986530698e2\r\n */\r\nconst NewsletterConfirmation = () => {\r\n\r\n const [error, setError] = useState('');\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n\r\n (async () => {\r\n const recipientGUID = getQueryString()['RecipientGUID'];\r\n if(!recipientGUID){\r\n setError(DEFAULT_ERROR);\r\n setIsLoading(false);\r\n return;\r\n }\r\n\r\n const response = await confirmNewsletter(recipientGUID);\r\n\r\n if(!response || response.statusCode !== 200 || !response.data.isValid || response.data.relatedData !== 0) {\r\n setError(DEFAULT_ERROR);\r\n }\r\n\r\n setIsLoading(false);\r\n })();\r\n }, []);\r\n\r\n return (\r\n
\r\n {\r\n isLoading &&\r\n
\r\n \r\n
\r\n }\r\n\r\n { !isLoading && error &&

{ error }

}\r\n { !isLoading && !error &&

You have been successfully subscribed to our newsletter.

}\r\n
\r\n )\r\n};\r\n\r\nexport default NewsletterConfirmation;\r\n","const __WEBPACK_NAMESPACE_OBJECT__ = ReactDOM;","import NewsletterConfirmation from './newsletter-confirmation';\r\nimport ReactDOM from 'react-dom';\r\n\r\n/**\r\n * entry point\r\n */\r\nconst init = () => {\r\n\r\n const $placeholder = document.getElementById('react-placeholder');\r\n if(!$placeholder) return;\r\n\r\n ReactDOM.render(\r\n ,\r\n $placeholder\r\n );\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n init();\r\n});\r\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","React","DEFAULT_ERROR","confirmNewsletter","async","url","data","response","fetch","method","headers","body","JSON","stringify","status","window","location","href","ifShouldDenyOnReadOnly","Error","json","statusCode","post","guid","props","role","className","classes","xmlns","width","height","viewBox","style","fill","color","error","setError","useState","isLoading","setIsLoading","useEffect","recipientGUID","search","caseSensitive","result","decodeURIComponent","toString","toLowerCase","length","hashes","substring","split","i","sections","val","s","getQueryString","isValid","relatedData","maxWidth","ReactDOM","document","addEventListener","$placeholder","getElementById","init"],"sourceRoot":""}