{"version":3,"file":"makeAPayment.CpcnlGYT.js","sources":["../Client/legacy/MakeAPayment.tsx"],"sourcesContent":["import * as AdminApi from '@api/AdminApi';\r\nimport * as HOApi from '@api/HOApi';\r\nimport { policyNumber } from '@business/Validation/policyNumber';\r\nimport { routingNumber } from '@business/Validation/routingNumber';\r\nimport { Svg } from '@legacy/Components/Svg';\r\nimport * as Main from '@legacy/Main';\r\nimport '@legacy/css/sass/MakeAPayment/index.scss';\r\nimport * as Common from '@shared/Common';\r\nimport { formatCurrencyUS } from '@shared/Common';\r\nimport * as Constants from '@shared/Constants';\r\nimport { PaymentTypes } from '@shared/Constants';\r\nimport * as Models from '@shared/Models';\r\nimport Portal from '@webkit/components/portal';\r\nimport { Rules, Value } from '@webkit/index';\r\nimport dayjs from 'dayjs';\r\nimport html2canvas from 'html2canvas';\r\nimport * as React from 'react';\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { SecondaryBlackButton, SecondaryGreenButton } from './Components/FormGroups/Buttons';\r\nimport {\r\n CreditCardCvvFormGroup,\r\n CreditCardExpirationDateFormGroup,\r\n CreditCardNumberFormGroup,\r\n} from './Components/FormGroups/CreditCard';\r\nimport { RadioFormGroup } from './Components/FormGroups/Radio';\r\nimport { TextFormGroup } from './Components/FormGroups/Text';\r\nimport Alert from './Components/Modals/Alert';\r\nimport { NewSwyfftModal as Modal, ModalSize } from './Components/Modals/Modal';\r\nimport { Tooltip, TooltipPlacement, TooltipSize } from './Components/Tooltip';\r\nimport {\r\n hideString,\r\n ICardSummary,\r\n ICheckSummary,\r\n PaymentConfirmation,\r\n} from './Purchase/Components/PaymentConfirmation';\r\nimport { PaymentFrequency, PaymentType } from './Purchase/Interfaces/Interfaces';\r\n\r\nconst ConditionalSection: React.FC<{ active: boolean } & React.PropsWithChildren> = props =>\r\n !props.active ? <React.Fragment /> : <React.Fragment>{props.children}</React.Fragment>;\r\n\r\nconst ErrorLine: React.FC<{ message: string }> = props => {\r\n if (!props.message) return <React.Fragment />;\r\n const email = 'customersupport@swyfft.com';\r\n let split = props.message.split(email);\r\n if (split.length === 2) {\r\n return (\r\n <div className='error-message-bs'>\r\n {split[0]}\r\n <a href={`mailto:${email}`}>{email}</a>\r\n {split[1]}\r\n </div>\r\n );\r\n }\r\n return <div className='error-message-bs'>{props.message}</div>;\r\n};\r\n\r\nconst StepLink: React.FC<{\r\n id?: string;\r\n onClick: () => void;\r\n text: string;\r\n subText: string;\r\n alt: string;\r\n disabled?: boolean;\r\n disabledReason?: string;\r\n}> = props => (\r\n <div\r\n id={props.id}\r\n className={`verify-link-bs ${props.disabled ? 'disabled' : ''}`}\r\n onClick={() => !props.disabled && props.onClick()}\r\n >\r\n <div className='verify-link-header'>\r\n <div className='verify-link-text-ly'>{props.text}</div>\r\n <Svg className='verify-link-icon-ly' path='/images/arrow-right.svg' alt={props.alt} />\r\n </div>\r\n <div className='verify-link-subtext-ly'>\r\n {props.disabled && props.disabledReason ? props.disabledReason : props.subText}\r\n </div>\r\n </div>\r\n);\r\n\r\nconst BackLink: React.FC<{ onClick: () => void; text: string; alt: string }> = props => (\r\n <div className='back-link-bs' onClick={() => props.onClick()}>\r\n <div className='back-link-header'>\r\n <Svg className='back-link-icon-ly' path='/images/arrow-left.svg' alt={props.alt} />\r\n <div className='back-link-text-ly'>{props.text}</div>\r\n </div>\r\n </div>\r\n);\r\n\r\n// jn 2019-08-05: saving this in case it becomes possible to retrieve and display the CC expiration date.\r\n// const ExpirationLine: React.FC<{ active: boolean, expiration: Date, due: Date }> = props =>\r\n// (!props.active ? <React.Fragment />\r\n// : <div className={props.expiration < props.due ? 'errortext-bs' : 'paneltext-bs'}>\r\n// {`Expires ${props.expiration.getMonth()}/${props.expiration.getFullYear() - 2000}${props.expiration < props.due ? ' - Please Update' : ''}`}\r\n// </div>);\r\n\r\ninterface IMakeAPaymentPageState {\r\n pageStep: 'locate' | 'verify' | 'edit' | 'thank' | 'once';\r\n isPayment: boolean;\r\n errorMessage: string;\r\n errorFound: boolean;\r\n userId: string;\r\n success: boolean;\r\n secondaryGreenLoading: boolean;\r\n modalVisible: boolean;\r\n edited: boolean;\r\n isEscrow: boolean;\r\n cardSublabel: string;\r\n checkSublabel: string;\r\n\r\n policyNumber: Value<string>;\r\n policyZip: Value<string>;\r\n quoteId: string;\r\n quoteStatus: string;\r\n\r\n payType: PaymentType;\r\n amountDueNonCredit: string;\r\n amountDueCredit: string;\r\n amountDueOrig: string;\r\n dueDate: dayjs.Dayjs;\r\n invoiceNumber: number;\r\n\r\n cardFirstName: Value<string>;\r\n cardLastName: Value<string>;\r\n creditCard: Value<string>;\r\n creditCardExpiration: Value<dayjs.Dayjs | null>;\r\n cvv: Value<string>;\r\n\r\n accountType: 'savings' | 'checking';\r\n accountOwner: Value<string>;\r\n accountNumber: Value<string>;\r\n routingNumber: Value<string>;\r\n bankName: string;\r\n\r\n paymentFrequency: PaymentFrequency;\r\n}\r\n\r\ninterface IPolicyDataContainerProps {\r\n labelText?: string;\r\n flexData?: boolean;\r\n}\r\n\r\nexport const PolicyDataContainer = (props: React.PropsWithChildren<IPolicyDataContainerProps>) => (\r\n <div className='policy-data-container-ly'>\r\n {props.labelText && <div className='policy-data-label-bs'>{props.labelText}</div>}\r\n <div className={props.flexData ? 'policy-data-bs data-flex-display-ly' : 'policy-data-bs'}>\r\n {props.children}\r\n </div>\r\n </div>\r\n);\r\n\r\nexport const PolicyData = props => (\r\n <div className={props.flexData ? 'policy-data-bs data-flex-display-ly' : 'policy-data-bs'}>\r\n <ConditionalSection active={props.addIcon}>\r\n <Tooltip message={props.tooltipMessage} placement={TooltipPlacement.Bottom} size={TooltipSize.Fill}>\r\n <Svg className='policy-data-icon-ly' path={props.icon} unstyled alt={props.alt} />\r\n </Tooltip>\r\n </ConditionalSection>\r\n <span id={props.dataId}>{props.dataText}</span>\r\n </div>\r\n);\r\n\r\nexport const SwitchButton = props => (\r\n <button\r\n id={props.id}\r\n className={`switch-button-bs switch-button-ly ${props.selected ? 'switch-button-selected-bs' : ''}`}\r\n onClick={() => props.onSelect()}\r\n type='button'\r\n >\r\n {props.text}\r\n </button>\r\n);\r\n\r\nexport class MakeAPaymentPage extends React.Component<{}, IMakeAPaymentPageState> {\r\n captionText = {\r\n locate: 'Enter policy # and zip to locate your policy.',\r\n edit: 'Update or change your saved payment method.',\r\n once: 'Choose a payment method and enter the details below. This payment method will not be saved.',\r\n };\r\n alert: Alert;\r\n expirationYears: number[];\r\n\r\n constructor(props) {\r\n super(props);\r\n let currYear = new Date().getFullYear();\r\n this.expirationYears = [];\r\n for (let y = currYear; y < currYear + 20; y++) {\r\n this.expirationYears.push(y);\r\n }\r\n const query = Common.getQueryObject();\r\n this.state = {\r\n pageStep: 'locate',\r\n isPayment: false,\r\n\r\n errorMessage: '',\r\n errorFound: false,\r\n userId: '',\r\n success: false,\r\n modalVisible: false,\r\n secondaryGreenLoading: false,\r\n edited: false,\r\n isEscrow: false,\r\n cardSublabel: '',\r\n checkSublabel: '',\r\n\r\n policyNumber: new Value<string>('Policy Number', query.get('policynumber') || '', [\r\n Rules.required(),\r\n policyNumber(),\r\n ]),\r\n policyZip: new Value<string>('Policy Zip', query.get('zip') || '', [Rules.required(), Rules.zip()]),\r\n quoteId: '',\r\n quoteStatus: '',\r\n\r\n payType: 'card',\r\n paymentFrequency: 'annual',\r\n amountDueNonCredit: '',\r\n amountDueCredit: '',\r\n amountDueOrig: '',\r\n dueDate: dayjs(),\r\n invoiceNumber: 0,\r\n\r\n cardFirstName: new Value<string>('First Name', '', [Rules.required()]),\r\n cardLastName: new Value<string>('Last Name', '', [Rules.required()]),\r\n creditCard: new Value<string>('Credit Card', '', [Rules.required(), Rules.creditCard()]),\r\n creditCardExpiration: new Value<dayjs.Dayjs | null>('Credit Card Expiration', null, [Rules.required()]),\r\n cvv: new Value<string>('cvv', '', [Rules.required(), Rules.regex(/^[0-9]{3,4}$/)]),\r\n\r\n accountType: 'checking',\r\n accountOwner: new Value<string>('Account Owner', '', [Rules.required()]),\r\n accountNumber: new Value<string>('Account Number', '', [Rules.required(), Rules.regex(/^(?!XXXX).*/)]),\r\n routingNumber: new Value<string>('Routing Number', '', [Rules.required(), routingNumber()]),\r\n bankName: '',\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n if (this.state.policyNumber.content && this.state.policyZip.content) {\r\n this.tryGetPolicy(this.state.policyNumber.content, this.state.policyZip.content);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <div id='wrapper' className='wrapper'>\r\n <div>\r\n <section className='update-area'>\r\n <div className='container'>\r\n <ConditionalSection active={this.state.pageStep !== 'thank'}>\r\n <Row>\r\n {this.state.pageStep !== 'verify' ? (\r\n <Col sm={8} smOffset={1} md={8} mdOffset={2} lgOffset={3}>\r\n <h1 className='page-heading-h1'>Make a Payment</h1>\r\n </Col>\r\n ) : (\r\n <Col sm={12} smOffset={0} md={10} mdOffset={1} lg={8} lgOffset={2}>\r\n <h1 className='page-heading-h1'>Make a Payment</h1>\r\n </Col>\r\n )}\r\n </Row>\r\n <ConditionalSection active={this.state.pageStep !== 'verify'}>\r\n <Row>\r\n <Col sm={8} smOffset={1} md={8} mdOffset={2} lg={6} lgOffset={3}>\r\n <div className='page-caption-md'>\r\n {this.captionText[this.state.pageStep]}\r\n </div>\r\n </Col>\r\n </Row>\r\n </ConditionalSection>\r\n </ConditionalSection>\r\n\r\n <ConditionalSection active={this.state.pageStep === 'thank'}>\r\n <Row>\r\n <Col smOffset={1} sm={10} mdOffset={2} md={8} lgOffset={3} lg={6}>\r\n <div className='ribbon-container-ly'>\r\n <img src={'/images/badge.svg'} alt='Payment Successful, Thank You!' />\r\n </div>\r\n <h2 className='overlay-header-bs'>Thank You!</h2>\r\n <p className='ribbon-blurb-ly'>\r\n Your payment was submitted successfully. We will send you an email receipt\r\n shortly.\r\n </p>\r\n </Col>\r\n </Row>\r\n </ConditionalSection>\r\n\r\n <ConditionalSection active={this.state.pageStep === 'locate'}>\r\n <Row>\r\n <Col sm={10} smOffset={1} md={8} mdOffset={2} lg={6} lgOffset={3}>\r\n <form\r\n className='form-login'\r\n autoComplete='off'\r\n onSubmit={e => {\r\n e.preventDefault();\r\n this.tryGetPolicy(\r\n this.state.policyNumber.content,\r\n this.state.policyZip.content\r\n );\r\n }}\r\n >\r\n <Row>\r\n <Col sm={6}>\r\n <TextFormGroup\r\n id='policy-number'\r\n placeholder='e.g. AL01-123456-00'\r\n onChange={e =>\r\n this.setState({\r\n policyNumber: this.state.policyNumber.set(\r\n e.target.value\r\n ),\r\n })\r\n }\r\n value={this.state.policyNumber}\r\n label='Policy Number'\r\n labelClassName='input-field-label-md'\r\n inputClassName='input-field-md'\r\n />\r\n </Col>\r\n <Col sm={6}>\r\n <TextFormGroup\r\n id='policy-zip'\r\n placeholder='e.g. 12345'\r\n onChange={e =>\r\n this.setState({\r\n policyZip: this.state.policyZip.set(e.target.value),\r\n })\r\n }\r\n value={this.state.policyZip}\r\n label='Insured Zip Code'\r\n labelClassName='input-field-label-md'\r\n inputClassName='input-field-md'\r\n />\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col xs={12}>\r\n <ErrorLine message={this.state.errorMessage} />\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col sm={4} smOffset={8}>\r\n <SecondaryGreenButton\r\n id='verify-policy-button'\r\n type='submit'\r\n className='admin-secondary-button'\r\n label='Continue'\r\n disabled={\r\n !this.state.policyNumber.valid ||\r\n !this.state.policyZip.valid\r\n }\r\n loading={this.state.secondaryGreenLoading}\r\n />\r\n </Col>\r\n </Row>\r\n </form>\r\n </Col>\r\n </Row>\r\n </ConditionalSection>\r\n\r\n <ConditionalSection active={this.state.pageStep === 'verify'}>\r\n <Row>\r\n <Col sm={6} smOffset={0} md={5} mdOffset={1} lg={4} lgOffset={2}>\r\n <div className='info-container-ly'>\r\n <div className='vertical-stack-ly'>\r\n <h2 className='info-container-h2-bs'>\r\n Policy #{' '}\r\n <span id='policy-number-verify'>\r\n {this.state.policyNumber.content}\r\n </span>\r\n </h2>\r\n <PolicyDataContainer labelText='Current Balance Due' flexData={true}>\r\n <PolicyData\r\n dataText={this.state.amountDueOrig}\r\n dataId='due-balance'\r\n flexData={true}\r\n addIcon={true}\r\n icon='/images/money-icon.svg'\r\n alt={`Amount due: ${this.state.amountDueOrig}`}\r\n tooltipMessage={`Amount due: ${this.state.amountDueOrig}`}\r\n />\r\n <ConditionalSection active={this.state.amountDueOrig !== '0.00'}>\r\n <PolicyData\r\n dataText={`Due ${this.state.dueDate.format('M/D/YY')}`}\r\n dataId='due-date'\r\n flexData={true}\r\n addIcon={true}\r\n icon='/images/calendar-icon.svg'\r\n alt={`Payment due date: ${this.state.dueDate.format(\r\n 'M/D/YY'\r\n )}`}\r\n tooltipMessage={`Payment due date: ${this.state.dueDate.format(\r\n 'M/D/YY'\r\n )}`}\r\n />\r\n </ConditionalSection>\r\n </PolicyDataContainer>\r\n <PolicyDataContainer labelText='Saved Payment Method' flexData={true}>\r\n <PolicyData\r\n dataText={\r\n this.state.isEscrow ? (\r\n 'Escrow Account'\r\n ) : this.state.payType === 'card' ? (\r\n <span>\r\n Credit Card:\r\n <span\r\n className='account-number-text-bs'\r\n id='account-number-verify'\r\n >\r\n {' '}\r\n ••••-••••-••••-\r\n {this.state.creditCard.content.slice(-4)}\r\n </span>\r\n </span>\r\n ) : (\r\n <span>\r\n {this.state.accountType === 'checking'\r\n ? 'Checking Account'\r\n : 'Savings Account'}\r\n :\r\n <span\r\n className='account-number-text-bs'\r\n id='account-number-verify'\r\n >\r\n {' '}\r\n {hideString(\r\n this.state.accountNumber.content,\r\n 4\r\n )}\r\n </span>\r\n </span>\r\n )\r\n }\r\n />\r\n </PolicyDataContainer>\r\n </div>\r\n </div>\r\n </Col>\r\n <Col sm={6} md={5} lg={4} className='verify-link-container-ly'>\r\n <ConditionalSection active={this.state.isEscrow}>\r\n <StepLink\r\n id='change-billable-link'\r\n onClick={() => {\r\n window.location.href = `${Constants.pages.EditBillableInterests}?policyNumber=${this.state.policyNumber.content}`;\r\n }}\r\n text='Edit Billable Interests'\r\n subText='Update current mortgagee information on file'\r\n alt='Update current mortgagee information on file'\r\n />\r\n </ConditionalSection>\r\n <ConditionalSection active={!this.state.isEscrow}>\r\n <StepLink\r\n id='change-payment-link'\r\n onClick={() => {\r\n this.setState({ pageStep: 'edit' });\r\n }}\r\n text='Update Saved Payment Method'\r\n subText='Correct an out-of-date or invalid payment method'\r\n alt='Correct an out-of-date or invalid payment method'\r\n disabled={this.state.quoteStatus === 'Bound - Pending Accounting'}\r\n disabledReason={`The payment method of this policy cannot be changed here. Call ${\r\n (window as any).customerSupportPhoneNumber\r\n } for billing support if you need help with your payment method.`}\r\n />\r\n <ConditionalSection active={this.state.amountDueOrig !== '0.00'}>\r\n <StepLink\r\n id='pay-saved-link'\r\n onClick={() => {\r\n this.setState({ modalVisible: true, isPayment: true });\r\n }}\r\n text={`Pay $${this.state.amountDueOrig} with Saved Method`}\r\n subText='Use saved method to pay (if valid)'\r\n alt='Use saved method to pay (if valid)'\r\n />\r\n </ConditionalSection>\r\n </ConditionalSection>\r\n <ConditionalSection active={this.state.amountDueOrig !== '0.00'}>\r\n <StepLink\r\n id='pay-once-link'\r\n onClick={() => {\r\n this.setState({ pageStep: 'once', isPayment: true });\r\n }}\r\n text={`Pay $${this.state.amountDueOrig}${\r\n !this.state.isEscrow ? ' with Other Method' : ''\r\n }`}\r\n subText='Payment method will not be saved'\r\n alt='Make a one-time payment. Payment method will not be saved.'\r\n />\r\n </ConditionalSection>\r\n <BackLink\r\n onClick={() => {\r\n this.setState({ pageStep: 'locate' });\r\n }}\r\n text='Go Back'\r\n alt='Go back'\r\n />\r\n </Col>\r\n </Row>\r\n </ConditionalSection>\r\n\r\n <ConditionalSection\r\n active={this.state.pageStep === 'edit' || this.state.pageStep === 'once'}\r\n >\r\n <div className='switch-button-container-ly'>\r\n <Row>\r\n <Col smOffset={1} mdOffset={2} lgOffset={3} sm={8}>\r\n <div className='switch-button-label-bs'>Payment Method</div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col xs={6} sm={3} smOffset={1} md={2} mdOffset={2} lgOffset={3}>\r\n <SwitchButton\r\n id='switch-credit-card'\r\n text='Credit Card'\r\n selected={this.state.payType === 'card'}\r\n onSelect={() =>\r\n this.setState({\r\n payType: 'card',\r\n edited: true,\r\n })\r\n }\r\n />\r\n </Col>\r\n <Col xs={6} sm={3} md={2}>\r\n <SwitchButton\r\n id='switch-echeck'\r\n text='Echeck'\r\n selected={this.state.payType === 'echeck'}\r\n onSelect={() =>\r\n this.setState({\r\n payType: 'echeck',\r\n accountType: 'checking',\r\n edited: true,\r\n })\r\n }\r\n />\r\n </Col>\r\n </Row>\r\n <ConditionalSection\r\n active={\r\n this.state.pageStep === 'once' &&\r\n this.state.amountDueCredit !== this.state.amountDueNonCredit\r\n }\r\n >\r\n <Row>\r\n <Col smOffset={1} mdOffset={2} lgOffset={3} sm={8}>\r\n <div className='switch-button-label-bs'>{`Card payment includes ${formatCurrencyUS(\r\n +this.state.amountDueCredit - +this.state.amountDueNonCredit,\r\n 2\r\n )} convenience fee`}</div>\r\n </Col>\r\n </Row>\r\n </ConditionalSection>\r\n </div>\r\n <Row>\r\n <Col sm={10} smOffset={1} md={8} mdOffset={2} lg={6} lgOffset={3}>\r\n <form className='switchable-form-ly' autoComplete='off'>\r\n <ConditionalSection active={this.state.payType === 'card'}>\r\n <Row>\r\n <Col sm={6}>\r\n <TextFormGroup\r\n id='first-name-card'\r\n placeholder=''\r\n onChange={e =>\r\n this.setState({\r\n cardFirstName: this.state.cardFirstName.set(\r\n e.target.value\r\n ),\r\n edited: true,\r\n })\r\n }\r\n value={this.state.cardFirstName}\r\n label='First Name'\r\n labelClassName='input-field-label-md'\r\n inputClassName='input-field-md'\r\n />\r\n </Col>\r\n <Col sm={6}>\r\n <TextFormGroup\r\n id='last-name-card'\r\n placeholder=''\r\n onChange={e =>\r\n this.setState({\r\n cardLastName: this.state.cardLastName.set(\r\n e.target.value\r\n ),\r\n edited: true,\r\n })\r\n }\r\n value={this.state.cardLastName}\r\n label='Last Name'\r\n labelClassName='input-field-label-md'\r\n inputClassName='input-field-md'\r\n />\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col xs={12}>\r\n <CreditCardNumberFormGroup\r\n id='credit-card'\r\n placeholder=''\r\n onChange={e =>\r\n this.setState({\r\n creditCard: this.state.creditCard.set(\r\n e.target.value\r\n ),\r\n edited: true,\r\n })\r\n }\r\n value={this.state.creditCard}\r\n label='Credit Card Number'\r\n labelClassName='input-field-label-md'\r\n inputClassName='input-field-md'\r\n />\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col sm={6}>\r\n <CreditCardExpirationDateFormGroup\r\n id='credit-card-expiration-date'\r\n placeholder='MM/YYYY'\r\n label='Expiration Date'\r\n labelClassName='input-field-label-md'\r\n inputClassName='input-field-md'\r\n onChange={date =>\r\n this.setState({\r\n creditCardExpiration:\r\n this.state.creditCardExpiration.set(date),\r\n edited: true,\r\n })\r\n }\r\n value={this.state.creditCardExpiration}\r\n />\r\n </Col>\r\n <Col sm={6}>\r\n <CreditCardCvvFormGroup\r\n id='credit-card-cvv'\r\n label='CVV'\r\n labelClassName='input-field-label-md'\r\n inputClassName='input-field-md'\r\n onChange={e =>\r\n this.setState({\r\n cvv: this.state.cvv.set(e.target.value),\r\n edited: true,\r\n })\r\n }\r\n value={this.state.cvv}\r\n />\r\n </Col>\r\n </Row>\r\n </ConditionalSection>\r\n <ConditionalSection active={this.state.payType === 'echeck'}>\r\n <Row>\r\n <Col xs={12}>\r\n <div className='input-field-label-md'>Echeck Account</div>\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col sm={4}>\r\n <RadioFormGroup\r\n id='select-checking'\r\n label='Checking Account'\r\n selected={this.state.accountType === 'checking'}\r\n onSelect={() =>\r\n this.setState({\r\n accountType: 'checking',\r\n edited: true,\r\n })\r\n }\r\n />\r\n </Col>\r\n <Col sm={4}>\r\n <RadioFormGroup\r\n id='select-savings'\r\n label='Savings Account'\r\n selected={this.state.accountType === 'savings'}\r\n onSelect={() =>\r\n this.setState({\r\n accountType: 'savings',\r\n edited: true,\r\n })\r\n }\r\n />\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col xs={12}>\r\n <TextFormGroup\r\n id='account-owner'\r\n placeholder=''\r\n onChange={e =>\r\n this.setState({\r\n accountOwner: this.state.accountOwner.set(\r\n e.target.value\r\n ),\r\n edited: true,\r\n })\r\n }\r\n value={this.state.accountOwner}\r\n label='Account Owner'\r\n labelClassName='input-field-label-md'\r\n inputClassName='input-field-md'\r\n />\r\n </Col>\r\n </Row>\r\n <Row>\r\n <Col sm={6}>\r\n <TextFormGroup\r\n id='account-number'\r\n placeholder=''\r\n onChange={e =>\r\n this.setState({\r\n accountNumber: this.state.accountNumber.set(\r\n e.target.value\r\n ),\r\n edited: true,\r\n })\r\n }\r\n value={this.state.accountNumber}\r\n label='Account Number'\r\n labelClassName='input-field-label-md'\r\n inputClassName='input-field-md'\r\n />\r\n </Col>\r\n <Col sm={6}>\r\n <TextFormGroup\r\n id='routing-number'\r\n placeholder=''\r\n onChange={e =>\r\n this.setState({\r\n routingNumber: this.state.routingNumber.set(\r\n e.target.value\r\n ),\r\n edited: true,\r\n })\r\n }\r\n value={this.state.routingNumber}\r\n label='Routing Number'\r\n labelClassName='input-field-label-md'\r\n inputClassName='input-field-md'\r\n />\r\n </Col>\r\n </Row>\r\n </ConditionalSection>\r\n <Row>\r\n <Col smOffset={4} sm={4}>\r\n <SecondaryBlackButton\r\n id='cancel-button'\r\n className='admin-black-button'\r\n label='Cancel'\r\n onClick={() => this.onCancel()}\r\n />\r\n </Col>\r\n <Col sm={4}>\r\n <Button\r\n type='submit'\r\n id='update-payment-type-button'\r\n disabled={this.state.secondaryGreenLoading}\r\n className='admin-secondary-button-override'\r\n onClick={e => this.displayModal(e)}\r\n >\r\n {this.state.pageStep === 'edit'\r\n ? 'Update Method'\r\n : `Pay $${this.getPaymentAmount()}`}\r\n </Button>\r\n </Col>\r\n </Row>\r\n </form>\r\n </Col>\r\n </Row>\r\n </ConditionalSection>\r\n\r\n <ConditionalSection active={this.state.pageStep === 'once'}></ConditionalSection>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <Portal>\r\n <Modal\r\n id='confirmation-modal'\r\n visible={this.state.modalVisible}\r\n className='confirmation-modal-bs'\r\n size={ModalSize.Medium}\r\n title={\r\n this.state.pageStep === 'verify' || this.state.pageStep === 'once'\r\n ? 'Confirm Payment'\r\n : 'Confirm Saved Payment Method Update'\r\n }\r\n hideOnClick\r\n x\r\n cancelFunction={() => this.setState({ modalVisible: false })}\r\n >\r\n <Row className='payment-auth-confirm-language-bs'>\r\n <Col xs={12}>\r\n {this.state.pageStep === 'edit' ? (\r\n <p>\r\n By clicking the button below, I authorize Swyfft to update my saved payment\r\n method to:\r\n </p>\r\n ) : (\r\n <p>\r\n You are making a payment of{' '}\r\n <span className='emphasize-text-bs'>${this.getPaymentAmount()}</span> using the\r\n following payment method:\r\n </p>\r\n )}\r\n </Col>\r\n </Row>\r\n\r\n <p>\r\n <PaymentConfirmation\r\n heading=' '\r\n payInfo={\r\n this.state.payType === 'card'\r\n ? ({\r\n payType: 'card',\r\n accountNumber: this.state.creditCard.content,\r\n } as ICardSummary)\r\n : ({\r\n payType: 'echeck',\r\n accountNumber: this.state.accountNumber.content,\r\n routingNumber: this.state.routingNumber.content,\r\n accountType: this.state.accountType,\r\n bankName: this.state.bankName,\r\n } as ICheckSummary)\r\n }\r\n payFreq={this.state.paymentFrequency}\r\n startDate={dayjs()}\r\n downPayment={0}\r\n monthlyPayment={\r\n this.state.paymentFrequency.startsWith('monthly')\r\n ? parseFloat(this.state.amountDueOrig)\r\n : 0\r\n }\r\n yearlyPayment={\r\n !this.state.paymentFrequency.startsWith('monthly')\r\n ? parseFloat(this.getPaymentAmount())\r\n : 0\r\n }\r\n pageStep={this.state.pageStep}\r\n invoiceNumber={this.state.isPayment ? this.state.invoiceNumber : undefined}\r\n customerName={\r\n this.state.payType === 'card'\r\n ? `${this.state.cardFirstName.content} ${this.state.cardLastName.content}`\r\n : this.state.accountOwner.content\r\n }\r\n />\r\n </p>\r\n\r\n <ConditionalSection active={this.state.pageStep === 'once' && !this.state.isEscrow}>\r\n <Row className='payment-auth-confirm-language-bs'>\r\n <Col xs={12}>\r\n <p>\r\n <a\r\n onClick={() => {\r\n this.setState({ pageStep: 'edit', modalVisible: false });\r\n }}\r\n >\r\n Click here\r\n </a>{' '}\r\n to update your saved payment method now (this transaction will be cancelled).\r\n </p>\r\n </Col>\r\n </Row>\r\n </ConditionalSection>\r\n <Row>\r\n <Col sm={6} smOffset={6}>\r\n <SecondaryGreenButton\r\n id='confirm-modal'\r\n className='admin-secondary-button'\r\n onClick={async () => {\r\n switch (this.state.pageStep) {\r\n case 'once':\r\n await this.MakeOneTimePayment();\r\n break;\r\n case 'verify':\r\n await this.MakePayment();\r\n break;\r\n case 'edit':\r\n await this.ChangePayment();\r\n break;\r\n }\r\n }}\r\n label={'Agree & Confirm'}\r\n loading={this.state.secondaryGreenLoading}\r\n />\r\n </Col>\r\n </Row>\r\n </Modal>\r\n </Portal>\r\n </div>\r\n );\r\n }\r\n\r\n getPaymentAmount() {\r\n return this.state.payType === 'card' ? this.state.amountDueCredit : this.state.amountDueNonCredit;\r\n }\r\n\r\n displayModal(e) {\r\n e.preventDefault();\r\n if (this.submitValidationHandler()) {\r\n return;\r\n }\r\n if (this.state.payType === 'echeck') {\r\n AdminApi.getBankName(this.state.routingNumber.content)\r\n .then(bankName => this.setState({ bankName }))\r\n .finally(() => this.setState({ modalVisible: true })); // Show modal even if getBankName fails.\r\n } else {\r\n this.setState({ modalVisible: true });\r\n }\r\n }\r\n\r\n async MakePayment() {\r\n this.setState({\r\n errorMessage: '',\r\n secondaryGreenLoading: true,\r\n });\r\n\r\n try {\r\n const response = await AdminApi.payFromExistingProfile(\r\n this.state.policyNumber.content,\r\n this.state.policyZip.content,\r\n this.state.amountDueOrig,\r\n this.state.payType === 'card' ? 'Credit Card' : 'ECheck',\r\n this.state.payType === 'card' ? this.state.creditCard.content : this.state.accountNumber.content\r\n );\r\n\r\n if (response.status && response.status !== 200) {\r\n this.setState({ success: false });\r\n const problemDetails = await response.json();\r\n throw [response, problemDetails];\r\n }\r\n\r\n this.setState({\r\n success: true,\r\n });\r\n } catch (ex) {\r\n Common.handleGeneralError(ex);\r\n } finally {\r\n this.setState({\r\n secondaryGreenLoading: false,\r\n modalVisible: false,\r\n pageStep: this.state.success ? 'thank' : 'verify',\r\n });\r\n }\r\n }\r\n\r\n async MakeOneTimePayment() {\r\n if (this.submitValidationHandler()) {\r\n return;\r\n }\r\n\r\n this.setState({\r\n errorMessage: '',\r\n secondaryGreenLoading: true,\r\n });\r\n\r\n try {\r\n const amount = this.state.payType === 'card' ? this.state.amountDueCredit : this.state.amountDueNonCredit;\r\n const paymentInfo = await this.getPaymentInfo(amount, true);\r\n\r\n const response = await AdminApi.payOnce(paymentInfo);\r\n if (response.status && response.status !== 200) {\r\n const problemDetails = await response.json();\r\n throw [response, problemDetails];\r\n }\r\n\r\n this.setState({\r\n secondaryGreenLoading: false,\r\n modalVisible: false,\r\n pageStep: 'thank',\r\n });\r\n } catch (ex) {\r\n Common.handleGeneralError(ex);\r\n this.setState({\r\n secondaryGreenLoading: false,\r\n modalVisible: false,\r\n pageStep: 'once',\r\n });\r\n }\r\n }\r\n\r\n async ChangePayment() {\r\n if (this.submitValidationHandler()) {\r\n return;\r\n }\r\n this.setState({\r\n errorMessage: '',\r\n secondaryGreenLoading: true,\r\n });\r\n\r\n try {\r\n const paymentInfo = await this.getPaymentInfo('0', false);\r\n\r\n const response = await AdminApi.updatePaymentMethod(paymentInfo);\r\n if (response.status && response.status !== 200) {\r\n const problemDetails = await response.json();\r\n throw [response, problemDetails];\r\n }\r\n\r\n // in case of a change in amount due, re-retrieves policy invoice:\r\n await this.onCancel();\r\n } catch (ex) {\r\n Common.handleGeneralError(ex);\r\n } finally {\r\n this.setState({\r\n secondaryGreenLoading: false,\r\n modalVisible: false,\r\n pageStep: 'verify',\r\n });\r\n }\r\n }\r\n\r\n private async getPaymentInfo(payment: string, once: boolean) {\r\n const authScreen = await this.grabAuthorizationScreen();\r\n let paymentInfo: Models.PaymentModel = {\r\n PolicyNumber: this.state.policyNumber.content,\r\n PolicyZip: this.state.policyZip.content,\r\n PaymentAmount: payment,\r\n Authorization: authScreen,\r\n AnnualNewBusiness: ['escrow', 'annual'].includes(this.state.paymentFrequency),\r\n IsCard: this.state.payType === 'card',\r\n };\r\n if (this.state.payType === 'card') {\r\n paymentInfo = {\r\n CreditCard: this.state.creditCard.content,\r\n Cvv: this.state.cvv.content,\r\n ExpMonth: this.state.creditCardExpiration.content?.format('MM'),\r\n ExpYear: this.state.creditCardExpiration.content?.format('YYYY'),\r\n ...paymentInfo,\r\n };\r\n this.setState({\r\n creditCard: this.state.creditCard.set(`XXXX${this.state.creditCard.content.slice(-4)}`),\r\n });\r\n } else {\r\n paymentInfo = {\r\n AccountName: this.state.accountOwner.content,\r\n AccountNumber: this.state.accountNumber.content,\r\n RoutingNumber: this.state.routingNumber.content,\r\n BankAccountType: this.state.accountType,\r\n ...paymentInfo,\r\n };\r\n this.setState({\r\n accountNumber: this.state.accountNumber.set(`XXXX${this.state.accountNumber.content.slice(-4)}`),\r\n });\r\n }\r\n return paymentInfo;\r\n }\r\n\r\n /** Uses html2canvas to create a png from the confirmation modal rendered html and returns the data url for that image. */\r\n async grabAuthorizationScreen() {\r\n const canvasOptions: {} = {\r\n scale: 1,\r\n windowWidth: 1024,\r\n width: 1024,\r\n height: 860,\r\n logging: false,\r\n };\r\n\r\n const toCanvas: any = html2canvas as any;\r\n\r\n // We grab the confirmation modal element (as opposed to the whole body) to avoid interference with site-wide elements such as the banner. This won't work correctly with a React ref, which is why we use the document.getElementById method.\r\n const screen: any = await toCanvas(document.querySelector('#confirmation-modal'), canvasOptions);\r\n const url: string = screen.toDataURL();\r\n\r\n return url;\r\n }\r\n\r\n private async onCancel() {\r\n if (this.state.edited) {\r\n await this.tryGetPolicy(this.state.policyNumber.content, this.state.policyZip.content);\r\n this.setState({ edited: false });\r\n }\r\n this.setState({ pageStep: 'verify' });\r\n }\r\n\r\n //Iterates through state keys and returns 'true' if any value validation errors are found.\r\n private submitValidationHandler(): boolean {\r\n const valSet =\r\n this.state.payType === 'card'\r\n ? ['cardFirstName', 'cardLastName', 'creditCard', 'creditCardExpiration', 'cvv']\r\n : ['accountOwner', 'accountNumber', 'routingNumber'];\r\n\r\n const errorFound = valSet\r\n .map(key => this.state[key])\r\n .filter(value => value && value.validate)\r\n .map(value => value.validate())\r\n .some(value => !!value);\r\n\r\n this.setState({\r\n errorFound,\r\n });\r\n return errorFound;\r\n }\r\n\r\n private async tryGetPolicy(policyNumber: string, zip: string) {\r\n this.setState({\r\n secondaryGreenLoading: true,\r\n });\r\n this.state.policyNumber.validate();\r\n this.state.policyZip.validate();\r\n\r\n const errorFound = !this.state.policyNumber.valid || !this.state.policyZip.valid;\r\n const visibleError = this.state.policyNumber.error || this.state.policyZip.error || '';\r\n\r\n this.setState({\r\n errorMessage: visibleError,\r\n secondaryGreenLoading: !errorFound,\r\n errorFound,\r\n });\r\n\r\n if (errorFound) {\r\n return;\r\n }\r\n\r\n let invoice: Models.PolicyPaymentInvoice;\r\n\r\n try {\r\n invoice = await HOApi.getPolicyPaymentInvoice(policyNumber, zip);\r\n } catch (err) {\r\n let message = err.responseJSON.Message || err.responseJSON.ErrorMessage;\r\n if (err.responseJSON.ErrorCode === 402) {\r\n message =\r\n 'Sorry, the policy you looked up has an issue with its billing information and cannot be updated online. Please contact customersupport@swyfft.com to make changes to your payment method.';\r\n }\r\n if (err.responseJSON.ErrorCode === 405) {\r\n message =\r\n 'Sorry, we cannot load this policy for you at this time. Please contact customersupport@swyfft.com for assistance.';\r\n }\r\n if (err.responseJSON.ErrorCode === 411) {\r\n message =\r\n \"Sorry, this policy # and zip don't match our records. Please update the information and try again or contact Swyfft customer support at customersupport@swyfft.com.\";\r\n }\r\n this.setState({\r\n errorMessage: message,\r\n secondaryGreenLoading: false,\r\n errorFound: true,\r\n policyZip: this.state.policyZip.set(''),\r\n });\r\n // Disable button until new valid info is entered.\r\n this.state.policyZip.validate();\r\n this.forceUpdate();\r\n return;\r\n }\r\n\r\n const paymentFrequency = invoice.paymentProfile.PremiumType.toLowerCase() as PaymentFrequency;\r\n\r\n this.setState({\r\n errorFound: false,\r\n errorMessage: '',\r\n secondaryGreenLoading: false,\r\n pageStep: 'verify',\r\n isEscrow: paymentFrequency.startsWith('escrow'),\r\n\r\n payType: invoice.paymentProfile.PaymentType === PaymentTypes.ECheck ? 'echeck' : 'card',\r\n\r\n cardFirstName: this.state.cardFirstName.set(invoice.paymentProfile.FirstName || ''),\r\n cardLastName: this.state.cardLastName.set(invoice.paymentProfile.LastName || ''),\r\n creditCard: this.state.creditCard.set(invoice.paymentProfile.CreditCardNumber || ''),\r\n creditCardExpiration: this.state.creditCardExpiration.set(null),\r\n cvv: this.state.cvv.set(''),\r\n\r\n accountType: invoice.paymentProfile.ECheckAccountType === 'checking' ? 'checking' : 'savings',\r\n accountOwner: this.state.accountOwner.set(invoice.paymentProfile.ECheckAccountOwner || ''),\r\n accountNumber: this.state.accountNumber.set(invoice.paymentProfile.ECheckAccountNumber || ''),\r\n routingNumber: this.state.routingNumber.set(invoice.paymentProfile.ECheckRoutingNumber || ''),\r\n bankName: '',\r\n dueDate: dayjs(invoice.dueDate),\r\n paymentFrequency: paymentFrequency,\r\n amountDueNonCredit: invoice.amountDueNonCredit,\r\n amountDueCredit: invoice.amountDueCredit,\r\n amountDueOrig:\r\n invoice.paymentProfile.PaymentType === PaymentTypes.CreditCard\r\n ? invoice.amountDueCredit\r\n : invoice.amountDueNonCredit,\r\n quoteId: invoice.quoteId,\r\n invoiceNumber: invoice.invoiceNumber ?? 0,\r\n quoteStatus: invoice.quoteStatus,\r\n });\r\n }\r\n}\r\n\r\nfunction init() {\r\n try {\r\n Main.init();\r\n Common.renderComponent(<MakeAPaymentPage />);\r\n } catch (err) {\r\n Common.handleGeneralError(err);\r\n }\r\n}\r\n\r\ninit();\r\n"],"names":["ConditionalSection","props","jsx","React.Fragment","ErrorLine","email","split","jsxs","StepLink","Svg","BackLink","PolicyDataContainer","PolicyData","Tooltip","TooltipPlacement","TooltipSize","SwitchButton","MakeAPaymentPage","React.Component","__publicField","currYear","y","query","Common.getQueryObject","Value","Rules.required","policyNumber","Rules.zip","dayjs","Rules.creditCard","Rules.regex","routingNumber","Row","Col","e","TextFormGroup","SecondaryGreenButton","hideString","Constants.pages","formatCurrencyUS","CreditCardNumberFormGroup","CreditCardExpirationDateFormGroup","date","CreditCardCvvFormGroup","RadioFormGroup","SecondaryBlackButton","Button","Portal","Modal","ModalSize","PaymentConfirmation","AdminApi.getBankName","bankName","response","AdminApi.payFromExistingProfile","problemDetails","ex","Common.handleGeneralError","amount","paymentInfo","AdminApi.payOnce","AdminApi.updatePaymentMethod","payment","once","authScreen","_a","_b","canvasOptions","html2canvas","errorFound","key","value","zip","visibleError","invoice","HOApi.getPolicyPaymentInvoice","err","message","paymentFrequency","PaymentTypes","init","Main.init","Common.renderComponent"],"mappings":"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"}