function AddressListViewModel()

in src/Feature/Cart/code/Scripts/ViewModels/addresses_VM.js [54:165]


function AddressListViewModel(data) {
    var self = this;

    self.addresses = ko.observableArray();
    $.each(data.Addresses, function () {
        self.addresses.push(new AddressViewModel(this));
    });

    self.isNotEmpty = ko.observable(self.addresses().length !== 0);
    self.isEmpty = ko.observable(self.addresses().length === 0);
    self.enableDelete = ko.observable(false);
    self.enableSave = ko.observable(true);

    self.countries = ko.observableArray();
    if (data.Countries != null) {
        $.each(data.Countries, function (code, name) {
            self.countries.push(new CountryStateViewModel(name, code));
        });
    }

    self.address = ko.validatedObservable(new AddressViewModel());
    self.selectedAddress = ko.observable();
    self.selectedAddress.subscribe(function (externalId) {
        var address = ko.utils.arrayFirst(this.addresses(), function (a) {
            if (a.externalId() === externalId) {
                return a;
            }

            return null;
        });

        ClearGlobalMessages();
        if (address != null) {
            self.address(address);
            self.enableDelete(true);
        } else {
            self.address(new AddressViewModel());
            self.enableDelete(false);
        }
    }.bind(this));

    var addressId = getUrlParameter(document.URL, 'id');
    if (addressId != null) {
        self.selectedAddress(addressId);
    }

    self.reload = function (data) {
        if (data.Addresses != null) {
            self.addresses.removeAll();
            $.each(data.Addresses, function () {
                self.addresses.push(new AddressViewModel(this));
            });
        }

        if (data.Countries != null && data.Countries.length > 0) {
            self.countries.removeAll();
            $.each(data.Countries, function (code, name) {
                self.countries.push(new CountryStateViewModel(name, code));
            });
        }

        self.selectedAddress("");
        self.address(new AddressViewModel());
        self.isNotEmpty(self.addresses().length !== 0);
        self.isEmpty(self.addresses().length === 0);
        self.enableDelete(false);
        self.enableSave(true);
        $("#cancelChanges").removeAttr("disabled");
    }

    self.saveAddress = function () {
        ClearGlobalMessages();
        if (self.address.errors().length === 0) {
            states('saveAddress', 'loading');
            $("#cancelChanges").attr("disabled", "disabled");
            self.enableDelete(false);
            var address = ko.toJSON(self.address);

            AJAXPost(StorefrontUri('api/sitecore/account/addressmodify'), address, function (data, success, sender) {
                if (success && data.Success) {
                    self.reload(data);
                }

                ShowGlobalMessages(data);
                $('#saveAddress').button('reset');
            }, this);
        } else {
            $('#addressBook-Name').focus();
            self.address.errors.showAllMessages();
        }
    }

    self.deleteAddress = function () {
        ClearGlobalMessages();
        $("#deleteAddress").prop("disabled", true);
        $("#deleteAddress").html($("#deleteAddress").attr("data-loading-text"));
        self.enableSave(false);
        $("#cancelChanges").attr("disabled", "disabled");

        AJAXPost(StorefrontUri('api/sitecore/account/addressdelete'), '{ "ExternalId": "' + self.address().externalId() + '"}', function (data, success, sender) {
            if (success && data.Success) {
                self.reload(data);
            }

            ShowGlobalMessages(data);
            $("#deleteAddress").prop("disabled", true);
            $("#deleteAddress").html($("#deleteAddress").attr("data-text"));
        }, this);
    }

    self.showLoader = ko.observable(true);
}