module.exports = { isPopulated: false, ingredients: [], display: function(){ if(!this.isPopulated){ this.populateByProperty("category"); document.getElementById("ingredientSearch").oninput = ()=>{this.search()}; document.getElementById("ingredientClearButton").onclick = ()=>{this.clearSorting()}; document.getElementById("ingredientSelect").onchange = ()=>{this.sort()}; this.isPopulated = true; } }, populateByProperty: function(property){ let categories; if(property === "category"){ categories = merchant.categorizeIngredients(); }else if(property === "unit"){ categories = merchant.unitizeIngredients(); } let ingredientStrand = document.getElementById("categoryList"); let categoryTemplate = document.getElementById("categoryDiv").content.children[0]; let ingredientTemplate = document.getElementById("ingredient").content.children[0]; this.ingredients = []; while(ingredientStrand.children.length > 0){ ingredientStrand.removeChild(ingredientStrand.firstChild); } for(let i = 0; i < categories.length; i++){ let categoryDiv = categoryTemplate.cloneNode(true); categoryDiv.children[0].children[0].innerText = categories[i].name; categoryDiv.children[0].children[1].onclick = ()=>{ this.toggleCategory(categoryDiv.children[1], categoryDiv.children[0].children[1]); }; categoryDiv.children[1].style.display = "none"; ingredientStrand.appendChild(categoryDiv); for(let j = 0; j < categories[i].ingredients.length; j++){ let ingredient = categories[i].ingredients[j]; let ingredientDiv = ingredientTemplate.cloneNode(true); ingredientDiv.children[0].innerText = ingredient.ingredient.name; ingredientDiv.children[2].innerText = `${ingredient.ingredient.convert(ingredient.quantity).toFixed(2)} ${ingredient.ingredient.unit.toUpperCase()}`; ingredientDiv.onclick = ()=>{controller.openSidebar("ingredientDetails", ingredient)}; ingredientDiv._name = ingredient.ingredient.name.toLowerCase(); ingredientDiv._unit = ingredient.ingredient.unit.toLowerCase(); categoryDiv.children[1].appendChild(ingredientDiv); this.ingredients.push(ingredientDiv); } } }, displayIngredientsOnly: function(ingredients){ let ingredientDiv = document.getElementById("categoryList"); while(ingredientDiv.children.length > 0){ ingredientDiv.removeChild(ingredientDiv.firstChild); } for(let i = 0; i < ingredients.length; i++){ ingredientDiv.appendChild(ingredients[i]); } }, toggleCategory: function(div, button){ if(div.style.display === "none"){ button.innerHTML = ''; div.style.display = "flex"; }else if(div.style.display === "flex"){ button.innerHTML = ''; div.style.display = "none"; } }, search: function(){ let input = document.getElementById("ingredientSearch").value.toLowerCase(); document.getElementById("ingredientSelect").selectedIndex = 0; if(input === ""){ this.populateByProperty("category"); document.getElementById("ingredientClearButton").style.display = "none"; return; } let matchingIngredients = []; for(let i = 0; i < this.ingredients.length; i++){ if(this.ingredients[i]._name.includes(input)){ matchingIngredients.push(this.ingredients[i]); } } document.getElementById("ingredientClearButton").style.display = "inline"; this.displayIngredientsOnly(matchingIngredients); }, sort: function(){ let sortType = document.getElementById("ingredientSelect").value; if(sortType === ""){ return; } document.getElementById("ingredientSearch").value = ""; if(sortType === "category"){ this.populateByProperty("category"); return; } if(sortType === "unit"){ this.populateByProperty("unit"); return; } document.getElementById("ingredientClearButton").style.display = "inline"; let sortedIngredients = this.ingredients.slice().sort((a, b)=> (a[sortType] > b[sortType]) ? 1 : -1); this.displayIngredientsOnly(sortedIngredients); }, clearSorting: function(button){ document.getElementById("ingredientSearch").value = ""; document.getElementById("ingredientSelect").selectedIndex = 0; document.getElementById("ingredientClearButton").style.display = "none"; this.populateByProperty("category"); } }