editIngredient.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. let editIngredient = {
  2. display: function(ingredient){
  3. let buttonList = document.getElementById("unitButtons");
  4. let quantLabel = document.getElementById("editIngQuantityLabel");
  5. let specialLabel = document.getElementById("editSpecialLabel");
  6. document.getElementById("editSubIngredients").onclick = ()=>{controller.openModal("editSubIngredients", ingredient.ingredient)};
  7. //Clear any existing data
  8. while(buttonList.children.length > 0){
  9. buttonList.removeChild(buttonList.firstChild);
  10. }
  11. //Populate basic fields
  12. document.getElementById("editIngTitle").innerText = ingredient.ingredient.name;
  13. document.getElementById("editIngName").value = ingredient.ingredient.name;
  14. document.getElementById("editIngCategory").value = ingredient.ingredient.category;
  15. quantLabel.innerText = `CURRENT STOCK (${ingredient.ingredient.unit.toUpperCase()})`;
  16. document.getElementById("editIngSubmit").onclick = ()=>{this.submit(ingredient)};
  17. //Make any changes for special ingredients
  18. if(ingredient.ingredient.unit === "bottle"){
  19. specialLabel.style.display = "flex";
  20. specialLabel.innerText = `BOTTLE SIZE (${ingredient.ingredient.unitType.toUpperCase()}):`;
  21. let sizeInput = document.createElement("input");
  22. sizeInput.id = "editIngSpecialSize";
  23. sizeInput.type = "number";
  24. sizeInput.min = "0";
  25. sizeInput.step = "0.01";
  26. sizeInput.value = ingredient.ingredient.unitSize.toFixed(2);
  27. specialLabel.appendChild(sizeInput);
  28. }else{
  29. specialLabel.style.display = "none";
  30. }
  31. //Populate the unit buttons
  32. const units = ingredient.ingredient.getPotentialUnits();
  33. for(let i = 0; i < units.length; i++){
  34. let button = document.createElement("button");
  35. button.classList.add("unitButton");
  36. button.innerText = units[i].toUpperCase();
  37. button.onclick = ()=>{this.changeUnit(button)};
  38. buttonList.appendChild(button);
  39. if(units[i] === ingredient.ingredient.unit) button.classList.add("unitActive");
  40. }
  41. let quantInput = document.createElement("input");
  42. quantInput.id = "editIngQuantity";
  43. quantInput.type = "number";
  44. quantInput.min = "0";
  45. quantInput.step = "0.01";
  46. quantInput.value = ingredient.quantity.toFixed(2);
  47. quantLabel.appendChild(quantInput);
  48. },
  49. changeUnit(button){
  50. let buttons = document.getElementById("unitButtons");
  51. for(let i = 0; i < buttons.children.length; i++){
  52. buttons.children[i].classList.remove("unitActive");
  53. }
  54. button.classList.add("unitActive");
  55. },
  56. submit(ingredient){
  57. const quantity = parseFloat(document.getElementById("editIngQuantityLabel").children[0].value);
  58. let data = {
  59. id: ingredient.ingredient.id,
  60. name: document.getElementById("editIngName").value,
  61. category: document.getElementById("editIngCategory").value,
  62. ingredients: []
  63. }
  64. data.quantity = ingredient.convertToBase(quantity);
  65. //Get the measurement unit
  66. let units = document.getElementById("unitButtons");
  67. for(let i = 0; i < units.children.length; i++){
  68. if(units.children[i].classList.contains("unitActive")){
  69. data.unit = units.children[i].innerText.toLowerCase();
  70. break;
  71. }
  72. }
  73. //Add the sub-ingredients
  74. for(let i = 0; i < ingredient.ingredient.subIngredients.length; i++){
  75. let subIngredient = ingredient.ingredient.subIngredients[i];
  76. data.ingredients.push({
  77. ingredient: subIngredient.ingredient.id,
  78. quantity: subIngredient.quantity
  79. });
  80. }
  81. let loader = document.getElementById("loaderContainer");
  82. loader.style.display = "flex";
  83. fetch("/ingredients/update", {
  84. method: "put",
  85. headers: {
  86. "Content-Type": "application/json;charset=utf-8"
  87. },
  88. body: JSON.stringify(data)
  89. })
  90. .then(response => response.json())
  91. .then((response)=>{
  92. if(typeof(response) === "string"){
  93. controller.createBanner(response, "error");
  94. }else{
  95. merchant.removeIngredient(merchant.getIngredient(response.ingredient._id));
  96. merchant.addIngredients([response]);
  97. state.updateIngredients();
  98. controller.openStrand("ingredients");
  99. controller.createBanner("INGREDIENT UPDATED", "success");
  100. }
  101. })
  102. .catch((err)=>{
  103. controller.createBanner("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE", "error");
  104. })
  105. .finally(()=>{
  106. loader.style.display = "none";
  107. });
  108. }
  109. }
  110. module.exports = editIngredient;