ingredients.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. window.ingredientsStrandObj = {
  2. isPopulated: false,
  3. ingredients: [],
  4. display: function(){
  5. if(!this.isPopulated){
  6. this.populateByProperty("category");
  7. this.isPopulated = true;
  8. }
  9. },
  10. populateByProperty: function(property){
  11. let categories;
  12. if(property === "category"){
  13. categories = merchant.categorizeIngredients();
  14. }else if(property === "unit"){
  15. categories = merchant.unitizeIngredients();
  16. console.log(categories);
  17. }
  18. let ingredientStrand = document.querySelector("#categoryList");
  19. let categoryTemplate = document.querySelector("#categoryDiv").content.children[0];
  20. let ingredientTemplate = document.querySelector("#ingredient").content.children[0];
  21. this.ingredients = [];
  22. while(ingredientStrand.children.length > 0){
  23. ingredientStrand.removeChild(ingredientStrand.firstChild);
  24. }
  25. for(let i = 0; i < categories.length; i++){
  26. let categoryDiv = categoryTemplate.cloneNode(true);
  27. categoryDiv.children[0].children[0].innerText = categories[i].name;
  28. categoryDiv.children[0].children[1].onclick = ()=>{this.toggleCategory(categoryDiv.children[1], categoryDiv.children[0].children[1])};
  29. categoryDiv.children[1].style.display = "none";
  30. ingredientStrand.appendChild(categoryDiv);
  31. for(let j = 0; j < categories[i].ingredients.length; j++){
  32. let ingredient = categories[i].ingredients[j];
  33. let ingredientDiv = ingredientTemplate.cloneNode(true);
  34. ingredientDiv.children[0].innerText = ingredient.ingredient.name;
  35. ingredientDiv.children[2].innerText = `${ingredient.quantity} ${ingredient.ingredient.unit}`;
  36. ingredientDiv.onclick = ()=>{ingredientDetailsComp.display(ingredient)};
  37. ingredientDiv._name = ingredient.ingredient.name.toLowerCase();
  38. ingredientDiv._unit = ingredient.ingredient.unit.toLowerCase();
  39. categoryDiv.children[1].appendChild(ingredientDiv);
  40. this.ingredients.push(ingredientDiv);
  41. }
  42. }
  43. },
  44. displayIngredientsOnly: function(ingredients){
  45. let ingredientDiv = document.querySelector("#categoryList");
  46. while(ingredientDiv.children.length > 0){
  47. ingredientDiv.removeChild(ingredientDiv.firstChild);
  48. }
  49. for(let i = 0; i < ingredients.length; i++){
  50. ingredientDiv.appendChild(ingredients[i]);
  51. }
  52. },
  53. toggleCategory: function(div, button){
  54. if(div.style.display === "none"){
  55. 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>';
  56. div.style.display = "flex";
  57. }else if(div.style.display === "flex"){
  58. 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>';
  59. div.style.display = "none";
  60. }
  61. },
  62. search: function(){
  63. let input = document.querySelector("#ingredientSearch").value.toLowerCase();
  64. document.querySelector("#ingredientSelect").selectedIndex = 0;
  65. if(input === ""){
  66. this.populateByProperty("category");
  67. document.querySelector("#ingredientClearButton").style.display = "none";
  68. return;
  69. }
  70. let matchingIngredients = [];
  71. for(let i = 0; i < this.ingredients.length; i++){
  72. if(this.ingredients[i]._name.includes(input)){
  73. matchingIngredients.push(this.ingredients[i]);
  74. }
  75. }
  76. document.querySelector("#ingredientClearButton").style.display = "inline";
  77. this.displayIngredientsOnly(matchingIngredients);
  78. },
  79. sort: function(sortType){
  80. if(sortType === ""){
  81. return;
  82. }
  83. document.querySelector("#ingredientSearch").value = "";
  84. if(sortType === "category"){
  85. this.populateByProperty("category");
  86. return;
  87. }
  88. if(sortType === "unit"){
  89. this.populateByProperty("unit");
  90. return;
  91. }
  92. document.querySelector("#ingredientClearButton").style.display = "inline";
  93. let sortedIngredients = this.ingredients.slice().sort((a, b)=> (a[sortType] > b[sortType]) ? 1 : -1);
  94. this.displayIngredientsOnly(sortedIngredients);
  95. },
  96. clearSorting: function(button){
  97. document.querySelector("#ingredientSearch").value = "";
  98. document.querySelector("#ingredientSelect").selectedIndex = 0;
  99. document.querySelector("#ingredientClearButton").style.display = "none";
  100. this.populateByProperty("category");
  101. }
  102. }