{"version":3,"sources":["authConfig.js","Scenes/Navigation.js","helpers.js","Scenes/AddNewPayment.jsx","Scenes/StatementSummary.js","Scenes/Help.js","Scenes/ManageAccount.js","Scenes/CheckoutForm.jsx","Scenes/QuickPay.js","Scenes/BillHistory.js","Scenes/QuickPaySubmitted.js","Scenes/StatementSummaryComplete.js","AppLanding.js","App.js","index.js"],"names":["b2cPolicies","signUpSignIn","forgotPassword","authority","msalConfig","auth","clientId","knownAuthorities","redirectUri","postLogoutRedirectUri","navigateToLoginRequestUrl","cache","cacheLocation","storeAuthStateInCookie","system","loggerOptions","loggerCallback","level","message","containsPii","LogLevel","Error","console","error","Info","info","Verbose","debug","Warning","warn","Navigation","props","useState","droppedDown","setDropDown","useMsal","instance","accounts","inProgress","isMobile","setIsMobile","handleWindowSizeChange","window","innerWidth","useEffect","addEventListener","removeEventListener","hideMenu","className","onClick","focusable","viewBox","d","to","onChange","e","selectedId","target","value","selectedAcc","bettyUser","user","Accounts","find","x","AcctNumber","setActiveAccount","accountChange","map","selected","activeAccount","Address","curAct","getAccountByHomeId","homeAccountId","logoutRedirect","account","baseUri","addressCheckApi","endpoint","body","callback","fetch","method","headers","JSON","stringify","then","res","json","data","api","apiAuth","getKey","key","formatToCurrency","amount","toFixed","replace","AddNewPayment","stripe","useStripe","elements","useElements","setMessage","isLoading","setIsLoading","return_url","setReturnUrl","clientSecret","manageAccount","retrieveSetupIntent","handleSubmit","a","preventDefault","confirmSetup","confirmParams","type","id","onSubmit","disabled","StatementSummary","history","useHistory","setClientSecret","paymentRadio","setPaymentRadio","customAmount","setCustomAmount","twoForTrees","setTwoForTrees","errors","setErrors","paymentMethodRadio","setPaymentMethodRadio","stripeSetupIntent","customerId","helpers","result","closeModal","modal","document","getElementById","style","display","once","options","appearance","theme","loader","stripeUser","stripePromise","CurrentBalance","DueDate","checked","name","PastDue","focus","parseFloat","min","placeholder","paymentMethods","customer","invoice_settings","default_payment_method","card","brand","toUpperCase","last4","bankAccountsPM","us_bank_account","bank_name","xmlns","width","height","role","stroke","strokeWidth","strokeLinecap","strokeLinejoin","fill","color","x1","y1","x2","y2","payment","paymentMethod","errorBox","email","EMail","accountNumber","payIntent","status","push","Help","src","ManageAccount","formProperties","setFormProperties","AcctId","activeAccountId","setActiveAccountId","changedProps","setChangedProps","PMDeletionElement","setPMDeletionElement","PMDeletionId","setPMDeletionId","onFormChange","propName","propValue","showDeletionModal","output","setDefaultPaymentMethod","paymentMethodId","loadModal","r","setStripeUser","closeDeletionModal","Address1","City","State","Zip","address1","address2","Address2","city","state","zip","log","parse","resultStatus","returnedAddress","addressList","addressLine1","zip5","zip4","checkErrorsMakeCall","length","Object","keys","element","scrollIntoView","acctId","setBettyUser","forEach","deletePaymentMethod","contactByEMail","mask","maskChar","Phone1","citySendUpdates","exp_month","exp_year","isDefault","autopay","CheckoutForm","isCardPay","retrievePaymentIntent","paymentIntent","confirmPayment","init","QuickPay","React","myState","useRef","page","setPage","currentDue","setCurrentDue","pastDue","setPastDue","setZip","acctNum","setAcctNum","setEmail","amountPaying","setAmountPaying","getBalancesOwed","isNaN","AccountId","CurrentDue","gotoPayment","test","callStripe","keyup","autoFocus","loginRedirect","BillHistory","billHistory","setBillHistory","modalMeters","setModalMeters","meterDateActive","setMeterDateActive","activeAcc","History","SerialId","MeterStart","MeterEnd","ReadDate","Diameter","MeterReads","colSpan","meterModal","WaterUsage","WaterFee","WaterService","WaterTax","WWFee","WWService","WWTax","Amount","QuickPaySubmitted","URLSearchParams","location","search","get","failed","version","points","StatementSummaryComplete","params","success","getUserData","loadStripe","betas","App","setCustomerId","setInit","loggedIn","request","scopes","acquireTokenSilent","idToken","catch","err","logout","thisCustomerId","idTokenClaims","extension_CustomerId","initialPage","pathname","exact","from","path","component","authentication","isMobileOnly","meta","createElement","content","getElementsByTagName","appendChild","classList","add","IsMobile","MainContent","callbackId","addEventCallback","event","eventType","EventType","LOGIN_FAILURE","errorMessage","indexOf","interactionType","InteractionType","Redirect","Popup","loginPopup","LOGIN_SUCCESS","payload","alert","removeEventCallback","sessionStorage","AppLanding","msalInstance","PublicClientApplication","ReactDOM","render","StrictMode"],"mappings":"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","file":"static/js/main.8f2c7f90.chunk.js","sourcesContent":["/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { LogLevel } from \"@azure/msal-browser\";\r\n\r\n/**\r\n * Enter here the user flows and custom policies for your B2C application\r\n * To learn more about user flows, visit: https://docs.microsoft.com/en-us/azure/active-directory-b2c/user-flow-overview\r\n * To learn more about custom policies, visit: https://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-overview\r\n */\r\n//lnkutilitybilling.onmicrosoft.com\r\nexport const b2cPolicies = {\r\n names: {\r\n signUpSignIn: \"B2C_1A_SIGNUP_SIGNIN\",\r\n forgotPassword: \"B2C_1A_PASSWORDRESET\",\r\n // editProfile: \"b2c_1_edit_profile\"\r\n },\r\n authorities: {\r\n signUpSignIn: {\r\n authority: \"https://lnkutilitybilling.b2clogin.com/lnkutilitybilling.onmicrosoft.com/B2C_1A_SIGNUP_SIGNIN\",\r\n },\r\n forgotPassword: {\r\n authority: \"https://lnkutilitybilling.b2clogin.com/lnkutilitybilling.onmicrosoft.com/B2C_1A_PASSWORDRESET\",\r\n },\r\n // editProfile: {\r\n // authority: \"https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/b2c_1_edit_profile\"\r\n // }\r\n },\r\n authorityDomain: \"lnkutilitybilling.b2clogin.com\"\r\n}\r\n\r\n/**\r\n * Configuration object to be passed to MSAL instance on creation. \r\n * For a full list of MSAL.js configuration parameters, visit:\r\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md \r\n */\r\n\r\nexport const msalConfig = {\r\n auth: {\r\n clientId: \"af1642b6-469b-4e98-b804-832a32169f00\", // This is the ONLY mandatory field that you need to supply.\r\n authority: b2cPolicies.authorities.signUpSignIn.authority, // Use a sign-up/sign-in user-flow as a default authority\r\n knownAuthorities: [b2cPolicies.authorityDomain], // Mark your B2C tenant's domain as trusted.\r\n redirectUri: \"/\", // Points to window.location.origin. You must register this URI on Azure Portal/App Registration.\r\n postLogoutRedirectUri: \"/\", // Indicates the page to navigate after logout.\r\n navigateToLoginRequestUrl: false, // If \"true\", will navigate back to the original request location before processing the auth code response.\r\n },\r\n cache: {\r\n cacheLocation: \"sessionStorage\", // Configures cache location. \"sessionStorage\" is more secure, but \"localStorage\" gives you SSO between tabs.\r\n storeAuthStateInCookie: false, // Set this to \"true\" if you are having issues on IE11 or Edge\r\n },\r\n system: {\r\n loggerOptions: {\r\n loggerCallback: (level, message, containsPii) => {\r\n if (containsPii) {\r\n return;\r\n }\r\n switch (level) {\r\n case LogLevel.Error:\r\n console.error(message);\r\n return;\r\n case LogLevel.Info:\r\n console.info(message);\r\n return;\r\n case LogLevel.Verbose:\r\n console.debug(message);\r\n return;\r\n case LogLevel.Warning:\r\n console.warn(message);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Scopes you add here will be prompted for user consent during sign-in.\r\n * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request.\r\n * For more information about OIDC scopes, visit: \r\n * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes\r\n */\r\nexport const loginRequest = {\r\n scopes: []\r\n};\r\n\r\n/**\r\n * An optional silentRequest object can be used to achieve silent SSO\r\n * between applications by providing a \"login_hint\" property.\r\n */\r\nexport const silentRequest = {\r\n scopes: [\"openid\", \"profile\"],\r\n loginHint: \"example@domain.net\"\r\n};","import { useMsal } from '@azure/msal-react';\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nexport function Navigation(props) {\r\n const [droppedDown, setDropDown] = useState(false);\r\n const { instance, accounts, inProgress } = useMsal();\r\n const [isMobile, setIsMobile] = useState(false);\r\n\r\n let handleWindowSizeChange = () => {\r\n if (window.innerWidth <= 800) {\r\n setIsMobile(true);\r\n } else {\r\n setIsMobile(false);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n window.addEventListener('resize', handleWindowSizeChange);\r\n handleWindowSizeChange();\r\n return () => {\r\n window.removeEventListener('resize', handleWindowSizeChange);\r\n }\r\n }, []);\r\n\r\n let menuDropdown = () => {\r\n setDropDown(!droppedDown);\r\n }\r\n\r\n let hideMenu = () => {\r\n setDropDown(false);\r\n }\r\n\r\n let logout = () => {\r\n let curAct = instance.getAccountByHomeId(accounts[0].homeAccountId);\r\n instance.logoutRedirect({ account: curAct });\r\n }\r\n\r\n let accountChange = (e) => {\r\n let selectedId = e.target.value;\r\n let selectedAcc = props.bettyUser.user.Accounts.find(x => x.AcctNumber == selectedId);\r\n props.setActiveAccount(selectedAcc);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Statement Summary\r\n Manage Account\r\n Bill History\r\n Help\r\n
\r\n
\r\n Account Number:\r\n \r\n
\r\n
\r\n Log out\r\n
\r\n
\r\n
\r\n
Statement Summary
\r\n
Manage Account
\r\n
Bill History
\r\n
Help
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Navigation;","\r\n\r\nconst baseUri = 'https://paymentportal.azure-api.net/'\r\n// const baseUri = 'http://localhost:7071/api/'\r\n\r\nexport const addressCheckApi = (endpoint, body, callback) => {\r\n fetch('https://public311.azure-api.net/Public311Api/' + endpoint, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(body),\r\n })\r\n .then((res) => res.json())\r\n .then((data) => {\r\n callback(data);\r\n });\r\n}\r\n\r\nexport const api = (endpoint, body, callback) => {\r\n fetch(baseUri + endpoint, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(body),\r\n })\r\n .then((res) => res.json())\r\n .then((data) => {\r\n callback(data);\r\n });\r\n}\r\n\r\nexport const apiAuth = (endpoint, body, callback) => {\r\n window.getKey((key) => {\r\n fetch(baseUri + endpoint, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n 'Authorization': 'Bearer ' + key,\r\n },\r\n body: JSON.stringify(body),\r\n })\r\n .then((res) => res.json())\r\n .then((data) => {\r\n callback(data);\r\n });\r\n });\r\n}\r\n\r\nexport const formatToCurrency = amount => {\r\n return \"$\" + (amount / 100).toFixed(2).replace(/\\d(?=(\\d{3})+\\.)/g, \"$&,\");\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport './../Stripe.css';\r\nimport {\r\n PaymentElement,\r\n useStripe,\r\n useElements\r\n} from \"@stripe/react-stripe-js\";\r\n\r\nexport default function AddNewPayment(props) {\r\n const stripe = useStripe();\r\n const elements = useElements();\r\n\r\n const [message, setMessage] = useState(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const [return_url, setReturnUrl] = useState('https://waterbill.lincoln.ne.gov/statement-summary');\r\n\r\n useEffect(() => {\r\n if (!stripe) {\r\n return;\r\n }\r\n\r\n const clientSecret = props.clientSecret;\r\n\r\n if (!clientSecret) {\r\n return;\r\n }\r\n\r\n if (props.manageAccount) {\r\n setReturnUrl('https://waterbill.lincoln.ne.gov/account');\r\n }\r\n\r\n stripe.retrieveSetupIntent(clientSecret);\r\n }, [stripe]);\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n if (!stripe || !elements) {\r\n return;\r\n }\r\n\r\n setIsLoading(true);\r\n\r\n let { error } = await stripe.confirmSetup({\r\n elements,\r\n confirmParams: {\r\n return_url: return_url\r\n }\r\n })\r\n\r\n // if (error && error.code === 'parameter_missing' || error.code === 'setup_intent_unexpected_state') { //Collect bank info\r\n // error = null;\r\n // await stripe.collectUsBankAccountForSetup(props.clientSecret, {\r\n // billing_details: {\r\n // name: 'nate bobbyman',\r\n // email: 'ncarlson@beehiveindustries.com'\r\n // }\r\n // })\r\n // .then(({ payIntent, error }) => {\r\n // if (error) {\r\n // console.log(error);\r\n // } else {\r\n // stripe.confirmUsBankAccountSetup(props.clientSecret).then(({ setupIntent, error }) => {\r\n // if (error) {\r\n // setMessage(error.message);\r\n // } else {\r\n // if (setupIntent.status === 'succeeded' || setupIntent.status === 'processing') {\r\n // window.location.reload();\r\n // } else {\r\n // setMessage('You will be sent an email to confirm the microdeposits with a link to complete your payment. Expect a $0.01 deposit to the account provided in 1–2 business days and an email with additional instructions to verify your bank account.')\r\n // }\r\n // }\r\n // })\r\n // }\r\n // });\r\n // }\r\n\r\n if (error && (error.type === \"card_error\" || error.type === \"validation_error\")) {\r\n setMessage(error.message);\r\n } else if (error) {\r\n setMessage(\"An unexpected error occured.\");\r\n }\r\n\r\n setIsLoading(false);\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n {message &&
{message}
}\r\n \r\n );\r\n}","import React, { useState, useEffect } from \"react\";\r\nimport Navigation from './Navigation';\r\nimport * as helpers from './../helpers';\r\nimport { Elements } from \"@stripe/react-stripe-js\";\r\nimport AddNewPayment from './AddNewPayment';\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nexport function StatementSummary(props) {\r\n\r\n const history = useHistory();\r\n\r\n const [clientSecret, setClientSecret] = useState('');\r\n const [paymentRadio, setPaymentRadio] = useState('');\r\n const [customAmount, setCustomAmount] = useState(0);\r\n const [twoForTrees, setTwoForTrees] = useState(false);\r\n const [errors, setErrors] = useState('');\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n // const [currentDue, setCurrentDue] = useState(0);\r\n // const [pastDue, setPastDue] = useState(0);\r\n // const [defaultPaymentMethod, setDefaultPaymentMethod] = useState('');\r\n\r\n const [paymentMethodRadio, setPaymentMethodRadio] = useState('card');\r\n\r\n let addPaymentMethod = () => {\r\n let modal = document.getElementById('add-payment-modal');\r\n modal.style.display = \"block\";\r\n setErrors('');\r\n stripeSetupIntent(props.customerId);\r\n }\r\n\r\n let payBill = () => {\r\n setIsLoading(true);\r\n let payment = 0;\r\n let errors = '';\r\n let paymentMethod = '';\r\n\r\n switch (paymentRadio) {\r\n case 'current':\r\n payment += props.activeAccount.CurrentBalance;\r\n break;\r\n case 'past':\r\n payment += props.activeAccount.PastDue;\r\n break;\r\n case 'other':\r\n if (customAmount > 0) {\r\n payment += customAmount;\r\n } else {\r\n payment = 0;\r\n }\r\n break;\r\n default:\r\n errors += 'ERROR: Must select a payment amount. ';\r\n break;\r\n }\r\n\r\n if (twoForTrees) {\r\n payment += 2;\r\n }\r\n\r\n if (payment < .50 && !errors) {\r\n errors += 'ERROR: Must make a payment for more than $0.50. ';\r\n }\r\n\r\n payment = payment.toFixed(2);\r\n\r\n if (paymentMethodRadio == 'card') {\r\n let x = document.getElementById('card-select');\r\n paymentMethod = x.value;\r\n } else {\r\n let x = document.getElementById('bank-select');\r\n paymentMethod = x.value;\r\n }\r\n\r\n if (!paymentMethod) {\r\n errors += 'ERROR: You must select a method to pay with. ';\r\n }\r\n\r\n let errorBox = document.getElementById('error-box');\r\n\r\n if (errors) {\r\n errorBox.style.display = \"flex\";\r\n setErrors(errors);\r\n setIsLoading(false);\r\n } else {\r\n errorBox.style.display = \"none\";\r\n setErrors('');\r\n helpers.apiAuth('PortalPayNow', { customerId: props.customerId, amount: payment, paymentMethod: paymentMethod, email: props.bettyUser.user.EMail, accountNumber: props.activeAccount.AcctNumber, twoForTrees: twoForTrees }, (result) => {\r\n setIsLoading(false);\r\n if (result.payIntent && result.payIntent.status === 'succeeded') {\r\n history.push('/statement-summary-complete?success=yes&amount=' + payment);\r\n } else if (result.payIntent && result.payIntent.status === 'processing') {\r\n history.push('/statement-summary-complete?success=processing&amount=' + payment);\r\n } else {\r\n history.push('/statement-summary-complete?success=no');\r\n }\r\n })\r\n }\r\n }\r\n\r\n //setupintent\r\n let stripeSetupIntent = (customerId) => {\r\n helpers.apiAuth('SetupIntent', { customerId: customerId }, (result) => {\r\n setClientSecret(result.clientSecret);\r\n });\r\n };\r\n\r\n let closeModal = () => {\r\n let modal = document.getElementById('add-payment-modal');\r\n if (modal) {\r\n modal.style.display = \"none\";\r\n }\r\n }\r\n\r\n let keyPress = (e) => {\r\n if (e.key === 'Escape') {\r\n closeModal();\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', keyPress, { once: true });\r\n\r\n const appearance = {\r\n theme: 'stripe',\r\n };\r\n\r\n const options = {\r\n clientSecret,\r\n appearance,\r\n loader: 'auto'\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n {!props.bettyUser.user || !props.stripeUser || isLoading ?\r\n
\r\n
\r\n
\r\n :
\r\n
\r\n
\r\n ×\r\n
\r\n

