ingredients.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. this.ingredients = [];
  13. let ingredientStrand = document.querySelector("#categoryList");
  14. while(ingredientStrand.children.length > 0){
  15. ingredientStrand.removeChild(ingredientStrand.firstChild);
  16. }
  17. for(let i = 0; i < categories.length; i++){
  18. let categoryDiv = document.createElement("div");
  19. categoryDiv.classList = "categoryDiv"
  20. ingredientStrand.appendChild(categoryDiv);
  21. let headerDiv = document.createElement("div");
  22. categoryDiv.appendChild(headerDiv);
  23. let headerTitle = document.createElement("p");
  24. headerTitle.innerText = categories[i].name;
  25. headerDiv.appendChild(headerTitle);
  26. let ingredientsDiv = document.createElement("div");
  27. ingredientsDiv.classList = "ingredientsDiv";
  28. ingredientsDiv.style.display = "none";
  29. categoryDiv.appendChild(ingredientsDiv);
  30. let headerButton = document.createElement("button");
  31. headerButton.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>';
  32. headerButton.onclick = ()=>{this.toggleCategory(ingredientsDiv, headerButton)};
  33. headerDiv.appendChild(headerButton);
  34. for(let j = 0; j < categories[i].ingredients.length; j++){
  35. let ingredientDiv = document.createElement("div");
  36. ingredientDiv.classList = "ingredient";
  37. ingredientDiv.onclick = ()=>{ingredientDetailsComp.display(categories[i].ingredients[j], categories[i])};
  38. ingredientsDiv.appendChild(ingredientDiv);
  39. ingredientDiv._name = categories[i].ingredients[j].name.toLowerCase();
  40. ingredientDiv._unit = categories[i].ingredients[j].unit.toLowerCase();
  41. let ingredientName = document.createElement("p");
  42. ingredientName.innerText = categories[i].ingredients[j].name;
  43. ingredientDiv.appendChild(ingredientName);
  44. let spacer = document.createElement("hr");
  45. spacer.classList = "ingredientSpacer";
  46. ingredientDiv.appendChild(spacer);
  47. let ingredientData = document.createElement("p");
  48. ingredientData.innerText = `${categories[i].ingredients[j].quantity} ${categories[i].ingredients[j].unit}`;
  49. ingredientDiv.appendChild(ingredientData);
  50. this.ingredients.push(ingredientDiv);
  51. }
  52. }
  53. },
  54. displayIngredientsOnly: function(ingredients){
  55. let ingredientDiv = document.querySelector("#categoryList");
  56. while(ingredientDiv.children.length > 0){
  57. ingredientDiv.removeChild(ingredientDiv.firstChild);
  58. }
  59. for(let i = 0; i < ingredients.length; i++){
  60. ingredientDiv.appendChild(ingredients[i]);
  61. }
  62. },
  63. //Open or close the list of ingredients for a category
  64. toggleCategory: function(div, button){
  65. if(div.style.display === "none"){
  66. 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>';
  67. div.style.display = "flex";
  68. }else if(div.style.display === "flex"){
  69. 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>';
  70. div.style.display = "none";
  71. }
  72. },
  73. search: function(){
  74. let input = document.querySelector("#ingredientSearch").value.toLowerCase();
  75. if(input === ""){
  76. this.populateIngredients();
  77. return;
  78. }
  79. let matchingIngredients = [];
  80. for(let i = 0; i < this.ingredients.length; i++){
  81. if(this.ingredients[i]._name.includes(input)){
  82. matchingIngredients.push(this.ingredients[i]);
  83. }
  84. }
  85. this.displayIngredientsOnly(matchingIngredients);
  86. },
  87. sort: function(sortType){
  88. if(sortType === ""){
  89. return;
  90. }
  91. document.querySelector("#ingredientSearch").value = "";
  92. if(sortType === "category"){
  93. this.populateIngredients();
  94. return;
  95. }
  96. let sortedIngredients = this.ingredients.slice().sort((a, b)=> (a[sortType] > b[sortType]) ? 1 : -1);
  97. this.displayIngredientsOnly(sortedIngredients);
  98. }
  99. }