inventory.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. let items = [];
  2. let tbody = document.querySelector("tbody");
  3. let renderIngredients = ()=>{
  4. while(tbody.hasChildNodes()){
  5. tbody.removeChild(tbody.firstChild);
  6. }
  7. for(let item of items){
  8. let row = document.createElement("tr");
  9. tbody.appendChild(row);
  10. let name = document.createElement("td");
  11. name.innerText = item.name;
  12. row.appendChild(name);
  13. let category = document.createElement("td");
  14. category.innerText = item.category;
  15. row.appendChild(category);
  16. let quantity = document.createElement("td");
  17. quantity.innerText = item.quantity;
  18. row.appendChild(quantity);
  19. let unit = document.createElement("td");
  20. unit.innerText = item.unit;
  21. row.appendChild(unit);
  22. let action = document.createElement("td");
  23. row.appendChild(action);
  24. let editBtn = document.createElement("button");
  25. editBtn.onclick = ()=>{editIngredient(item.id, row)};
  26. editBtn.innerText = "Edit";
  27. editBtn.className = "edit-button"
  28. action.appendChild(editBtn);
  29. let removeBtn = document.createElement("button");
  30. removeBtn.onclick = ()=>{removeIngredient(item.id, row)};
  31. removeBtn.innerText = "Remove";
  32. removeBtn.className = "edit-button";
  33. action.appendChild(removeBtn);
  34. }
  35. }
  36. let sortIngredients = (property)=>{
  37. items.sort((a, b) => (a[property] > b[property]) ? 1 : -1);
  38. renderIngredients();
  39. }
  40. let filter = ()=>{
  41. items = [];
  42. let searchString = document.querySelector("#filter").value.toLowerCase();
  43. for(let item of merchant.inventory){
  44. if(item.ingredient.name.toLowerCase().includes(searchString)){
  45. items.push({
  46. id: item.ingredient._id,
  47. name: item.ingredient.name,
  48. category: item.ingredient.category,
  49. quantity: item.quantity,
  50. unit: item.ingredient.unitType
  51. });
  52. }
  53. }
  54. sortIngredients("name");
  55. renderIngredients(items);
  56. }
  57. let editIngredient = (id, row)=>{
  58. let quantity = row.children[2];
  59. let button = row.children[4].children[0];
  60. let originalQuantity = quantity.innerText;
  61. let quantityInput = document.createElement("input");
  62. quantityInput.type = "number";
  63. quantityInput.step = "0.01";
  64. quantityInput.value = quantity.innerText;
  65. quantity.innerText = "";
  66. quantity.appendChild(quantityInput);
  67. button.innerText = "Save";
  68. button.onclick = ()=>{updateOne(id, row, originalQuantity)};
  69. }
  70. let updateOne = (id, row, originalQuantity)=>{
  71. let quantityField = row.children[2];
  72. let quantity = quantityField.children[0].value;
  73. let button = row.children[4].children[0];
  74. quantityField.removeChild(quantityField.firstChild);
  75. if(validator.ingredient.quantity(quantity)){
  76. axios.post("/ingredients/update", {
  77. id: id,
  78. quantity: quantity
  79. })
  80. .then((ingredient)=>{
  81. banner.createNotification("The ingredient has been successfully updated");
  82. })
  83. .catch((err)=>{
  84. banner.createError("There was an error and the ingredient was not updated");
  85. console.log(err);
  86. });
  87. quantityField.innerText = quantity;
  88. }else{
  89. quantityField.innerText = originalQuantity;
  90. }
  91. button.innerText = "Edit";
  92. button.onclick = ()=>{editThis(item.id, row)};
  93. }
  94. let removeIngredient = (id, row)=>{
  95. axios.post("/ingredients/remove", {id: id})
  96. .then((merchant)=>{
  97. for(let i = 0; i < items.length; i++){
  98. if(id === items[i].id){
  99. items.splice(i, 1);
  100. }
  101. }
  102. banner.createNotification("The ingredient has been removed from your inventory");
  103. renderIngredients();
  104. })
  105. .catch((err)=>{
  106. banner.createError("There was an error and the ingredient has not been removed from your inventory");
  107. console.log(err);
  108. });
  109. }
  110. let displayAdd = ()=>{
  111. let modal = document.querySelector(".add-ingredient");
  112. let removeModal = (modal)=>{modal.style.visibility = "hidden";}
  113. modal.onclick = ()=>{removeModal(modal);}
  114. modal.style.visibility = "visible";
  115. }
  116. let addIngredient = ()=>{
  117. let content = document.querySelector(".modal-content");
  118. let newIngredient = {
  119. ingredient: {
  120. name: content.children[0].children[0].value,
  121. category: content.children[1].children[0].value,
  122. unitType: content.children[3].children[0].value
  123. },
  124. quantity: content.children[2].children[0].value
  125. }
  126. if(validator.ingredient.all(newIngredient.ingredient, newIngredient.quantity)){
  127. axios.post("/ingredients/createone", newIngredient)
  128. .then((ingredient)=>{
  129. items.push({
  130. id: ingredient._id,
  131. name: newIngredient.ingredient.name,
  132. category: newIngredient.ingredient.category,
  133. quantity: newIngredient.quantity,
  134. unit: newIngredient.ingredient.unitType
  135. })
  136. sortIngredients("name");
  137. renderIngredients();
  138. banner.createNotification("The new ingredient has been successfully added to your inventory");
  139. })
  140. .catch((err)=>{
  141. banner.createError("There was an error and the ingredient could not be added to your inventory");
  142. console.log(err);
  143. });
  144. }
  145. let modal = document.querySelector(".add-ingredient");
  146. modal.style.visibility = "hidden";
  147. }
  148. filter();