Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/packages / core / auth / user / container.shipping.js
Size: Mime:
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