Repository URL to install this package:
|
Version:
0.0.15 ▾
|
import * as tslib_1 from "tslib";
/**
* @todo @typings @see session-container typings for responses
*/
import { action, computed } from 'xmobx/mobx';
import { isString } from 'exotic';
import { getTyped } from 'composition';
import { isErrorLikeResponse } from '@skava/is-error-like-response';
import { ObservableContainer } from '@skava/packages/libraries/observable-container';
import { errorContainer, toastMessage } from '@skava/packages/core/notifications';
import { makeDefaultPaymentParams } from '@skava/packages/core/addressAndPayment/deps';
import { updateCardPaymentBinding, addCardBinding, deleteCardBinding, getPaymentsBinding, changeDefaultCardBinding, } from './bindings';
import { isInvalidUser, notifyOnAddCardError, toStatus, isPaymentFailureResponse } from './deps';
/**
* @todo @@fixme !!! CIRCULAR !!!
*/
import { userContainer } from './container';
function fromSerializedToAddToCartVariables(serialized) {
// avoid circular imports...
const { billingAddress, expirationYear } = serialized;
// @todo do on graphql side !!!!!!!!!!!!!
if (isString(serialized.expirationYear) && serialized.expirationYear.length === 2) {
serialized.expirationYear = '20' + `${expirationYear}`;
}
const addCardParams = {
expirationyear: serialized.expirationYear,
expirationmonth: serialized.expirationMonth,
cardType: serialized.cardType,
cardNumber: serialized.cardNumber,
makeDefaultCard: serialized.makeDefaultCard,
firstName: serialized.firstName,
lastName: serialized.lastName,
};
const variables = {
email: userContainer.email || 'nouser@nomail.com',
creditCard: addCardParams,
address: billingAddress,
};
return variables;
}
class UserPaymentsContainer extends ObservableContainer {
async fetchCards() {
const { userPaymentsResponse } = await getPaymentsBinding();
userContainer.updateCards(userPaymentsResponse);
}
/**
* @see userContainer
*/
get cardList() {
return userContainer.cardList;
}
async addCard(serialized) {
const variables = fromSerializedToAddToCartVariables(serialized);
const { addCardResponse } = await addCardBinding(variables);
notifyOnAddCardError(addCardResponse);
this.fetchCards();
return addCardResponse;
}
async deleteCard(cardId) {
const { response, deleteCardResponse } = await deleteCardBinding(cardId);
this.fetchCards();
const deletedCardAPIResponse = getTyped(response.data).obj('deleteCard');
const isFailureResponse = isPaymentFailureResponse(deletedCardAPIResponse);
const toastText = isFailureResponse
? toStatus(deleteCardResponse)
: isErrorLikeResponse(response) || isInvalidUser(deleteCardResponse)
? toastMessage.deleteCardFailure
: toastMessage.deleteCardSuccess;
errorContainer.setMessage(toastText);
return response;
}
async changeDefaultCard(params) {
console.log('__changeDefaultCard___', params);
const defaultPaymentParams = makeDefaultPaymentParams(params);
const { response, changeDefaultCardResponse } = await changeDefaultCardBinding(defaultPaymentParams);
this.fetchCards();
const toastText = isErrorLikeResponse(response) || isInvalidUser(changeDefaultCardResponse)
? toastMessage.setDefaultCardFailure
: toastMessage.setDefaultCardSuccess;
errorContainer.setMessage(toastText);
return response;
}
async updateCardPayment(params) {
console.log('__updateCardPayment___', params);
const updatePaymentParams = makeDefaultPaymentParams(params);
const { response, updateCardResponse } = await updateCardPaymentBinding(updatePaymentParams);
this.fetchCards();
const toastText = isErrorLikeResponse(response) || isInvalidUser(updateCardResponse)
? toastMessage.updateCardFailure
: toastMessage.updateCardSuccess;
errorContainer.setMessage(toastText);
return response;
}
}
UserPaymentsContainer.debugName = 'UserPayments_core';
tslib_1.__decorate([
action
], UserPaymentsContainer.prototype, "fetchCards", null);
tslib_1.__decorate([
computed
], UserPaymentsContainer.prototype, "cardList", null);
tslib_1.__decorate([
action
], UserPaymentsContainer.prototype, "addCard", null);
tslib_1.__decorate([
action.bound
], UserPaymentsContainer.prototype, "deleteCard", null);
tslib_1.__decorate([
action.bound
], UserPaymentsContainer.prototype, "changeDefaultCard", null);
tslib_1.__decorate([
action.bound
], UserPaymentsContainer.prototype, "updateCardPayment", null);
const paymentsContainer = new UserPaymentsContainer();
export { makeDefaultPaymentParams };
export { UserPaymentsContainer, paymentsContainer };
export default paymentsContainer;
//# sourceMappingURL=container.payments.js.map