controller.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /*
  2. Switches to a different strand
  3. Input:
  4. name: name of the strand. Must end with "Strand"
  5. */
  6. let changeStrand = (name)=>{
  7. closeSidebar();
  8. for(let strand of document.querySelectorAll(".strand")){
  9. strand.style.display = "none";
  10. }
  11. for(let button of document.querySelectorAll(".menu > button")){
  12. button.classList = "";
  13. button.onclick = ()=>{changeStrand(`${button.id.slice(0, button.id.indexOf("Btn"))}Strand`)};
  14. }
  15. let activeButton = document.querySelector(`#${name.slice(0, name.indexOf("Strand"))}Btn`);
  16. activeButton.classList = "active";
  17. activeButton.onclick = undefined;
  18. document.querySelector(`#${name}`).style.display = "flex";
  19. window[`${name}Obj`].display();
  20. }
  21. /*
  22. Updates a recipe in the merchants list of recipes
  23. Can create, edit or remove
  24. Inputs:
  25. recipe: object
  26. _id: id of recipe
  27. name: name of recipe
  28. price: price of recipe
  29. ingredients: list of ingredients
  30. ingredient: id of ingredient
  31. quantity: quantity of ingredient
  32. remove: if true, remove ingredient from inventory
  33. */
  34. let updateRecipes = (recipe, remove = false)=>{
  35. let isNew = true;
  36. let index = 0;
  37. for(let i = 0; i < recipe.ingredients.length; i++){
  38. for(let j = 0; j < merchant.inventory.length; j++){
  39. if(merchant.inventory[j].ingredient._id === recipe.ingredients[i].ingredient){
  40. recipe.ingredients[i].ingredient = merchant.inventory[j].ingredient;
  41. break;
  42. }
  43. }
  44. }
  45. for(let i = 0; i < merchant.recipes.length; i++){
  46. if(recipe._id === merchant.recipes[i]._id){
  47. if(remove){
  48. merchant.recipes.splice(i, 1);
  49. }else{
  50. merchant.recipes[i] = recipe;
  51. index = i;
  52. }
  53. isNew = false;
  54. break;
  55. }
  56. }
  57. if(isNew){
  58. merchant.recipes.push(recipe);
  59. index = merchant.recipes.length - 1;
  60. }
  61. recipeBookStrandObj.populateRecipes();
  62. closeSidebar();
  63. }
  64. /*
  65. Updates an order in the front end
  66. Can create, edit or remove
  67. order = {
  68. _id: id of recipe,
  69. name: name of recipe,
  70. price: price of recipe,
  71. ingredients: [
  72. ingredient: id of ingredient,
  73. quantity: quantity of ingredient
  74. ]
  75. }
  76. */
  77. let updateOrders = (order, remove = false)=>{
  78. let isNew = true;
  79. for(let i = 0; i < orders.length; i++){
  80. if(orders[i]._id === order._id){
  81. if(remove){
  82. orders.splice(i, 1);
  83. }else{
  84. orders[i] = order;
  85. }
  86. isNew = false;
  87. }
  88. }
  89. if(isNew){
  90. orders.push(order);
  91. }
  92. ordersStrandObj.isPopulated = false;
  93. ordersStrandObj.display();
  94. closeSidebar();
  95. }
  96. //Close any open sidebar
  97. let closeSidebar = ()=>{
  98. let sidebar = document.querySelector("#sidebarDiv");
  99. for(let i = 0; i < sidebar.children.length; i++){
  100. sidebar.children[i].style.display = "none";
  101. }
  102. sidebar.classList = "sidebarHide";
  103. }
  104. /*
  105. Open a specific sidebar
  106. Input:
  107. sidebar: the outermost element of the sidebar (must contain class sidebar)
  108. */
  109. let openSidebar = (sidebar)=>{
  110. document.querySelector("#sidebarDiv").classList = "sidebar";
  111. let sideBars = document.querySelector("#sidebarDiv").children;
  112. for(let i = 0; i < sideBars.length; i++){
  113. sideBars[i].style.display = "none";
  114. }
  115. sidebar.style.display = "flex";
  116. }
  117. let unitizeIngredients = (ingredients)=>{
  118. let ingredientsByUnit = [];
  119. for(let i = 0; i < ingredients.length; i++){
  120. let unitExists = false;
  121. for(let j = 0; j < ingredientsByUnit.length; j++){
  122. if(ingredients[i].ingredient.unit === ingredientsByUnit[j].name){
  123. ingredientsByUnit[j].ingredients.push({
  124. id: ingredients[i].ingredient._id,
  125. name: ingredients[i].ingredient.name,
  126. quantity: ingredients[i].quantity,
  127. unit: ingredients[i].ingredient.unit
  128. });
  129. unitExists = true;
  130. break;
  131. }
  132. }
  133. if(!unitExists){
  134. ingredientsByUnit.push({
  135. name: ingredients[i].ingredient.unit,
  136. ingredients: [{
  137. id: ingredients[i].ingredient._id,
  138. name: ingredients[i].ingredient.name,
  139. quantity: ingredients[i].quantity,
  140. unit: ingredients[i].ingredient.unit
  141. }]
  142. })
  143. }
  144. }
  145. return ingredientsByUnit;
  146. }
  147. homeStrandObj.display();