Add a New Payment Method


\r\n {clientSecret ?
\r\n \r\n \r\n \r\n
:
\r\n
\r\n
}\r\n
\r\n
\r\n
\r\n
\r\n

Statement Summary

\r\n

\r\n {props.activeAccount.Address}
\r\n Account #: {props.activeAccount.AcctNumber}\r\n

\r\n

\r\n Current Balance:
\r\n {helpers.formatToCurrency(props.activeAccount.CurrentBalance * 100)}\r\n

\r\n

\r\n Due Date:
\r\n {props.activeAccount.DueDate}\r\n

\r\n
\r\n\r\n

\r\n

Pay Bill


\r\n
\r\n

Select your payment amount

\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n

Select your payment method

\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n

Enter your payment details

\r\n {paymentMethodRadio === 'card' &&
\r\n

Select Saved Credit Card

\r\n \r\n
}\r\n {paymentMethodRadio === 'bank' &&
\r\n

Select Saved Bank Info

\r\n \r\n
}\r\n

+ Add Payment Method

\r\n
\r\n
\r\n Danger \r\n {errors &&

{errors}

}\r\n
\r\n {props.activeAccount.AcctNumber && }\r\n
\r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default StatementSummary;","import React, { useState, useEffect } from \"react\";\r\nimport Navigation from './Navigation';\r\n\r\nexport function Help(props) {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Help;","import React, { useState, useEffect } from \"react\";\r\nimport Navigation from './Navigation';\r\nimport * as helpers from './../helpers';\r\nimport { Elements } from \"@stripe/react-stripe-js\";\r\nimport AddNewPayment from './AddNewPayment';\r\nimport InputMask from 'react-input-mask';\r\n\r\nexport function ManageAccount(props) {\r\n\r\n const [clientSecret, setClientSecret] = useState('');\r\n\r\n const [formProperties, setFormProperties] = useState({ ...props.bettyUser.user, ...props.activeAccount });\r\n const [activeAccountId, setActiveAccountId] = useState(props.activeAccount.AcctId);\r\n\r\n const [changedProps, setChangedProps] = useState({});\r\n const [errors, setErrors] = useState('');\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n let [PMDeletionElement, setPMDeletionElement] = useState(<>);\r\n let [PMDeletionId, setPMDeletionId] = useState('');\r\n\r\n useEffect(() => {\r\n if (activeAccountId != props.activeAccount.AcctId) {\r\n setChangedProps({});\r\n setActiveAccountId(props.activeAccount.AcctId);\r\n setFormProperties({ ...props.bettyUser.user, ...props.activeAccount });\r\n }\r\n })\r\n\r\n let onFormChange = (propName, propValue) => {\r\n if (propName === 'autopay') {\r\n if (propValue == true && !props.stripeUser.customer.invoice_settings.default_payment_method) {\r\n setErrors('ERROR: You must set a default payment method before turning on autopay');\r\n return;\r\n } else {\r\n setErrors('');\r\n }\r\n }\r\n if (propName === 'Phone1') {\r\n propValue = propValue.replace(/[^0-9]+/g, \"\");\r\n }\r\n if (propName === 'contactByEMail' || propName === 'twoForTrees' || propName === 'autopay' || propName === 'citySendUpdates') {\r\n setChangedProps({ ...changedProps, [propName]: propValue });\r\n } else {\r\n setChangedProps({ ...changedProps, [propName]: propValue.toUpperCase() });\r\n }\r\n setFormProperties({ ...formProperties, [propName]: propValue });\r\n }\r\n\r\n let deletePaymentMethod = (paymentMethodId) => {\r\n closeDeletionModal();\r\n let loadModal = document.getElementById('loading-stripe-modal');\r\n if (loadModal) {\r\n loadModal.style.display = 'flex';\r\n }\r\n helpers.apiAuth('DeletePaymentMethod', { paymentMethodId: paymentMethodId }, (r) => {\r\n helpers.apiAuth('GetStripeCustomerData', { customerId: props.customerId }, (result) => {\r\n props.setStripeUser({ customer: result.customer, paymentMethods: result.paymentMethods, bankAccountsPM: result.bankAccountsPM });\r\n if (loadModal) {\r\n loadModal.style.display = 'none';\r\n }\r\n });\r\n })\r\n }\r\n\r\n let showDeletionModal = (paymentMethod) => {\r\n let modal = document.getElementById('deletion-modal');\r\n if (modal) {\r\n modal.style.display = 'block';\r\n }\r\n let output =

