createIngredients.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. let createIngredientsObj = {
  2. display: function(){
  3. controller.clearScreen();
  4. controller.createIngredientsStrand.style.display = "flex";
  5. let tbody = document.querySelector("#createIngredientsStrand tbody");
  6. if(tbody.children.length === 0){
  7. document.querySelector("#createIngredientsStrand thead").style.display = "none";
  8. document.querySelector("#finishButton").innerText = "No new ingredients";
  9. }
  10. },
  11. //Creates a new, empty row in table to input data
  12. newIngredientField: function(){
  13. let tbody = document.querySelector("#inputField tbody");
  14. document.querySelector("#inputField thead").style.display = "table-header-group"
  15. document.querySelector("#finishButton").innerText = "Finish";
  16. let row = document.createElement("tr");
  17. tbody.appendChild(row);
  18. let name = document.createElement("td");
  19. row.appendChild(name);
  20. let nameInput = document.createElement("input");
  21. nameInput.type = "text";
  22. nameInput.classList = "inputField";
  23. nameInput.onblur = ()=>{controller.checkValid("name", nameInput)};
  24. name.appendChild(nameInput);
  25. let category = document.createElement("td");
  26. row.appendChild(category);
  27. let categoryInput = document.createElement("input");
  28. categoryInput.type = "text"
  29. categoryInput.classList = "inputField";
  30. categoryInput.onblur = ()=>{controller.checkValid("category", categoryInput)};
  31. category.appendChild(categoryInput);
  32. let quantity = document.createElement("td");
  33. row.appendChild(quantity);
  34. let quantityInput = document.createElement("input");
  35. quantityInput.type = "number";
  36. quantityInput.step = "0.01";
  37. quantityInput.classList = "inputField";
  38. quantityInput.onblur = ()=>{controller.checkValid("quantity", quantityInput)};
  39. quantity.appendChild(quantityInput);
  40. let unit = document.createElement("td");
  41. row.appendChild(unit);
  42. let unitInput = document.createElement("input");
  43. unitInput.type = "text";
  44. unitInput.classList = "inputField";
  45. unitInput.onblur = ()=>{controller.checkValid("unit", unitInput)};
  46. unit.appendChild(unitInput);
  47. let removeTd = document.createElement("td");
  48. row.appendChild(removeTd);
  49. let removeButton = document.createElement("button");
  50. removeButton.innerText = "Remove";
  51. removeButton.classList = "button-small";
  52. removeButton.onclick = ()=>{this.removeIngredient(row)};
  53. removeTd.appendChild(removeButton);
  54. },
  55. removeIngredient: function(row){
  56. if(row.parentNode.children.length <= 1){
  57. document.querySelector("#createIngredientsStrand thead").style.display = "none";
  58. document.querySelector("#finishButton").innerText = "No new ingredients";
  59. }
  60. row.parentNode.removeChild(row);
  61. },
  62. submit: function(){
  63. let tbody = document.querySelector("#inputField tbody");
  64. let isValid = true;
  65. let newIngredients = [];
  66. let axiosIngredients = [];
  67. for(let row of tbody.children){
  68. let name = row.children[0].children[0].value;
  69. let category = row.children[1].children[0].value;
  70. let quantity = row.children[2].children[0].value;
  71. let unit = row.children[3].children[0].value;
  72. let checkName = validator.ingredient.name(name);
  73. let checkCategory = validator.ingredient.category(category);
  74. let checkQuantity = validator.ingredient.quantity(quantity);
  75. let checkUnit = validator.ingredient.unit(unit);
  76. if(checkName && checkCategory && checkQuantity && checkUnit){
  77. let newIngredient = {
  78. name: name,
  79. category: category,
  80. unit: unit
  81. }
  82. axiosIngredients.push(newIngredient);
  83. newIngredients.push({
  84. ingredient: newIngredient,
  85. quantity: quantity
  86. });
  87. }else{
  88. isValid = false;
  89. break;
  90. }
  91. }
  92. if(controller.data.inventory.length <= 0 && axiosIngredients.length <= 0){
  93. banner.createError("You must add at least one ingredient to your inventory");
  94. isValid = false;
  95. }
  96. if(isValid){
  97. if(axiosIngredients.length > 0){
  98. axios.post("/ingredients/create", axiosIngredients)
  99. .then((response)=>{
  100. if(typeof(response.data) === "string"){
  101. banner.createError(response.data);
  102. return;
  103. }else{
  104. for(let ingredient of newIngredients){
  105. for(let createdIngredient of response.data){
  106. if(createdIngredient.name === ingredient.ingredient.name){
  107. ingredient.ingredient.id = createdIngredient._id; //changed id a bit here
  108. break;
  109. }
  110. }
  111. controller.data.inventory.push(ingredient);
  112. }
  113. }
  114. })
  115. .catch((err)=>{
  116. banner.createError("There has been an error and your ingredients have not been saved");
  117. });
  118. }
  119. if(recipes){
  120. createRecipesObj.display();
  121. }else{
  122. nameRecipesObj.display();
  123. }
  124. }
  125. }
  126. }