Mypal68/browser/components/payments/res/mixins/PaymentStateSubscriberMixin.js
2022-04-16 07:41:55 +03:00

113 lines
2.8 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import PaymentsStore from "../PaymentsStore.js";
/**
* A mixin for a custom element to observe store changes to information about a payment request.
*/
/**
* State of the payment request dialog.
*/
export let requestStore = new PaymentsStore({
changesPrevented: false,
orderDetailsShowing: false,
"basic-card-page": {
guid: null,
// preserveFieldValues: true,
selectedStateKey: "selectedPaymentCard",
},
"shipping-address-page": {
guid: null,
},
"payer-address-page": {
guid: null,
},
"billing-address-page": {
guid: null,
},
"payment-summary": {},
page: {
id: "payment-summary",
previousId: null,
// onboardingWizard: true,
// error: "",
},
request: {
completeStatus: "",
tabId: null,
topLevelPrincipal: { URI: { displayHost: null } },
requestId: null,
paymentMethods: [],
paymentDetails: {
id: null,
totalItem: { label: null, amount: { currency: null, value: 0 } },
displayItems: [],
payerErrors: {},
paymentMethodErrors: null,
shippingAddressErrors: {},
shippingOptions: [],
modifiers: null,
error: "",
},
paymentOptions: {
requestPayerName: false,
requestPayerEmail: false,
requestPayerPhone: false,
requestShipping: false,
shippingType: "shipping",
},
shippingOption: null,
},
selectedPayerAddress: null,
selectedPaymentCard: null,
selectedPaymentCardSecurityCode: null,
selectedShippingAddress: null,
selectedShippingOption: null,
savedAddresses: {},
savedBasicCards: {},
tempAddresses: {},
tempBasicCards: {},
});
/**
* A mixin to render UI based upon the requestStore and get updated when that store changes.
*
* Attaches `requestStore` to the element to give access to the store.
* @param {class} superClass The class to extend
* @returns {class}
*/
export default function PaymentStateSubscriberMixin(superClass) {
return class PaymentStateSubscriber extends superClass {
constructor() {
super();
this.requestStore = requestStore;
}
connectedCallback() {
this.requestStore.subscribe(this);
this.render(this.requestStore.getState());
if (super.connectedCallback) {
super.connectedCallback();
}
}
disconnectedCallback() {
this.requestStore.unsubscribe(this);
if (super.disconnectedCallback) {
super.disconnectedCallback();
}
}
/**
* Called by the store upon state changes.
* @param {object} state The current state
*/
stateChangeCallback(state) {
this.render(state);
}
};
}