52 lines
1.3 KiB
JavaScript
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);
|