addIngredient.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. window.addIngredientObj = {
  2. isPopulated: false,
  3. rows: [],
  4. currentSort: 0,
  5. display: function(){
  6. clearScreen();
  7. document.querySelector("#addIngredientAction").style.display = "flex";
  8. if(!this.isPopulated){
  9. this.filter();
  10. this.isPopulated = true;
  11. }
  12. },
  13. filter: function(){
  14. this.rows = [];
  15. axios.get("/ingredients")
  16. .then((response)=>{
  17. if(typeof(response.data) === "string"){
  18. banner.createError(response.data);
  19. }else{
  20. for(let ingredient of response.data){
  21. let exists = false;
  22. for(let merchIngredient of merchant.inventory){
  23. if(ingredient._id === merchIngredient.ingredient._id){
  24. exists = true;
  25. break;
  26. }
  27. }
  28. let searchStr = document.querySelector("#addFilter").value;
  29. if(!exists && ingredient.name.includes(searchStr)){
  30. let row = document.createElement("tr");
  31. row._id = ingredient._id;
  32. this.rows.push(row);
  33. let checkbox = document.createElement("td");
  34. row.appendChild(checkbox);
  35. let checkboxInput = document.createElement("input");
  36. checkboxInput.type = "checkbox";
  37. checkbox.appendChild(checkboxInput);
  38. let name = document.createElement("td");
  39. name.innerText = ingredient.name;
  40. row.appendChild(name);
  41. let category = document.createElement("td");
  42. category.innerText = ingredient.category;
  43. row.appendChild(category);
  44. let unit = document.createElement("td");
  45. unit.innerText = ingredient.unit;
  46. row.appendChild(unit);
  47. let quantity = document.createElement("td");
  48. row.appendChild(quantity);
  49. let quantityInput = document.createElement("input");
  50. quantityInput.type = "number";
  51. quantityInput.step = "0.01";
  52. quantityInput.min = "0";
  53. quantity.appendChild(quantityInput);
  54. }
  55. }
  56. this.displayIngredients();
  57. }
  58. })
  59. .catch((err)=>{
  60. banner.createError("Error: Could not retrieve ingredients");
  61. inventoryObj.display();
  62. });
  63. },
  64. displayIngredients: function(){
  65. let tbody = document.querySelector("#addIngredientAction tbody");
  66. while(tbody.children.length > 0){
  67. tbody.removeChild(tbody.firstChild);
  68. }
  69. for(let row of this.rows){
  70. tbody.appendChild(row);
  71. }
  72. },
  73. sort: function(child){
  74. if(this.currentSort === child){
  75. this.rows.sort((a, b) => (a.children[child].innerText > b.children[child].innerText) ? -1 : 1);
  76. this.currentSort = 0;
  77. }else{
  78. this.rows.sort((a, b) => (a.children[child].innerText > b.children[child].innerText) ? 1 : -1);
  79. this.currentSort = child;
  80. }
  81. this.displayIngredients();
  82. },
  83. submitAdd: function(){
  84. event.preventDefault();
  85. let addList = [];
  86. for(let row of this.rows){
  87. if(row.children[0].children[0].checked){
  88. let quantity = row.children[4].children[0].value;
  89. if(validator.ingredient.quantity(quantity)){
  90. addList.push({
  91. id: row._id,
  92. quantity: quantity
  93. });
  94. }else{
  95. break;
  96. }
  97. }
  98. }
  99. axios.post("/merchant/ingredients/create", addList)
  100. .then((response)=>{
  101. if(typeof(response.data) === "string"){
  102. banner.createError(response.data);
  103. }else{
  104. banner.createNotification("All ingredients successfully added");
  105. merchant.inventory = response.data;
  106. this.isPopulated = false;
  107. window.inventoryObj.isPopulated = false;
  108. window.inventoryObj.display();
  109. }
  110. })
  111. .catch((err)=>{
  112. banner.createError("Error: Something went wrong. Try refreshing the page");
  113. });
  114. },
  115. submitNew: function(){
  116. event.preventDefault();
  117. let ingredient = {
  118. name: document.querySelector("#newName").value,
  119. category: document.querySelector("#newCategory").value,
  120. unit: document.querySelector("#newUnit").value
  121. }
  122. let quantity = document.querySelector("#newQuantity").value;
  123. if(validator.ingredient.all(ingredient, quantity)){
  124. axios.post("/ingredients/createone", {ingredient: ingredient, quantity: quantity})
  125. .then((response)=>{
  126. if(typeof(response.data) === "string"){
  127. banner.createError(response.data);
  128. }else{
  129. merchant.inventory.push(response.data);
  130. inventoryObj.display();
  131. inventoryObj.filter();
  132. for(let input of document.querySelectorAll("#createIngredientInput input")){
  133. input.value = "";
  134. }
  135. }
  136. })
  137. .catch((err)=>{
  138. banner.createError("Something went wrong and the ingredient could not be created");
  139. });
  140. }
  141. }
  142. }