From 84173f3dc457b7b9eeba2cb7d3386f1e45c56932 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjamin=20=C3=85strand?= <benjamin01.astrand@gmail.com>
Date: Wed, 6 Dec 2023 11:51:28 +0100
Subject: [PATCH] Cached improvementWorks on homePage and profilePage

---
 client/homePage.ts    | 22 ++++++++++++++++++++--
 client/profilePage.ts |  2 +-
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/client/homePage.ts b/client/homePage.ts
index 6064f45..104a540 100644
--- a/client/homePage.ts
+++ b/client/homePage.ts
@@ -37,6 +37,8 @@ interface Project {
 
 let myIdeaCards: { [key: number]: IdeaCard } = {};
 
+const cache: {[key: string]: any[]} = {};
+
 class IdeaCard {
   private header: string;
   private department: string;
@@ -323,7 +325,9 @@ export async function loadPage(listenersLoaded: boolean) {
       }
       const projectContainer = document.getElementById("project-container");
       if (projectContainer) {
-        await getProjects(projectContainer, listenersLoaded, user.id);
+        const startGetProjects = performance.now();
+        getProjects(projectContainer, listenersLoaded, user.id);
+        console.log(`getProjects duration: ${performance.now() - startGetProjects} ms`)
       }
       console.log("innan");
       const departmentContainer = document.getElementById(
@@ -490,7 +494,19 @@ export async function getProjects(
   listenersLoaded: boolean,
   userHsaId: string
 ) {
-  const data = await getImprovementWorksForUser(userHsaId);
+  let data: any[] = [];
+
+  if(cache[userHsaId]) {
+    const startGetCachedProjects = performance.now();
+    data = cache[userHsaId];
+    console.log(`getCachedProjects duration: ${performance.now() - startGetCachedProjects} ms`);
+  } else {
+    const startGetImprovementWorksForUser = performance.now();
+    data = await getImprovementWorksForUser(userHsaId);
+    cache[userHsaId] = data;
+    console.log(`getImprovementWorksForUser duration: ${performance.now() - startGetImprovementWorksForUser} ms`);
+  }
+
   let id = 0;
   data.forEach(async (project) => {
     let title = project.name;
@@ -511,7 +527,9 @@ export async function getProjects(
         dateStarted
       );
       projectCards[i] = card;
+      const startGenerateHTML = performance.now();
       let cardHTML = card.generateHTML();
+      console.log(`GenerateHTML duration ${performance.now() - startGenerateHTML} ms`);
       let div = document.createElement("div");
       div.className = "homePageProjectCardDiv"; // Set the class name(s) here
       div.innerHTML = cardHTML;
diff --git a/client/profilePage.ts b/client/profilePage.ts
index d4d55da..6706058 100644
--- a/client/profilePage.ts
+++ b/client/profilePage.ts
@@ -259,7 +259,7 @@ async function createNewIdeaCard(
                  }
                  const projectContainer = document.getElementById("project-container");
                  if(projectContainer) {
-                  await getProjects(projectContainer, listenersLoaded, user.id);
+                  getProjects(projectContainer, listenersLoaded, user.id);
                  }
                 
              })
-- 
GitLab