From a3a09ae5923e92e5267ce32214c58827b6ce0f68 Mon Sep 17 00:00:00 2001
From: vildemv <vildemv@ntnu.no>
Date: Mon, 29 Apr 2024 09:11:24 +0200
Subject: [PATCH] Added help-pop up to milestone view. DId also make the page
 more scalable.

---
 src/views/HomePage/MilestoneView.vue | 275 +++++++++++++--------------
 1 file changed, 131 insertions(+), 144 deletions(-)

diff --git a/src/views/HomePage/MilestoneView.vue b/src/views/HomePage/MilestoneView.vue
index fd3fcb7..9c2f496 100644
--- a/src/views/HomePage/MilestoneView.vue
+++ b/src/views/HomePage/MilestoneView.vue
@@ -1,118 +1,121 @@
 <script setup lang="ts">
-
-import {onMounted, ref} from "vue";
 import router from "@/router";
-import CompletedMilestoneDisplay from '@/components/milestone/CompletedMilestoneDisplay.vue'
-import ActiveMilestoneDisplay from '@/components/milestone/ActiveMilestoneDisplay.vue'
-import {getAllMilestoneLogs, getAllMilestones} from "@/utils/MilestoneUtils";
-import {useTokenStore} from "@/stores/token";
 import ActiveMilestonesList from '@/components/milestone/ActiveMilestonesList.vue'
+import MilestoneLogList from '@/components/milestone/MilestoneLogList.vue'
+import { ref } from 'vue'
+import HomeHelpPopUp from '@/components/popups/help/HomeHelpPopUp.vue'
+import MilestoneHelpPopUp from '@/components/popups/help/MilestoneHelpPopUp.vue'
 
-const activeMilestones = ref(<Milestone[]>[])
-const completedMilestones = ref<Milestone[]>([])
+const displayType = ref<boolean>(true)
+const displayHelpPopUp = ref<boolean>(false)
 
-onMounted(async () => {
-  const token = useTokenStore().$state.jwtToken
-  activeMilestones.value = await getAllMilestones(token);
-  completedMilestones.value = await getAllMilestoneLogs(token);
-  console.log(completedMilestones.value);
-})
+const displayNewChallenges = () => {
+  displayType.value = false;
+}
 
-const pages = ref<number>(1)
-const currentPage = ref<number>(0)
+const displayActiveChallenges = () => {
+  displayType.value = true;
+}
 const navigateTo = (path: string) => {
   router.push(path)
 }
 
-const previousPage = () => {}
-const goToPage = (pageNumber:number) => {}
-
-const nextPage = () =>{}
-
-interface Milestone{
-  milestoneId: number;
-  milestoneTitle: string;
-  milestoneDescription: string
-  milestoneGoalSum: number;
-  milestoneCurrentSum: number;
-  deadlineDate: Date;
-  startDate: Date;
-  milestoneImage: string;
-  username: string;
+const openHelpPopUp = () => {
+  displayHelpPopUp.value = true;
+}
+const closeHelpPopUp = () => {
+  displayHelpPopUp.value = false;
+  console.log(displayHelpPopUp);
 }
 </script>
 
 <template>
   <div class="milestone-view">
-    <h2 class="title">Dine Sparemål</h2>
+    <div class="header">
+      <h2 class="title">Dine sparemål!</h2>
+      <img
+        src="/src/components/icons/navigation/help.svg"
+        alt="hjelp"
+        @click="openHelpPopUp"
+        class="help-icon">
+      <div v-if="displayHelpPopUp" class="popup-container">
+        <MilestoneHelpPopUp
+          @closePopUp="closeHelpPopUp"
+        ></MilestoneHelpPopUp>
+      </div>
+    </div>
+    <div class="toggle-buttons">
+      <button class="toggle-button" @click="displayActiveChallenges" :class="{ 'active-button': displayType}">
+        <h3 class="toggle-button-title">Aktive sparemål</h3>
+      </button>
+      <button class="toggle-button" @click="displayNewChallenges" :class="{ 'active-button': !displayType}">
+        <h3 class="toggle-button-title">Fullførte sparemål</h3>
+      </button>
+    </div>
     <div class="main">
-      <div class="left">
+      <div class="left" :class="{ 'mobile-hide': !displayType }">
         <button class="create-milestone-button" @click="navigateTo('/homepage/create-milestone')">
           <h2 class="create-milestone-button-title">Lag nytt sparemål + </h2>
         </button>
-        <ActiveMilestonesList/>
+        <ActiveMilestonesList class="active-milestones"></ActiveMilestonesList>
       </div>
-
-      <div class="right">
-
+      <div class="right" :class="{ 'mobile-hide': displayType }">
         <h2 class="completed-milestones-title">Sparemål historikk</h2>
-        <div class="completed-milestones">
-          <template v-if="activeMilestones.length === 0">
-            <h4>Du har ingen fullførte sparemål<br>Avsluttede sparemål ender opp her sånn at du får full oversikt.</h4>
-          </template>
-          <template v-else>
-          <CompletedMilestoneDisplay
-            class="completed-milestone"
-            v-for="(completedMilestone, index) in completedMilestones"
-            :key="index"
-            :id="completedMilestone.milestoneId"
-            :title="completedMilestone.milestoneTitle"
-            :description="completedMilestone.milestoneDescription"
-            :current-sum="completedMilestone.milestoneCurrentSum"
-            :goal-sum="completedMilestone.milestoneGoalSum"
-            :deadline="completedMilestone.deadlineDate"
-            :start-date="completedMilestone.startDate"
-            :image="completedMilestone.milestoneImage"
-          ></CompletedMilestoneDisplay>
-          <div class="pagination">
-            <button @click="previousPage" :disabled="currentPage === 0">Forige side</button>
-            <div  v-if="pages>0" class="page-numbers">
-              <button
-                v-for="pageNumber in pages"
-                :key="pageNumber-2"
-                @click="goToPage(pageNumber-1)"
-                :class="{ chosen: pageNumber-1 === currentPage }"
-              >{{ pageNumber}}</button>
-            </div>
-            <button @click="nextPage" :disabled="currentPage === pages - 1 || pages === 0">Neste side</button>
-        </div>
-        </template>
-        </div>
-
+        <MilestoneLogList></MilestoneLogList>
+      </div>
     </div>
-</div>
-</div>
+  </div>
 </template>
 
 <style scoped>
 .milestone-view{
-display: flex;
-flex-direction: column;
+  display: flex;
+  flex-direction: column;
 
   height: 100%;
   width: 100%;
+
+  gap: 2.5%;
+}
+.header{
+  display: flex;
+  flex-direction: row;
+  place-content: space-between;
+  max-height: 6.5%;
+}
+
+.help-icon:hover{
+  transform: scale(1.05);
+}
+
+.popup-container {
+  position: fixed; /* Change to fixed to cover the entire viewport */
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  display: flex;
+  justify-content: center;
+  background-color: rgba(64, 64, 64, 0.5);
+
+  align-items: center;
+  z-index: 1000; /* Adjust z-index as needed */
 }
 
 .title{
   color: var(--color-heading);
 }
 
+.toggle-buttons{
+  display: none;
+}
+
 .main{
   display: flex;
   flex-direction: row;
-
-  height: 100%;
   width: 100%;
+  min-height: 120%;
+  padding-bottom: 1.5%;
   gap: 2.5%;
 }
 
@@ -120,6 +123,7 @@ flex-direction: column;
   display: flex;
   flex-direction: column;
   width: 60%;
+  min-height: 100%;
   gap: 2.5%;
 }
 