;\r\n if (paymentMethod.card) {\r\n output =

Are you sure you want to delete {paymentMethod.card.brand.toUpperCase()} ending in {paymentMethod.card.last4}?

;\r\n } else {\r\n output =

Are you sure you want to delete {paymentMethod.us_bank_account.bank_name} ending in {paymentMethod.us_bank_account.last4}?

;\r\n }\r\n setPMDeletionElement(output);\r\n setPMDeletionId(paymentMethod.id);\r\n }\r\n\r\n let setDefaultPaymentMethod = (paymentMethodId) => {\r\n let loadModal = document.getElementById('loading-stripe-modal');\r\n if (loadModal) {\r\n loadModal.style.display = 'flex';\r\n }\r\n helpers.apiAuth('SetDefaultPaymentMethod', { paymentMethodId: paymentMethodId, customerId: props.customerId }, (r) => {\r\n helpers.apiAuth('GetStripeCustomerData', { customerId: props.customerId }, (result) => {\r\n props.setStripeUser({ customer: result.customer, paymentMethods: result.paymentMethods, bankAccountsPM: result.bankAccountsPM });\r\n if (loadModal) {\r\n loadModal.style.display = 'none';\r\n }\r\n });\r\n })\r\n }\r\n\r\n let closeDeletionModal = () => {\r\n let modal = document.getElementById('deletion-modal');\r\n if (modal) {\r\n modal.style.display = \"none\";\r\n }\r\n }\r\n\r\n let closeModal = () => {\r\n let modal = document.getElementById('add-payment-modal');\r\n if (modal) {\r\n modal.style.display = \"none\";\r\n }\r\n }\r\n\r\n let keyPress = (e) => {\r\n if (e.key === 'Escape') {\r\n closeModal();\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', keyPress);\r\n\r\n const appearance = {\r\n theme: 'stripe',\r\n };\r\n\r\n const options = {\r\n clientSecret,\r\n appearance,\r\n loader: 'auto'\r\n };\r\n\r\n let addPaymentMethod = () => {\r\n let modal = document.getElementById('add-payment-modal');\r\n modal.style.display = \"block\";\r\n stripeSetupIntent(props.customerId);\r\n }\r\n\r\n let stripeSetupIntent = (customerId) => {\r\n helpers.apiAuth('SetupIntent', { customerId: customerId }, (result) => {\r\n setClientSecret(result.clientSecret);\r\n });\r\n };\r\n\r\n async function saveAccountChanges() {\r\n setIsLoading(true);\r\n let errors = '';\r\n if (changedProps.Address1 === '') {\r\n errors += 'Address is a required field. \\n';\r\n }\r\n if (changedProps.City === '') {\r\n errors += 'City is a required field. \\n';\r\n }\r\n if (changedProps.State === '') {\r\n errors += 'State is a required field. \\n';\r\n }\r\n if (changedProps.Zip === '') {\r\n errors += 'Zip is a required field. \\n';\r\n }\r\n\r\n if (changedProps.Address1 || changedProps.Zip) {\r\n await helpers.addressCheckApi('ValidateAddress', { address1: formProperties.Address1, address2: formProperties.Address2, city: formProperties.City, state: formProperties.State, zip: formProperties.Zip }, (result) => {\r\n console.log(result);\r\n result = JSON.parse(result);\r\n if (result.resultStatus === 'SUCCESS') {\r\n let returnedAddress = result.addressList[0];\r\n changedProps.Address1 = returnedAddress.addressLine1;\r\n changedProps.Zip = returnedAddress.zip5 + returnedAddress.zip4;\r\n checkErrorsMakeCall(errors);\r\n } else {\r\n errors += 'Address not found. Please Enter a valid address. \\n';\r\n checkErrorsMakeCall(errors);\r\n }\r\n })\r\n } else {\r\n checkErrorsMakeCall(errors);\r\n }\r\n\r\n // checkErrorsMakeCall(errors);\r\n\r\n }\r\n\r\n let checkErrorsMakeCall = (errors) => {\r\n if (errors.length > 0 || Object.keys(changedProps).length === 0) {\r\n setIsLoading(false);\r\n let element = document.getElementById('saveBtn');\r\n if (element) {\r\n element.scrollIntoView();\r\n }\r\n setErrors(errors);\r\n } else {\r\n setErrors('');\r\n helpers.apiAuth('UpdateCustomerInfo', { changedProps: changedProps, customerId: props.customerId, acctId: props.activeAccount.AcctId }, (result) => {\r\n helpers.apiAuth('GetAccount', {}, (result) => {\r\n setIsLoading(false);\r\n setChangedProps({});\r\n props.setBettyUser({ user: result });\r\n result.Accounts.forEach(x => {\r\n if (x.AcctId === props.activeAccount.AcctId) {\r\n props.setActiveAccount(x);\r\n setFormProperties({ ...result, x });\r\n }\r\n })\r\n });\r\n });\r\n }\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n ×\r\n
\r\n

Delete Payment Method

\r\n {PMDeletionElement}
\r\n
\r\n
deletePaymentMethod(PMDeletionId)} className='yes-btn' type='button' value='Yes' />
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {!props.bettyUser.user || isLoading ?\r\n
\r\n
\r\n
\r\n :
\r\n
\r\n
\r\n ×\r\n
\r\n

Add a New Payment Method


\r\n {clientSecret ?
\r\n \r\n \r\n \r\n
:
\r\n
\r\n
}\r\n
\r\n
\r\n
\r\n\r\n
\r\n

Manage Account

\r\n
\r\n\r\n
\r\n

What is your preferred communication method?

\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n

Billing Information

\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n

Payment Methods

\r\n {props.stripeUser.paymentMethods && props.stripeUser.paymentMethods.data && props.stripeUser.paymentMethods.data[0] ?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.stripeUser.paymentMethods.data.map(x => {\r\n return \r\n })}\r\n
Credit/Debit CardsExpires
{x.card.brand.toUpperCase()} ending in {x.card.last4}{x.card.exp_month}/{x.card.exp_year}{x.isDefault ?

Default

:

setDefaultPaymentMethod(x.id)} className='center set-as-default'>Set as Default

}

showDeletionModal(x)}>Delete

