createIngredients.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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 quantity = row.children[2].children[0].value;
  69. let newIngredient = {
  70. name: row.children[0].children[0].value,
  71. category: row.children[1].children[0].value,
  72. unit: row.children[3].children[0].value
  73. }
  74. if(validator.ingredient.all(newIngredient, quantity)){
  75. axiosIngredients.push(newIngredient);
  76. newIngredients.push({
  77. ingredient: newIngredient,
  78. quantity: quantity
  79. });
  80. }else{
  81. isValid = false;
  82. break;
  83. }
  84. }
  85. if(controller.data.inventory.length <= 0 && axiosIngredients.length <= 0){
  86. banner.createError("You must add at least one ingredient to your inventory");
  87. isValid = false;
  88. }
  89. if(isValid){
  90. if(axiosIngredients.length > 0){
  91. axios.post("/ingredients/create", axiosIngredients)
  92. .then((response)=>{
  93. if(typeof(response.data) === "string"){
  94. banner.createError(response.data);
  95. return;
  96. }else{
  97. for(let ingredient of newIngredients){
  98. for(let createdIngredient of response.data){
  99. if(createdIngredient.name === ingredient.ingredient.name){
  100. ingredient.ingredient.id = createdIngredient._id; //changed id a bit here
  101. break;
  102. }
  103. }
  104. controller.data.inventory.push(ingredient);
  105. }
  106. }
  107. })
  108. .catch((err)=>{
  109. banner.createError("There has been an error and your ingredients have not been saved");
  110. });
  111. }
  112. if(recipes){
  113. createRecipesObj.display();
  114. }else{
  115. nameRecipesObj.display();
  116. }
  117. }
  118. }
  119. }