@@ -146,10 +150,13 @@ flex-direction: column;
 .right{
   display: flex;
   flex-direction: column;
-  border: 2px solid var(--color-border);
+  place-content: space-between;
+
   border-radius: 20px;
+  border: 2px solid var(--color-border);
   box-shadow: 0 4px 4px var(--color-shadow);
   background-color: var(--color-heading);
+
   height: 100%;
   width: 40%;
 }
@@ -159,86 +166,66 @@ flex-direction: column;
   text-align: center;
   font-weight: bold;
 }
+@media only screen and (max-width: 1000px){
+  .main{
+    display: flex;
+    flex-direction: column;
 
-.completed-milestones{
-  display: flex;
-  flex-direction: column;
-  text-align: center;
-  height: 100%;
-  width: 100%;
-  padding: 5.0%;
-  gap: 2.5%;
-}
+    min-height: 150%;
+    width: 100%;
 
-.completed-milestone{
-  border-radius: 20px;
-  border: 2px solid var(--color-border);
-  background-color: var(--color-background-white);
+    padding-top: 1.0%;
+    padding-bottom: 1.0%;
+  }
 
-  min-height: calc(100%/4.8);
-  width: 100%;
-}
+  .toggle-buttons{
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+    min-height: 7.5%;
+    place-content: space-between;
+  }
 
-.completed-milestone:hover{
-  transform: scale(1.05);
-  transition: 0.3s;
-}
+  .toggle-button{
+    width: 49.5%;
+    border-radius: 20px;
+    border: none;
+    background-color: var(--color-confirm-button);
+  }
 
-.pagination {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  width: 100%;
-  flex: 1;
-}
+  .toggle-button:hover{
+    transform: scale(1.02);
+  }
 
-.pagination button {
-  padding: 5px 10px;
-  margin: 0 5px;
-  border: none;
-  border-radius: 5px;
-  background-color: var(--color-pageination-button);
-}
+  .toggle-button-title{
+    font-weight: bold;
+    color: var(--color-headerText);
+  }
 
-.pagination button:hover {
-  transition: 0.3s;
-  transform: scale(1.05);
-}
+  .active-button{
+    background-color: var(--color-confirm-button-click);
+  }
 
-.pagination button:active{
-  background-color: var(--color-pageination-button-click);
-}
+  .mobile-hide{
+    display: none;
+  }
 
-.pagination button:disabled {
-  color: var( --color-inactive-button-text);
-  cursor: not-allowed;
-  transform: none;
-  background-color: var(--color-pageination-button) ;
-}
+  .left{
+    width: 100%;
+    height: 100%;
+  }
 
-.page-numbers {
-  display: flex;
-}
-
-.page-numbers button {
-  border: 1px solid var(--color-border);
-  border-radius: 5px;
-  background-color: var(--color-pageination-button);
-}
-
-.page-numbers button:hover {
-  transition: 0.3s;
-  transform: scale(1.05);
-}
+  .right{
+    min-height: 110%;
+    width: 100%;
+  }
 
-.page-numbers button:active {
-  background-color: var(--color-pageination-button-click);
 }
 
-.chosen{
-  background-color: black;
+@media (prefers-color-scheme: dark) {
+  .help-icon{
+    filter: invert(1);
+  }
 }
 
-
-
 </style>
\ No newline at end of file
-- 
GitLab