Repository URL to install this package:
|
Version:
0.0.15 ▾
|
import * as tslib_1 from "tslib";
import { action } from 'xmobx/mobx';
import { getTyped } from 'composition';
import { ObservableContainer } from '@skava/packages/libraries/observable-container';
import { isErrorLikeResponse } from '@skava/is-error-like-response';
import { toastMessage } from '@skava/packages/core/notifications';
import { errorContainer } from '@skava/packages/core/notifications';
import { toDefaultAddressParams } from '@skava/packages/core/addressAndPayment/deps.address';
import { updateShippingAddress, makeDefaultShippingAddress, addShippingAddress, removeShippingAddress, fetchAddress, } from './bindings';
import { toAddressParams, getToastMessage, getAddAddressParams, isToShowMakeDefaultCheckbox, } from './deps';
import { userContainer } from './container';
class ShippingAddressApi extends ObservableContainer {
constructor() {
super(...arguments);
this.fetchAddresses = async (toastText) => {
const response = await fetchAddress();
if (response && response.data && response.data.getUserAddresses) {
userContainer.updateAddresses(response.data.getUserAddresses);
return response.data;
}
else {
errorContainer.setMessage(toastText);
return '';
}
};
}
get addressinfo() {
return userContainer.addressinfo;
}
async addAddress(params) {
const address = getAddAddressParams(this.addressinfo, params);
const response = await addShippingAddress(address);
const toastText = isErrorLikeResponse(response)
? toastMessage.addAddressFailure
: toastMessage.addAddressSuccess;
/** @todo no return */
return this.fetchAddresses(toastText);
}
// @computed...
checkToShowMakeDefaultCheckbox() {
isToShowMakeDefaultCheckbox(this.addressinfo);
}
async makeAnotherAddressAsDefault(removedAddressId) {
const addressList = this.addressinfo;
// @todo [first, second]
if (addressList.length > 1) {
const [first, second] = addressList;
if (removedAddressId === first.addressId) {
this.changeDefaultAddress(second);
}
else {
this.changeDefaultAddress(first);
}
}
}
async renderToastMessage(response, params) {
const toastText = getToastMessage(response, params);
if (isErrorLikeResponse(response) === false && params.isDefault === true) {
await this.makeAnotherAddressAsDefault(params.addressId);
}
return toastText;
}
async removeAddress(params) {
const response = await removeShippingAddress(params.addressId);
const { obj } = getTyped(response);
const removeAddressResponse = obj('response.data.removeAddressFromProfile');
const toastText = await this.renderToastMessage(removeAddressResponse, params);
return this.fetchAddresses(toastText);
}
/**
* @see https://bitbucket.org/skava-admin/reference-store/pull-requests/2173/sonarqube-issues/diff?w=1#comment-88955349
* @todo never use callback, use async
*/
async updateAddress(params, addressItem, onToggleAddress) {
const defaultAddress = params.makeDefaultAddress ? params.makeDefaultAddress : false;
const addressParams = toAddressParams(params);
const address = {
addressParams,
isDefault: defaultAddress,
addressId: addressItem.addressId,
};
const response = await updateShippingAddress(address);
const toastText = isErrorLikeResponse(response)
? toastMessage.updateAddressFailure
: toastMessage.updateAddressSuccess;
// if (isFunction(onToggleAddress)) {
// onToggleAddress()
// }
/** @todo return void */
return this.fetchAddresses(toastText);
}
async changeDefaultAddress(params) {
const address = toDefaultAddressParams(params);
const response = await makeDefaultShippingAddress(address);
const toastText = isErrorLikeResponse(response)
? toastMessage.setDefaultAddressFailure
: toastMessage.setDefaultAddressSuccess;
return this.fetchAddresses(toastText);
}
}
ShippingAddressApi.debugName = 'ShippingAddressApi';
tslib_1.__decorate([
action.bound
], ShippingAddressApi.prototype, "addAddress", null);
tslib_1.__decorate([
action
], ShippingAddressApi.prototype, "makeAnotherAddressAsDefault", null);
tslib_1.__decorate([
action.bound
], ShippingAddressApi.prototype, "removeAddress", null);
tslib_1.__decorate([
action.bound
], ShippingAddressApi.prototype, "updateAddress", null);
tslib_1.__decorate([
action.bound
], ShippingAddressApi.prototype, "changeDefaultAddress", null);
const shippingContainer = new ShippingAddressApi();
export { ShippingAddressApi, shippingContainer };
export default shippingContainer;
//# sourceMappingURL=container.shipping.js.map