ingredients.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. window.ingredientsStrandObj = {
  2. isPopulated: false,
  3. ingredients: [],
  4. display: function(){
  5. if(!this.isPopulated){
  6. this.populateIngredients();
  7. this.isPopulated = true;
  8. }
  9. },
  10. populateIngredients: function(){
  11. let categories = categorizeIngredients(merchant.inventory);
  12. let ingredientStrand = document.querySelector("#categoryList");
  13. let categoryTemplate = document.querySelector("#categoryDiv").content.children[0];
  14. let ingredientTemplate = document.querySelector("#ingredient").content.children[0];
  15. this.ingredients = [];
  16. while(ingredientStrand.children.length > 0){
  17. ingredientStrand.removeChild(ingredientStrand.firstChild);
  18. }
  19. for(let i = 0; i < categories.length; i++){
  20. let categoryDiv = categoryTemplate.cloneNode(true);
  21. categoryDiv.children[0].children[0].innerText = categories[i].name;
  22. categoryDiv.children[0].children[1].onclick = ()=>{this.toggleCategory(categoryDiv.children[1], categoryDiv.children[0].children[1])};
  23. categoryDiv.children[1].style.display = "none";
  24. ingredientStrand.appendChild(categoryDiv);
  25. for(let j = 0; j < categories[i].ingredients.length; j++){
  26. let ingredient = categories[i].ingredients[j];
  27. let ingredientDiv = ingredientTemplate.cloneNode(true);
  28. ingredientDiv.children[0].innerText = ingredient.name;
  29. ingredientDiv.children[2].innerText = `${ingredient.quantity} ${ingredient.unit}`;
  30. ingredientDiv.onclick = ()=>{ingredientDetailsComp.display(ingredient, categories[i])};
  31. ingredientDiv._name = ingredient.name.toLowerCase();
  32. ingredientDiv._unit = ingredient.unit.toLowerCase();
  33. categoryDiv.children[1].appendChild(ingredientDiv);
  34. this.ingredients.push(ingredientDiv);
  35. }
  36. }
  37. },
  38. displayIngredientsOnly: function(ingredients){
  39. let ingredientDiv = document.querySelector("#categoryList");
  40. while(ingredientDiv.children.length > 0){
  41. ingredientDiv.removeChild(ingredientDiv.firstChild);
  42. }
  43. for(let i = 0; i < ingredients.length; i++){
  44. ingredientDiv.appendChild(ingredients[i]);
  45. }
  46. },
  47. //Open or close the list of ingredients for a category
  48. toggleCategory: function(div, button){
  49. if(div.style.display === "none"){
  50. button.innerHTML = '<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="18 15 12 9 6 15"></polyline></svg>';
  51. div.style.display = "flex";
  52. }else if(div.style.display === "flex"){
  53. button.innerHTML = '<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>';
  54. div.style.display = "none";
  55. }
  56. },
  57. search: function(){
  58. let input = document.querySelector("#ingredientSearch").value.toLowerCase();
  59. if(input === ""){
  60. this.populateIngredients();
  61. return;
  62. }
  63. let matchingIngredients = [];
  64. for(let i = 0; i < this.ingredients.length; i++){
  65. if(this.ingredients[i]._name.includes(input)){
  66. matchingIngredients.push(this.ingredients[i]);
  67. }
  68. }
  69. this.displayIngredientsOnly(matchingIngredients);
  70. },
  71. sort: function(sortType){
  72. if(sortType === ""){
  73. return;
  74. }
  75. document.querySelector("#ingredientSearch").value = "";
  76. if(sortType === "category"){
  77. this.populateIngredients();
  78. return;
  79. }
  80. let sortedIngredients = this.ingredients.slice().sort((a, b)=> (a[sortType] > b[sortType]) ? 1 : -1);
  81. this.displayIngredientsOnly(sortedIngredients);
  82. }
  83. }