: ''}\r\n
\r\n {props.stripeUser.bankAccountsPM && props.stripeUser.bankAccountsPM.data && props.stripeUser.bankAccountsPM.data[0] ?\r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.stripeUser.bankAccountsPM.data.map(x => {\r\n return \r\n })}\r\n
Bank Accounts
{x.us_bank_account.bank_name} ending in {x.us_bank_account.last4}{x.isDefault ?

Default

:

setDefaultPaymentMethod(x.id)} className='center set-as-default'>Set as Default

}

showDeletionModal(x)}>Delete

: ''}\r\n
\r\n

+ Add Payment Method

\r\n

\r\n Autopay
\r\n Using Autopay, you can have your water bill paid automatically using your default credit card or bank account. After you enable Autopay, funds are withdrawn automatically on the bill due date each month. You can enroll in Autopay at anytime.\r\n

\r\n \r\n
\r\n \r\n
\r\n {errors &&

{errors}

}\r\n \r\n
\r\n
\r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ManageAccount;","import React, { useEffect, useState } from \"react\";\r\nimport './../Stripe.css'\r\nimport {\r\n PaymentElement,\r\n useStripe,\r\n useElements\r\n} from \"@stripe/react-stripe-js\";\r\n// import { useHistory } from \"react-router-dom\";\r\n\r\nexport default function CheckoutForm(props) {\r\n const stripe = useStripe();\r\n const elements = useElements();\r\n // const history = useHistory();\r\n\r\n const [message, setMessage] = useState(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const [return_url, setReturnUrl] = useState('https://waterbill.lincoln.ne.gov/quickpaysubmitted?failed');\r\n\r\n let [isCardPay, setIsCardPay] = useState(true);\r\n let [fullName, setFullName] = useState('');\r\n let [email, setEmail] = useState('');\r\n\r\n useEffect(() => {\r\n if (!stripe) {\r\n return;\r\n }\r\n\r\n const clientSecret = props.clientSecret;\r\n\r\n if (!clientSecret) {\r\n return;\r\n }\r\n\r\n stripe.retrievePaymentIntent(clientSecret).then(({ paymentIntent }) => {\r\n setReturnUrl(\"https://waterbill.lincoln.ne.gov/quickpaysubmitted?amount=\" + paymentIntent.amount);\r\n if (paymentIntent.status === 'failed') {\r\n setReturnUrl(\"https://waterbill.lincoln.ne.gov/quickpaysubmitted?failed=true\");\r\n }\r\n });\r\n }, [stripe]);\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n if (!stripe || !elements) {\r\n return;\r\n }\r\n\r\n setIsLoading(true);\r\n\r\n let { error } = await stripe.confirmPayment({\r\n elements,\r\n confirmParams: {\r\n return_url: return_url,\r\n },\r\n });\r\n\r\n // if (error && true) {\r\n // error = await stripe.collectUsBankAccountForPayment(props.clientSecret, {\r\n // billing_details: {\r\n // name: fullName,\r\n // email: email\r\n // }\r\n // })\r\n // .then(({ payIntent, error }) => {\r\n // if (error) {\r\n // console.log(error);\r\n // } else {\r\n // stripe.confirmUsBankAccountPayment(props.clientSecret).then(({ paymentIntent, error }) => {\r\n // if (error) {\r\n // console.log(error);\r\n // setMessage(error.message);\r\n // } else {\r\n // if (paymentIntent.status === 'succeeded' || paymentIntent.status === 'processing') {\r\n // history.push('/quickpaysubmitted?failed=false&amount=' + paymentIntent.amount);\r\n // } else {\r\n // setMessage('You will be sent an email to confirm the microdeposits with a link to complete your payment. Expect a $0.01 deposit to the account provided in 1–2 business days and an email with additional instructions to verify your bank account.')\r\n // }\r\n // }\r\n // })\r\n // }\r\n // });\r\n // }\r\n\r\n if (error && (error.type === \"card_error\" || error.type === \"validation_error\")) {\r\n setMessage(error.message);\r\n } else if (error) {\r\n setMessage(\"An unexpected error occured.\");\r\n }\r\n\r\n setIsLoading(false);\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n {message &&
{message}
}\r\n \r\n );\r\n}","import React, { useState, useEffect, useRef } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { MsalProvider, AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from \"@azure/msal-react\";\r\nimport CheckoutForm from './CheckoutForm';\r\nimport { Elements } from \"@stripe/react-stripe-js\";\r\nimport { queryHelpers } from \"@testing-library/dom\";\r\nimport * as helpers from './../helpers';\r\n\r\nlet init = false;\r\n\r\nexport function QuickPay(props) {\r\n const [myState, _setMyState] = React.useState(0);\r\n const myStateRef = React.useRef(myState);\r\n const setMyState = data => {\r\n myStateRef.current = data;\r\n _setMyState(data);\r\n }\r\n\r\n const { instance, accounts, inProgress } = useMsal();\r\n const [page, setPage] = useState(1);\r\n const [clientSecret, setClientSecret] = useState(\"\");\r\n const [errors, setErrors] = useState('');\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n //Page 1\r\n const [currentDue, setCurrentDue] = useState(0);\r\n const [pastDue, setPastDue] = useState(0);\r\n const [customerId, setCustomerId] = useState('');\r\n const [zip, setZip] = useState('');\r\n const [acctNum, setAcctNum] = useState('');\r\n\r\n //Page 2\r\n const [paymentRadio, setPaymentRadio] = useState('');\r\n const [customAmount, setCustomAmount] = useState(0);\r\n const [twoForTrees, setTwoForTrees] = useState(false);\r\n const [email, setEmail] = useState('');\r\n\r\n //Page 3\r\n const [amountPaying, setAmountPaying] = useState(null);\r\n\r\n let authenticate = () => {\r\n instance.loginRedirect();\r\n }\r\n\r\n let getBalancesOwed = () => {\r\n let errorBox = document.getElementById('error-box');\r\n\r\n setIsLoading(true);\r\n /* Return from database (current amount due, past amount due) given user's input of (Account number, zip code) */\r\n if (isNaN(zip)) {\r\n setErrors(

Invalid Zip Code: Zip code must be entered with just numbers, ex: '12345' or '123451234'

);\r\n setIsLoading(false);\r\n errorBox.style.display = \"flex\";\r\n } else {\r\n errorBox.style.display = \"none\";\r\n helpers.api('GetQuickPayBalance', { zip: zip, acctNum: acctNum }, (result) => {\r\n setIsLoading(false);\r\n if (!result.AccountId) {\r\n errorBox.style.display = \"flex\";\r\n setErrors(

