safaribook-knockout-essentials/ko-cart/js/viewmodel.js

52 lines
1.3 KiB
JavaScript

"use strict";
var vm = (function () {
var catalog = ko.observableArray([
Product(1, "T-Shirt", 10.0, 20),
Product(2, "Trousers", 20.0, 10),
Product(3, "Shirt", 15.0, 20),
Product(4, "Shorts", 5.0, 10),
]);
var newProduct = Product("", "", "", "");
var clearNewProduct = function () {
newProduct.name("");
newProduct.price("");
newProduct.stock("");
};
var addProduct = function (context) {
var id = new Date().valueOf(); // random id from time
var product = Product(id, context.name(), context.price(), context.stock());
catalog.push(product);
clearNewProduct();
};
var searchTerm = ko.observable("");
var filteredCatalog = ko.computed(function () {
// if catalog is empty return empty array
if (!catalog()) {
return [];
}
var filter = searchTerm().toLowerCase();
// if filter is empty return all the catalog
if (!filter) {
return catalog();
}
//filter data
var filtered = ko.utils.arrayFilter(catalog(), function (item) {
var strProp = ko.unwrap(item["name"]).toLocaleLowerCase();
return (strProp.indexOf(filter) > -1);
});
return filtered;
});
return {
searchTerm: searchTerm,
catalog: filteredCatalog,
newProduct: newProduct,
addProduct: addProduct,
};
})();
ko.applyBindings(vm);