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