From e1d6917fac80d8ea55420869f6f0a2491d53467d Mon Sep 17 00:00:00 2001
From: ikvassil <ikvassil@stud.ntnu.no>
Date: Tue, 2 Mar 2021 11:57:23 +0100
Subject: [PATCH] Enable check week/month/year

---
 frontend/www/scripts/statistics.js | 133 +++++++++++++++++++++++++++++
 frontend/www/statistics.html       |  77 +++++++++++++++++
 2 files changed, 210 insertions(+)

diff --git a/frontend/www/scripts/statistics.js b/frontend/www/scripts/statistics.js
index e69de29..76ba960 100644
--- a/frontend/www/scripts/statistics.js
+++ b/frontend/www/scripts/statistics.js
@@ -0,0 +1,133 @@
+async function fetchWorkouts(ordering) {
+  let response = await sendRequest(
+    "GET",
+    `${HOST}/api/workouts/?ordering=${ordering}`
+  );
+
+  if (!response.ok) {
+    throw new Error(`HTTP error! status: ${response.status}`);
+  } else {
+    let data = await response.json();
+    let workouts = data.results;
+    let container = document.getElementById("div-content");
+    workouts.forEach(workout => {
+      let templateWorkout = document.querySelector("#template-workout");
+      let cloneWorkout = templateWorkout.content.cloneNode(true);
+
+      let aWorkout = cloneWorkout.querySelector("a");
+      aWorkout.href = `workout.html?id=${workout.id}`;
+
+      let h5 = aWorkout.querySelector("h5");
+      h5.textContent = workout.name;
+
+      let localDate = new Date(workout.date);
+
+      let table = aWorkout.querySelector("table");
+      let rows = table.querySelectorAll("tr");
+      rows[0].querySelectorAll(
+        "td"
+      )[1].textContent = localDate.toLocaleDateString(); // Date
+      rows[1].querySelectorAll(
+        "td"
+      )[1].textContent = localDate.toLocaleTimeString(); // Time
+      rows[2].querySelectorAll("td")[1].textContent = workout.owner_username; //Owner
+      rows[3].querySelectorAll("td")[1].textContent =
+        workout.exercise_instances.length; // Exercises
+
+      container.appendChild(aWorkout);
+    });
+    console.log(workouts);
+    return workouts;
+  }
+}
+function isLastWeek(date) {
+  let lastWeek = new Date();
+  let today = new Date();
+  let past = lastWeek.getDate() - 7;
+  lastWeek.setDate(past);
+  console.log(today);
+  return date >= lastWeek && date <= today;
+}
+function isLastMonth(date) {
+  let lastMonth = new Date();
+  let today = new Date();
+  let past = lastMonth.getDate() - 30;
+  lastMonth.setDate(past);
+  return date >= lastMonth && date <= today;
+}
+function isLastYear(date) {
+  let lastYear = new Date();
+  let today = new Date();
+  let past = lastYear.getDate() - 365;
+  lastYear.setDate(past);
+  return date >= lastYear && date <= today;
+}
+
+window.addEventListener("DOMContentLoaded", async () => {
+  let ordering = "-date";
+  let sevenDays = 0;
+  let thirtyDays = 0;
+  let threeSixtyFive = 0;
+
+  let currentUser = await getCurrentUser();
+  if (ordering.includes("owner")) {
+    ordering += "__username";
+  }
+  let workouts = await fetchWorkouts(ordering);
+
+  console.log(workouts.length);
+  let tabEls = document.querySelectorAll('a[data-bs-toggle="list"]');
+  for (let i = 0; i < tabEls.length; i++) {
+    let tabEl = tabEls[i];
+    tabEl.addEventListener("show.bs.tab", function(event) {
+      let workoutAnchors = document.querySelectorAll(".workout");
+      for (let j = 0; j < workouts.length; j++) {
+        let workout = workouts[j];
+        let workoutAnchor = workoutAnchors[j];
+
+        let d = workout.date;
+        let wDate = new Date(d.slice(0, 4), d.slice(5, 7) - 1, d.slice(8, 10));
+        console.log("last week", isLastWeek(wDate));
+        console.log("last month", isLastMonth(wDate));
+        console.log("last year", isLastYear(wDate));
+
+        if (workout.owner == currentUser.url) {
+          switch (event.currentTarget.id) {
+            case "list-statistics-week":
+              if (isLastWeek(wDate)) {
+                sevenDays++;
+              }
+              break;
+            case "list-statistics-month":
+              if (isLastMonth(wDate)) {
+                thirtyDays++;
+              }
+              break;
+            case "list-statistics-year":
+              if (lastYear(wDate)) {
+                threeSixtyFive++;
+              }
+
+            default:
+              break;
+          }
+        }
+        console.log(sevenDays, thirtyDays, threeSixtyFive);
+
+        switch (event.currentTarget.id) {
+          case "list-statistics-week":
+            if (workout.owner == currentUser.url) {
+              workoutAnchor.classList.remove("hide");
+            } else {
+              workoutAnchor.classList.add("hide");
+            }
+            break;
+
+          default:
+            workoutAnchor.classList.remove("hide");
+            break;
+        }
+      }
+    });
+  }
+});
diff --git a/frontend/www/statistics.html b/frontend/www/statistics.html
index 541d4ef..09037df 100644
--- a/frontend/www/statistics.html
+++ b/frontend/www/statistics.html
@@ -29,6 +29,83 @@
           </p>
         </div>
       </div>
+      <div class="row"></div>
+      <div
+        class="list-group list-group-vertical d-inline-flex mt-2"
+        id="list-tab"
+        role="tablist"
+      >
+        <a
+          class="list-group-item list-group-item-action active"
+          id="list-statistics-week"
+          data-bs-toggle="list"
+          href="#list-statistics-week"
+          role="tab"
+          aria-controls="week"
+        >
+          Week</a
+        >
+        <a
+          class="list-group-item list-group-item-action"
+          id="list-statistics-month"
+          data-bs-toggle="list"
+          href="#list-statistics-month"
+          role="tab"
+          aria-controls="month"
+        >
+          Month</a
+        >
+        <a
+          class="list-group-item list-group-item-action"
+          id="list-statistics-year"
+          data-bs-toggle="list"
+          href="#list-statistics-year"
+          role="tab"
+          aria-controls="year"
+        >
+          Year</a
+        >
+      </div>
+
+      <div class="list-group mt-1" id="div-content"></div>
+      <template id="template-workout">
+        <a
+          class="list-group-item list-group-item-action flex-column align-items-start my-1 workout"
+        >
+          <div class="d-flex w-100 justify-content-between align-items-center">
+            <h5 class="mb-1"></h5>
+          </div>
+          <div class="d-flex">
+            <table class="mb-1 text-start">
+              <tr>
+                <td>Date:</td>
+                <td></td>
+              </tr>
+              <tr>
+                <td>Time:</td>
+                <td></td>
+              </tr>
+              <tr>
+                <td>Owner:</td>
+                <td></td>
+              </tr>
+              <tr>
+                <td>Exercises:</td>
+                <td></td>
+              </tr>
+            </table>
+          </div>
+        </a>
+      </template>
     </div>
+
+    <script src="scripts/defaults.js"></script>
+    <script src="scripts/scripts.js"></script>
+    <script src="scripts/statistics.js"></script>
+    <script
+      src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js"
+      integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW"
+      crossorigin="anonymous"
+    ></script>
   </body>
 </html>
-- 
GitLab