diff --git a/package-lock.json b/package-lock.json index 88d57bd03bdde17aecd6e8981798af7a0cf3879e..d887708f52dc6717998442d119dfd80d053cbc63 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "@testing-library/user-event": "^14.5.2", "@testing-library/vue": "^8.0.3", "@tsconfig/node20": "^20.1.4", + "@types/js-cookie": "^3.0.6", "@types/jsdom": "^21.1.6", "@types/node": "^20.12.5", "@vitejs/plugin-vue": "^5.0.4", @@ -1844,6 +1845,12 @@ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, + "node_modules/@types/js-cookie": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", + "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==", + "dev": true + }, "node_modules/@types/jsdom": { "version": "21.1.6", "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.6.tgz", diff --git a/package.json b/package.json index 107df03de864ad4cb836307fd03df0cbf981c172..c7305399cb0eed8bdfd5b03cc45c616a01489e59 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "@testing-library/user-event": "^14.5.2", "@testing-library/vue": "^8.0.3", "@tsconfig/node20": "^20.1.4", + "@types/js-cookie": "^3.0.6", "@types/jsdom": "^21.1.6", "@types/node": "^20.12.5", "@vitejs/plugin-vue": "^5.0.4", diff --git a/src/components/Configuration/ConfigurationSteps/SuitableChallenges.vue b/src/components/Configuration/ConfigurationSteps/SuitableChallenges.vue index a81fa4199e19bbfbea94e18f8b224b73e7ef947e..1a7a10c84d7ce1c69f9fce9479f6180586cdbbbf 100644 --- a/src/components/Configuration/ConfigurationSteps/SuitableChallenges.vue +++ b/src/components/Configuration/ConfigurationSteps/SuitableChallenges.vue @@ -28,7 +28,7 @@ const challenges = ['Make packed lunch', 'Stop shopping', 'Drop coffee', * The first element is the challenge value, and the second element * indicates whether the challenge is checked (true) or unchecked (false). */ -const onChangedChallengeEvent = (value) => { +const onChangedChallengeEvent = (value: any) => { // if challenge is checked then add it to the chosenChallenges variable if (value[1]) { chosenChallenges.value.push(value[0]) diff --git a/src/components/Exceptions/ErrorBoundaryCatcher.vue b/src/components/Exceptions/ErrorBoundaryCatcher.vue index fa80d8db5bcc4694fb10be7ad2ae1fad08af48aa..29500a2b3080583b012e271c2e8b30bbdeb988df 100644 --- a/src/components/Exceptions/ErrorBoundaryCatcher.vue +++ b/src/components/Exceptions/ErrorBoundaryCatcher.vue @@ -1,6 +1,6 @@ <template> <error-box :error-message="errorStore.getFirstError" @update:errorMessage="errorStore.removeCurrentError" /> - <slot /> + <slot></slot> </template> <script setup lang="ts"> diff --git a/src/views/BasePageView.vue b/src/views/BasePageView.vue index a9780ec71399880d811a9690ddc028b96ec94d17..07af9953b1384c894b42a476b9bccecd9012526e 100644 --- a/src/views/BasePageView.vue +++ b/src/views/BasePageView.vue @@ -8,13 +8,13 @@ import Menu from '@/components/BaseComponents/Menu.vue' <Menu></Menu> <div style="display: flex; flex-direction: row;"> - <img v-for="item in 7" src="@/assets/coca.webp" style="width: 100%; height: 100px; margin: 5px; border-radius: 1rem;"> + <img v-for="item in 7" src="@/assets/coca.webp" style="width: 100%; height: 100px; margin: 5px; border-radius: 1rem;" alt="picture"> </div> <div> <RouterView /> </div> <div style="display: flex; flex-direction: row;"> - <img v-for="item in 7" src="@/assets/coca.webp" style="width: 100%; height: 100px; margin: 5px; border-radius: 1rem;"> + <img v-for="item in 7" src="@/assets/coca.webp" style="width: 100%; height: 100px; margin: 5px; border-radius: 1rem;" alt="picture"> </div> <Footer></Footer> </template> \ No newline at end of file diff --git a/src/views/BudgetOverview.vue b/src/views/BudgetOverview.vue index e58fb67ed304fcffc341f2baea40d1ace164c119..617c79bb0bf6084454c6ca61e8e8238cd8deea70 100644 --- a/src/views/BudgetOverview.vue +++ b/src/views/BudgetOverview.vue @@ -1,6 +1,9 @@ <script setup lang="ts"> import Button1 from '@/components/Buttons/Button1.vue' import BudgetBox from '@/components/Budget/BudgetBox.vue' + +const budget = 1000; +const expenses = 95600; </script> <template> @@ -19,15 +22,15 @@ import BudgetBox from '@/components/Budget/BudgetBox.vue' <!--TODO make this more generic--> <ul class="budgetContainer"> - <li><budget-box title="April 2024" budget="1000" expenses="908700"></budget-box></li> - <li><budget-box title="Mai 2024" budget="1000" expenses="87"></budget-box></li> - <li><budget-box title="Juni 2024" budget="1000" expenses="87"></budget-box></li> - <li><budget-box title="Juli 2024" budget="1000" expenses="87"></budget-box></li> - <li><budget-box title="August 2024" budget="1000" expenses="87"></budget-box></li> - <li><budget-box title="September 2024" budget="1000" expenses="87"></budget-box></li> - <li><budget-box title="Oktober 2024" budget="1000" expenses="87"></budget-box></li> - <li><budget-box title="November 2024" budget="1000" expenses="87"></budget-box></li> - <li><budget-box title="Desember 2024" budget="1000" expenses="87"></budget-box></li> + <li><budget-box title="April 2024" :budget=budget :expenses=expenses></budget-box></li> + <li><budget-box title="Mai 2024" :budget=budget :expenses=expenses></budget-box></li> + <li><budget-box title="Juni 2024" :budget=budget :expenses=expenses></budget-box></li> + <li><budget-box title="Juli 2024" :budget=budget :expenses=expenses></budget-box></li> + <li><budget-box title="August 2024" :budget=budget :expenses=expenses></budget-box></li> + <li><budget-box title="September 2024" :budget=budget :expenses=expenses></budget-box></li> + <li><budget-box title="Oktober 2024" :budget=budget :expenses=expenses></budget-box></li> + <li><budget-box title="November 2024" :budget=budget :expenses=expenses></budget-box></li> + <li><budget-box title="Desember 2024" :budget=budget :expenses=expenses></budget-box></li> </ul> <nav id="navbar" aria-label="Page navigation example"> diff --git a/src/views/BudgetView.vue b/src/views/BudgetView.vue index 0297c102ccddc3c1f463cf93fb3049b5f1901b1c..750d0e16a3140ba26aee608bf5c1d77c609d78a1 100644 --- a/src/views/BudgetView.vue +++ b/src/views/BudgetView.vue @@ -153,7 +153,7 @@ const onDeleteBudgetPressed = () => { <button class="btn btn-close" data-bs-dismiss="modal"></button> </div> <div class="modal-body"> - <button id="importButton" class="btn btn-primary"><img src="../assets/icons/import.svg" height="20" width="20">Import budget</button> + <button id="importButton" class="btn btn-primary"><img src="../assets/icons/import.svg" height="20" width="20" alt="picture">Import budget</button> <button id="editBudget" class="btn btn-primary" data-bs-toggle="collapse" data-bs-target="#editBudgetCollapse" aria-expanded="false" aria-controls="editBudgetCollapse"><img src="../assets/icons/edit-button.svg" alt="editButton">Rename budget</button> <div class="collapse" id="editBudgetCollapse"> <div class="container collapse-container"> @@ -165,7 +165,7 @@ const onDeleteBudgetPressed = () => { </form> </div> </div> - <button id="deleteButton" class="btn btn-primary" data-bs-toggle="modal" @click="onDeleteBudgetPressed"><img src="../assets/icons/trash-can.svg" height="20" width="20">Delete budget</button> + <button id="deleteButton" class="btn btn-primary" data-bs-toggle="modal" @click="onDeleteBudgetPressed"><img src="../assets/icons/trash-can.svg" height="20" width="20" alt="picture">Delete budget</button> </div> </div> </div> @@ -173,7 +173,7 @@ const onDeleteBudgetPressed = () => { <div class="budget-info-container"> <div class="info budget-container"> - <i><img src="../assets/icons/money2.svg" width="48px" height="48px"></i> + <i><img src="../assets/icons/money2.svg" width="48px" height="48px" alt="picture"></i> <div class="budget-text-container"> <h5>{{budget}} kr</h5> <p>Budget</p> @@ -181,7 +181,7 @@ const onDeleteBudgetPressed = () => { </div> <div class="info expenses-container"> - <i><img src="../assets/icons/credit-card.svg" width="48px" height="48px"></i> + <i><img src="../assets/icons/credit-card.svg" width="48px" height="48px" alt="picture"></i> <div class="expenses-text-container"> <h5>{{expenses}} kr</h5> <p>Expenses</p> @@ -189,7 +189,7 @@ const onDeleteBudgetPressed = () => { </div> <div class="info balance-container"> - <i ref="iRef"><img src="../assets/icons/scale.svg" width="48px" height="48px"></i> + <i ref="iRef"><img src="../assets/icons/scale.svg" width="48px" height="48px" alt="picture"></i> <div class="balance-text-container"> <h5>{{balance}} kr</h5> <p>Balance</p> diff --git a/src/views/ConfigurationView.vue b/src/views/ConfigurationView.vue index 58a63f43e9d6cb7ab5f205a8fb09489b9bd2701c..2c375e5d6c494d84822eb53e84684aba09572356 100644 --- a/src/views/ConfigurationView.vue +++ b/src/views/ConfigurationView.vue @@ -1,7 +1,5 @@ <script setup lang="ts"> import Configuration from '@/components/Configuration/Configuration.vue' -import Menu from '@/components/BaseComponents/Menu.vue' -import Footer from '@/components/BaseComponents/Footer.vue' </script> <template> diff --git a/src/views/LeaderboardView.vue b/src/views/LeaderboardView.vue index e0ffc537d39098a8654eaeffbd901f65fd9b4234..12acc33fe8c791a95188ebdc829294b90752f25a 100644 --- a/src/views/LeaderboardView.vue +++ b/src/views/LeaderboardView.vue @@ -9,40 +9,38 @@ <div class="btn-group-vertical" id="radioContainer" role="group" aria-label="Vertical radio toggle button group"> <input type="radio" class="btn-check" name="vbtn-radio" id="vbtn-radio1" autocomplete="off" checked> - <label class="btn btn-outline-primary" for="vbtn-radio1" @click="global"><img src="@/assets/globe.png" style="width: 60px"> Global</label> + <label class="btn btn-outline-primary" for="vbtn-radio1" @click="global"><img src="@/assets/globe.png" style="width: 60px" alt="globe"> Global</label> <input type="radio" class="btn-check" name="vbtn-radio" id="vbtn-radio2" autocomplete="off"> - <label class="btn btn-outline-primary" for="vbtn-radio2" @click="friends"><img src="@/assets/friends.png" style="width: 60px"> Friends</label> + <label class="btn btn-outline-primary" for="vbtn-radio2" @click="friends"><img src="@/assets/friends.png" style="width: 60px" alt="friends"> Friends</label> </div> </div> </div> <main> <div id="leaderboard"> - <h1><img src="@/assets/items/pigcoin.png" style="width: 2rem"> Total points</h1> + <h1><img src="@/assets/items/pigcoin.png" style="width: 2rem" alt="pig coin"> Total points</h1> <Leaderboard :leaderboard="pointsLeaderboardData" :leaderboardExtra="pointsLeaderboardDataExtra" @navigateToUserProfile="navigateToUserProfile" /> </div> <div id="leaderboard"> - <h1><img src="@/assets/icons/fire.png" style="width: 2rem"> Current streak</h1> + <h1><img src="@/assets/icons/fire.png" style="width: 2rem" alt="fire"> Current streak</h1> <Leaderboard :leaderboard="currentLeaderboardData" :leaderboardExtra="currentLeaderboardDataExtra" @navigateToUserProfile="navigateToUserProfile" /> </div> <div id="leaderboard"> - <h1><img src="@/assets/icons/fire.png" style="width: 2rem"> Highest streak</h1> + <h1><img src="@/assets/icons/fire.png" style="width: 2rem" alt="fire"> Highest streak</h1> <Leaderboard :leaderboard="streakLeaderboardData" :leaderboardExtra="streakLeaderboardDataExtra" @navigateToUserProfile="navigateToUserProfile" /> </div> </main> </div> <div id="communityContainer"> <h1>Total points earned as a community</h1> - <h2>1000000 <img src="@/assets/items/v-buck.png" style="width: 2rem"></h2> + <h2>1000000 <img src="@/assets/items/v-buck.png" style="width: 2rem" alt="alt"></h2> </div> </template> <script setup lang="ts"> -import { onMounted, ref, type PropType } from 'vue'; -import { useRoute, useRouter } from 'vue-router'; +import { onMounted, ref } from 'vue'; +import { useRouter } from 'vue-router'; import Leaderboard from '@/components/LeaderboardComponents/Leaderboard.vue'; -import { on } from 'events'; import { LeaderboardService } from '@/api'; -import type { LeaderboardEntryDTO } from '@/api/models/LeaderboardEntryDTO'; let streakLeaderboardData = ref([] as any); let currentLeaderboardData = ref([] as any); @@ -55,7 +53,7 @@ let pointsLeaderboardDataExtra = ref([] as any); const router = useRouter(); async function fetchQuizData() { - global(); + await global(); } onMounted(() => { @@ -202,10 +200,4 @@ h1 { margin-bottom: 5rem; } -.leaderBoardButton { - padding: 1rem 4rem; - font-weight: 700; - border-radius: 2rem; - margin: 1rem; -} </style> \ No newline at end of file diff --git a/src/views/Settings/SettingsAccountView.vue b/src/views/Settings/SettingsAccountView.vue index f3d2c54bd951805dd072af5d700c661f52dec5f1..ee06249337fbba6a7b358a3cea9c5fb69d9d96ec 100644 --- a/src/views/Settings/SettingsAccountView.vue +++ b/src/views/Settings/SettingsAccountView.vue @@ -11,6 +11,14 @@ const confirmPasswordRef = ref('') const formRef = ref() let samePasswords = ref(true) +const handleFirstNameInputEvent = (newValue: any) => { + firstNameRef.value = newValue +} + +const handleEmailInputEvent = (newValue: any) => { + emailRef.value = newValue +} + </script> <template> diff --git a/src/views/Settings/SettingsProfileView.vue b/src/views/Settings/SettingsProfileView.vue index e082b050b85b9654f1af815a952137422c235dc1..b562554ee44203d4f4b82ebfaa209d03c9b27ab9 100644 --- a/src/views/Settings/SettingsProfileView.vue +++ b/src/views/Settings/SettingsProfileView.vue @@ -11,6 +11,15 @@ const confirmPasswordRef = ref('') const formRef = ref() let samePasswords = ref(true) +const handleFirstNameInputEvent = (newValue: any) => { + firstNameRef.value = newValue +} + + +const handleSurnameInputEvent = (newValue: any) => { + surnameRef.value = newValue +} + </script> diff --git a/src/views/SettingsView.vue b/src/views/SettingsView.vue index 195694c4eb50a14a7eaabaa324c6876bd01b7e3d..bfacde14fc84fd679ba5dd74411c03c60bf5a219 100644 --- a/src/views/SettingsView.vue +++ b/src/views/SettingsView.vue @@ -116,7 +116,7 @@ function toBilling() { <div class="card-header border-bottom mb-3 d-flex d-md-none"> <ul class="nav nav-tabs card-header-tabs nav-gap-x-1" role="tablist"> <li class="nav-item"> - <a href="#profile" data-toggle="tab" class="nav-link has-icon active"><svg + <a href="#" data-toggle="tab" class="nav-link has-icon active"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-user"> @@ -125,7 +125,7 @@ function toBilling() { </svg></a> </li> <li class="nav-item"> - <a href="#account" data-toggle="tab" class="nav-link has-icon"><svg + <a href="#" data-toggle="tab" class="nav-link has-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-settings"> @@ -136,7 +136,7 @@ function toBilling() { </svg></a> </li> <li class="nav-item"> - <a href="#security" data-toggle="tab" class="nav-link has-icon"><svg + <a href="#" data-toggle="tab" class="nav-link has-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-shield"> @@ -144,7 +144,7 @@ function toBilling() { </svg></a> </li> <li class="nav-item"> - <a href="#notification" data-toggle="tab" class="nav-link has-icon"><svg + <a href="#" data-toggle="tab" class="nav-link has-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bell"> @@ -153,7 +153,7 @@ function toBilling() { </svg></a> </li> <li class="nav-item"> - <a href="#billing" data-toggle="tab" class="nav-link has-icon"><svg + <a href="#" data-toggle="tab" class="nav-link has-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-credit-card"> @@ -180,10 +180,6 @@ function toBilling() { margin-bottom: 4rem; } -.main-body { - padding: 15px; -} - .nav-link { color: #4a5568; } @@ -215,31 +211,13 @@ function toBilling() { margin-left: -8px; } -.gutters-sm>.col, -.gutters-sm>[class*=col-] { +.gutters-sm>, +.gutters-sm> { padding-right: 8px; padding-left: 8px; } -.mb-3, -.my-3 { +.mb-3 { margin-bottom: 1rem !important; } - -.bg-gray-300 { - background-color: #e2e8f0; -} - -.h-100 { - height: 100% !important; -} - -.shadow-none { - box-shadow: none !important; -} - -.routerLink { - text-decoration: none; - color: #4a5568; -} </style> \ No newline at end of file diff --git a/src/views/UnauthorizedView.vue b/src/views/UnauthorizedView.vue index 81e1aea9da6240f6655f46a18d78670983c7a179..b5cc9b581ba5c25e50530d000ef516aa383a4eef 100644 --- a/src/views/UnauthorizedView.vue +++ b/src/views/UnauthorizedView.vue @@ -3,7 +3,7 @@ <div class="container py-5"> <div class="row"> <div class="col-md-2 text-center"> - <p><img src="@/assets/icons/danger.svg"> <br/>Status Code: 403</p> + <p><img src="@/assets/icons/danger.svg" alt="danger"> <br/>Status Code: 403</p> </div> <div class="col-md-10"> <h3>OPPSSS!!!! Sorry...</h3> @@ -16,7 +16,6 @@ </template> <script setup lang="ts"> -import { defineComponent } from 'vue'; import { useRouter } from 'vue-router'; import Button1 from '@/components/Buttons/Button1.vue'; diff --git a/src/views/User/UserFriendsView.vue b/src/views/User/UserFriendsView.vue index e281c65b25970f4e7e29ddf897a8696f8db9a64d..f37dfe4b237c2f8d9f20cc87c29973874f2ea33b 100644 --- a/src/views/User/UserFriendsView.vue +++ b/src/views/User/UserFriendsView.vue @@ -360,11 +360,11 @@ function addFriend() { } // Define the navigateToQuiz method -const navigateToFriend = (friendID :string) => { +const navigateToFriend = (friendID :number) => { router.push('/profile/' + friendID) }; -const removeFriend = (friendID) => { +const removeFriend = (friendID: number) => { };