{"version":3,"file":"donate-init.js","sources":["../src/donate-init.js"],"sourcesContent":["// JS for Donate Init page\r\n\r\n/* global Stripe, STRIPE_PUBLIC_KEY */\r\n/* global grecaptcha, RECAPTCHA_KEY */\r\n\r\nimport { FormHelper } from \"./webcomponents/form-helper.js\";\r\nimport { TrainInfoCard } from \"./webcomponents/train-info-card.js\";\r\nimport { SubmitStatus } from \"./webcomponents/submit-status.js\";\r\nimport { PostJSON } from \"./lib/fetchers.js\";\r\nimport { SetElementsVisible, SetTextContent, WireupHandlers } from \"./lib/data-wireup.js\";\r\n\r\n// Register required webcomponents\r\nFormHelper.Register();\r\nTrainInfoCard.Register();\r\nSubmitStatus.Register();\r\n\r\nlet stripe = null;\r\nlet elements = null;\r\nlet page1Data = null;\r\nlet stripeRedirectUrl = null;\r\nconst stripeAppearance = {\r\n theme: \"stripe\",\r\n variables: {\r\n colorPrimary: \"#042e53\",\r\n colorBackground: \"#ffffff\",\r\n colorText: \"#042e53\",\r\n colorDanger: \"#D22600\",\r\n fontSizeBase: \"16px\",\r\n fontFamily: \"Inter,Arial,sans-serif;\",\r\n spacingUnit: \"5px\",\r\n borderRadius: \"4px\",\r\n fontLineHeight: \"1.5\"\r\n },\r\n rules: {\r\n \".Label\": {\r\n color: \"var(--colorPrimary)\",\r\n fontWeight: \"600\",\r\n fontSize: \"1rem\",\r\n paddingBottom: \"0.2rem\",\r\n },\r\n \".Tab\": {\r\n border: \"1px solid rgba(48,54,95,.25)\",\r\n boxShadow: \"0\",\r\n },\r\n \".Input\": {\r\n border: \"1px solid rgba(48,54,95,.25)\",\r\n boxShadow: \"0\",\r\n },\r\n\r\n \".Tab:hover\": {\r\n color: \"var(--colorText)\",\r\n },\r\n \".Input--invalid\": {\r\n boxShadow: \"0 1px 1px 0 rgba(0, 0, 0, 0.07), 0 0 0 1px var(--colorDanger)\",\r\n }\r\n }\r\n};\r\nconst currencyFormatter = new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: \"USD\" });\r\n\r\nwindow.addEventListener(\"DOMContentLoaded\", async () => {\r\n stripe = Stripe(STRIPE_PUBLIC_KEY);\r\n\r\n const formHelper = document.querySelector(\"form-helper\");\r\n\r\n // Handle page 1 form submission rather than doing a POST\r\n formHelper.submitFunction = onPage1Submit;\r\n\r\n // Stick the custom amount in the right place\r\n formHelper.transformer = (formdata) => {\r\n if (formdata.donation && formdata.donation.Amount === \"other\") {\r\n formdata.donation.Amount = formdata.donation.Custom;\r\n delete formdata.donation.Custom;\r\n }\r\n };\r\n\r\n // Show/hide alert w/ anonymous checkbox\r\n WireupHandlers(\"anonymous\", \"click\", async (e) => {\r\n SetElementsVisible(\"anonymous-alert\", e.target.checked);\r\n });\r\n\r\n // Show/hide alert w/ anonymous checkbox\r\n WireupHandlers(\"donationamount\", \"click\", async (e) => {\r\n SetElementsVisible(\"otheramount\", e.target.value === \"other\");\r\n });\r\n\r\n // form-helper usually handles the sticky button bar, but we have a second one that needs an observer\r\n const el = document.querySelector(\".page2-sticky-button-bar\")\r\n if (el) {\r\n const page2Observer = new IntersectionObserver(\r\n ([e]) => e.target.classList.toggle(\"threshold-reached\", e.intersectionRatio < 1),\r\n { threshold: [1] }\r\n );\r\n page2Observer.observe(el);\r\n }\r\n});\r\n\r\nwindow.onReCaptcha = function () {\r\n grecaptcha.render(\"recaptcha-container\", {\r\n \"sitekey\": RECAPTCHA_KEY,\r\n \"callback\": onReCaptchaSubmit,\r\n \"expired-callback\": onReCaptchaExpire,\r\n \"error-callback\": onReCaptchaError,\r\n \"size\": \"invisible\"\r\n });\r\n};\r\n\r\nfunction onPage1Submit(data) {\r\n page1Data = data;\r\n stripeRedirectUrl = null;\r\n // Kick off captcha verification\r\n grecaptcha.execute();\r\n}\r\n\r\nfunction onReCaptchaExpire() {\r\n grecaptcha.reset();\r\n //SetLoadingState(\"emailsubmit\", false);\r\n SubmitStatus.Hide(\"form-helper-status\");\r\n}\r\n\r\n\r\nfunction onReCaptchaError() {\r\n grecaptcha.reset();\r\n //SetLoadingState(\"emailsubmit\", false);\r\n SubmitStatus.Set(\"form-helper-status\", \"The action did not complete. Please try again.\", true);\r\n}\r\n\r\n/**\r\n * On recaptcha success, submit the form, load stripe, and go to page 2\r\n */\r\nasync function onReCaptchaSubmit(token) {\r\n // Since this all happens outside of form-helper, manage the button state manually\r\n const submitButton = document.querySelector(\"[data-formhelper-submit-button]\");\r\n submitButton.classList.add(\"button-loading\");\r\n submitButton.setAttribute(\"disabled\", \"disabled\");\r\n submitButton.innerText = \"Processing\";\r\n try {\r\n // Always reset the captcha in case they resend or go back and send to another email\r\n grecaptcha.reset();\r\n if (!page1Data) {\r\n console.error(\"Recaptcha success but no page 1 data\");\r\n return;\r\n }\r\n page1Data.token = token;\r\n const result = await PostJSON(\"\", page1Data);\r\n stripeRedirectUrl = result.redirectUrl;\r\n elements = stripe.elements({ clientSecret: result.key, appearance: stripeAppearance, loader: \"always\" });\r\n var paymentElement = elements.create(\"payment\", {\r\n fields: {\r\n billingDetails: {\r\n email: \"never\"\r\n }\r\n }\r\n });\r\n paymentElement.mount(\"#payment-element\");\r\n SetTextContent(\"total\", currencyFormatter.format(page1Data.donation.Amount));\r\n SubmitStatus.Hide(\"page2-status\");\r\n SetElementsVisible(\"page1\", false);\r\n SetElementsVisible(\"page2\", true);\r\n } catch (err) {\r\n console.error(err);\r\n SubmitStatus.Set(\"form-helper-status\", err.message, true);\r\n } finally {\r\n submitButton.classList.remove(\"button-loading\");\r\n submitButton.removeAttribute(\"disabled\");\r\n submitButton.innerHTML = \"Next\";\r\n }\r\n}\r\n\r\nWireupHandlers(\"page2-back\", \"click\", async () => {\r\n SetElementsVisible(\"page1\", true);\r\n SetElementsVisible(\"page2\", false);\r\n});\r\n\r\nWireupHandlers(\"page2-submit\", \"click\", async () => {\r\n SubmitStatus.Hide(\"page2-status\");\r\n try {\r\n if (!elements || !stripeRedirectUrl || !page1Data) {\r\n // Something is wrong, go back to page 1\r\n console.error(\"Stripe elements, redirect url, or page 1 data missing\");\r\n SetElementsVisible(\"page1\", true);\r\n SetElementsVisible(\"page2\", false);\r\n return;\r\n }\r\n const result = await stripe.confirmPayment({\r\n elements,\r\n confirmParams: {\r\n return_url: stripeRedirectUrl,\r\n payment_method_data: {\r\n billing_details: {\r\n email: page1Data.donation.Email,\r\n },\r\n },\r\n },\r\n });\r\n // Stripe doesn't throw errors on failures, so we have to check the result\r\n if (result.error) throw new Error(result.error.message);\r\n } catch (err) {\r\n console.error(err);\r\n SubmitStatus.Set(\"page2-status\", err.message, true);\r\n }\r\n});"],"names":["FormHelper","Register","TrainInfoCard","SubmitStatus","stripe","elements","page1Data","stripeRedirectUrl","stripeAppearance","theme","variables","colorPrimary","colorBackground","colorText","colorDanger","fontSizeBase","fontFamily","spacingUnit","borderRadius","fontLineHeight","rules","color","fontWeight","fontSize","paddingBottom","border","boxShadow","currencyFormatter","Intl","NumberFormat","style","currency","onPage1Submit","data","grecaptcha","execute","onReCaptchaExpire","reset","Hide","onReCaptchaError","Set","onReCaptchaSubmit","_x3","_onReCaptchaSubmit","apply","this","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee6","token","submitButton","result","wrap","_context6","prev","next","document","querySelector","classList","add","setAttribute","innerText","console","error","abrupt","PostJSON","sent","redirectUrl","clientSecret","key","appearance","loader","create","fields","billingDetails","email","mount","SetTextContent","format","donation","Amount","SetElementsVisible","t0","message","remove","removeAttribute","innerHTML","finish","stop","window","addEventListener","_callee3","formHelper","el","_context3","Stripe","STRIPE_PUBLIC_KEY","submitFunction","transformer","formdata","Custom","WireupHandlers","_ref2","_callee","e","_context","target","checked","_x","_ref3","_callee2","_context2","value","_x2","IntersectionObserver","_ref4","_slicedToArray","toggle","intersectionRatio","threshold","observe","onReCaptcha","render","sitekey","RECAPTCHA_KEY","callback","size","_callee4","_context4","_callee5","_context5","confirmPayment","confirmParams","return_url","payment_method_data","billing_details","Email","Error"],"mappings":"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"}