@internetarchive/donation-form 0.5.11-alpha.1 → 0.5.12-a1
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/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.d.ts +11 -1
- package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js +9 -0
- package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js.map +1 -1
- package/dist/src/donation-form-controller.d.ts +8 -1
- package/dist/src/donation-form-controller.js +7 -1
- package/dist/src/donation-form-controller.js.map +1 -1
- package/dist/src/donation-form.d.ts +8 -1
- package/dist/src/donation-form.js +6 -0
- package/dist/src/donation-form.js.map +1 -1
- package/dist/src/modals/confirm-donation-modal-content.d.ts +29 -0
- package/dist/src/modals/confirm-donation-modal-content.js +160 -0
- package/dist/src/modals/confirm-donation-modal-content.js.map +1 -0
- package/dist/src/modals/payment-confirmation-content.d.ts +23 -0
- package/dist/src/modals/payment-confirmation-content.js +74 -0
- package/dist/src/modals/payment-confirmation-content.js.map +1 -0
- package/dist/src/payment-flow-handlers/donation-flow-modal-manager.d.ts +16 -1
- package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js +31 -0
- package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.d.ts +1 -0
- package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js +24 -0
- package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/payment-flow-handlers.d.ts +16 -0
- package/dist/src/payment-flow-handlers/payment-flow-handlers.js +4 -0
- package/dist/src/payment-flow-handlers/payment-flow-handlers.js.map +1 -1
- package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.d.ts +6 -0
- package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js +3 -0
- package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js.map +1 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.d.ts +1 -0
- package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js +7 -0
- package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.js.map +1 -1
- package/package.json +1 -1
- package/src/@types/paypal-checkout-components/modules/callback-data.d.ts +4 -45
- package/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.ts +22 -1
- package/src/donation-form-controller.ts +11 -1
- package/src/donation-form.ts +10 -0
- package/src/modals/confirm-donation-modal-content.ts +150 -0
- package/src/payment-flow-handlers/donation-flow-modal-manager.ts +45 -0
- package/src/payment-flow-handlers/handlers/paypal-flow-handler.ts +30 -1
- package/src/payment-flow-handlers/payment-flow-handlers.ts +20 -0
- package/dist/.DS_Store +0 -0
- package/dist/src/.DS_Store +0 -0
- package/dist/src/models/donation-form-config.d.ts +0 -6
- package/dist/src/models/donation-form-config.js +0 -6
- package/dist/src/models/donation-form-config.js.map +0 -1
- package/dist/test/.DS_Store +0 -0
- package/dist/test/helpers/promisedSleep.d.ts +0 -1
- package/dist/test/helpers/promisedSleep.js +0 -4
- package/dist/test/helpers/promisedSleep.js.map +0 -1
- package/src/.DS_Store +0 -0
- package/src/@types/.DS_Store +0 -0
- package/src/form-elements/.DS_Store +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-flow-handlers.js","sourceRoot":"","sources":["../../../src/payment-flow-handlers/payment-flow-handlers.ts"],"names":[],"mappings":";AAEA,OAAO,EAEL,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAA8B,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAG/F,OAAO,EAEL,mBAAmB,GACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAA6B,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAEL,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,oBAAoB,GACrB,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"payment-flow-handlers.js","sourceRoot":"","sources":["../../../src/payment-flow-handlers/payment-flow-handlers.ts"],"names":[],"mappings":"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","sourcesContent":["import { ModalManagerInterface } from '@internetarchive/modal-manager';\n\nimport {\n CreditCardFlowHandlerInterface,\n CreditCardFlowHandler,\n} from './handlers/creditcard-flow-handler';\nimport { PayPalFlowHandlerInterface, PayPalFlowHandler } from './handlers/paypal-flow-handler';\nimport { BraintreeManagerInterface } from '../braintree-manager/braintree-interfaces';\nimport { RecaptchaManagerInterface } from '../recaptcha-manager/recaptcha-manager';\nimport {\n ApplePayFlowHandlerInterface,\n ApplePayFlowHandler,\n} from './handlers/applepay-flow-handler';\nimport { VenmoFlowHandlerInterface, VenmoFlowHandler } from './handlers/venmo-flow-handler';\nimport {\n DonationFlowModalManagerInterface,\n DonationFlowModalManager,\n} from './donation-flow-modal-manager';\nimport {\n GooglePayFlowHandlerInterface,\n GooglePayFlowHandler,\n} from './handlers/googlepay-flow-handler';\nimport { UpsellModalCTAMode } from '../modals/upsell-modal-content';\nimport { DonationType } from '@internetarchive/donation-form-data-models';\n\nexport interface PaymentFlowHandlersInterface {\n startup(): Promise<void>;\n /**\n * Show the upsell modal\n *\n * @param {{\n * ctaMode?: UpsellModalCTAMode;\n * yesSelected?: (amount: number) => void;\n * noSelected?: () => void;\n * amountChanged?: (amount: number) => void;\n * userClosedModalCallback?: () => void;\n * }} [options]\n * @returns {Promise<void>}\n * @memberof DonationFlowModalManagerInterface\n */\n showUpsellModal(options: {\n oneTimeAmount: number;\n ctaMode?: UpsellModalCTAMode;\n yesSelected?: (amount: number) => void;\n noSelected?: () => void;\n amountChanged?: (amount: number) => void;\n userClosedModalCallback?: () => void;\n }): Promise<void>;\n\n showConfirmationStepModal(options: {\n amount: number;\n donationType: DonationType;\n currencyType: string;\n confirmDonationCB: Function;\n cancelDonationCB: Function;\n }): Promise<void>;\n\n creditCardHandler: CreditCardFlowHandlerInterface | undefined;\n paypalHandler: PayPalFlowHandlerInterface | undefined;\n applePayHandler: ApplePayFlowHandlerInterface | undefined;\n venmoHandler: VenmoFlowHandlerInterface | undefined;\n googlePayHandler: GooglePayFlowHandlerInterface | undefined;\n}\n\n/**\n * This class is a container for all of the individual flow handlers.\n *\n * Flow Handlers are responsible for handling the provider-specific interactions between\n * the UI and the Data.\n *\n * For instance, when the user clicks on the \"Donate\" button for credit cards, we\n * pull in contact info from the form, trigger the recaptcha, tokenize the form,\n * submit, show the upsell, complete. The Credit Card Flow Handler is responsible for\n * managing that series of steps.\n *\n * For PayPal, the user initiates the payment from the PayPal button and once they're\n * done, we show the modal. The PayPal Flow Handler is responsible for handling that\n * series of events.\n *\n * @export\n * @class PaymentFlowHandlers\n * @implements {PaymentFlowHandlersInterface}\n */\nexport class PaymentFlowHandlers implements PaymentFlowHandlersInterface {\n async startup(): Promise<void> {\n this.venmoHandler?.startup();\n this.creditCardHandler?.startup();\n }\n\n /** @inheritdoc */\n async showUpsellModal(options: {\n oneTimeAmount: number;\n ctaMode?: UpsellModalCTAMode;\n yesSelected?: (amount: number) => void;\n noSelected?: () => void;\n amountChanged?: (amount: number) => void;\n userClosedModalCallback?: () => void;\n }): Promise<void> {\n return this.donationFlowModalManager.showUpsellModal(options);\n }\n\n /** @inheritdoc */\n showConfirmationStepModal(options: {\n amount: number;\n donationType: DonationType;\n currencyType: string;\n confirmDonationCB: Function;\n cancelDonationCB: Function;\n }): Promise<void> {\n return this.donationFlowModalManager.showConfirmationStepModal(options);\n }\n\n get creditCardHandler(): CreditCardFlowHandlerInterface | undefined {\n if (this.creditCardHandlerCache) {\n return this.creditCardHandlerCache;\n }\n\n this.creditCardHandlerCache = new CreditCardFlowHandler({\n braintreeManager: this.braintreeManager,\n donationFlowModalManager: this.donationFlowModalManager,\n recaptchaManager: this.recaptchaManager,\n });\n\n return this.creditCardHandlerCache;\n }\n\n get paypalHandler(): PayPalFlowHandlerInterface | undefined {\n if (this.paypalHandlerCache) {\n return this.paypalHandlerCache;\n }\n\n this.paypalHandlerCache = new PayPalFlowHandler({\n braintreeManager: this.braintreeManager,\n donationFlowModalManager: this.donationFlowModalManager,\n });\n\n return this.paypalHandlerCache;\n }\n\n get applePayHandler(): ApplePayFlowHandlerInterface | undefined {\n if (this.applePayHandlerCache) {\n return this.applePayHandlerCache;\n }\n\n this.applePayHandlerCache = new ApplePayFlowHandler({\n braintreeManager: this.braintreeManager,\n donationFlowModalManager: this.donationFlowModalManager,\n });\n\n return this.applePayHandlerCache;\n }\n\n get venmoHandler(): VenmoFlowHandlerInterface | undefined {\n if (this.venmoHandlerCache) {\n return this.venmoHandlerCache;\n }\n\n this.venmoHandlerCache = new VenmoFlowHandler({\n braintreeManager: this.braintreeManager,\n donationFlowModalManager: this.donationFlowModalManager,\n });\n\n return this.venmoHandlerCache;\n }\n\n get googlePayHandler(): GooglePayFlowHandlerInterface | undefined {\n if (this.googlePayHandlerCache) {\n return this.googlePayHandlerCache;\n }\n\n this.googlePayHandlerCache = new GooglePayFlowHandler({\n braintreeManager: this.braintreeManager,\n donationFlowModalManager: this.donationFlowModalManager,\n });\n\n return this.googlePayHandlerCache;\n }\n\n private creditCardHandlerCache?: CreditCardFlowHandlerInterface;\n private paypalHandlerCache?: PayPalFlowHandlerInterface;\n private applePayHandlerCache?: ApplePayFlowHandlerInterface;\n private venmoHandlerCache?: VenmoFlowHandlerInterface;\n private googlePayHandlerCache?: GooglePayFlowHandlerInterface;\n\n constructor(options: {\n braintreeManager: BraintreeManagerInterface;\n modalManager: ModalManagerInterface;\n recaptchaManager: RecaptchaManagerInterface;\n }) {\n this.braintreeManager = options.braintreeManager;\n this.modalManager = options.modalManager;\n this.recaptchaManager = options.recaptchaManager;\n\n this.donationFlowModalManager = new DonationFlowModalManager({\n braintreeManager: this.braintreeManager,\n modalManager: this.modalManager,\n });\n }\n\n private braintreeManager: BraintreeManagerInterface;\n private modalManager: ModalManagerInterface;\n private recaptchaManager: RecaptchaManagerInterface;\n private donationFlowModalManager: DonationFlowModalManagerInterface;\n}\n"]}
|
|
@@ -5,6 +5,7 @@ import { MockApplePayFlowHandler } from './individual-handlers/mock-applepay-flo
|
|
|
5
5
|
import { MockVenmoFlowHandler } from './individual-handlers/mock-venmo-flow-handler';
|
|
6
6
|
import { MockGooglePayFlowHandler } from './individual-handlers/mock-googlepay-flow-handler';
|
|
7
7
|
import { UpsellModalCTAMode } from '../../../src/modals/upsell-modal-content';
|
|
8
|
+
import { DonationType } from '@internetarchive/donation-form-data-models';
|
|
8
9
|
export declare class MockPaymentFlowHandlers implements PaymentFlowHandlersInterface {
|
|
9
10
|
showUpsellModal(options: {
|
|
10
11
|
oneTimeAmount: number;
|
|
@@ -14,6 +15,11 @@ export declare class MockPaymentFlowHandlers implements PaymentFlowHandlersInter
|
|
|
14
15
|
amountChanged?: (amount: number) => void;
|
|
15
16
|
userClosedModalCallback?: () => void;
|
|
16
17
|
}): Promise<void>;
|
|
18
|
+
showConfirmationStepModal(options: {
|
|
19
|
+
amount: number;
|
|
20
|
+
donationType: DonationType;
|
|
21
|
+
currencyType: string;
|
|
22
|
+
}): Promise<void>;
|
|
17
23
|
startupCalled: boolean;
|
|
18
24
|
startup(): Promise<void>;
|
|
19
25
|
creditCardHandler: MockCreditCardFlowHandler;
|
|
@@ -16,6 +16,9 @@ export class MockPaymentFlowHandlers {
|
|
|
16
16
|
showUpsellModal(options) {
|
|
17
17
|
throw new Error('Method not implemented.');
|
|
18
18
|
}
|
|
19
|
+
showConfirmationStepModal(options) {
|
|
20
|
+
throw new Error('Method not implemented.');
|
|
21
|
+
}
|
|
19
22
|
startup() {
|
|
20
23
|
var _a;
|
|
21
24
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-payment-flow-handlers.js","sourceRoot":"","sources":["../../../../test/mocks/flow-handlers/mock-payment-flow-handlers.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;
|
|
1
|
+
{"version":3,"file":"mock-payment-flow-handlers.js","sourceRoot":"","sources":["../../../../test/mocks/flow-handlers/mock-payment-flow-handlers.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAI7F,MAAM,OAAO,uBAAuB;IAApC;QAkBE,kBAAa,GAAG,KAAK,CAAC;QAKtB,sBAAiB,GAA8B,IAAI,yBAAyB,EAAE,CAAC;QAC/E,kBAAa,GAA0B,IAAI,qBAAqB,EAAE,CAAC;QACnE,oBAAe,GAA4B,IAAI,uBAAuB,EAAE,CAAC;QACzE,iBAAY,GAAyB,IAAI,oBAAoB,EAAE,CAAC;QAChE,qBAAgB,GAA6B,IAAI,wBAAwB,EAAE,CAAC;IAC9E,CAAC;IA3BC,eAAe,CAAC,OAOf;QACC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,yBAAyB,CAAC,OAIzB;QACC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAEK,OAAO;;;YACX,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,MAAA,IAAI,CAAC,YAAY,0CAAE,OAAO,GAAG;;KAC9B;CAMF","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { PaymentFlowHandlersInterface } from '../../../src/payment-flow-handlers/payment-flow-handlers';\nimport { MockCreditCardFlowHandler } from './individual-handlers/mock-creditcard-flow-handler';\nimport { MockPayPalFlowHandler } from './individual-handlers/mock-paypal-flow-handler';\nimport { MockApplePayFlowHandler } from './individual-handlers/mock-applepay-flow-handler';\nimport { MockVenmoFlowHandler } from './individual-handlers/mock-venmo-flow-handler';\nimport { MockGooglePayFlowHandler } from './individual-handlers/mock-googlepay-flow-handler';\nimport { UpsellModalCTAMode } from '../../../src/modals/upsell-modal-content';\nimport { DonationType } from '@internetarchive/donation-form-data-models';\n\nexport class MockPaymentFlowHandlers implements PaymentFlowHandlersInterface {\n showUpsellModal(options: {\n oneTimeAmount: number;\n ctaMode?: UpsellModalCTAMode;\n yesSelected?: (amount: number) => void;\n noSelected?: () => void;\n amountChanged?: (amount: number) => void;\n userClosedModalCallback?: () => void;\n }): Promise<void> {\n throw new Error('Method not implemented.');\n }\n showConfirmationStepModal(options: {\n amount: number;\n donationType: DonationType;\n currencyType: string;\n }): Promise<void> {\n throw new Error('Method not implemented.');\n }\n startupCalled = false;\n async startup(): Promise<void> {\n this.startupCalled = true;\n this.venmoHandler?.startup();\n }\n creditCardHandler: MockCreditCardFlowHandler = new MockCreditCardFlowHandler();\n paypalHandler: MockPayPalFlowHandler = new MockPayPalFlowHandler();\n applePayHandler: MockApplePayFlowHandler = new MockApplePayFlowHandler();\n venmoHandler: MockVenmoFlowHandler = new MockVenmoFlowHandler();\n googlePayHandler: MockGooglePayFlowHandler = new MockGooglePayFlowHandler();\n}\n"]}
|
|
@@ -22,6 +22,7 @@ export declare class MockPayPalButtonDataSourceDelegate implements PayPalButtonD
|
|
|
22
22
|
};
|
|
23
23
|
payPalPaymentStarted(dataSource: PayPalButtonDataSourceInterface, options: object): Promise<void>;
|
|
24
24
|
payPalPaymentAuthorized(dataSource: PayPalButtonDataSourceInterface, payload: paypal.TokenizePayload): Promise<void>;
|
|
25
|
+
payPalPaymentConfirmed(dataSource: PayPalButtonDataSourceInterface, payload: paypal.TokenizePayload): Promise<void>;
|
|
25
26
|
payPalPaymentCancelled(dataSource: PayPalButtonDataSourceInterface, data: object): Promise<void>;
|
|
26
27
|
payPalPaymentError(dataSource: PayPalButtonDataSourceInterface, error: string): Promise<void>;
|
|
27
28
|
}
|
|
@@ -28,6 +28,13 @@ export class MockPayPalButtonDataSourceDelegate {
|
|
|
28
28
|
this.paymentAuthorizedResults.payload = payload;
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
|
+
payPalPaymentConfirmed(dataSource, payload) {
|
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
this.paymentAuthorizedResults.called = true;
|
|
34
|
+
this.paymentAuthorizedResults.datasource = dataSource;
|
|
35
|
+
this.paymentAuthorizedResults.payload = payload;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
31
38
|
payPalPaymentCancelled(dataSource, data) {
|
|
32
39
|
return __awaiter(this, void 0, void 0, function* () {
|
|
33
40
|
this.paymentCancelledResults.called = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-paypal-button-datasource-delegate.js","sourceRoot":"","sources":["../../../../../test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.ts"],"names":[],"mappings":";AAKA,MAAM,OAAO,kCAAkC;IAA/C;QACE,0BAAqB,GAIjB;YACF,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,6BAAwB,GAIpB;YACF,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,4BAAuB,GAInB;YACF,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,wBAAmB,GAIf;YACF,MAAM,EAAE,KAAK;SACd,CAAC;
|
|
1
|
+
{"version":3,"file":"mock-paypal-button-datasource-delegate.js","sourceRoot":"","sources":["../../../../../test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource-delegate.ts"],"names":[],"mappings":";AAKA,MAAM,OAAO,kCAAkC;IAA/C;QACE,0BAAqB,GAIjB;YACF,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,6BAAwB,GAIpB;YACF,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,4BAAuB,GAInB;YACF,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,wBAAmB,GAIf;YACF,MAAM,EAAE,KAAK;SACd,CAAC;IA8CJ,CAAC;IA5CO,oBAAoB,CACxB,UAA2C,EAC3C,OAAe;;YAEf,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,IAAI,CAAC;YACzC,IAAI,CAAC,qBAAqB,CAAC,UAAU,GAAG,UAAU,CAAC;YACnD,IAAI,CAAC,qBAAqB,CAAC,OAAO,GAAG,OAAO,CAAC;QAC/C,CAAC;KAAA;IAEK,uBAAuB,CAC3B,UAA2C,EAC3C,OAA+B;;YAE/B,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,IAAI,CAAC;YAC5C,IAAI,CAAC,wBAAwB,CAAC,UAAU,GAAG,UAAU,CAAC;YACtD,IAAI,CAAC,wBAAwB,CAAC,OAAO,GAAG,OAAO,CAAC;QAClD,CAAC;KAAA;IAEK,sBAAsB,CAC1B,UAA2C,EAC3C,OAA+B;;YAE/B,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,IAAI,CAAC;YAC5C,IAAI,CAAC,wBAAwB,CAAC,UAAU,GAAG,UAAU,CAAC;YACtD,IAAI,CAAC,wBAAwB,CAAC,OAAO,GAAG,OAAO,CAAC;QAClD,CAAC;KAAA;IAEK,sBAAsB,CAC1B,UAA2C,EAC3C,IAAY;;YAEZ,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,IAAI,CAAC;YAC3C,IAAI,CAAC,uBAAuB,CAAC,UAAU,GAAG,UAAU,CAAC;YACrD,IAAI,CAAC,uBAAuB,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3C,CAAC;KAAA;IAEK,kBAAkB,CACtB,UAA2C,EAC3C,KAAa;;YAEb,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,IAAI,CAAC;YACvC,IAAI,CAAC,mBAAmB,CAAC,UAAU,GAAG,UAAU,CAAC;YACjD,IAAI,CAAC,mBAAmB,CAAC,KAAK,GAAG,KAAK,CAAC;QACzC,CAAC;KAAA;CACF","sourcesContent":["import {\n PayPalButtonDataSourceDelegate,\n PayPalButtonDataSourceInterface,\n} from '../../../../src/braintree-manager/payment-providers/paypal/paypal-button-datasource';\n\nexport class MockPayPalButtonDataSourceDelegate implements PayPalButtonDataSourceDelegate {\n paymentStartedResults: {\n called: boolean;\n datasource?: PayPalButtonDataSourceInterface;\n options?: object;\n } = {\n called: false,\n };\n\n paymentAuthorizedResults: {\n called: boolean;\n datasource?: PayPalButtonDataSourceInterface;\n payload?: paypal.TokenizePayload;\n } = {\n called: false,\n };\n\n paymentCancelledResults: {\n called: boolean;\n datasource?: PayPalButtonDataSourceInterface;\n data?: object;\n } = {\n called: false,\n };\n\n paymentErrorResults: {\n called: boolean;\n datasource?: PayPalButtonDataSourceInterface;\n error?: string;\n } = {\n called: false,\n };\n\n async payPalPaymentStarted(\n dataSource: PayPalButtonDataSourceInterface,\n options: object,\n ): Promise<void> {\n this.paymentStartedResults.called = true;\n this.paymentStartedResults.datasource = dataSource;\n this.paymentStartedResults.options = options;\n }\n\n async payPalPaymentAuthorized(\n dataSource: PayPalButtonDataSourceInterface,\n payload: paypal.TokenizePayload,\n ): Promise<void> {\n this.paymentAuthorizedResults.called = true;\n this.paymentAuthorizedResults.datasource = dataSource;\n this.paymentAuthorizedResults.payload = payload;\n }\n\n async payPalPaymentConfirmed(\n dataSource: PayPalButtonDataSourceInterface,\n payload: paypal.TokenizePayload,\n ): Promise<void> {\n this.paymentAuthorizedResults.called = true;\n this.paymentAuthorizedResults.datasource = dataSource;\n this.paymentAuthorizedResults.payload = payload;\n }\n\n async payPalPaymentCancelled(\n dataSource: PayPalButtonDataSourceInterface,\n data: object,\n ): Promise<void> {\n this.paymentCancelledResults.called = true;\n this.paymentCancelledResults.datasource = dataSource;\n this.paymentCancelledResults.data = data;\n }\n\n async payPalPaymentError(\n dataSource: PayPalButtonDataSourceInterface,\n error: string,\n ): Promise<void> {\n this.paymentErrorResults.called = true;\n this.paymentErrorResults.datasource = dataSource;\n this.paymentErrorResults.error = error;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
export
|
|
2
|
-
Debit = 'debit',
|
|
3
|
-
Credit = 'credit',
|
|
4
|
-
}
|
|
1
|
+
export type LineItemKind = 'debit' | 'credit';
|
|
5
2
|
|
|
6
3
|
export interface LineItem {
|
|
7
4
|
/**
|
|
@@ -45,17 +42,7 @@ export interface LineItem {
|
|
|
45
42
|
url: string | undefined;
|
|
46
43
|
}
|
|
47
44
|
|
|
48
|
-
export
|
|
49
|
-
/**
|
|
50
|
-
* The payer intends to receive the items at a specified address.
|
|
51
|
-
*/
|
|
52
|
-
Shipping = 'SHIPPING',
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* The payer intends to pick up the items at a specified address. For example, a store address.
|
|
56
|
-
*/
|
|
57
|
-
Pickup = 'PICKUP',
|
|
58
|
-
}
|
|
45
|
+
export type ShippingOptionType = 'SHIPPING' | 'PICKUP';
|
|
59
46
|
|
|
60
47
|
export interface CurrencyAmount {
|
|
61
48
|
/**
|
|
@@ -219,37 +206,9 @@ export interface TokenizePayload {
|
|
|
219
206
|
details: TokenizePayloadDetails;
|
|
220
207
|
}
|
|
221
208
|
|
|
222
|
-
export
|
|
223
|
-
/**
|
|
224
|
-
* Used to store the payment method for future use, ie subscriptions
|
|
225
|
-
*/
|
|
226
|
-
Vault = 'vault',
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* Used for one-time checkout
|
|
230
|
-
*/
|
|
231
|
-
Checkout = 'checkout',
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
export enum Intent {
|
|
235
|
-
/**
|
|
236
|
-
* Submits the transaction for authorization but not settlement.
|
|
237
|
-
*/
|
|
238
|
-
Authorize = 'authorize',
|
|
209
|
+
export type FlowType = 'checkout' | 'vault';
|
|
239
210
|
|
|
240
|
-
|
|
241
|
-
* Validates the transaction without an authorization (i.e. without holding funds).
|
|
242
|
-
* Useful for authorizing and capturing funds up to 90 days after the order has been placed.
|
|
243
|
-
* Only available for Checkout flow.
|
|
244
|
-
*/
|
|
245
|
-
Order = 'order',
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Payment will be immediately submitted for settlement upon creating a transaction.
|
|
249
|
-
* `sale` can be used as an alias for this value.
|
|
250
|
-
*/
|
|
251
|
-
Capture = 'capture',
|
|
252
|
-
}
|
|
211
|
+
export type Intent = 'authorize' | 'order' | 'capture';
|
|
253
212
|
|
|
254
213
|
export interface AuthorizationData {
|
|
255
214
|
payerId: string;
|
|
@@ -92,7 +92,7 @@ export interface PayPalButtonDataSourceDelegate {
|
|
|
92
92
|
payPalPaymentStarted(dataSource: PayPalButtonDataSourceInterface, options: object): Promise<void>;
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
|
-
* Payment has been authorized
|
|
95
|
+
* Payment has been authorized by patron and submits to PayPal
|
|
96
96
|
*
|
|
97
97
|
* @param {PayPalButtonDataSourceInterface} dataSource
|
|
98
98
|
* @param {paypal.TokenizePayload} payload
|
|
@@ -104,6 +104,19 @@ export interface PayPalButtonDataSourceDelegate {
|
|
|
104
104
|
payload: paypal.TokenizePayload,
|
|
105
105
|
): Promise<void>;
|
|
106
106
|
|
|
107
|
+
/**
|
|
108
|
+
* Payment has been authorized
|
|
109
|
+
*
|
|
110
|
+
* @param {PayPalButtonDataSourceInterface} dataSource
|
|
111
|
+
* @param {paypal.TokenizePayload} payload
|
|
112
|
+
* @returns {Promise<void>}
|
|
113
|
+
* @memberof PayPalButtonDataSourceDelegate
|
|
114
|
+
*/
|
|
115
|
+
payPalPaymentConfirmed(
|
|
116
|
+
dataSource: PayPalButtonDataSourceInterface,
|
|
117
|
+
payload: paypal.TokenizePayload,
|
|
118
|
+
): Promise<void>;
|
|
119
|
+
|
|
107
120
|
/**
|
|
108
121
|
* Payment has been cancelled
|
|
109
122
|
*
|
|
@@ -157,6 +170,7 @@ export class PayPalButtonDataSource implements PayPalButtonDataSourceInterface {
|
|
|
157
170
|
|
|
158
171
|
const options: braintree.PayPalCheckoutCreatePaymentOptions = {
|
|
159
172
|
flow: flow as paypal.FlowType,
|
|
173
|
+
intent: 'capture',
|
|
160
174
|
};
|
|
161
175
|
options.enableShippingAddress = true;
|
|
162
176
|
|
|
@@ -184,6 +198,13 @@ export class PayPalButtonDataSource implements PayPalButtonDataSourceInterface {
|
|
|
184
198
|
return payload;
|
|
185
199
|
}
|
|
186
200
|
|
|
201
|
+
async onConfirm(data: paypal.AuthorizationData): Promise<paypal.TokenizePayload> {
|
|
202
|
+
const payload: paypal.TokenizePayload = await this.paypalInstance.tokenizePayment(data);
|
|
203
|
+
this.delegate?.payPalPaymentConfirmed(this, payload);
|
|
204
|
+
|
|
205
|
+
return payload;
|
|
206
|
+
}
|
|
207
|
+
|
|
187
208
|
/** @inheritdoc */
|
|
188
209
|
onCancel(data: object): void {
|
|
189
210
|
this.delegate?.payPalPaymentCancelled(this, data);
|
|
@@ -164,6 +164,16 @@ export class DonationFormController extends LitElement {
|
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
+
async showConfirmationStepDev(options: {
|
|
168
|
+
donationType: DonationType;
|
|
169
|
+
amount: number;
|
|
170
|
+
currencyType: string;
|
|
171
|
+
cancelDonationCB: Function;
|
|
172
|
+
confirmDonationCB: Function;
|
|
173
|
+
}): Promise<void> {
|
|
174
|
+
this.donationForm.showConfirmationModalDev(options);
|
|
175
|
+
}
|
|
176
|
+
|
|
167
177
|
async showUpsellModalDev(options: {
|
|
168
178
|
oneTimeAmount: number;
|
|
169
179
|
ctaMode?: UpsellModalCTAMode;
|
|
@@ -319,7 +329,7 @@ export class DonationFormController extends LitElement {
|
|
|
319
329
|
this.donationForm.paymentFlowHandlers = this.paymentFlowHandlers;
|
|
320
330
|
|
|
321
331
|
this.braintreeManager.startup();
|
|
322
|
-
this.paymentFlowHandlers
|
|
332
|
+
this.paymentFlowHandlers?.startup();
|
|
323
333
|
this.recaptchaManager.setup(this.recaptchaElement, 1, 'light', 'image');
|
|
324
334
|
}
|
|
325
335
|
|
package/src/donation-form.ts
CHANGED
|
@@ -121,6 +121,16 @@ export class DonationForm extends LitElement {
|
|
|
121
121
|
`;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
async showConfirmationModalDev(options: {
|
|
125
|
+
donationType: DonationType;
|
|
126
|
+
amount: number;
|
|
127
|
+
currencyType: string;
|
|
128
|
+
cancelDonationCB: Function;
|
|
129
|
+
confirmDonationCB: Function;
|
|
130
|
+
}): Promise<void> {
|
|
131
|
+
this.paymentFlowHandlers?.showConfirmationStepModal(options);
|
|
132
|
+
}
|
|
133
|
+
|
|
124
134
|
/**
|
|
125
135
|
* This is a developer convenience method that allows us to show the upsell modal without going
|
|
126
136
|
* through the purchasing flow. If it's showing the PayPal button, it will trigger
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
2
|
+
import { LitElement, html, TemplateResult, css, CSSResultGroup } from 'lit';
|
|
3
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
4
|
+
import { DonationType } from '@internetarchive/donation-form-data-models';
|
|
5
|
+
import currency from 'currency.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* This is the content that we show in the upsell modal.
|
|
9
|
+
*
|
|
10
|
+
* It has an amount input, "Yes" and "No Thanks" options and a switch to optionally
|
|
11
|
+
* show the PayPal upsell button.
|
|
12
|
+
*
|
|
13
|
+
* @export
|
|
14
|
+
* @class ConfirmDonationContent
|
|
15
|
+
* @extends {LitElement}
|
|
16
|
+
*/
|
|
17
|
+
@customElement('confirm-donation-modal')
|
|
18
|
+
export class ConfirmDonationContent extends LitElement {
|
|
19
|
+
@property({ type: Number }) amount = 5;
|
|
20
|
+
|
|
21
|
+
@property({ type: String }) currencyType = '$';
|
|
22
|
+
|
|
23
|
+
@property({ type: String }) donationType: DonationType = DonationType.OneTime;
|
|
24
|
+
|
|
25
|
+
@property({ type: Function }) confirmDonation: Function = (): void => {};
|
|
26
|
+
|
|
27
|
+
@property({ type: Function }) cancelDonation: Function= (): void => {};
|
|
28
|
+
|
|
29
|
+
get confirmationText(): TemplateResult {
|
|
30
|
+
const amount = currency(this.amount, { symbol: this.currencySymbol }).format();
|
|
31
|
+
|
|
32
|
+
return html`<p>You are about to make a <b>${this.donationType}</b> donation of <b>${amount} ${this.currencyType}</b> to the Internet Archive.</p>`;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
confirm(): void {
|
|
36
|
+
this?.confirmDonation();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
cancel(): void {
|
|
40
|
+
this?.cancelDonation();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** @inheritdoc */
|
|
44
|
+
render(): TemplateResult {
|
|
45
|
+
return html`
|
|
46
|
+
<p>${this.confirmationText}</p>
|
|
47
|
+
|
|
48
|
+
<div class="cta-group">
|
|
49
|
+
<button id="confirm" @click=${(): void => this.confirm()}>Complete donation</button>
|
|
50
|
+
<button id="cancel" @click=${(): void => this.cancel()}>Cancel</button>
|
|
51
|
+
</div>
|
|
52
|
+
`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static get styles(): CSSResultGroup {
|
|
56
|
+
const ctaButtonColor = css`var(--upsellCTAButtonColor, #194880)`;
|
|
57
|
+
const ctaButtonDisabledColor = css`var(--upsellCTAButtonDisabledColor, rgba(109,148,201,0.5))`;
|
|
58
|
+
|
|
59
|
+
return css`
|
|
60
|
+
:host {
|
|
61
|
+
display: block;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
button {
|
|
65
|
+
outline: none;
|
|
66
|
+
cursor: pointer;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
button#confirm {
|
|
70
|
+
font-size: 2rem;
|
|
71
|
+
display: block;
|
|
72
|
+
width: 100%;
|
|
73
|
+
margin-top: 0.5rem;
|
|
74
|
+
padding: 1rem 2rem;
|
|
75
|
+
background-color: ${ctaButtonColor};
|
|
76
|
+
color: #fff;
|
|
77
|
+
border-radius: 5px;
|
|
78
|
+
border: 0;
|
|
79
|
+
font-weight: bold;
|
|
80
|
+
line-height: normal;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
button#cancel {
|
|
84
|
+
margin-top: 1rem;
|
|
85
|
+
border: 0;
|
|
86
|
+
text-decoration: underline;
|
|
87
|
+
background-color: transparent;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
button:disabled {
|
|
91
|
+
background-color: ${ctaButtonDisabledColor};
|
|
92
|
+
cursor: not-allowed;
|
|
93
|
+
}
|
|
94
|
+
}`;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* https://developer.paypal.com/docs/reports/reference/paypal-supported-currencies/
|
|
99
|
+
*/
|
|
100
|
+
get currencySymbol(): string {
|
|
101
|
+
switch(this.currencyType) {
|
|
102
|
+
case 'AUD':
|
|
103
|
+
return 'AU$';
|
|
104
|
+
case 'BRL':
|
|
105
|
+
return 'R$';
|
|
106
|
+
case 'CAD':
|
|
107
|
+
return 'CA$';
|
|
108
|
+
case 'CHF':
|
|
109
|
+
return 'Fr';
|
|
110
|
+
case 'CNY':
|
|
111
|
+
return '¥';
|
|
112
|
+
case 'CZK':
|
|
113
|
+
return 'Kč';
|
|
114
|
+
case 'DKK':
|
|
115
|
+
return 'Kr';
|
|
116
|
+
case 'EUR':
|
|
117
|
+
return '€';
|
|
118
|
+
case 'GBP':
|
|
119
|
+
return '£';
|
|
120
|
+
case 'HKD':
|
|
121
|
+
return 'HK$';
|
|
122
|
+
case 'HUF':
|
|
123
|
+
return 'Ft';
|
|
124
|
+
case 'ILS':
|
|
125
|
+
return '₪';
|
|
126
|
+
case 'JPY':
|
|
127
|
+
return '¥';
|
|
128
|
+
case 'MXN':
|
|
129
|
+
return 'MX$';
|
|
130
|
+
case 'MYR':
|
|
131
|
+
return 'RM';
|
|
132
|
+
case 'NOK':
|
|
133
|
+
return 'kr';
|
|
134
|
+
case 'PLN':
|
|
135
|
+
return 'zł';
|
|
136
|
+
case 'RUB':
|
|
137
|
+
return '₽';
|
|
138
|
+
case 'SEK':
|
|
139
|
+
return 'kr';
|
|
140
|
+
case 'SGD':
|
|
141
|
+
return 'S$';
|
|
142
|
+
case 'THB':
|
|
143
|
+
return '฿';
|
|
144
|
+
case 'TYD':
|
|
145
|
+
return 'NT$';
|
|
146
|
+
default:
|
|
147
|
+
return '$'; // $ as default USD, NZD
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { html } from 'lit';
|
|
2
2
|
import { ModalConfig, ModalManagerInterface } from '@internetarchive/modal-manager';
|
|
3
3
|
import { UpsellModalCTAMode } from '../modals/upsell-modal-content';
|
|
4
|
+
import '../modals/confirm-donation-modal-content';
|
|
4
5
|
import { BraintreeManagerInterface } from '../braintree-manager/braintree-interfaces';
|
|
5
6
|
import {
|
|
6
7
|
SuccessResponse,
|
|
@@ -32,6 +33,13 @@ enum ModalHeaderColor {
|
|
|
32
33
|
* @interface DonationFlowModalManagerInterface
|
|
33
34
|
*/
|
|
34
35
|
export interface DonationFlowModalManagerInterface {
|
|
36
|
+
showConfirmationStepModal(options: {
|
|
37
|
+
amount: number;
|
|
38
|
+
donationType: DonationType;
|
|
39
|
+
currencyType: string;
|
|
40
|
+
confirmDonationCB: Function;
|
|
41
|
+
cancelDonationCB: Function;
|
|
42
|
+
}): Promise<void>;
|
|
35
43
|
/**
|
|
36
44
|
* Close the modal
|
|
37
45
|
*
|
|
@@ -212,6 +220,43 @@ export class DonationFlowModalManager implements DonationFlowModalManagerInterfa
|
|
|
212
220
|
});
|
|
213
221
|
}
|
|
214
222
|
|
|
223
|
+
showConfirmationStepModal(options: {
|
|
224
|
+
amount: number;
|
|
225
|
+
donationType: DonationType;
|
|
226
|
+
currencyType: string;
|
|
227
|
+
confirmDonationCB: Function;
|
|
228
|
+
cancelDonationCB: Function;
|
|
229
|
+
}): Promise<void> {
|
|
230
|
+
const confirmDonation = (): void => {
|
|
231
|
+
console.log('confirmDonation ~~~~~~~');
|
|
232
|
+
options?.confirmDonationCB();
|
|
233
|
+
};
|
|
234
|
+
const cancelDonation = (): void => {
|
|
235
|
+
console.log('cancelDonation ~~~~~~~');
|
|
236
|
+
options?.cancelDonationCB();
|
|
237
|
+
};
|
|
238
|
+
const modalConfig = new ModalConfig({
|
|
239
|
+
closeOnBackdropClick: false,
|
|
240
|
+
// call close callback
|
|
241
|
+
headerColor: ModalHeaderColor.Green,
|
|
242
|
+
title: html`
|
|
243
|
+
Confirm donation
|
|
244
|
+
`,
|
|
245
|
+
message: html`
|
|
246
|
+
<confirm-donation-modal
|
|
247
|
+
.amount="${options.amount}"
|
|
248
|
+
.currencyType="${options.currencyType}"
|
|
249
|
+
.donationType="${options.donationType}"
|
|
250
|
+
.confirmDonation=${confirmDonation}
|
|
251
|
+
.cancelDonation=${cancelDonation}
|
|
252
|
+
></confirm-donation-modal>
|
|
253
|
+
`,
|
|
254
|
+
});
|
|
255
|
+
return this.modalManager.showModal({
|
|
256
|
+
config: modalConfig,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
|
|
215
260
|
/** @inheritdoc */
|
|
216
261
|
showUpsellModal(options: {
|
|
217
262
|
oneTimeAmount: number;
|
|
@@ -112,10 +112,39 @@ export class PayPalFlowHandler
|
|
|
112
112
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
113
113
|
options: object,
|
|
114
114
|
): Promise<void> {
|
|
115
|
+
console.log('payPalPaymentStarted *******', { dataSource, options });
|
|
115
116
|
this.emitter.emit('payPalPaymentStarted', dataSource, options);
|
|
116
117
|
}
|
|
117
118
|
|
|
118
|
-
async payPalPaymentAuthorized(
|
|
119
|
+
async payPalPaymentAuthorized(dataSource: PayPalButtonDataSourceInterface,
|
|
120
|
+
payload: paypal.TokenizePayload
|
|
121
|
+
): Promise<void> {
|
|
122
|
+
|
|
123
|
+
// we got dataSource & payload
|
|
124
|
+
// we need to send it to `payPalPaymentConfirmed`
|
|
125
|
+
// after patron confirms the payment
|
|
126
|
+
console.log('payPalPaymentAuthorized *******', { dataSource, payload });
|
|
127
|
+
|
|
128
|
+
const { donationType, amount } = dataSource.donationInfo;
|
|
129
|
+
this.donationFlowModalManager.showConfirmationStepModal({
|
|
130
|
+
donationType,
|
|
131
|
+
amount,
|
|
132
|
+
currencyType: 'USD', // defaults to USD for now
|
|
133
|
+
confirmDonationCB: () => {
|
|
134
|
+
this.payPalPaymentConfirmed(dataSource, payload);
|
|
135
|
+
},
|
|
136
|
+
cancelDonationCB: () => {
|
|
137
|
+
this.donationFlowModalManager.closeModal();
|
|
138
|
+
this.payPalPaymentCancelled(dataSource, {});
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// cancel payment on modal X
|
|
143
|
+
// cancel payment on cancel
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
async payPalPaymentConfirmed(
|
|
119
148
|
dataSource: PayPalButtonDataSourceInterface,
|
|
120
149
|
payload: paypal.TokenizePayload,
|
|
121
150
|
): Promise<void> {
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
GooglePayFlowHandler,
|
|
22
22
|
} from './handlers/googlepay-flow-handler';
|
|
23
23
|
import { UpsellModalCTAMode } from '../modals/upsell-modal-content';
|
|
24
|
+
import { DonationType } from '@internetarchive/donation-form-data-models';
|
|
24
25
|
|
|
25
26
|
export interface PaymentFlowHandlersInterface {
|
|
26
27
|
startup(): Promise<void>;
|
|
@@ -46,6 +47,14 @@ export interface PaymentFlowHandlersInterface {
|
|
|
46
47
|
userClosedModalCallback?: () => void;
|
|
47
48
|
}): Promise<void>;
|
|
48
49
|
|
|
50
|
+
showConfirmationStepModal(options: {
|
|
51
|
+
amount: number;
|
|
52
|
+
donationType: DonationType;
|
|
53
|
+
currencyType: string;
|
|
54
|
+
confirmDonationCB: Function;
|
|
55
|
+
cancelDonationCB: Function;
|
|
56
|
+
}): Promise<void>;
|
|
57
|
+
|
|
49
58
|
creditCardHandler: CreditCardFlowHandlerInterface | undefined;
|
|
50
59
|
paypalHandler: PayPalFlowHandlerInterface | undefined;
|
|
51
60
|
applePayHandler: ApplePayFlowHandlerInterface | undefined;
|
|
@@ -90,6 +99,17 @@ export class PaymentFlowHandlers implements PaymentFlowHandlersInterface {
|
|
|
90
99
|
return this.donationFlowModalManager.showUpsellModal(options);
|
|
91
100
|
}
|
|
92
101
|
|
|
102
|
+
/** @inheritdoc */
|
|
103
|
+
showConfirmationStepModal(options: {
|
|
104
|
+
amount: number;
|
|
105
|
+
donationType: DonationType;
|
|
106
|
+
currencyType: string;
|
|
107
|
+
confirmDonationCB: Function;
|
|
108
|
+
cancelDonationCB: Function;
|
|
109
|
+
}): Promise<void> {
|
|
110
|
+
return this.donationFlowModalManager.showConfirmationStepModal(options);
|
|
111
|
+
}
|
|
112
|
+
|
|
93
113
|
get creditCardHandler(): CreditCardFlowHandlerInterface | undefined {
|
|
94
114
|
if (this.creditCardHandlerCache) {
|
|
95
115
|
return this.creditCardHandlerCache;
|
package/dist/.DS_Store
DELETED
|
Binary file
|
package/dist/src/.DS_Store
DELETED
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"donation-form-config.js","sourceRoot":"","sources":["../../../src/models/donation-form-config.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAkB;IAG7B,YAAY,OAA8C;QACxD,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IACnE,CAAC;CACF","sourcesContent":["export class DonationFormConfig {\n showCreditCardButtonText: boolean;\n\n constructor(options: { showCreditCardButtonText: boolean }) {\n this.showCreditCardButtonText = options.showCreditCardButtonText;\n }\n}\n"]}
|
package/dist/test/.DS_Store
DELETED
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function promisedSleep(ms: number): Promise<void>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"promisedSleep.js","sourceRoot":"","sources":["../../../test/helpers/promisedSleep.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC","sourcesContent":["export function promisedSleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n"]}
|
package/src/.DS_Store
DELETED
|
Binary file
|
package/src/@types/.DS_Store
DELETED
|
Binary file
|
|
Binary file
|