ingredients.js 5.7 KB

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