Invalid Credentials: Please verify that you are entering the correct Account Number (which can be found on your bill) and the correct Zip Code.

);\r\n } else {\r\n errorBox.style.display = \"none\";\r\n setErrors('');\r\n setCurrentDue(result.CurrentDue);\r\n setPastDue(result.PastDue);\r\n setPage(2);\r\n }\r\n });\r\n }\r\n }\r\n\r\n let gotoPayment = () => {\r\n\r\n setIsLoading(true);\r\n let payment = 0;\r\n let errors = '';\r\n\r\n switch (paymentRadio) {\r\n case 'current':\r\n payment += currentDue;\r\n break;\r\n case 'past':\r\n payment += pastDue;\r\n break;\r\n case 'other':\r\n if (customAmount > 0) {\r\n payment += customAmount;\r\n } else {\r\n payment = 0;\r\n }\r\n break;\r\n default:\r\n errors += 'ERROR: Must select a payment amount. ';\r\n break;\r\n }\r\n\r\n if (twoForTrees) {\r\n payment += 2;\r\n }\r\n\r\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) {\r\n errors += 'ERROR: Must submit a valid email. ';\r\n }\r\n\r\n if (payment < .50) {\r\n errors += 'ERROR: Must make a payment for more than $0.50';\r\n }\r\n\r\n setAmountPaying(payment);\r\n let errorBox = document.getElementById('error-box');\r\n\r\n if (errors) {\r\n errorBox.style.display = 'flex';\r\n setIsLoading(false);\r\n setErrors(

{errors}

);\r\n } else {\r\n errorBox.style.display = 'none';\r\n setErrors('');\r\n callStripe(payment.toFixed(2));\r\n setPage(3);\r\n }\r\n\r\n }\r\n\r\n let callStripe = (payment) => {\r\n helpers.api('PaymentIntent', { amount: payment, email: email, accountNumber: acctNum, twoForTrees: twoForTrees }, (result) => {\r\n setIsLoading(false);\r\n setClientSecret(result.clientSecret);\r\n });\r\n };\r\n\r\n const appearance = {\r\n theme: 'stripe',\r\n };\r\n\r\n const options = {\r\n clientSecret,\r\n appearance,\r\n loader: 'auto'\r\n };\r\n\r\n let keyup = (e) => {\r\n if (e.key === 'Enter') {\r\n if (page == 1) {\r\n getBalancesOwed();\r\n }\r\n if (page == 2) {\r\n gotoPayment();\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!init) {\r\n init = true;\r\n document.addEventListener('keyup', keyup);\r\n }\r\n return () => {\r\n init = false;\r\n document.removeEventListener('keyup', keyup);\r\n }\r\n })\r\n\r\n return (\r\n
\r\n {isLoading &&
\r\n
\r\n
}\r\n
\r\n
\r\n {(page === 1 || page === 2) ?

Lincoln Water and Wastewater

:
Paying Bill for {helpers.formatToCurrency(amountPaying * 100)}
}
\r\n {(page === 1) &&\r\n
\r\n

Quick Pay

\r\n
\r\n

Account Number

\r\n { setAcctNum(e.target.value) }} type='text' id='acc-num' className='max-width qp-textbox' autoFocus />
\r\n

Zip Code of Service Address

\r\n { setZip(e.target.value) }} type='text' id='zip-code' className='max-width qp-textbox' />\r\n
\r\n \r\n
\r\n }\r\n {(page === 2) &&\r\n
\r\n

Select your payment amount

\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n Email (for your receipt):\r\n { setEmail(e.target.value) }} type=\"text\" placeholder=\"youremail@domain.com\" />
\r\n
\r\n
\r\n \r\n
\r\n }\r\n {(page === 3) && clientSecret &&\r\n
\r\n \r\n \r\n \r\n
\r\n }\r\n
\r\n
\r\n Danger \r\n {errors}\r\n
\r\n
\r\n Need to login or sign up to manage paperless billing or Autopay?
Click Here\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default QuickPay;","import React, { useState, useEffect } from \"react\";\r\nimport Navigation from './Navigation';\r\nimport * as helpers from './../helpers';\r\n\r\nexport function BillHistory(props) {\r\n\r\n const [billHistory, setBillHistory] = useState('');\r\n const [modalMeters, setModalMeters] = useState('');\r\n const [meterDateActive, setMeterDateActive] = useState('');\r\n\r\n useEffect(() => {\r\n if (billHistory.AcctId != props.activeAccount.AcctId) {\r\n let activeAcc = props.bettyUser.user.Accounts.find(x => x.AcctId == props.activeAccount.AcctId);\r\n setBillHistory({ History: activeAcc.BillHistory, AcctId: props.activeAccount.AcctId });\r\n }\r\n })\r\n\r\n let closeModal = () => {\r\n let modal = document.getElementById('meter-read-modal');\r\n if (modal) {\r\n modal.style.display = \"none\";\r\n }\r\n }\r\n\r\n let meterModal = (x) => {\r\n setMeterDateActive(x.DueDate);\r\n setModalMeters(x.MeterReads);\r\n let modal = document.getElementById('meter-read-modal');\r\n modal.style.display = \"block\";\r\n }\r\n\r\n let keyPress = (e) => {\r\n if (e.key === 'Escape') {\r\n closeModal();\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', keyPress);\r\n\r\n // const fakeReads = [\r\n // {\r\n // \"ReadId\": 5816526,\r\n // \"SerialId\": \"700018320\",\r\n // \"MeterStart\": 9111,\r\n // \"MeterEnd\": 9111,\r\n // \"Diameter\": \"4\",\r\n // \"ReadDate\": \"2022-01-06\"\r\n // },\r\n // {\r\n // \"ReadId\": 5153717,\r\n // \"SerialId\": \"700018321\",\r\n // \"MeterStart\": 2468,\r\n // \"MeterEnd\": 2468,\r\n // \"Diameter\": \"4\",\r\n // \"ReadDate\": \"2022-01-06\"\r\n // },\r\n // {\r\n // \"ReadId\": 5830561,\r\n // \"SerialId\": \"949446661\",\r\n // \"MeterStart\": 1,\r\n // \"MeterEnd\": 1,\r\n // \"Diameter\": \"1 1\\/2\",\r\n // \"ReadDate\": \"2022-01-06\"\r\n // }\r\n // ];\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n ×\r\n
\r\n

