@internetarchive/donation-monthly-portal 7.6.0 → 7.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/form-sections/parts/braintree-manager.d.ts +2 -1
- package/dist/src/form-sections/parts/braintree-manager.js +55 -9
- package/dist/src/form-sections/parts/braintree-manager.js.map +1 -1
- package/dist/src/form-sections/payment-method.d.ts +1 -0
- package/dist/src/form-sections/payment-method.js +83 -51
- package/dist/src/form-sections/payment-method.js.map +1 -1
- package/dist/src/models/payment-method-request.d.ts +2 -0
- package/dist/src/models/payment-method-request.js.map +1 -1
- package/dist/src/models/plan.d.ts +1 -0
- package/dist/src/models/plan.js +55 -25
- package/dist/src/models/plan.js.map +1 -1
- package/dist/src/plans.js +8 -5
- package/dist/src/plans.js.map +1 -1
- package/dist/test/cancel-plan-flow.test.d.ts +1 -0
- package/dist/test/cancel-plan-flow.test.js +126 -0
- package/dist/test/cancel-plan-flow.test.js.map +1 -0
- package/dist/test/edit-plan-flow-error-callbacks.test.d.ts +1 -0
- package/dist/test/edit-plan-flow-error-callbacks.test.js +122 -0
- package/dist/test/edit-plan-flow-error-callbacks.test.js.map +1 -0
- package/dist/test/edit-plan-flow-payment-method.test.d.ts +1 -0
- package/dist/test/edit-plan-flow-payment-method.test.js +265 -0
- package/dist/test/edit-plan-flow-payment-method.test.js.map +1 -0
- package/dist/test/edit-plan-flow.test.d.ts +1 -0
- package/dist/test/edit-plan-flow.test.js +215 -0
- package/dist/test/edit-plan-flow.test.js.map +1 -0
- package/dist/test/helpers/edit-plan-helpers.d.ts +5 -0
- package/dist/test/helpers/edit-plan-helpers.js +45 -0
- package/dist/test/helpers/edit-plan-helpers.js.map +1 -0
- package/dist/test/models/plan.test.js +165 -12
- package/dist/test/models/plan.test.js.map +1 -1
- package/dist/test/state-persistence-across-views.test.d.ts +1 -0
- package/dist/test/state-persistence-across-views.test.js +67 -0
- package/dist/test/state-persistence-across-views.test.js.map +1 -0
- package/package.json +1 -1
- package/src/form-sections/parts/braintree-manager.ts +72 -10
- package/src/form-sections/payment-method.ts +98 -60
- package/src/models/payment-method-request.ts +2 -0
- package/src/models/plan.ts +56 -29
- package/src/plans.ts +9 -5
|
@@ -35,7 +35,8 @@ export declare class MGCBraintreeManager extends LitElement {
|
|
|
35
35
|
render(): import("lit").TemplateResult<1>;
|
|
36
36
|
lightDomCSS(): CSSResult;
|
|
37
37
|
get creditCardTemplate(): import("lit").TemplateResult<1>;
|
|
38
|
+
renderPayPalVaultButton(): Promise<void>;
|
|
39
|
+
private handlePayPalAuthorized;
|
|
38
40
|
private setupBraintreeManager;
|
|
39
41
|
get contactForm(): HTMLFormElement | null;
|
|
40
|
-
setupPaymentHandlers(): Promise<void>;
|
|
41
42
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
+
/* eslint-disable no-console */
|
|
2
3
|
import { LitElement, html, css } from 'lit';
|
|
3
4
|
import { customElement, property, state } from 'lit/decorators.js';
|
|
4
5
|
import { HostedFieldContainer, HostedFieldName, } from '@internetarchive/donation-form/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container';
|
|
5
6
|
import { BraintreeManager, } from '@internetarchive/donation-form';
|
|
7
|
+
import { DonationPaymentInfo, DonationType, } from '@internetarchive/donation-form-data-models';
|
|
6
8
|
import creditCardImg from '@internetarchive/icon-credit-card/index.js';
|
|
7
9
|
import calendarImg from '@internetarchive/icon-calendar/index.js';
|
|
8
10
|
import lockImg from '@internetarchive/icon-lock/index.js';
|
|
@@ -178,6 +180,59 @@ let MGCBraintreeManager = class MGCBraintreeManager extends LitElement {
|
|
|
178
180
|
</div>
|
|
179
181
|
`;
|
|
180
182
|
}
|
|
183
|
+
async renderPayPalVaultButton() {
|
|
184
|
+
var _a, _b, _c;
|
|
185
|
+
console.log('[PayPal] renderPayPalVaultButton called');
|
|
186
|
+
const handler = await ((_a = this.braintreeManager) === null || _a === void 0 ? void 0 : _a.paymentProviders.paypalHandler.get());
|
|
187
|
+
console.log('[PayPal] handler:', handler);
|
|
188
|
+
if (!handler)
|
|
189
|
+
return;
|
|
190
|
+
const container = document.querySelector('#ia-mgc-paypal-button');
|
|
191
|
+
console.log('[PayPal] container element:', container);
|
|
192
|
+
const donationInfo = new DonationPaymentInfo({
|
|
193
|
+
donationType: DonationType.Monthly,
|
|
194
|
+
amount: (_c = (_b = this.plan) === null || _b === void 0 ? void 0 : _b.amount) !== null && _c !== void 0 ? _c : 0,
|
|
195
|
+
coverFees: false,
|
|
196
|
+
});
|
|
197
|
+
const dataSource = await handler.renderPayPalButton({
|
|
198
|
+
selector: '#ia-mgc-paypal-button',
|
|
199
|
+
style: { color: 'blue', shape: 'rect', size: 'medium' },
|
|
200
|
+
donationInfo,
|
|
201
|
+
});
|
|
202
|
+
console.log('[PayPal] dataSource:', dataSource);
|
|
203
|
+
if (!dataSource)
|
|
204
|
+
return;
|
|
205
|
+
dataSource.delegate = {
|
|
206
|
+
payPalPaymentStarted: async () => {
|
|
207
|
+
console.log('PayPal payment started');
|
|
208
|
+
},
|
|
209
|
+
payPalPaymentAuthorized: async (_ds, payload) => {
|
|
210
|
+
this.handlePayPalAuthorized(payload);
|
|
211
|
+
},
|
|
212
|
+
payPalPaymentConfirmed: async (_ds, payload) => {
|
|
213
|
+
this.handlePayPalAuthorized(payload);
|
|
214
|
+
},
|
|
215
|
+
payPalPaymentCancelled: async () => {
|
|
216
|
+
console.log('PayPal payment cancelled');
|
|
217
|
+
},
|
|
218
|
+
payPalPaymentError: async (_ds, error) => {
|
|
219
|
+
console.error('PayPal vault error:', error);
|
|
220
|
+
this.dispatchEvent(new CustomEvent('PayPalVaultError', { detail: { error } }));
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
handlePayPalAuthorized(payload) {
|
|
225
|
+
this.dispatchEvent(new CustomEvent('PayPalVaultAuthorized', {
|
|
226
|
+
detail: {
|
|
227
|
+
paymentMethodInfo: {
|
|
228
|
+
description: `PayPal - ${payload.details.email}`,
|
|
229
|
+
nonce: payload.nonce,
|
|
230
|
+
type: payload.type,
|
|
231
|
+
details: { email: payload.details.email },
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
}));
|
|
235
|
+
}
|
|
181
236
|
async setupBraintreeManager() {
|
|
182
237
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
183
238
|
this.braintreeManager = new BraintreeManager({
|
|
@@ -231,15 +286,6 @@ let MGCBraintreeManager = class MGCBraintreeManager extends LitElement {
|
|
|
231
286
|
get contactForm() {
|
|
232
287
|
return this.querySelector('form[name="contact-form"]');
|
|
233
288
|
}
|
|
234
|
-
async setupPaymentHandlers() {
|
|
235
|
-
var _a;
|
|
236
|
-
// const creditCardFlowHandler = this.paymentConfig?.paymentFlowHandlers?.creditCardHandler;
|
|
237
|
-
const creditCardHandler = await ((_a = this.braintreeManager) === null || _a === void 0 ? void 0 : _a.paymentProviders.creditCardHandler.get());
|
|
238
|
-
creditCardHandler === null || creditCardHandler === void 0 ? void 0 : creditCardHandler.hideErrorMessage();
|
|
239
|
-
// const valid = this.contactForm?.reportValidity();
|
|
240
|
-
// const hostedFieldsResponse = await creditCardFlowHandler?.tokenizeFields();
|
|
241
|
-
// console.log("CC hostedFieldsResponse", hostedFieldsResponse);
|
|
242
|
-
}
|
|
243
289
|
};
|
|
244
290
|
__decorate([
|
|
245
291
|
property({ type: Object })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"braintree-manager.js","sourceRoot":"","sources":["../../../../src/form-sections/parts/braintree-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, css, CSSResult, PropertyValueMap } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport {\n HostedFieldContainer,\n HostedFieldName,\n} from '@internetarchive/donation-form/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container';\nimport {\n BraintreeManager,\n BraintreeManagerInterface,\n HostingEnvironment,\n} from '@internetarchive/donation-form';\nimport type { BraintreeEndpointManagerInterface } from '@internetarchive/donation-form/dist/src/braintree-manager/braintree-interfaces.js';\nimport type { PaymentClientsInterface } from '@internetarchive/donation-form/dist/src/braintree-manager/payment-clients.js';\n\nimport creditCardImg from '@internetarchive/icon-credit-card/index.js';\nimport calendarImg from '@internetarchive/icon-calendar/index.js';\nimport lockImg from '@internetarchive/icon-lock/index.js';\n\nimport type { MonthlyPlan } from '../../models/plan';\n\nexport type PaymentConfig = {\n braintreeAuthToken?: string;\n endpointManager?: BraintreeEndpointManagerInterface;\n paymentClients?: PaymentClientsInterface;\n environment?: HostingEnvironment;\n venmoProfileId?: string;\n googlePayMerchantId?: string;\n referrer: string;\n origin: string;\n};\n\n@customElement('ia-mgc-braintree-manager')\nexport class MGCBraintreeManager extends LitElement {\n @property({ type: Object }) plan?: MonthlyPlan;\n\n @property({ type: Boolean, reflect: true }) displayCreditCard: boolean =\n false;\n\n @property({ type: String }) patronEmail: string = '';\n\n @property({ type: Object }) paymentConfig?: PaymentConfig;\n\n @property({ type: Object }) braintreeManager?: BraintreeManagerInterface;\n\n @state() private elementConnected: boolean = false;\n\n get braintreeInputs(): {\n errorMessage: HTMLDivElement | null;\n number: HTMLDivElement | null;\n cvv: HTMLDivElement | null;\n expirationDate: HTMLDivElement | null;\n } {\n return {\n errorMessage: this.querySelector(\n '#braintree-error-message',\n ) as HTMLDivElement | null,\n number: this.querySelector(\n '#braintree-creditcard',\n ) as HTMLDivElement | null,\n cvv: this.querySelector('#braintree-cvv') as HTMLDivElement | null,\n expirationDate: this.querySelector(\n '#braintree-expiration',\n ) as HTMLDivElement | null,\n };\n }\n\n createRenderRoot() {\n return this;\n }\n\n disconnectedCallback(): void {\n this.elementConnected = false;\n }\n\n connectedCallback(): void {\n // eslint-disable-next-line wc/guard-super-call\n super.connectedCallback();\n\n console.log('connectedCallback', { paymentConfig: this.paymentConfig });\n\n this.elementConnected = true;\n }\n\n protected updated(\n changed: PropertyValueMap<any> | Map<PropertyKey, unknown>,\n ): void {\n const elementHasConnectedToDOM =\n changed.has('elementConnected') && this.elementConnected;\n if (elementHasConnectedToDOM) {\n if (this.paymentConfig) {\n const {\n braintreeAuthToken,\n endpointManager,\n paymentClients,\n environment,\n } = this.paymentConfig || {};\n\n const needsBraintreeManager =\n !this.braintreeManager &&\n braintreeAuthToken &&\n endpointManager &&\n paymentClients &&\n environment;\n if (needsBraintreeManager) {\n this.setupBraintreeManager();\n }\n }\n }\n\n if (\n this.braintreeManager &&\n changed.has('displayCreditCard') &&\n this.displayCreditCard\n ) {\n this.setupCreditCardHandler();\n }\n }\n\n async validateCreditCardFields() {\n const handler =\n await this.braintreeManager?.paymentProviders.creditCardHandler.get();\n let tokenized = false;\n let hostedFieldsResponse = null;\n try {\n hostedFieldsResponse = await handler?.tokenizeHostedFields();\n tokenized = true;\n } catch (e) {\n const error = e as unknown as any;\n\n handler?.showErrorMessage();\n\n // todo: move these codes to an enum/type\n switch (error.code) {\n case 'HOSTED_FIELDS_FIELDS_EMPTY':\n // occurs when none of the fields are filled in\n handler?.markFieldErrors([\n HostedFieldName.Number,\n HostedFieldName.CVV,\n HostedFieldName.ExpirationDate,\n ]);\n break;\n case 'HOSTED_FIELDS_FIELDS_INVALID':\n // occurs when certain fields do not pass client side validationto\n // Object.keys(.details.invalidFields).forEach(key => {\n // handler?.markFieldErrors([key as HostedFieldName]);\n // });\n break;\n case 'HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE':\n // occurs when:\n // * the client token used for client authorization was generated\n // with a customer ID and the fail on duplicate payment method\n // option is set to true\n // * the card being tokenized has previously been vaulted (with any customer)\n break;\n case 'HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED':\n // occurs when:\n // * the client token used for client authorization was generated\n // with a customer ID and the verify card option is set to true\n // and you have credit card verification turned on in the Braintree\n // control panel\n // * the cvv does not pass verfication\n handler?.markFieldErrors([HostedFieldName.CVV]);\n break;\n case 'HOSTED_FIELDS_FAILED_TOKENIZATION':\n // occurs for any other tokenization error on the server\n break;\n case 'HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR':\n // occurs when the Braintree gateway cannot be contacted\n break;\n default:\n // something else happened\n break;\n }\n }\n\n if (!tokenized) {\n return false;\n }\n\n return hostedFieldsResponse;\n }\n\n async setupCreditCardHandler() {\n // braintree turn on hosted fields\n const handler =\n await this.braintreeManager?.paymentProviders.creditCardHandler.get();\n try {\n await handler?.tokenizeHostedFields();\n } catch (e) {\n // todo: show error message only about fields not loading\n }\n\n handler?.removeFieldErrors([\n HostedFieldName.Number,\n HostedFieldName.CVV,\n HostedFieldName.ExpirationDate,\n ]);\n }\n\n render() {\n return html` <div>${this.creditCardTemplate}</div> `;\n }\n\n lightDomCSS(): CSSResult {\n return css`\n contact-form form badged-input {\n width: 100%;\n }\n\n #ia-mgc-cc-area .braintree-input {\n width: 100%;\n display: block;\n height: stretch;\n height: -webkit-fill-available;\n }\n `;\n }\n\n get creditCardTemplate() {\n return html`\n <div id=\"ia-mgc-cc-area\" style=\"border: 1px sold red;\">\n <style>\n ${this.lightDomCSS()}\n </style>\n <div id=\"braintree-error-message\"></div>\n <div class=\"braintree-row\">\n <badged-input\n .icon=${creditCardImg}\n ?required=${true}\n class=\"creditcard\"\n >\n <div class=\"braintree-input\" id=\"braintree-creditcard\"></div>\n </badged-input>\n </div>\n <div class=\"braintree-row\">\n <badged-input\n .icon=${calendarImg}\n ?required=${true}\n class=\"expiration\"\n >\n <div class=\"braintree-input\" id=\"braintree-expiration\"></div>\n </badged-input>\n <badged-input .icon=${lockImg} ?required=${true} class=\"cvv\">\n <div class=\"braintree-input\" id=\"braintree-cvv\"></div>\n </badged-input>\n </div>\n </div>\n `;\n }\n\n private async setupBraintreeManager(): Promise<void> {\n this.braintreeManager = new BraintreeManager({\n paymentClients:\n this.paymentConfig?.paymentClients ?? ({} as PaymentClientsInterface),\n endpointManager: this.paymentConfig\n ?.endpointManager as BraintreeEndpointManagerInterface,\n authorizationToken: this.paymentConfig?.braintreeAuthToken ?? '',\n venmoProfileId: this.paymentConfig?.venmoProfileId,\n googlePayMerchantId: this.paymentConfig?.googlePayMerchantId,\n hostedFieldConfig: {\n hostedFieldStyle: {}, // Provide your custom style object here\n hostedFieldFieldOptions: {\n number: {\n selector: '#braintree-creditcard',\n placeholder: 'Card number',\n },\n cvv: {\n selector: '#braintree-cvv',\n placeholder: 'CVC',\n },\n expirationDate: {\n selector: '#braintree-expiration',\n placeholder: 'MM / YY',\n },\n }, // Provide your custom field options here\n hostedFieldContainer: new HostedFieldContainer({\n number: this.braintreeInputs.number as HTMLDivElement,\n cvv: this.braintreeInputs.cvv as HTMLDivElement,\n expirationDate: this.braintreeInputs.expirationDate as HTMLDivElement,\n errorContainer: this.braintreeInputs.errorMessage as HTMLDivElement,\n }),\n },\n hostingEnvironment: this.paymentConfig?.environment as HostingEnvironment,\n referrer: window.location.href,\n loggedInUser: this.patronEmail,\n origin: window.location.origin,\n });\n\n this.braintreeManager.on(\n 'paymentProvidersHostedFieldsRetry',\n (retryNumber: number) => {\n const event = new CustomEvent('paymentProvidersHostedFieldsRetry', {\n detail: { retryNumber },\n });\n this.dispatchEvent(event);\n },\n );\n\n this.braintreeManager.on(\n 'paymentProvidersHostedFieldsFailed',\n (error: unknown) => {\n const event = new CustomEvent('paymentProvidersHostedFieldsFailed', {\n detail: { error },\n });\n this.dispatchEvent(event);\n },\n );\n\n this.dispatchEvent(new Event('BraintreeManagerSetupComplete'));\n }\n\n get contactForm(): HTMLFormElement | null {\n return this.querySelector('form[name=\"contact-form\"]');\n }\n\n async setupPaymentHandlers() {\n // const creditCardFlowHandler = this.paymentConfig?.paymentFlowHandlers?.creditCardHandler;\n const creditCardHandler =\n await this.braintreeManager?.paymentProviders.creditCardHandler.get();\n creditCardHandler?.hideErrorMessage();\n // const valid = this.contactForm?.reportValidity();\n // const hostedFieldsResponse = await creditCardFlowHandler?.tokenizeFields();\n // console.log(\"CC hostedFieldsResponse\", hostedFieldsResponse);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"braintree-manager.js","sourceRoot":"","sources":["../../../../src/form-sections/parts/braintree-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport { LitElement, html, css, CSSResult, PropertyValueMap } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport {\n HostedFieldContainer,\n HostedFieldName,\n} from '@internetarchive/donation-form/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container';\nimport {\n BraintreeManager,\n BraintreeManagerInterface,\n HostingEnvironment,\n} from '@internetarchive/donation-form';\nimport {\n DonationPaymentInfo,\n DonationType,\n} from '@internetarchive/donation-form-data-models';\nimport type { BraintreeEndpointManagerInterface } from '@internetarchive/donation-form/dist/src/braintree-manager/braintree-interfaces.js';\nimport type { PaymentClientsInterface } from '@internetarchive/donation-form/dist/src/braintree-manager/payment-clients.js';\n\nimport creditCardImg from '@internetarchive/icon-credit-card/index.js';\nimport calendarImg from '@internetarchive/icon-calendar/index.js';\nimport lockImg from '@internetarchive/icon-lock/index.js';\n\nimport type { MonthlyPlan } from '../../models/plan';\n\nexport type PaymentConfig = {\n braintreeAuthToken?: string;\n endpointManager?: BraintreeEndpointManagerInterface;\n paymentClients?: PaymentClientsInterface;\n environment?: HostingEnvironment;\n venmoProfileId?: string;\n googlePayMerchantId?: string;\n referrer: string;\n origin: string;\n};\n\n@customElement('ia-mgc-braintree-manager')\nexport class MGCBraintreeManager extends LitElement {\n @property({ type: Object }) plan?: MonthlyPlan;\n\n @property({ type: Boolean, reflect: true }) displayCreditCard: boolean =\n false;\n\n @property({ type: String }) patronEmail: string = '';\n\n @property({ type: Object }) paymentConfig?: PaymentConfig;\n\n @property({ type: Object }) braintreeManager?: BraintreeManagerInterface;\n\n @state() private elementConnected: boolean = false;\n\n get braintreeInputs(): {\n errorMessage: HTMLDivElement | null;\n number: HTMLDivElement | null;\n cvv: HTMLDivElement | null;\n expirationDate: HTMLDivElement | null;\n } {\n return {\n errorMessage: this.querySelector(\n '#braintree-error-message',\n ) as HTMLDivElement | null,\n number: this.querySelector(\n '#braintree-creditcard',\n ) as HTMLDivElement | null,\n cvv: this.querySelector('#braintree-cvv') as HTMLDivElement | null,\n expirationDate: this.querySelector(\n '#braintree-expiration',\n ) as HTMLDivElement | null,\n };\n }\n\n createRenderRoot() {\n return this;\n }\n\n disconnectedCallback(): void {\n this.elementConnected = false;\n }\n\n connectedCallback(): void {\n // eslint-disable-next-line wc/guard-super-call\n super.connectedCallback();\n\n console.log('connectedCallback', { paymentConfig: this.paymentConfig });\n\n this.elementConnected = true;\n }\n\n protected updated(\n changed: PropertyValueMap<any> | Map<PropertyKey, unknown>,\n ): void {\n const elementHasConnectedToDOM =\n changed.has('elementConnected') && this.elementConnected;\n if (elementHasConnectedToDOM) {\n if (this.paymentConfig) {\n const {\n braintreeAuthToken,\n endpointManager,\n paymentClients,\n environment,\n } = this.paymentConfig || {};\n\n const needsBraintreeManager =\n !this.braintreeManager &&\n braintreeAuthToken &&\n endpointManager &&\n paymentClients &&\n environment;\n if (needsBraintreeManager) {\n this.setupBraintreeManager();\n }\n }\n }\n\n if (\n this.braintreeManager &&\n changed.has('displayCreditCard') &&\n this.displayCreditCard\n ) {\n this.setupCreditCardHandler();\n }\n }\n\n async validateCreditCardFields() {\n const handler =\n await this.braintreeManager?.paymentProviders.creditCardHandler.get();\n let tokenized = false;\n let hostedFieldsResponse = null;\n try {\n hostedFieldsResponse = await handler?.tokenizeHostedFields();\n tokenized = true;\n } catch (e) {\n const error = e as unknown as any;\n\n handler?.showErrorMessage();\n\n // todo: move these codes to an enum/type\n switch (error.code) {\n case 'HOSTED_FIELDS_FIELDS_EMPTY':\n // occurs when none of the fields are filled in\n handler?.markFieldErrors([\n HostedFieldName.Number,\n HostedFieldName.CVV,\n HostedFieldName.ExpirationDate,\n ]);\n break;\n case 'HOSTED_FIELDS_FIELDS_INVALID':\n // occurs when certain fields do not pass client side validationto\n // Object.keys(.details.invalidFields).forEach(key => {\n // handler?.markFieldErrors([key as HostedFieldName]);\n // });\n break;\n case 'HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE':\n // occurs when:\n // * the client token used for client authorization was generated\n // with a customer ID and the fail on duplicate payment method\n // option is set to true\n // * the card being tokenized has previously been vaulted (with any customer)\n break;\n case 'HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED':\n // occurs when:\n // * the client token used for client authorization was generated\n // with a customer ID and the verify card option is set to true\n // and you have credit card verification turned on in the Braintree\n // control panel\n // * the cvv does not pass verfication\n handler?.markFieldErrors([HostedFieldName.CVV]);\n break;\n case 'HOSTED_FIELDS_FAILED_TOKENIZATION':\n // occurs for any other tokenization error on the server\n break;\n case 'HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR':\n // occurs when the Braintree gateway cannot be contacted\n break;\n default:\n // something else happened\n break;\n }\n }\n\n if (!tokenized) {\n return false;\n }\n\n return hostedFieldsResponse;\n }\n\n async setupCreditCardHandler() {\n // braintree turn on hosted fields\n const handler =\n await this.braintreeManager?.paymentProviders.creditCardHandler.get();\n try {\n await handler?.tokenizeHostedFields();\n } catch (e) {\n // todo: show error message only about fields not loading\n }\n\n handler?.removeFieldErrors([\n HostedFieldName.Number,\n HostedFieldName.CVV,\n HostedFieldName.ExpirationDate,\n ]);\n }\n\n render() {\n return html` <div>${this.creditCardTemplate}</div> `;\n }\n\n lightDomCSS(): CSSResult {\n return css`\n contact-form form badged-input {\n width: 100%;\n }\n\n #ia-mgc-cc-area .braintree-input {\n width: 100%;\n display: block;\n height: stretch;\n height: -webkit-fill-available;\n }\n `;\n }\n\n get creditCardTemplate() {\n return html`\n <div id=\"ia-mgc-cc-area\" style=\"border: 1px sold red;\">\n <style>\n ${this.lightDomCSS()}\n </style>\n <div id=\"braintree-error-message\"></div>\n <div class=\"braintree-row\">\n <badged-input\n .icon=${creditCardImg}\n ?required=${true}\n class=\"creditcard\"\n >\n <div class=\"braintree-input\" id=\"braintree-creditcard\"></div>\n </badged-input>\n </div>\n <div class=\"braintree-row\">\n <badged-input\n .icon=${calendarImg}\n ?required=${true}\n class=\"expiration\"\n >\n <div class=\"braintree-input\" id=\"braintree-expiration\"></div>\n </badged-input>\n <badged-input .icon=${lockImg} ?required=${true} class=\"cvv\">\n <div class=\"braintree-input\" id=\"braintree-cvv\"></div>\n </badged-input>\n </div>\n </div>\n `;\n }\n\n async renderPayPalVaultButton(): Promise<void> {\n console.log('[PayPal] renderPayPalVaultButton called');\n\n const handler =\n await this.braintreeManager?.paymentProviders.paypalHandler.get();\n console.log('[PayPal] handler:', handler);\n if (!handler) return;\n\n const container = document.querySelector('#ia-mgc-paypal-button');\n console.log('[PayPal] container element:', container);\n\n const donationInfo = new DonationPaymentInfo({\n donationType: DonationType.Monthly,\n amount: this.plan?.amount ?? 0,\n coverFees: false,\n });\n\n const dataSource = await handler.renderPayPalButton({\n selector: '#ia-mgc-paypal-button',\n style: { color: 'blue', shape: 'rect', size: 'medium' },\n donationInfo,\n });\n console.log('[PayPal] dataSource:', dataSource);\n\n if (!dataSource) return;\n\n dataSource.delegate = {\n payPalPaymentStarted: async () => {\n console.log('PayPal payment started');\n },\n payPalPaymentAuthorized: async (_ds: any, payload: any) => {\n this.handlePayPalAuthorized(payload);\n },\n payPalPaymentConfirmed: async (_ds: any, payload: any) => {\n this.handlePayPalAuthorized(payload);\n },\n payPalPaymentCancelled: async () => {\n console.log('PayPal payment cancelled');\n },\n payPalPaymentError: async (_ds: any, error: unknown) => {\n console.error('PayPal vault error:', error);\n this.dispatchEvent(\n new CustomEvent('PayPalVaultError', { detail: { error } }),\n );\n },\n };\n }\n\n private handlePayPalAuthorized(payload: {\n nonce: string;\n type: string;\n details: { email: string };\n }): void {\n this.dispatchEvent(\n new CustomEvent('PayPalVaultAuthorized', {\n detail: {\n paymentMethodInfo: {\n description: `PayPal - ${payload.details.email}`,\n nonce: payload.nonce,\n type: payload.type,\n details: { email: payload.details.email },\n },\n },\n }),\n );\n }\n\n private async setupBraintreeManager(): Promise<void> {\n this.braintreeManager = new BraintreeManager({\n paymentClients:\n this.paymentConfig?.paymentClients ?? ({} as PaymentClientsInterface),\n endpointManager: this.paymentConfig\n ?.endpointManager as BraintreeEndpointManagerInterface,\n authorizationToken: this.paymentConfig?.braintreeAuthToken ?? '',\n venmoProfileId: this.paymentConfig?.venmoProfileId,\n googlePayMerchantId: this.paymentConfig?.googlePayMerchantId,\n hostedFieldConfig: {\n hostedFieldStyle: {}, // Provide your custom style object here\n hostedFieldFieldOptions: {\n number: {\n selector: '#braintree-creditcard',\n placeholder: 'Card number',\n },\n cvv: {\n selector: '#braintree-cvv',\n placeholder: 'CVC',\n },\n expirationDate: {\n selector: '#braintree-expiration',\n placeholder: 'MM / YY',\n },\n }, // Provide your custom field options here\n hostedFieldContainer: new HostedFieldContainer({\n number: this.braintreeInputs.number as HTMLDivElement,\n cvv: this.braintreeInputs.cvv as HTMLDivElement,\n expirationDate: this.braintreeInputs.expirationDate as HTMLDivElement,\n errorContainer: this.braintreeInputs.errorMessage as HTMLDivElement,\n }),\n },\n hostingEnvironment: this.paymentConfig?.environment as HostingEnvironment,\n referrer: window.location.href,\n loggedInUser: this.patronEmail,\n origin: window.location.origin,\n });\n\n this.braintreeManager.on(\n 'paymentProvidersHostedFieldsRetry',\n (retryNumber: number) => {\n const event = new CustomEvent('paymentProvidersHostedFieldsRetry', {\n detail: { retryNumber },\n });\n this.dispatchEvent(event);\n },\n );\n\n this.braintreeManager.on(\n 'paymentProvidersHostedFieldsFailed',\n (error: unknown) => {\n const event = new CustomEvent('paymentProvidersHostedFieldsFailed', {\n detail: { error },\n });\n this.dispatchEvent(event);\n },\n );\n\n this.dispatchEvent(new Event('BraintreeManagerSetupComplete'));\n }\n\n get contactForm(): HTMLFormElement | null {\n return this.querySelector('form[name=\"contact-form\"]');\n }\n}\n"]}
|
|
@@ -43,5 +43,6 @@ export declare class MGCEditPaymentMethod extends LitElement {
|
|
|
43
43
|
get creditCardElement(): ContactForm | null;
|
|
44
44
|
get braintreeManagerElement(): MGCBraintreeManager | null;
|
|
45
45
|
render(): TemplateResult<1>;
|
|
46
|
+
private handlePayPalVaultAuthorized;
|
|
46
47
|
get styles(): import("lit").CSSResult;
|
|
47
48
|
}
|
|
@@ -76,9 +76,6 @@ let MGCEditPaymentMethod = class MGCEditPaymentMethod extends LitElement {
|
|
|
76
76
|
const headline = this.selectedPaymentProvider === PaymentProvider.Venmo
|
|
77
77
|
? 'Help us stay in touch'
|
|
78
78
|
: 'Enter payment information';
|
|
79
|
-
const displayContactForm = this.selectedPaymentProvider === PaymentProvider.CreditCard ||
|
|
80
|
-
this.selectedPaymentProvider === PaymentProvider.Venmo;
|
|
81
|
-
console.log('contactFormSectioncontactFormSection', { displayContactForm });
|
|
82
79
|
return html `
|
|
83
80
|
<donation-form-section
|
|
84
81
|
badgemode="hidebadge"
|
|
@@ -108,13 +105,12 @@ let MGCEditPaymentMethod = class MGCEditPaymentMethod extends LitElement {
|
|
|
108
105
|
return this.querySelector('ia-mgc-braintree-manager');
|
|
109
106
|
}
|
|
110
107
|
render() {
|
|
111
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
108
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
112
109
|
const displayContactForm = this.selectedPaymentProvider === PaymentProvider.CreditCard ||
|
|
113
110
|
this.selectedPaymentProvider === PaymentProvider.Venmo;
|
|
114
111
|
const displayCCFields = this.selectedPaymentProvider === PaymentProvider.CreditCard;
|
|
115
|
-
|
|
116
|
-
selectedPaymentProvider
|
|
117
|
-
});
|
|
112
|
+
const displayBraintreeManager = this.selectedPaymentProvider === PaymentProvider.CreditCard ||
|
|
113
|
+
this.selectedPaymentProvider === PaymentProvider.PayPal;
|
|
118
114
|
return html `
|
|
119
115
|
<style>
|
|
120
116
|
${this.styles}
|
|
@@ -130,7 +126,10 @@ let MGCEditPaymentMethod = class MGCEditPaymentMethod extends LitElement {
|
|
|
130
126
|
${((_b = (_a = this.plan) === null || _a === void 0 ? void 0 : _a.payment) === null || _b === void 0 ? void 0 : _b.paymentMethodType) === 'creditCard'
|
|
131
127
|
? 'Credit Card'
|
|
132
128
|
: (_d = (_c = this.plan) === null || _c === void 0 ? void 0 : _c.payment) === null || _d === void 0 ? void 0 : _d.paymentMethodType}:
|
|
133
|
-
${(_f = (_e = this.plan) === null || _e === void 0 ? void 0 : _e.payment) === null || _f === void 0 ? void 0 : _f.
|
|
129
|
+
${((_f = (_e = this.plan) === null || _e === void 0 ? void 0 : _e.payment) === null || _f === void 0 ? void 0 : _f.paymentMethodType) ===
|
|
130
|
+
PaymentProvider.PayPal
|
|
131
|
+
? (_h = (_g = this.plan) === null || _g === void 0 ? void 0 : _g.payment) === null || _h === void 0 ? void 0 : _h.paypalEmail
|
|
132
|
+
: `${(_k = (_j = this.plan) === null || _j === void 0 ? void 0 : _j.payment) === null || _k === void 0 ? void 0 : _k.cardType} - ${(_m = (_l = this.plan) === null || _l === void 0 ? void 0 : _l.payment) === null || _m === void 0 ? void 0 : _m.last4}`}
|
|
134
133
|
</span></ia-mgc-form-section-info
|
|
135
134
|
>`
|
|
136
135
|
: nothing}
|
|
@@ -138,9 +137,11 @@ let MGCEditPaymentMethod = class MGCEditPaymentMethod extends LitElement {
|
|
|
138
137
|
? html `
|
|
139
138
|
<form id="edit-plan-payment-method" @submit=${this.submitPaymentMethodChange}>
|
|
140
139
|
<payment-selector
|
|
141
|
-
.paymentProviders=${(
|
|
142
|
-
@firstUpdated=${() => {
|
|
140
|
+
.paymentProviders=${(_o = this.braintreeManager) === null || _o === void 0 ? void 0 : _o.paymentProviders}
|
|
141
|
+
@firstUpdated=${(e) => {
|
|
142
|
+
var _a;
|
|
143
143
|
this.paymentSelectorFirstUpdated = true;
|
|
144
|
+
(_a = e.target) === null || _a === void 0 ? void 0 : _a.showPaypalButton();
|
|
144
145
|
}}
|
|
145
146
|
@creditCardSelected=${() => {
|
|
146
147
|
this.selectedPaymentProvider = PaymentProvider.CreditCard;
|
|
@@ -154,29 +155,38 @@ let MGCEditPaymentMethod = class MGCEditPaymentMethod extends LitElement {
|
|
|
154
155
|
@googlePaySelected=${() => {
|
|
155
156
|
this.selectedPaymentProvider = PaymentProvider.GooglePay;
|
|
156
157
|
}}
|
|
157
|
-
@
|
|
158
|
-
this.selectedPaymentProvider =
|
|
158
|
+
@paypalSelected=${() => {
|
|
159
|
+
this.selectedPaymentProvider = PaymentProvider.PayPal;
|
|
159
160
|
}}
|
|
160
161
|
@resetPaymentMethod=${async () => {
|
|
161
162
|
this.selectedPaymentProvider = '';
|
|
162
163
|
}}
|
|
163
164
|
tabindex="0"
|
|
164
165
|
>
|
|
165
|
-
<
|
|
166
|
+
<div slot="paypal-button">
|
|
167
|
+
<div id="ia-mgc-paypal-button"></div>
|
|
168
|
+
</div>
|
|
166
169
|
</payment-selector>
|
|
167
170
|
|
|
168
171
|
<div class="${displayContactForm ? '' : 'hidden'}">
|
|
169
172
|
<contact-form .donorEmail=${this.patronEmail}></contact-form>
|
|
170
173
|
</div>
|
|
171
|
-
|
|
172
174
|
|
|
173
175
|
<ia-mgc-braintree-manager
|
|
174
|
-
class="${
|
|
175
|
-
.displayCreditCard=${
|
|
176
|
+
class="${displayBraintreeManager ? '' : 'hidden'}"
|
|
177
|
+
.displayCreditCard=${displayCCFields}
|
|
176
178
|
.plan=${this.plan}
|
|
177
179
|
.paymentConfig=${this.paymentConfig}
|
|
178
180
|
@BraintreeManagerSetupComplete=${() => {
|
|
179
|
-
|
|
181
|
+
var _a;
|
|
182
|
+
(_a = this.braintreeManagerElement) === null || _a === void 0 ? void 0 : _a.renderPayPalVaultButton();
|
|
183
|
+
}}
|
|
184
|
+
@PayPalVaultAuthorized=${(e) => {
|
|
185
|
+
this.handlePayPalVaultAuthorized(e);
|
|
186
|
+
}}
|
|
187
|
+
@PayPalVaultError=${() => {
|
|
188
|
+
this.updateStatus = 'fail';
|
|
189
|
+
this.updateMessage = 'PayPal error, please try again';
|
|
180
190
|
}}
|
|
181
191
|
></ia-mgc-braintree-manager>
|
|
182
192
|
|
|
@@ -190,40 +200,39 @@ let MGCEditPaymentMethod = class MGCEditPaymentMethod extends LitElement {
|
|
|
190
200
|
}}
|
|
191
201
|
>Cancel</ia-mgc-button
|
|
192
202
|
>
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
>
|
|
203
|
+
${this.selectedPaymentProvider !== PaymentProvider.PayPal
|
|
204
|
+
? html `<ia-mgc-button
|
|
205
|
+
id="edit-plan-payment-method-submit"
|
|
206
|
+
class="primary"
|
|
207
|
+
type="submit"
|
|
208
|
+
.isDisabled=${!this.selectedPaymentProvider}
|
|
209
|
+
.clickHandler=${async (event, iaButton) => {
|
|
210
|
+
var _a, _b, _c;
|
|
211
|
+
const button = iaButton;
|
|
212
|
+
button.isDisabled = true;
|
|
213
|
+
const isContactFormValid = (_a = this.creditCardElement) === null || _a === void 0 ? void 0 : _a.reportValidity();
|
|
214
|
+
if (!isContactFormValid) {
|
|
215
|
+
button.isDisabled = false;
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const paymentMethodInfo = (await ((_b = this.braintreeManagerElement) === null || _b === void 0 ? void 0 : _b.validateCreditCardFields()));
|
|
219
|
+
if (!paymentMethodInfo) {
|
|
220
|
+
button.isDisabled = false;
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
const newPaymentMethodRequest = new PaymentMethodRequest({
|
|
224
|
+
paymentMethodInfo,
|
|
225
|
+
donorContactInfo: (_c = this.contactFormElement) === null || _c === void 0 ? void 0 : _c.donorContactInfo,
|
|
226
|
+
paymentProvider: this
|
|
227
|
+
.selectedPaymentProvider,
|
|
228
|
+
});
|
|
229
|
+
this.dispatchEvent(new CustomEvent('UpdatePaymentMethod', {
|
|
230
|
+
detail: { newPaymentMethodRequest },
|
|
231
|
+
}));
|
|
232
|
+
}}
|
|
233
|
+
>Update payment method</ia-mgc-button
|
|
234
|
+
>`
|
|
235
|
+
: nothing}
|
|
227
236
|
<ia-mgc-update-status .status=${this.updateStatus}
|
|
228
237
|
>${this.updateMessage}</ia-mgc-update-status
|
|
229
238
|
></ia-mgc-form-section-info>
|
|
@@ -236,6 +245,18 @@ let MGCEditPaymentMethod = class MGCEditPaymentMethod extends LitElement {
|
|
|
236
245
|
</donation-form-section>
|
|
237
246
|
`;
|
|
238
247
|
}
|
|
248
|
+
handlePayPalVaultAuthorized(e) {
|
|
249
|
+
var _a, _b;
|
|
250
|
+
const { paymentMethodInfo } = e.detail;
|
|
251
|
+
const newPaymentMethodRequest = new PaymentMethodRequest({
|
|
252
|
+
paymentMethodInfo,
|
|
253
|
+
donorContactInfo: (_b = (_a = this.contactFormElement) === null || _a === void 0 ? void 0 : _a.donorContactInfo) !== null && _b !== void 0 ? _b : {},
|
|
254
|
+
paymentProvider: PaymentProvider.PayPal,
|
|
255
|
+
});
|
|
256
|
+
this.dispatchEvent(new CustomEvent('UpdatePaymentMethod', {
|
|
257
|
+
detail: { newPaymentMethodRequest },
|
|
258
|
+
}));
|
|
259
|
+
}
|
|
239
260
|
get styles() {
|
|
240
261
|
return css `
|
|
241
262
|
payment-selector {
|
|
@@ -249,6 +270,10 @@ let MGCEditPaymentMethod = class MGCEditPaymentMethod extends LitElement {
|
|
|
249
270
|
margin: 10px 0;
|
|
250
271
|
}
|
|
251
272
|
|
|
273
|
+
ia-mgc-braintree-manager:not([displaycreditcard]) #ia-mgc-cc-area {
|
|
274
|
+
display: none;
|
|
275
|
+
}
|
|
276
|
+
|
|
252
277
|
.secure-process-note {
|
|
253
278
|
margin-top: 0.5em;
|
|
254
279
|
font-size: 0.75em;
|
|
@@ -265,6 +290,13 @@ let MGCEditPaymentMethod = class MGCEditPaymentMethod extends LitElement {
|
|
|
265
290
|
height: 1px;
|
|
266
291
|
width: 1px;
|
|
267
292
|
}
|
|
293
|
+
|
|
294
|
+
#ia-mgc-paypal-button {
|
|
295
|
+
opacity: 0.001;
|
|
296
|
+
width: var(--paymentButtonWidth, 5rem);
|
|
297
|
+
height: var(--paymentButtonHeight, 3.2rem);
|
|
298
|
+
overflow: hidden;
|
|
299
|
+
}
|
|
268
300
|
`;
|
|
269
301
|
}
|
|
270
302
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-method.js","sourceRoot":"","sources":["../../../src/form-sections/payment-method.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable arrow-body-style */\nimport { LitElement, html, nothing, css, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@internetarchive/donation-form-section';\nimport '@internetarchive/donation-form/dist/src/form-elements/contact-form/contact-form.js';\n\nimport lockImg from '@internetarchive/icon-lock/index.js';\n\nimport '@internetarchive/donation-form/dist/src/form-elements/payment-selector.js';\n\nimport '../form-sections/parts/braintree-manager';\n\nimport { PaymentProvider } from '@internetarchive/donation-form-data-models';\n\nimport type {\n BraintreeManagerInterface,\n HostingEnvironment,\n} from '@internetarchive/donation-form';\nimport type { ContactForm } from '@internetarchive/donation-form/dist/src/form-elements/contact-form/contact-form.js';\nimport type { MonthlyPlan } from '../models/plan';\nimport '../presentational/donation-section-info';\nimport '../presentational/mgc-button';\n\nimport type { MGCButton } from '../presentational/mgc-button';\nimport '../presentational/mgc-update-status';\nimport type {\n MGCBraintreeManager,\n PaymentConfig,\n} from '../form-sections/parts/braintree-manager';\nimport { PaymentMethodRequest } from '../models/payment-method-request';\n\n/**\n * <ia-mgc-edit-payment-method>\n * - collecting the data to send to the service\n * - contact form\n * - braintree manager\n *\n * - handles submission\n * - handles toggling the view between display and edit modes\n *\n */\n@customElement('ia-mgc-edit-payment-method')\nexport class MGCEditPaymentMethod extends LitElement {\n @property({ type: Object }) plan?: MonthlyPlan;\n\n @property({ type: Object }) paymentConfig: PaymentConfig = {\n braintreeAuthToken: '',\n endpointManager: undefined,\n paymentClients: undefined,\n environment: 'Development' as HostingEnvironment.Development,\n venmoProfileId: '',\n googlePayMerchantId: '',\n referrer: '',\n origin: '',\n };\n\n @property({ type: String }) patronEmail: string = '';\n\n @property({ type: Boolean, reflect: true }) currentlyEditing?: boolean =\n false;\n\n @property({ type: String, reflect: true }) newPaymentMethod: string = '';\n\n @property({ type: Object }) braintreeManager?: BraintreeManagerInterface;\n\n @property({ type: String, reflect: true }) selectedPaymentProvider: string =\n '';\n\n @property({ type: Boolean }) paymentSelectorFirstUpdated: boolean = false;\n\n @property({ type: String }) updateMessage: string = '';\n\n @property({ type: String }) updateStatus: 'success' | 'fail' | '' = '';\n\n createRenderRoot() {\n return this;\n }\n\n submitPaymentMethodChange(e: Event) {\n e.preventDefault();\n }\n\n clearStatusMessaging() {\n this.updateMessage = '';\n this.updateStatus = '';\n }\n\n async paymentMethodUpdated(status: 'success' | 'fail') {\n this.updateStatus = status;\n this.updateMessage =\n status === 'success'\n ? 'Payment method updated'\n : 'Failed to update date, please try again';\n\n if (status === 'success') {\n this.currentlyEditing = false;\n this.selectedPaymentProvider = '';\n return;\n }\n this.updateRequestButton.isDisabled = false;\n }\n\n get updateRequestButton(): MGCButton {\n return this.querySelector(\n 'ia-mgc-button#edit-plan-payment-method-submit',\n ) as MGCButton;\n }\n\n get contactFormElement(): ContactForm | null {\n return this.querySelector('contact-form');\n }\n\n get contactFormSection(): TemplateResult {\n const headline =\n this.selectedPaymentProvider === PaymentProvider.Venmo\n ? 'Help us stay in touch'\n : 'Enter payment information';\n\n const displayContactForm =\n this.selectedPaymentProvider === PaymentProvider.CreditCard ||\n this.selectedPaymentProvider === PaymentProvider.Venmo;\n\n console.log('contactFormSectioncontactFormSection', { displayContactForm });\n return html`\n <donation-form-section\n badgemode=\"hidebadge\"\n headline=${headline}\n id=\"contactFormSection\"\n >\n <div class=\"credit-card-fields\">\n <slot\n style=\"\n display: block;\n width: 100%;\n border: 1px solid blue;\n height: inherit;\n \"\n ></slot>\n </div>\n </donation-form-section>\n `;\n }\n\n get paymentFormSection(): TemplateResult | typeof nothing {\n return html``;\n }\n\n get creditCardElement(): ContactForm | null {\n return this.querySelector('contact-form');\n }\n\n get braintreeManagerElement(): MGCBraintreeManager | null {\n return this.querySelector('ia-mgc-braintree-manager');\n }\n\n render() {\n const displayContactForm =\n this.selectedPaymentProvider === PaymentProvider.CreditCard ||\n this.selectedPaymentProvider === PaymentProvider.Venmo;\n\n const displayCCFields =\n this.selectedPaymentProvider === PaymentProvider.CreditCard;\n\n console.log('selectedPaymentProvider', {\n selectedPaymentProvider: this.selectedPaymentProvider,\n });\n return html`\n <style>\n ${this.styles}\n </style>\n <donation-form-section badgemode=\"hidebadge\" headline=\"Payment method\">\n ${!this.currentlyEditing\n ? html`<ia-mgc-form-section-info\n @editingRequested=${() => {\n this.currentlyEditing = true;\n this.clearStatusMessaging();\n }}\n ><span>\n ${this.plan?.payment?.paymentMethodType === 'creditCard'\n ? 'Credit Card'\n : this.plan?.payment?.paymentMethodType}:\n ${this.plan?.payment?.cardType} - ${this.plan?.payment?.last4}\n </span></ia-mgc-form-section-info\n >`\n : nothing}\n ${this.currentlyEditing\n ? html`\n <form id=\"edit-plan-payment-method\" @submit=${this.submitPaymentMethodChange}>\n <payment-selector\n .paymentProviders=${this.braintreeManager?.paymentProviders}\n @firstUpdated=${() => {\n this.paymentSelectorFirstUpdated = true;\n }}\n @creditCardSelected=${() => {\n this.selectedPaymentProvider = PaymentProvider.CreditCard;\n }}\n @venmoSelected=${() => {\n this.selectedPaymentProvider = PaymentProvider.Venmo;\n }}\n @applePaySelected=${() => {\n this.selectedPaymentProvider = PaymentProvider.ApplePay;\n }}\n @googlePaySelected=${() => {\n this.selectedPaymentProvider = PaymentProvider.GooglePay;\n }}\n @paypalBlockerSelected=${() => {\n this.selectedPaymentProvider = 'paypalBlocker';\n }}\n @resetPaymentMethod=${async () => {\n this.selectedPaymentProvider = '';\n }}\n tabindex=\"0\"\n >\n <slot name=\"paypal-button\" slot=\"paypal-button\"></slot>\n </payment-selector>\n\n <div class=\"${displayContactForm ? '' : 'hidden'}\">\n <contact-form .donorEmail=${this.patronEmail}></contact-form>\n </div>\n \n\n <ia-mgc-braintree-manager\n class=\"${displayCCFields ? '' : 'hidden'}\"\n .displayCreditCard=${this.selectedPaymentProvider === PaymentProvider.CreditCard}\n .plan=${this.plan}\n .paymentConfig=${this.paymentConfig}\n @BraintreeManagerSetupComplete=${() => {\n console.log('BraintreeManagerSetupComplete');\n }}\n ></ia-mgc-braintree-manager>\n\n <ia-mgc-button\n id=\"edit-plan-payment-method-cancel\"\n class=\"secondary\"\n .clickHandler=${() => {\n this.currentlyEditing = false;\n this.selectedPaymentProvider = '';\n this.clearStatusMessaging();\n }}\n >Cancel</ia-mgc-button\n >\n <ia-mgc-button\n id=\"edit-plan-payment-method-submit\"\n class=\"primary\"\n type=\"submit\"\n .isDisabled=${!this.selectedPaymentProvider}\n .clickHandler=${async (event: Event, iaButton: MGCButton) => {\n console.log({ iaButton, event });\n\n const button = iaButton;\n button.isDisabled = true;\n // validate credit card\n // if not valid, show error and return\n const isContactFormValid =\n this.creditCardElement?.reportValidity();\n\n if (!isContactFormValid) {\n button.isDisabled = false;\n return;\n }\n\n const paymentMethodInfo =\n (await this.braintreeManagerElement?.validateCreditCardFields()) as unknown as any;\n\n if (!paymentMethodInfo) {\n button.isDisabled = false;\n return;\n }\n\n const newPaymentMethodRequest = new PaymentMethodRequest({\n paymentMethodInfo,\n donorContactInfo: this.contactFormElement?.donorContactInfo,\n paymentProvider: this\n .selectedPaymentProvider as PaymentProvider,\n });\n\n this.dispatchEvent(\n new CustomEvent('UpdatePaymentMethod', {\n detail: { newPaymentMethodRequest },\n }),\n );\n }}\n >Update payment method</ia-mgc-button\n >\n <ia-mgc-update-status .status=${this.updateStatus}\n >${this.updateMessage}</ia-mgc-update-status\n ></ia-mgc-form-section-info>\n <div class=\"secure-process-note\">\n ${lockImg} Your payment will be securely processed\n </div>\n </form>\n `\n : nothing}\n </donation-form-section>\n `;\n }\n\n get styles() {\n return css`\n payment-selector {\n display: block;\n margin-bottom: 5px;\n padding-bottom: 10px;\n }\n\n ia-mgc-braintree-manager {\n display: block;\n margin: 10px 0;\n }\n\n .secure-process-note {\n margin-top: 0.5em;\n font-size: 0.75em;\n }\n\n .secure-process-note svg {\n width: 1.2rem;\n height: 1.5rem;\n vertical-align: bottom;\n }\n\n .hidden {\n visibility: hidden;\n height: 1px;\n width: 1px;\n }\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"payment-method.js","sourceRoot":"","sources":["../../../src/form-sections/payment-method.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable arrow-body-style */\nimport { LitElement, html, nothing, css, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@internetarchive/donation-form-section';\nimport '@internetarchive/donation-form/dist/src/form-elements/contact-form/contact-form.js';\n\nimport lockImg from '@internetarchive/icon-lock/index.js';\n\nimport '@internetarchive/donation-form/dist/src/form-elements/payment-selector.js';\n\nimport '../form-sections/parts/braintree-manager';\n\nimport { PaymentProvider } from '@internetarchive/donation-form-data-models';\n\nimport type {\n BraintreeManagerInterface,\n HostingEnvironment,\n} from '@internetarchive/donation-form';\nimport type { ContactForm } from '@internetarchive/donation-form/dist/src/form-elements/contact-form/contact-form.js';\nimport type { MonthlyPlan } from '../models/plan';\nimport '../presentational/donation-section-info';\nimport '../presentational/mgc-button';\n\nimport type { MGCButton } from '../presentational/mgc-button';\nimport '../presentational/mgc-update-status';\nimport type {\n MGCBraintreeManager,\n PaymentConfig,\n} from '../form-sections/parts/braintree-manager';\nimport { PaymentMethodRequest } from '../models/payment-method-request';\n\n/**\n * <ia-mgc-edit-payment-method>\n * - collecting the data to send to the service\n * - contact form\n * - braintree manager\n *\n * - handles submission\n * - handles toggling the view between display and edit modes\n *\n */\n@customElement('ia-mgc-edit-payment-method')\nexport class MGCEditPaymentMethod extends LitElement {\n @property({ type: Object }) plan?: MonthlyPlan;\n\n @property({ type: Object }) paymentConfig: PaymentConfig = {\n braintreeAuthToken: '',\n endpointManager: undefined,\n paymentClients: undefined,\n environment: 'Development' as HostingEnvironment.Development,\n venmoProfileId: '',\n googlePayMerchantId: '',\n referrer: '',\n origin: '',\n };\n\n @property({ type: String }) patronEmail: string = '';\n\n @property({ type: Boolean, reflect: true }) currentlyEditing?: boolean =\n false;\n\n @property({ type: String, reflect: true }) newPaymentMethod: string = '';\n\n @property({ type: Object }) braintreeManager?: BraintreeManagerInterface;\n\n @property({ type: String, reflect: true }) selectedPaymentProvider: string =\n '';\n\n @property({ type: Boolean }) paymentSelectorFirstUpdated: boolean = false;\n\n @property({ type: String }) updateMessage: string = '';\n\n @property({ type: String }) updateStatus: 'success' | 'fail' | '' = '';\n\n createRenderRoot() {\n return this;\n }\n\n submitPaymentMethodChange(e: Event) {\n e.preventDefault();\n }\n\n clearStatusMessaging() {\n this.updateMessage = '';\n this.updateStatus = '';\n }\n\n async paymentMethodUpdated(status: 'success' | 'fail') {\n this.updateStatus = status;\n this.updateMessage =\n status === 'success'\n ? 'Payment method updated'\n : 'Failed to update date, please try again';\n\n if (status === 'success') {\n this.currentlyEditing = false;\n this.selectedPaymentProvider = '';\n return;\n }\n this.updateRequestButton.isDisabled = false;\n }\n\n get updateRequestButton(): MGCButton {\n return this.querySelector(\n 'ia-mgc-button#edit-plan-payment-method-submit',\n ) as MGCButton;\n }\n\n get contactFormElement(): ContactForm | null {\n return this.querySelector('contact-form');\n }\n\n get contactFormSection(): TemplateResult {\n const headline =\n this.selectedPaymentProvider === PaymentProvider.Venmo\n ? 'Help us stay in touch'\n : 'Enter payment information';\n\n return html`\n <donation-form-section\n badgemode=\"hidebadge\"\n headline=${headline}\n id=\"contactFormSection\"\n >\n <div class=\"credit-card-fields\">\n <slot\n style=\"\n display: block;\n width: 100%;\n border: 1px solid blue;\n height: inherit;\n \"\n ></slot>\n </div>\n </donation-form-section>\n `;\n }\n\n get paymentFormSection(): TemplateResult | typeof nothing {\n return html``;\n }\n\n get creditCardElement(): ContactForm | null {\n return this.querySelector('contact-form');\n }\n\n get braintreeManagerElement(): MGCBraintreeManager | null {\n return this.querySelector('ia-mgc-braintree-manager');\n }\n\n render() {\n const displayContactForm =\n this.selectedPaymentProvider === PaymentProvider.CreditCard ||\n this.selectedPaymentProvider === PaymentProvider.Venmo;\n\n const displayCCFields =\n this.selectedPaymentProvider === PaymentProvider.CreditCard;\n\n const displayBraintreeManager =\n this.selectedPaymentProvider === PaymentProvider.CreditCard ||\n this.selectedPaymentProvider === PaymentProvider.PayPal;\n\n return html`\n <style>\n ${this.styles}\n </style>\n <donation-form-section badgemode=\"hidebadge\" headline=\"Payment method\">\n ${!this.currentlyEditing\n ? html`<ia-mgc-form-section-info\n @editingRequested=${() => {\n this.currentlyEditing = true;\n this.clearStatusMessaging();\n }}\n ><span>\n ${this.plan?.payment?.paymentMethodType === 'creditCard'\n ? 'Credit Card'\n : this.plan?.payment?.paymentMethodType}:\n ${this.plan?.payment?.paymentMethodType ===\n PaymentProvider.PayPal\n ? this.plan?.payment?.paypalEmail\n : `${this.plan?.payment?.cardType} - ${this.plan?.payment?.last4}`}\n </span></ia-mgc-form-section-info\n >`\n : nothing}\n ${this.currentlyEditing\n ? html`\n <form id=\"edit-plan-payment-method\" @submit=${this.submitPaymentMethodChange}>\n <payment-selector\n .paymentProviders=${this.braintreeManager?.paymentProviders}\n @firstUpdated=${(e: Event) => {\n this.paymentSelectorFirstUpdated = true;\n (e.target as any)?.showPaypalButton();\n }}\n @creditCardSelected=${() => {\n this.selectedPaymentProvider = PaymentProvider.CreditCard;\n }}\n @venmoSelected=${() => {\n this.selectedPaymentProvider = PaymentProvider.Venmo;\n }}\n @applePaySelected=${() => {\n this.selectedPaymentProvider = PaymentProvider.ApplePay;\n }}\n @googlePaySelected=${() => {\n this.selectedPaymentProvider = PaymentProvider.GooglePay;\n }}\n @paypalSelected=${() => {\n this.selectedPaymentProvider = PaymentProvider.PayPal;\n }}\n @resetPaymentMethod=${async () => {\n this.selectedPaymentProvider = '';\n }}\n tabindex=\"0\"\n >\n <div slot=\"paypal-button\">\n <div id=\"ia-mgc-paypal-button\"></div>\n </div>\n </payment-selector>\n\n <div class=\"${displayContactForm ? '' : 'hidden'}\">\n <contact-form .donorEmail=${this.patronEmail}></contact-form>\n </div>\n\n <ia-mgc-braintree-manager\n class=\"${displayBraintreeManager ? '' : 'hidden'}\"\n .displayCreditCard=${displayCCFields}\n .plan=${this.plan}\n .paymentConfig=${this.paymentConfig}\n @BraintreeManagerSetupComplete=${() => {\n this.braintreeManagerElement?.renderPayPalVaultButton();\n }}\n @PayPalVaultAuthorized=${(e: CustomEvent) => {\n this.handlePayPalVaultAuthorized(e);\n }}\n @PayPalVaultError=${() => {\n this.updateStatus = 'fail';\n this.updateMessage = 'PayPal error, please try again';\n }}\n ></ia-mgc-braintree-manager>\n\n <ia-mgc-button\n id=\"edit-plan-payment-method-cancel\"\n class=\"secondary\"\n .clickHandler=${() => {\n this.currentlyEditing = false;\n this.selectedPaymentProvider = '';\n this.clearStatusMessaging();\n }}\n >Cancel</ia-mgc-button\n >\n ${\n this.selectedPaymentProvider !== PaymentProvider.PayPal\n ? html`<ia-mgc-button\n id=\"edit-plan-payment-method-submit\"\n class=\"primary\"\n type=\"submit\"\n .isDisabled=${!this.selectedPaymentProvider}\n .clickHandler=${async (\n event: Event,\n iaButton: MGCButton,\n ) => {\n const button = iaButton;\n button.isDisabled = true;\n const isContactFormValid =\n this.creditCardElement?.reportValidity();\n\n if (!isContactFormValid) {\n button.isDisabled = false;\n return;\n }\n\n const paymentMethodInfo =\n (await this.braintreeManagerElement?.validateCreditCardFields()) as unknown as any;\n\n if (!paymentMethodInfo) {\n button.isDisabled = false;\n return;\n }\n\n const newPaymentMethodRequest =\n new PaymentMethodRequest({\n paymentMethodInfo,\n donorContactInfo:\n this.contactFormElement?.donorContactInfo,\n paymentProvider: this\n .selectedPaymentProvider as PaymentProvider,\n });\n\n this.dispatchEvent(\n new CustomEvent('UpdatePaymentMethod', {\n detail: { newPaymentMethodRequest },\n }),\n );\n }}\n >Update payment method</ia-mgc-button\n >`\n : nothing\n }\n <ia-mgc-update-status .status=${this.updateStatus}\n >${this.updateMessage}</ia-mgc-update-status\n ></ia-mgc-form-section-info>\n <div class=\"secure-process-note\">\n ${lockImg} Your payment will be securely processed\n </div>\n </form>\n `\n : nothing}\n </donation-form-section>\n `;\n }\n\n private handlePayPalVaultAuthorized(e: CustomEvent): void {\n const { paymentMethodInfo } = e.detail;\n const newPaymentMethodRequest = new PaymentMethodRequest({\n paymentMethodInfo,\n donorContactInfo: this.contactFormElement?.donorContactInfo ?? {},\n paymentProvider: PaymentProvider.PayPal,\n });\n this.dispatchEvent(\n new CustomEvent('UpdatePaymentMethod', {\n detail: { newPaymentMethodRequest },\n }),\n );\n }\n\n get styles() {\n return css`\n payment-selector {\n display: block;\n margin-bottom: 5px;\n padding-bottom: 10px;\n }\n\n ia-mgc-braintree-manager {\n display: block;\n margin: 10px 0;\n }\n\n ia-mgc-braintree-manager:not([displaycreditcard]) #ia-mgc-cc-area {\n display: none;\n }\n\n .secure-process-note {\n margin-top: 0.5em;\n font-size: 0.75em;\n }\n\n .secure-process-note svg {\n width: 1.2rem;\n height: 1.5rem;\n vertical-align: bottom;\n }\n\n .hidden {\n visibility: hidden;\n height: 1px;\n width: 1px;\n }\n\n #ia-mgc-paypal-button {\n opacity: 0.001;\n width: var(--paymentButtonWidth, 5rem);\n height: var(--paymentButtonHeight, 3.2rem);\n overflow: hidden;\n }\n `;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-method-request.js","sourceRoot":"","sources":["../../../src/models/payment-method-request.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"payment-method-request.js","sourceRoot":"","sources":["../../../src/models/payment-method-request.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,oBAAoB;IAK/B,YAAY,MAIX;;QACC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAClD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAChD,IAAI,CAAC,eAAe,GAAG,MAAA,MAAM,CAAC,eAAe,mCAAI,SAAS,CAAC;IAC7D,CAAC;CACF","sourcesContent":["/* eslint-disable lines-between-class-members */\nimport type { PaymentProvider } from '@internetarchive/donation-form-data-models';\n\nexport type BTPaymentMethodUpdate = {\n description: string;\n nonce: string;\n type: string;\n details: {\n cardType?: string;\n lastFour?: string;\n lastTwo?: string;\n bin?: string;\n expirationMonth?: string;\n expirationYear?: string;\n description?: string;\n email?: string;\n username?: string;\n };\n};\n\nexport class PaymentMethodRequest {\n paymentMethodInfo: BTPaymentMethodUpdate;\n donorContactInfo: any;\n paymentProvider: PaymentProvider;\n\n constructor(params: {\n paymentMethodInfo: any;\n donorContactInfo: any;\n paymentProvider: PaymentProvider;\n }) {\n this.paymentMethodInfo = params.paymentMethodInfo;\n this.donorContactInfo = params.donorContactInfo;\n this.paymentProvider = params.paymentProvider ?? 'unknown';\n }\n}\n"]}
|
|
@@ -47,6 +47,7 @@ export declare class MonthlyPlan {
|
|
|
47
47
|
setAmount(newAmount: number): void;
|
|
48
48
|
get nextBillingDate(): string;
|
|
49
49
|
setNextBillingDate(newDate: string): void;
|
|
50
|
+
private formatDateUTC;
|
|
50
51
|
get nextBillingDateLocale(): string;
|
|
51
52
|
get lastBillingDateLocale(): string;
|
|
52
53
|
get hasBeenCancelled(): boolean;
|