controller.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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 an order in the front end
  23. Can create, edit or remove
  24. order = {
  25. _id: id of recipe,
  26. name: name of recipe,
  27. price: price of recipe,
  28. ingredients: [
  29. ingredient: id of ingredient,
  30. quantity: quantity of ingredient
  31. ]
  32. }
  33. */
  34. let updateOrders = (order, remove = false)=>{
  35. let isNew = true;
  36. for(let i = 0; i < orders.length; i++){
  37. if(orders[i]._id === order._id){
  38. if(remove){
  39. orders.splice(i, 1);
  40. }else{
  41. orders[i] = order;
  42. }
  43. isNew = false;
  44. }
  45. }
  46. if(isNew){
  47. orders.push(order);
  48. }
  49. ordersStrandObj.isPopulated = false;
  50. ordersStrandObj.display();
  51. closeSidebar();
  52. }
  53. //Close any open sidebar
  54. let closeSidebar = ()=>{
  55. let sidebar = document.querySelector("#sidebarDiv");
  56. for(let i = 0; i < sidebar.children.length; i++){
  57. sidebar.children[i].style.display = "none";
  58. }
  59. sidebar.classList = "sidebarHide";
  60. }
  61. /*
  62. Open a specific sidebar
  63. Input:
  64. sidebar: the outermost element of the sidebar (must contain class sidebar)
  65. */
  66. let openSidebar = (sidebar)=>{
  67. document.querySelector("#sidebarDiv").classList = "sidebar";
  68. let sideBars = document.querySelector("#sidebarDiv").children;
  69. for(let i = 0; i < sideBars.length; i++){
  70. sideBars[i].style.display = "none";
  71. }
  72. sidebar.style.display = "flex";
  73. }
  74. let unitizeIngredients = (ingredients)=>{
  75. let ingredientsByUnit = [];
  76. for(let i = 0; i < ingredients.length; i++){
  77. let unitExists = false;
  78. for(let j = 0; j < ingredientsByUnit.length; j++){
  79. if(ingredients[i].ingredient.unit === ingredientsByUnit[j].name){
  80. ingredientsByUnit[j].ingredients.push({
  81. id: ingredients[i].ingredient._id,
  82. name: ingredients[i].ingredient.name,
  83. quantity: ingredients[i].quantity,
  84. unit: ingredients[i].ingredient.unit
  85. });
  86. unitExists = true;
  87. break;
  88. }
  89. }
  90. if(!unitExists){
  91. ingredientsByUnit.push({
  92. name: ingredients[i].ingredient.unit,
  93. ingredients: [{
  94. id: ingredients[i].ingredient._id,
  95. name: ingredients[i].ingredient.name,
  96. quantity: ingredients[i].quantity,
  97. unit: ingredients[i].ingredient.unit
  98. }]
  99. })
  100. }
  101. }
  102. return ingredientsByUnit;
  103. }
  104. homeStrandObj.display();