home.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. export default {
  2. rendered: false,
  3. workoutList: document.getElementById("workoutList"),
  4. render: function(update){
  5. if(!this.rendered){
  6. this.getWorkouts();
  7. this.buttons();
  8. this.rendered = true;
  9. }
  10. if(update) this.handleUpdate(update);
  11. },
  12. buttons: function(){
  13. document.getElementById("homeLogout").addEventListener("click", ()=>{
  14. fetch("/user/logout")
  15. .then(r=>r.json())
  16. .then((response)=>{
  17. if(response.error){
  18. notify("error", response.error.message);
  19. }else{
  20. localStorage.removeItem("loggedIn");
  21. changePage("login");
  22. }
  23. })
  24. .catch((err)=>{
  25. notify("error", "Something went wrong, try refreshing the page");
  26. });
  27. });
  28. document.getElementById("homeNewWorkout").addEventListener("click", ()=>{
  29. changePage("newWorkout");
  30. });
  31. },
  32. getWorkouts: function(){
  33. fetch("/workout", {
  34. method: "get",
  35. headers: {
  36. "Content-Type": "application/json"
  37. }
  38. })
  39. .then(r=>r.json())
  40. .then((response)=>{
  41. if(response.error){
  42. notify("error", response.error.message);
  43. }else{
  44. this.renderWorkouts(response);
  45. }
  46. })
  47. .catch((err)=>{
  48. notify("error", "ERROR: Unable to retrieve workouts");
  49. });
  50. },
  51. renderWorkouts: function(workouts){
  52. while(this.workoutList.children.length > 0){
  53. this.workoutList.removeChild(this.workoutList.firstChild);
  54. }
  55. for(let i = 0; i < workouts.length; i++){
  56. this.addWorkout(workouts[i]);
  57. }
  58. },
  59. addWorkout: function(workout){
  60. const button = document.createElement("button");
  61. button.classList.add("button");
  62. button.textContent = workout.name;
  63. button.addEventListener("click", ()=>{
  64. changePage("workoutMenu", workout);
  65. });
  66. this.workoutList.appendChild(button);
  67. },
  68. handleUpdate: function(update){
  69. switch(update.type){
  70. case "new": this.addWorkout(update.workout); break;
  71. }
  72. }
  73. }