Skip to content
Snippets Groups Projects
Commit 981910fd authored by Anders Høvik's avatar Anders Høvik
Browse files

Merge branch 'main' into feature/update-user-settings-layout

parents ed506ba7 b52a5c81
No related branches found
No related tags found
1 merge request!30Feature/update user settings layout
Pipeline #276330 failed
<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M680-280q25 0 42.5-17.5T740-340q0-25-17.5-42.5T680-400q-25 0-42.5 17.5T620-340q0 25 17.5 42.5T680-280Zm0 120q31 0 57-14.5t42-38.5q-22-13-47-20t-52-7q-27 0-52 7t-47 20q16 24 42 38.5t57 14.5ZM480-80q-139-35-229.5-159.5T160-516v-244l320-120 320 120v227q-19-8-39-14.5t-41-9.5v-147l-240-90-240 90v188q0 47 12.5 94t35 89.5Q310-290 342-254t71 60q11 32 29 61t41 52q-1 0-1.5.5t-1.5.5Zm200 0q-83 0-141.5-58.5T480-280q0-83 58.5-141.5T680-480q83 0 141.5 58.5T880-280q0 83-58.5 141.5T680-80ZM480-494Z" fill="#ffffff"/></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M40-160v-112q0-34 17.5-62.5T104-378q62-31 126-46.5T360-440q66 0 130 15.5T616-378q29 15 46.5 43.5T680-272v112H40Zm720 0v-120q0-44-24.5-84.5T666-434q51 6 96 20.5t84 35.5q36 20 55 44.5t19 53.5v120H760ZM360-480q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47Zm400-160q0 66-47 113t-113 47q-11 0-28-2.5t-28-5.5q27-32 41.5-71t14.5-81q0-42-14.5-81T544-792q14-5 28-6.5t28-1.5q66 0 113 47t47 113ZM120-240h480v-32q0-11-5.5-20T580-306q-54-27-109-40.5T360-360q-56 0-111 13.5T140-306q-9 5-14.5 14t-5.5 20v32Zm240-320q33 0 56.5-23.5T440-640q0-33-23.5-56.5T360-720q-33 0-56.5 23.5T280-640q0 33 23.5 56.5T360-560Zm0 320Zm0-400Z" fill="#ffffff"/></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M640-520v-80h240v80H640Zm-280 40q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47ZM40-160v-112q0-34 17.5-62.5T104-378q62-31 126-46.5T360-440q66 0 130 15.5T616-378q29 15 46.5 43.5T680-272v112H40Zm80-80h480v-32q0-11-5.5-20T580-306q-54-27-109-40.5T360-360q-56 0-111 13.5T140-306q-9 5-14.5 14t-5.5 20v32Zm240-320q33 0 56.5-23.5T440-640q0-33-23.5-56.5T360-720q-33 0-56.5 23.5T280-640q0 33 23.5 56.5T360-560Zm0-80Zm0 400Z" fill="#ffffff"/></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M640-520v-80h240v80H640Zm-280 40q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47ZM40-160v-112q0-34 17.5-62.5T104-378q62-31 126-46.5T360-440q66 0 130 15.5T616-378q29 15 46.5 43.5T680-272v112H40Zm80-80h480v-32q0-11-5.5-20T580-306q-54-27-109-40.5T360-360q-56 0-111 13.5T140-306q-9 5-14.5 14t-5.5 20v32Zm240-320q33 0 56.5-23.5T440-640q0-33-23.5-56.5T360-720q-33 0-56.5 23.5T280-640q0 33 23.5 56.5T360-560Zm0-80Zm0 400Z"/></svg>
\ No newline at end of file
...@@ -36,10 +36,14 @@ ...@@ -36,10 +36,14 @@
<ul class="dropdown-menu dropdown-username-content"> <ul class="dropdown-menu dropdown-username-content">
<li><a class="dropdown-item text-white dropdown-username-link" href="#" <li><a class="dropdown-item text-white dropdown-username-link" href="#"
@click="toUserProfile"><img src="@/assets/icons/person.svg">User Profile</a></li> @click="toUserProfile"><img src="@/assets/icons/person.svg">User Profile</a></li>
<li><a class="dropdown-item text-white dropdown-username-link" href="#"
@click="toFriends"><img src="@/assets/icons/friends.svg">Friends</a></li>
<li><a class="dropdown-item text-white dropdown-username-link" href="#" <li><a class="dropdown-item text-white dropdown-username-link" href="#"
@click="toSetting"><img src="@/assets/icons/settings.svg">Setting</a></li> @click="toSetting"><img src="@/assets/icons/settings.svg">Setting</a></li>
<li><a class="dropdown-item text-white dropdown-username-link" href="#" <li><a class="dropdown-item text-white dropdown-username-link" href="#"
@click="toFeedback"><img src="@/assets/icons/feedback.svg">Feedback</a></li> @click="toFeedback"><img src="@/assets/icons/feedback.svg">Feedback</a></li>
<li><a class="dropdown-item text-white dropdown-username-link" href="#"
@click="toSetting"><img src="@/assets/icons/admin.svg">Admin table</a></li>
<li><a class="dropdown-item text-white dropdown-username-link" href="#" <li><a class="dropdown-item text-white dropdown-username-link" href="#"
@click="toLogout"><img src="@/assets/icons/logout.svg">Log out</a></li> @click="toLogout"><img src="@/assets/icons/logout.svg">Log out</a></li>
</ul> </ul>
...@@ -88,6 +92,9 @@ function toFeedback() { ...@@ -88,6 +92,9 @@ function toFeedback() {
router.push('/feedback') router.push('/feedback')
} }
function toFriends() {
router.push('/friends')
}
function toUserProfile() { function toUserProfile() {
router.push('/profile') router.push('/profile')
......
...@@ -60,10 +60,20 @@ const routes = [ ...@@ -60,10 +60,20 @@ const routes = [
component: () => import('@/views/ShopView.vue'), component: () => import('@/views/ShopView.vue'),
}, },
{ {
path: '/profile', path: 'profile',
name: 'profile', name: 'profile',
component: UserProfileView component: UserProfileView
}, },
{
path: 'friends',
name: 'friends',
component: () => import('@/views/User/UserFriendsView.vue'),
},
{
path: 'add-friend',
name: 'add-friend',
component: () => import('@/views/User/UserAddFriend.vue'),
},
{ {
path: 'admin', path: 'admin',
name: 'admin', name: 'admin',
...@@ -87,6 +97,16 @@ const routes = [ ...@@ -87,6 +97,16 @@ const routes = [
name: 'login', name: 'login',
component: LoginView, component: LoginView,
}, },
{
path: '/forgotten-password',
name: 'forgotten-password',
component: () => import('@/views/Authentication/ForgottenPasswordView.vue'),
},
{
path: '/change-password/:token',
name: 'change-password',
component: () => import('@/views/Authentication/ChangePasswordView.vue'),
},
{ {
path: '/sign-up', path: '/sign-up',
name: 'sign up', name: 'sign up',
......
<template>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-5">
<div class="card shadow-lg border-0 rounded-lg mt-5">
<div class="card-header"><h3 class="text-center font-weight-light my-4">Password Recovery</h3></div>
<div class="card-body">
<div class="small mb-3 text-muted">Enter the new password for your account</div>
<form @submit.prevent="submitForm">
<div class="form-floating mb-3">
<input v-model="newPassword" class="form-control" id="newPassword" type="password" placeholder="New Password" required>
<label for="newPassword">Enter your new password</label>
</div>
<div class="form-floating mb-3">
<input v-model="confirmPassword" class="form-control" id="confirmPassword" type="password" placeholder="Confirm Password" required>
<label for="confirmPassword">Confirm your new password</label>
</div>
<div class="d-flex align-items-center justify-content-between mt-4 mb-0">
<router-link to="/login" class="small">Return to login</router-link>
<button class="btn btn-primary" type="submit">Confirm Password</button>
</div>
</form>
</div>
<div class="card-footer text-center py-3">
<div class="small"><router-link to="/sign-up">Need an account? Sign up!</router-link></div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import axios from 'axios';
const router = useRouter();
const newPassword = ref('');
const confirmPassword = ref('');
const submitForm = async () => {
if (newPassword.value !== confirmPassword.value) {
alert('Passwords do not match!');
return;
}
try {
const response = await axios.post('/api/reset-password', {
password: newPassword.value,
confirmPassword: confirmPassword.value
});
console.log('Success:', response.data);
router.push('/login');
} catch (error) {
console.error('Error:', error);
}
};
</script>
\ No newline at end of file
<template>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-5">
<div class="card shadow-lg border-0 rounded-lg mt-5">
<div class="card-header"><h3 class="text-center font-weight-light my-4">Password Recovery</h3></div>
<div class="card-body">
<div class="small mb-3 text-muted">Enter your email address and we will send you a link to reset your password.</div>
<form @submit.prevent="submitForm">
<div class="form-floating mb-3">
<input v-model="email" class="form-control" id="inputEmail" type="email" placeholder="name@example.com" required>
<label for="inputEmail">Enter email address</label>
</div>
<div class="d-flex align-items-center justify-content-between mt-4 mb-0">
<router-link to="/login" class="small">Return to login</router-link>
<button class="btn btn-primary" type="submit">Reset Password</button>
</div>
<div class="text-success">
{{ confirmationMessage }}
</div>
</form>
</div>
<div class="card-footer text-center py-3">
<div class="small"><router-link to="/sign-up">Need an account? Sign up!</router-link></div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import axios from 'axios';
const router = useRouter();
const email = ref('');
let confirmationMessage = ref('');
const submitForm = async () => {
try {
const response = await axios.post('/api/password-reset', { email: email.value });
console.log('Success:', response.data);
confirmationMessage.value = 'An email has been sent to your email address with a link to reset your password.';
} catch (error) {
console.error('Error:', error);
}
};
</script>
\ No newline at end of file
...@@ -70,6 +70,23 @@ async function global() { ...@@ -70,6 +70,23 @@ async function global() {
type: "CURRENT_STREAK", type: "CURRENT_STREAK",
filter: "GLOBAL", filter: "GLOBAL",
}); });
let globalPointsYou = await LeaderboardService.getSurrounding({
type: "TOTAL_POINTS",
filter: "GLOBAL",
});
let globalStreakYou = await LeaderboardService.getSurrounding({
type: "TOP_STREAK",
filter: "GLOBAL",
});
let globalCurrentStreakYou = await LeaderboardService.getSurrounding({
type: "CURRENT_STREAK",
filter: "GLOBAL",
});
console.log(globalPointsYou);
console.log(globalStreakYou);
console.log(globalCurrentStreakYou);
pointsLeaderboardData.value = globalPoints.entries; pointsLeaderboardData.value = globalPoints.entries;
currentLeaderboardData.value = globalCurrentStreak.entries; currentLeaderboardData.value = globalCurrentStreak.entries;
streakLeaderboardData.value = globalStreak.entries; streakLeaderboardData.value = globalStreak.entries;
......
<template>
<div class="container">
<h1>Add Friend</h1>
<div class="row">
<form class="col-md-5" id="searchBox" role="search">
<input class="form-control me-2 custom-border" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-success" type="submit">Search</button>
</form>
<div class="col-md-8">
<div class="people-nearby">
<div class="nearby-user">
<div class="row">
<div class="col-md-2 col-sm-2">
<img src="https://bootdey.com/img/Content/avatar/avatar7.png" alt="user"
class="profile-photo-lg">
</div>
<div class="col-md-7 col-sm-7">
<h5><a href="#" class="profile-link">Sophia Page</a></h5>
<p>Software Engineer</p>
<p class="text-muted">500m away</p>
</div>
<div class="col-md-3 col-sm-3">
<button class="btn btn-primary pull-right">Add Friend</button>
</div>
</div>
</div>
<div class="nearby-user">
<div class="row">
<div class="col-md-2 col-sm-2">
<img src="https://bootdey.com/img/Content/avatar/avatar6.png" alt="user"
class="profile-photo-lg">
</div>
<div class="col-md-7 col-sm-7">
<h5><a href="#" class="profile-link">Emma Johnson</a></h5>
<p>Model at Fashion</p>
<p class="text-muted">800m away</p>
</div>
<div class="col-md-3 col-sm-3">
<button class="btn btn-primary pull-right">Add Friend</button>
</div>
</div>
</div>
<div class="nearby-user">
<div class="row">
<div class="col-md-2 col-sm-2">
<img src="https://bootdey.com/img/Content/avatar/avatar5.png" alt="user"
class="profile-photo-lg">
</div>
<div class="col-md-7 col-sm-7">
<h5><a href="#" class="profile-link">Nora Wilson</a></h5>
<p>Writer at Newspaper</p>
<p class="text-muted">2.5km away</p>
</div>
<div class="col-md-3 col-sm-3">
<button class="btn btn-primary pull-right">Add Friend</button>
</div>
</div>
</div>
<div class="nearby-user">
<div class="row">
<div class="col-md-2 col-sm-2">
<img src="https://bootdey.com/img/Content/avatar/avatar4.png" alt="user"
class="profile-photo-lg">
</div>
<div class="col-md-7 col-sm-7">
<h5><a href="#" class="profile-link">Diana Amber</a></h5>
<p>Student</p>
<p class="text-muted">700m away</p>
</div>
<div class="col-md-3 col-sm-3">
<button class="btn btn-primary pull-right">Add Friend</button>
</div>
</div>
</div>
<div class="nearby-user">
<div class="row">
<div class="col-md-2 col-sm-2">
<img src="https://bootdey.com/img/Content/avatar/avatar3.png" alt="user"
class="profile-photo-lg">
</div>
<div class="col-md-7 col-sm-7">
<h5><a href="#" class="profile-link">Addison Thomas</a></h5>
<p>Barber at Fashion</p>
<p class="text-muted">1.5km away</p>
</div>
<div class="col-md-3 col-sm-3">
<button class="btn btn-primary pull-right">Add Friend</button>
</div>
</div>
</div>
<div class="nearby-user">
<div class="row">
<div class="col-md-2 col-sm-2">
<img src="https://bootdey.com/img/Content/avatar/avatar2.png" alt="user"
class="profile-photo-lg">
</div>
<div class="col-md-7 col-sm-7">
<h5><a href="#" class="profile-link">Jonathon Thompson</a></h5>
<p>Fashion Designer</p>
<p class="text-muted">2km away</p>
</div>
<div class="col-md-3 col-sm-3">
<button class="btn btn-primary pull-right">Add Friend</button>
</div>
</div>
</div>
<div class="nearby-user">
<div class="row">
<div class="col-md-2 col-sm-2">
<img src="https://bootdey.com/img/Content/avatar/avatar7.png" alt="user"
class="profile-photo-lg">
</div>
<div class="col-md-7 col-sm-7">
<h5><a href="#" class="profile-link">Olivia Steward</a></h5>
<p>Creative Director</p>
<p class="text-muted">2km away</p>
</div>
<div class="col-md-3 col-sm-3">
<button class="btn btn-primary pull-right">Add Friend</button>
</div>
</div>
</div>
<div class="nearby-user">
<div class="row">
<div class="col-md-2 col-sm-2">
<img src="https://bootdey.com/img/Content/avatar/avatar6.png" alt="user"
class="profile-photo-lg">
</div>
<div class="col-md-7 col-sm-7">
<h5><a href="#" class="profile-link">Elena Foster</a></h5>
<p>Executive Officer</p>
<p class="text-muted">4km away</p>
</div>
<div class="col-md-3 col-sm-3">
<button class="btn btn-primary pull-right">Add Friend</button>
</div>
</div>
</div>
<div class="nearby-user">
<div class="row">
<div class="col-md-2 col-sm-2">
<img src="https://bootdey.com/img/Content/avatar/avatar1.png" alt="user"
class="profile-photo-lg">
</div>
<div class="col-md-7 col-sm-7">
<h5><a href="#" class="profile-link">Brian Walton</a></h5>
<p>Designer at Designer</p>
<p class="text-muted">3km away</p>
</div>
<div class="col-md-3 col-sm-3">
<button class="btn btn-primary pull-right">Add Friend</button>
</div>
</div>
</div>
<div class="nearby-user">
<div class="row">
<div class="col-md-2 col-sm-2">
<img src="https://bootdey.com/img/Content/avatar/avatar7.png" alt="user"
class="profile-photo-lg">
</div>
<div class="col-md-7 col-sm-7">
<h5><a href="#" class="profile-link">Cris Haris</a></h5>
<p>General Manager at Manager</p>
<p class="text-muted">1km away</p>
</div>
<div class="col-md-3 col-sm-3">
<button class="btn btn-primary pull-right">Add Friend</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<style scoped>
body {
margin-top: 20px;
background: #FAFAFA;
}
.people-nearby .google-maps {
background: #f8f8f8;
border-radius: 4px;
border: 1px solid #f1f2f2;
padding: 20px;
margin-bottom: 20px;
}
.people-nearby .google-maps .map {
height: 300px;
width: 100%;
border: none;
}
.people-nearby .nearby-user {
padding: 20px 0;
border-top: 1px solid #f1f2f2;
border-bottom: 1px solid #f1f2f2;
margin-bottom: 20px;
}
img.profile-photo-lg {
height: 80px;
width: 80px;
border-radius: 50%;
}
#searchBox {
margin-bottom: 20px;
display: flex;
text-wrap: nowrap;
}
.row {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.form-control.custom-border {
border-color: #222223; /* Change to your desired color */
}
</style>
\ No newline at end of file
<template>
<div class="container">
<h1>Your Friends</h1>
<button class="btn btn-primary pull-right my-3" @click="addFriend">+ Add Friend</button>
<div class="row">
<div class="col-lg-3">
<div class="card card-one">
<div class="header">
<div class="avatar">
<img src="https://bootdey.com/img/Content/avatar/avatar2.png" alt="">
</div>
</div>
<h3>Amillie Price</h3>
<div class="desc">
Lorem ipsum dolor sit amet, consectetur adipisicing elit et cupiditate deleniti.
</div>
<div class="contacts">
<a class="text removeFriend" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
See more
</a>
<div class="collapse" id="collapseExample">
<button class="btn btn-danger">
<h5> <img src="@/assets/icons/remove-white.svg" style="width: 30px"> Remove friend</h5>
</button>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card card-one">
<div class="header">
<div class="avatar">
<img src="https://bootdey.com/img/Content/avatar/avatar1.png" alt="">
</div>
</div>
<h3>Victoria Fox</h3>
<div class="desc">
Lorem ipsum dolor sit amet, consectetur adipisicing elit et cupiditate deleniti.
</div>
<div class="contacts">
<a class="text removeFriend" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
See more
</a>
<div class="collapse" id="collapseExample">
<button class="btn btn-danger">
<h5> <img src="@/assets/icons/remove-white.svg" style="width: 30px"> Remove friend</h5>
</button>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card card-one">
<div class="header">
<div class="avatar">
<img src="https://bootdey.com/img/Content/avatar/avatar3.png" alt="">
</div>
</div>
<h3>Coray Shoe</h3>
<div class="desc">
Lorem ipsum dolor sit amet, consectetur adipisicing elit et cupiditate deleniti.
</div>
<div class="contacts">
<a class="text removeFriend" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
See more
</a>
<div class="collapse" id="collapseExample">
<button class="btn btn-danger">
<h5> <img src="@/assets/icons/remove-white.svg" style="width: 30px"> Remove friend</h5>
</button>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card card-one">
<div class="header">
<div class="avatar">
<img src="https://bootdey.com/img/Content/avatar/avatar2.png" alt="">
</div>
</div>
<h3>Christiano Mooray</h3>
<div class="desc">
Lorem ipsum dolor sit amet, consectetur adipisicing elit et cupiditate deleniti.
</div>
<div class="contacts">
<a class="text removeFriend" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
See more
</a>
<div class="collapse" id="collapseExample">
<button class="btn btn-danger">
<h5> <img src="@/assets/icons/remove-white.svg" style="width: 30px"> Remove friend</h5>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-3">
<div class="card card-one">
<div class="header">
<div class="avatar">
<img src="https://bootdey.com/img/Content/avatar/avatar4.png" alt="">
</div>
</div>
<h3>Lynda West</h3>
<div class="desc">
Lorem ipsum dolor sit amet, consectetur adipisicing elit et cupiditate deleniti.
</div>
<div class="contacts">
<a class="text removeFriend" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
See more
</a>
<div class="collapse" id="collapseExample">
<button class="btn btn-danger">
<h5> <img src="@/assets/icons/remove-white.svg" style="width: 30px"> Remove friend</h5>
</button>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card card-one">
<div class="header">
<div class="avatar">
<img src="https://bootdey.com/img/Content/avatar/avatar2.png" alt="">
</div>
</div>
<h3>Jayden G</h3>
<div class="desc">
Lorem ipsum dolor sit amet, consectetur adipisicing elit et cupiditate deleniti.
</div>
<div class="contacts">
<a class="text removeFriend" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
See more
</a>
<div class="collapse" id="collapseExample">
<button class="btn btn-danger">
<h5> <img src="@/assets/icons/remove-white.svg" style="width: 30px"> Remove friend</h5>
</button>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card card-one">
<div class="header">
<div class="avatar">
<img src="https://bootdey.com/img/Content/avatar/avatar3.png" alt="">
</div>
</div>
<h3>Julia Ann</h3>
<div class="desc">
Lorem ipsum dolor sit amet, consectetur adipisicing elit et cupiditate deleniti.
</div>
<div class="contacts">
<a class="text removeFriend" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
See more
</a>
<div class="collapse" id="collapseExample">
<button class="btn btn-danger">
<h5> <img src="@/assets/icons/remove-white.svg" style="width: 30px"> Remove friend</h5>
</button>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card card-one">
<div class="header">
<div class="avatar">
<img src="https://bootdey.com/img/Content/avatar/avatar1.png" alt="">
</div>
</div>
<h3>Ava Ray</h3>
<div class="desc">
Lorem ipsum dolor sit amet, consectetur adipisicing elit et cupiditate deleniti.
</div>
<div class="contacts">
<a class="text removeFriend" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
See more
</a>
<div class="collapse" id="collapseExample">
<button class="btn btn-danger">
<h5> <img src="@/assets/icons/remove-white.svg" style="width: 30px"> Remove friend</h5>
</button>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card card-one">
<div class="header">
<div class="avatar">
<img src="https://bootdey.com/img/Content/avatar/avatar7.png" alt="">
</div>
</div>
<h3>Maria Shwenstiger</h3>
<div class="desc">
Lorem ipsum dolor sit amet, consectetur adipisicing elit et cupiditate deleniti.
</div>
<div class="contacts">
<a class="text removeFriend" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
See more
</a>
<div class="collapse" id="collapseExample">
<button class="btn btn-danger">
<h5> <img src="@/assets/icons/remove-white.svg" style="width: 30px"> Remove friend</h5>
</button>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card card-one">
<div class="header">
<div class="avatar">
<img src="https://bootdey.com/img/Content/avatar/avatar3.png" alt="">
</div>
</div>
<h3>Kate Perry</h3>
<div class="desc">
Lorem ipsum dolor sit amet, consectetur adipisicing elit et cupiditate deleniti.
</div>
<div class="contacts">
<a class="text removeFriend" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
See more
</a>
<div class="collapse" id="collapseExample">
<button class="btn btn-danger">
<h5> <img src="@/assets/icons/remove-white.svg" style="width: 30px"> Remove friend</h5>
</button>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card card-one">
<div class="header">
<div class="avatar">
<img src="https://bootdey.com/img/Content/avatar/avatar6.png" alt="">
</div>
</div>
<h3>Robart Gibbs</h3>
<div class="desc">
Lorem ipsum dolor sit amet, consectetur adipisicing elit et cupiditate deleniti.
</div>
<div class="contacts">
<a class="text removeFriend" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
See more
</a>
<div class="collapse" id="collapseExample">
<button class="btn btn-danger">
<h5> <img src="@/assets/icons/remove-white.svg" style="width: 30px"> Remove friend</h5>
</button>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card card-one">
<div class="header">
<div class="avatar">
<img src="https://bootdey.com/img/Content/avatar/avatar5.png" alt="">
</div>
</div>
<h3>Anna Winslet</h3>
<div class="desc">
Lorem ipsum dolor sit amet, consectetur adipisicing elit et cupiditate deleniti.
</div>
<div class="contacts">
<a class="text removeFriend" data-bs-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">
See more
</a>
<div class="collapse" id="collapseExample">
<button class="btn btn-danger">
<h5> <img src="@/assets/icons/remove-white.svg" style="width: 30px"> Remove friend</h5>
</button>
</div>
</div>
</div>
</div>
<nav aria-label="Page navigation example">
<ul class="pagination">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</nav>
</div>
</div>
</template>
<script setup lang="ts">
import { useRouter, useRoute } from 'vue-router';
import { ref, onMounted, computed } from "vue";
import { useUserInfoStore } from '@/stores/UserStore';
const userStore = useUserInfoStore();
const createdQuizzes = ref(1);
const createdQuizzesIsEmpty = ref(null);
const coAuthorQuizzes = ref(null);
const coAuthorQuizzesIsEmpty = ref(null);
const router = useRouter();
let userid = ref("");
async function fetchUserData() {
}
function addFriend() {
router.push('/add-friend');
}
// Define the navigateToQuiz method
const navigateToFriend = (frinedID) => {
};
const removeFriend = (friendID) => {
};
onMounted(fetchUserData);
</script>
<style scoped>
body {
background-color: #f0f6ff;
color: #28384d;
}
/*social */
.card-one {
position: relative;
width: 300px;
background: #fff;
box-shadow: 0 10px 7px -5px rgba(0, 0, 0, 0.4);
}
.card {
margin-bottom: 35px;
padding-bottom: 1rem;
box-shadow: 0 10px 20px 0 rgba(26, 44, 57, 0.14);
border: none;
}
.follower-wrapper li {
list-style-type: none;
color: #fff;
display: inline-block;
float: left;
margin-right: 20px;
}
.social-profile {
color: #fff;
}
.social-profile a {
color: #fff;
}
.social-profile {
position: relative;
margin-bottom: 150px;
}
.social-profile .user-profile {
position: absolute;
bottom: -75px;
width: 150px;
height: 150px;
border-radius: 50%;
left: 50px;
}
.social-nav {
position: absolute;
bottom: 0;
}
.social-prof {
color: #333;
text-align: center;
}
.social-prof .wrapper {
width: 70%;
margin: auto;
margin-top: -100px;
}
.social-prof img {
width: 150px;
height: 150px;
border-radius: 50%;
margin-bottom: 20px;
border: 5px solid #fff;
/*border: 10px solid #70b5e6ee;*/
}
.social-prof h3 {
font-size: 36px;
font-weight: 700;
margin-bottom: 0;
}
.social-prof p {
font-size: 18px;
}
.social-prof .nav-tabs {
border: none;
}
.card .nav>li {
position: relative;
display: block;
}
.card .nav>li>a {
position: relative;
display: block;
padding: 10px 15px;
font-weight: 300;
border-radius: 4px;
}
.card .nav>li>a:focus,
.card .nav>li>a:hover {
text-decoration: none;
background-color: #eee;
}
.card .s-nav>li>a.active {
text-decoration: none;
background-color: #3afe;
color: #fff;
}
.text-blue {
color: #3afe;
}
ul.friend-list {
margin: 0;
padding: 0;
}
ul.friend-list li {
list-style-type: none;
display: flex;
align-items: center;
}
ul.friend-list li:hover {
background: rgba(0, 0, 0, .1);
cursor: pointer;
}
ul.friend-list .left img {
width: 45px;
height: 45px;
border-radius: 50%;
margin-right: 20px;
}
ul.friend-list li {
padding: 10px;
}
ul.friend-list .right h3 {
font-size: 16px;
font-weight: 700;
margin-bottom: 0;
}
ul.friend-list .right p {
font-size: 11px;
color: #6c757d;
margin: 0;
}
.social-timeline-card .dropdown-toggle::after {
display: none;
}
.info-card h4 {
font-size: 15px;
}
.info-card h2 {
font-size: 18px;
margin-bottom: 20px;
}
.social-about .social-info {
font-size: 16px;
margin-bottom: 20px;
}
.social-about p {
margin-bottom: 20px;
}
.info-card i {
color: #3afe;
}
.card-one {
position: relative;
width: 300px;
background: #fff;
box-shadow: 0 10px 7px -5px rgba(0, 0, 0, 0.4);
}
.card-one .header {
position: relative;
width: 100%;
height: 60px;
background-color: #3afe;
}
.card-one .header::before,
.card-one .header::after {
content: '';
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: inherit;
}
.card-one .header::before {
-webkit-transform: skewY(-8deg);
transform: skewY(-8deg);
-webkit-transform-origin: 100% 100%;
transform-origin: 100% 100%;
}
.card-one .header::after {
-webkit-transform: skewY(8deg);
transform: skewY(8deg);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
}
.card-one .header .avatar {
position: absolute;
left: 50%;
top: 30px;
margin-left: -50px;
z-index: 5;
width: 100px;
height: 100px;
border-radius: 50%;
overflow: hidden;
background: #ccc;
border: 3px solid #fff;
}
.card-one .header .avatar img {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
width: 100px;
height: auto;
}
.card-one h3 {
position: relative;
margin: 80px 0 30px;
text-align: center;
}
.card-one h3::after {
content: '';
position: absolute;
bottom: -15px;
left: 50%;
margin-left: -15px;
width: 30px;
height: 1px;
background: #000;
}
.card-one .desc {
padding: 0 1rem 2rem;
text-align: center;
line-height: 1.5;
color: #777;
}
#gallery li {
width: 24%;
float: left;
margin: 6px;
}
.removeFriend {
text-wrap: nowrap;
}
.contacts {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
</style>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment