account.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. const Merchant = require("../classes/Merchant");
  2. let account = {
  3. display: function(){
  4. document.getElementById("accountStrandTitle").innerText = merchant.owner.name;
  5. document.getElementById("accountEmail").value = merchant.owner.email;
  6. document.getElementById("accountOwnerName").value = merchant.owner.name;
  7. document.getElementById("accountUpdate").onclick = ()=>{this.updateData()};
  8. document.getElementById("deleteMerchant").onclick = ()=>{controller.openModal("confirmDeleteMerchant")};
  9. //Display alternate locations
  10. document.getElementById("settingsAddMerchant").onclick = ()=>{controller.openModal("newMerchant")};
  11. let container = document.getElementById("settingsMerchants");
  12. while(container.children.length > 0){
  13. container.removeChild(container.firstChild);
  14. }
  15. for(let i = 0; i < merchant.owner.merchants.length; i++){
  16. let button = document.createElement("button");
  17. button.innerText = merchant.owner.merchants[i].name;
  18. button.classList.add("button");
  19. button.onclick = ()=>{this.switchMerchant(merchant.owner.merchants[i]._id)};
  20. container.appendChild(button);
  21. }
  22. //Handle the password changey stuffs
  23. let passButton = document.getElementById("accountShowPassword");
  24. let passBox = document.getElementById("changePasswordBox");
  25. passButton.onclick = ()=>{
  26. passButton.style.display = "none";
  27. passBox.style.display = "flex";
  28. };
  29. document.getElementById("cancelPasswordChange").onclick = ()=>{
  30. passButton.style.display = "block";
  31. passBox.style.display = "none";
  32. document.getElementById("accountCurrentPassword").value = "";
  33. document.getElementById("accountNewPassword").value = "";
  34. document.getElementById("accountConfirmPassword").value = "";
  35. };
  36. document.getElementById("changePasswordButton").onclick = ()=>{this.updatePassword()};
  37. document.getElementById("newMerchantSquareButton").onclick = ()=>{this.getSquareLocations()};
  38. },
  39. updateData: function(){
  40. let data = {
  41. email: document.getElementById("accountEmail").value,
  42. name: document.getElementById("accountOwnerName").value
  43. }
  44. let loader = document.getElementById("loaderContainer");
  45. loader.style.display = "flex";
  46. fetch("/merchant/update", {
  47. method: "put",
  48. headers: {
  49. "Content-Type": "application/json;charset=utf-8"
  50. },
  51. body: JSON.stringify(data)
  52. })
  53. .then(response => response.json())
  54. .then((response)=>{
  55. if(typeof(response) === "string"){
  56. controller.createBanner(response, "error");
  57. }else{
  58. controller.createBanner("DATA UPDATED", "success");
  59. if(merchant.owner.email !== response.email){
  60. controller.createBanner("YOU MUST VALIDATE YOUR NEW EMAIL ADDRESS BEFORE YOU CAN LOG IN AGAIN", "alert");
  61. merchant.owner.email = response.email;
  62. }
  63. merchant.owner.name = response.name;
  64. document.getElementById("accountOwnerName").value = merchant.owner.name;
  65. document.getElementById("accountStrandTitle").innerText = merchant.owner.name;
  66. document.getElementById("accountEmail").value = merchant.owner.email;
  67. }
  68. })
  69. .catch((err)=>{
  70. controller.createBanner("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE", "error");
  71. })
  72. .finally(()=>{
  73. loader.style.display = "none";
  74. });
  75. },
  76. updatePassword: function(){
  77. let data = {
  78. current: document.getElementById("accountCurrentPassword").value,
  79. new: document.getElementById("accountNewPassword").value,
  80. confirm: document.getElementById("accountConfirmPassword").value
  81. }
  82. if(data.new !== data.confirm){
  83. return controller.createBanner("PASSWORDS DO NOT MATCH");
  84. }
  85. let loader = document.getElementById("loaderContainer");
  86. loader.style.display = "flex";
  87. fetch("/merchant/password", {
  88. method: "put",
  89. headers: {
  90. "Content-Type": "application/json;charset=utf-8"
  91. },
  92. body: JSON.stringify(data)
  93. })
  94. .then(response => response.json())
  95. .then((response)=>{
  96. if(typeof(response) === "string"){
  97. controller.createBanner(response, "error");
  98. }else{
  99. window.location.replace(response.redirect);
  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. switchMerchant: function(id){
  110. let loader = document.getElementById("loaderContainer");
  111. loader.style.display = "none";
  112. fetch(`/merchant/${id}`)
  113. .then(response => response.json())
  114. .then((response)=>{
  115. if(typeof(response) === "string"){
  116. controller.createBanner(response, "error");
  117. }else{
  118. window.merchant = new Merchant(
  119. response[1].name,
  120. response[1].pos,
  121. response[1].inventory,
  122. response[1].recipes,
  123. response[2],
  124. response[0]
  125. );
  126. state.updateMerchant();
  127. controller.openStrand("home");
  128. }
  129. })
  130. .catch((err)=>{
  131. controller.createBanner("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE", "error");
  132. })
  133. .finally(()=>{
  134. loader.style.display = "none";
  135. });
  136. },
  137. deleteMerchant: function(){
  138. let loader = document.getElementById("loaderContainer");
  139. loader.style.display = "flex";
  140. fetch("/merchant", {method: "delete"})
  141. .then(response => response.json())
  142. .then((response)=>{
  143. if(typeof(response) === "string"){
  144. controller.createBanner(response, "error");
  145. }else{
  146. window.merchant = new Merchant(
  147. response[1].name,
  148. response[1].pos,
  149. response[1].inventory,
  150. response[1].recipes,
  151. response[2],
  152. response[0]
  153. );
  154. state.updateMerchant();
  155. controller.closeModal();
  156. controller.openStrand("home");
  157. controller.createBanner("MERCHANT DELETED", "success");
  158. }
  159. })
  160. .catch((err)=>{
  161. controller.createBanner("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE", "error");
  162. })
  163. .finally(()=>{
  164. loader.style.display = "none";
  165. });
  166. },
  167. getSquareLocations: function(){
  168. let loader = document.getElementById("loaderContainer");
  169. loader.style.display = "flex";
  170. fetch("/square/locations")
  171. .then(response => response.json())
  172. .then((response)=>{
  173. if(typeof(response) === "string"){
  174. controller.createBanner(response, "error");
  175. }else{
  176. controller.openModal("squareLocations", response);
  177. }
  178. })
  179. .catch((err)=>{
  180. controller.createBanner("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE", "error");
  181. })
  182. .finally(()=>{
  183. loader.style.display = "none";
  184. });
  185. }
  186. }
  187. module.exports = account;