ingredients.js 5.7 KB

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