Meter Readings for {meterDateActive}


\r\n {modalMeters && modalMeters.map(x => {\r\n return \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Serial Id{x.SerialId}
Meter Start{x.MeterStart}
Meter End{x.MeterEnd}
Date Read{x.ReadDate}
Meter Diameter{x.Diameter}
\r\n })}\r\n
\r\n
\r\n
\r\n

Bill History for {props.activeAccount.AcctNumber}


\r\n
\r\n {billHistory && billHistory.History && billHistory.History.map(x => {\r\n return \r\n \r\n \r\n \r\n \r\n {x.MeterReads && x.MeterReads.length > 0 ?\r\n \r\n \r\n \r\n :\r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{x.DueDate}
meterModal(x)} className='meter-read-btn'>View Meter Readings
View Meter Readings
Water Usage{x.WaterUsage}
Water Fee{helpers.formatToCurrency(x.WaterFee * 100)}
Service Charge{helpers.formatToCurrency(x.WaterService * 100)}
Sales Tax{helpers.formatToCurrency(x.WaterTax * 100)}
Wastewater Fee{helpers.formatToCurrency(x.WWFee * 100)}
Service Charge{helpers.formatToCurrency(x.WWService * 100)}
Sales Tax{helpers.formatToCurrency(x.WWTax * 100)}
Total Amount{helpers.formatToCurrency(x.Amount * 100)}
\r\n })}\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default BillHistory;","import React, { useState, useEffect } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { MsalProvider, AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from \"@azure/msal-react\";\r\nimport CheckoutForm from './CheckoutForm';\r\nimport { Elements } from \"@stripe/react-stripe-js\";\r\nimport { queryHelpers } from \"@testing-library/dom\";\r\nimport * as helpers from './../helpers';\r\n\r\n\r\nexport function QuickPaySubmitted(props) {\r\n\r\n const { instance, accounts, inProgress } = useMsal();\r\n\r\n let authenticate = () => {\r\n instance.loginRedirect();\r\n }\r\n\r\n let params = new URLSearchParams(window.location.search);\r\n let amount = params.get('amount');\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {!props.failed &&\r\n
\r\n
\r\n \r\n \r\n \r\n

Payment Submitted Successfully!

\r\n
\r\n
\r\n

\r\n Payment Amount: {helpers.formatToCurrency(props.amount || amount)}
\r\n

\r\n

It may take up to 20 minutes for your payment to process.

\r\n

You have been sent a receipt to the email address provided.

\r\n \r\n
\r\n
}\r\n {props.failed &&\r\n
\r\n
\r\n Danger \r\n \r\n

Payment Failed!

\r\n
\r\n
\r\n

\r\n There was an error in taking your payment.

\r\n Please try again.\r\n

\r\n \r\n
\r\n
}\r\n
\r\n Would you like to login or sign up to manage Autopay? Click Here\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default QuickPaySubmitted;","import React, { useState, useEffect } from \"react\";\r\nimport Navigation from './Navigation';\r\nimport * as helpers from '../helpers';\r\nimport { Elements } from \"@stripe/react-stripe-js\";\r\nimport AddNewPayment from './AddNewPayment';\r\nimport { Link } from \"react-router-dom\";\r\n\r\nexport function StatementSummaryComplete(props) {\r\n\r\n let params = new URLSearchParams(window.location.search);\r\n let amount = params.get('amount');\r\n let success = params.get('success');\r\n\r\n return (\r\n
\r\n \r\n {success === 'yes' ?\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n

Payment Successful

\r\n
\r\n Payment Amount: {helpers.formatToCurrency(amount * 100)}
\r\n
\r\n
\r\n

It may take up to 20 minutes for your payment to process.

\r\n

We have sent you an email receipt for your records.

\r\n
\r\n
\r\n \r\n
\r\n
: success === 'processing' ?\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n

Payment Submitted and is Processing

\r\n
\r\n Payment Amount: {helpers.formatToCurrency(amount * 100)}
\r\n
\r\n
\r\n

It may take up to 20 minutes for your payment to process.

\r\n

We have sent you an email recept for your records.

\r\n
\r\n
\r\n \r\n
\r\n
:\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Danger \r\n \r\n

Payment Failed

\r\n
\r\n

There was an error processing your payment.

\r\n
\r\n
\r\n

Please return to the statement summary and try again.

\r\n
\r\n
\r\n \r\n
\r\n
}\r\n
\r\n );\r\n}\r\n\r\nexport default StatementSummaryComplete;","import './App.css';\r\nimport './index.css';\r\nimport { BrowserRouter as Router, Route, Switch, Redirect } from \"react-router-dom\";\r\nimport StatementSummary from './Scenes/StatementSummary';\r\nimport Help from './Scenes/Help';\r\nimport ManageAccount from './Scenes/ManageAccount';\r\nimport QuickPay from './Scenes/QuickPay';\r\nimport BillHistory from './Scenes/BillHistory';\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport CheckoutForm from './Scenes/CheckoutForm';\r\nimport { loadStripe } from \"@stripe/stripe-js\";\r\nimport { Elements } from \"@stripe/react-stripe-js\";\r\nimport QuickPaySubmitted from './Scenes/QuickPaySubmitted';\r\nimport * as helpers from './helpers';\r\nimport { useMsal } from '@azure/msal-react';\r\nimport StatementSummaryComplete from './Scenes/StatementSummaryComplete';\r\nimport { b2cPolicies } from './authConfig';\r\n\r\nconst stripePromise = loadStripe(\"pk_live_51JflEYCG5ttGVn1rL0PYtG5BhRkOZC7qykZqnoSi94Rdo73T2Q1hH0xSqKBK0HPCwAO5JisvM6KqL4YZIHSR3EMR00kAODzw0N\", {\r\n betas: ['us_bank_account_beta_2']\r\n});\r\n\r\nfunction App(props) {\r\n\r\n const [customerId, setCustomerId] = useState('');\r\n const [bettyUser, setBettyUser] = useState('');\r\n const [stripeUser, setStripeUser] = useState('');\r\n const [init, setInit] = useState(false);\r\n\r\n const [activeAccount, setActiveAccount] = useState('');\r\n\r\n const { instance, accounts, inProgress } = useMsal();\r\n\r\n if (!init && props.loggedIn) {\r\n if (!window.getKey) {\r\n window.getKey = (callback) => {\r\n let curAct = instance.getAccountByHomeId(accounts[0].homeAccountId);\r\n let request = {\r\n scopes: [],\r\n account: curAct\r\n }\r\n\r\n instance.acquireTokenSilent(request).then((result) => {\r\n callback(result.idToken);\r\n }).catch((err) => {\r\n console.log(\"get key silent failed: \");\r\n instance.logout({ account: curAct });\r\n instance.loginRedirect({ authority: b2cPolicies.authorities.signUpSignIn.authority });\r\n })\r\n }\r\n }\r\n }\r\n\r\n let getUserData = () => {\r\n let thisCustomerId = accounts[0].idTokenClaims.extension_CustomerId;\r\n helpers.apiAuth('GetAccount', {}, (result) => {\r\n setBettyUser({ user: result });\r\n setActiveAccount(result.Accounts[0]);\r\n });\r\n helpers.apiAuth('GetStripeCustomerData', { customerId: thisCustomerId }, (result) => {\r\n setStripeUser({ customer: result.customer, paymentMethods: result.paymentMethods, bankAccountsPM: result.bankAccountsPM });\r\n });\r\n }\r\n let initialPage = props.loggedIn ? 'statement-summary' : 'quickpay';\r\n if (window.location.pathname === '/quickpaysubmitted') {\r\n initialPage = 'quickpaysubmitted';\r\n }\r\n if (window.location.pathname === '/quickpaysubmitted?failed') {\r\n initialPage = 'quickpaysubmitted?failed';\r\n }\r\n\r\n //URL Parameters\r\n let params = new URLSearchParams(window.location.search);\r\n let amount = params.get('amount');\r\n let failed = params.get('failed');\r\n\r\n useEffect(() => {\r\n if (!init && window.getKey) {\r\n setInit(true);\r\n setCustomerId(accounts[0].idTokenClaims.extension_CustomerId);\r\n getUserData();\r\n }\r\n })\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n } />\r\n } />\r\n } />\r\n } />\r\n } />\r\n } />\r\n } />\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default App;","import React, { useState, useEffect } from \"react\";\r\n\r\nimport { MsalProvider, AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from \"@azure/msal-react\";\r\nimport { EventType, InteractionType } from \"@azure/msal-browser\";\r\n\r\nimport { msalConfig, b2cPolicies } from \"./authConfig\";\r\nimport AppLanding from './AppLanding';\r\nimport { isMobileOnly, isMobile, isTablet } from 'react-device-detect';\r\n\r\nif (isMobileOnly) {\r\n var meta = document.createElement('meta');\r\n meta.name = \"viewport\";\r\n meta.content = \"width=400, maximum-scale=1.0, user-scalable=no\";\r\n document.getElementsByTagName('head')[0].appendChild(meta);\r\n document.body.classList.add('mobile-app');\r\n window.IsMobile = true;\r\n}\r\n// import { PageLayout, IdTokenClaims } from \"./ui.jsx\";\r\n\r\n\r\n// const IdTokenContent = () => {\r\n// /**\r\n// * useMsal is hook that returns the PublicClientApplication instance, \r\n// * an array of all accounts currently signed in and an inProgress value \r\n// * that tells you what msal is currently doing. For more, visit:\r\n// * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-react/docs/hooks.md\r\n// */\r\n// const { accounts } = useMsal();\r\n// const [idTokenClaims, setIdTokenClaims] = useState(null);\r\n\r\n// function GetIdTokenClaims() {\r\n// setIdTokenClaims(accounts[0].idTokenClaims)\r\n// }\r\n\r\n// return (\r\n// <>\r\n//
Welcome {accounts[0].name}
\r\n// {idTokenClaims ?\r\n// \r\n// :\r\n//
View ID Token Claims
\r\n// }\r\n// \r\n// );\r\n// };\r\n\r\n/**\r\n * Most applications will need to conditionally render certain components based on whether a user is signed in or not. \r\n * msal-react provides 2 easy ways to do this. AuthenticatedTemplate and UnauthenticatedTemplate components will \r\n * only render their children if a user is authenticated or unauthenticated, respectively.\r\n */\r\nconst MainContent = () => {\r\n\r\n const { instance } = useMsal();\r\n\r\n /**\r\n * Using the event API, you can register an event callback that will do something when an event is emitted. \r\n * When registering an event callback in a react component you will need to make sure you do 2 things.\r\n * 1) The callback is registered only once\r\n * 2) The callback is unregistered before the component unmounts.\r\n * For more, visit: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-react/docs/events.md\r\n */\r\n useEffect(() => {\r\n const callbackId = instance.addEventCallback((event) => {\r\n if (event.eventType === EventType.LOGIN_FAILURE) {\r\n if (event.error && event.error.errorMessage.indexOf(\"AADB2C90118\") > -1) {\r\n if (event.interactionType === InteractionType.Redirect) {\r\n instance.loginRedirect(b2cPolicies.authorities.forgotPassword);\r\n } else if (event.interactionType === InteractionType.Popup) {\r\n instance.loginPopup(b2cPolicies.authorities.forgotPassword)\r\n .catch(e => {\r\n return;\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (event.eventType === EventType.LOGIN_SUCCESS) {\r\n if (event?.payload) {\r\n /**\r\n * We need to reject id tokens that were not issued with the default sign-in policy.\r\n * \"acr\" claim in the token tells us what policy is used (NOTE: for new policies (v2.0), use \"tfp\" instead of \"acr\").\r\n * To learn more about B2C tokens, visit https://docs.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview\r\n */\r\n if (event.payload.idTokenClaims[\"acr\"] === b2cPolicies.names.forgotPassword) {\r\n window.alert(\"Password has been reset successfully. \\nPlease sign-in with your new password\");\r\n return instance.logout();\r\n }\r\n }\r\n }\r\n });\r\n\r\n return () => {\r\n if (callbackId) {\r\n instance.removeEventCallback(callbackId);\r\n }\r\n };\r\n }, []);\r\n\r\n let initialPage = !!sessionStorage['msal.idtoken'] ? 'statement-summary' : 'quickpay';\r\n return (\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * msal-react is built on the React context API and all parts of your app that require authentication must be \r\n * wrapped in the MsalProvider component. You will first need to initialize an instance of PublicClientApplication \r\n * then pass this to MsalProvider as a prop. All components underneath MsalProvider will have access to the \r\n * PublicClientApplication instance via context as well as all hooks and components provided by msal-react. For more,\r\n * visit: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-react/docs/getting-started.md\r\n */\r\nexport default function App({ msalInstance }) {\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}","\r\nimport React, { useState } from 'react';\r\nimport ReactDOM from \"react-dom\";\r\nimport { PublicClientApplication } from \"@azure/msal-browser\";\r\nimport App from \"./App.js\";\r\nimport { msalConfig } from \"./authConfig\";\r\n\r\nexport const msalInstance = new PublicClientApplication(msalConfig);\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);"],"sourceRoot":""}