addIngredient.js 6.1 KB

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