"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);