123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- <template>
- <div class="discover-insights-component">
- <div v-if="isLoaded" class="container-fluid mt-3">
- <div class="row">
- <div class="col-md-4 col-lg-3">
- <sidebar :user="profile" />
- </div>
- <div class="col-md-6 col-lg-6">
- <b-breadcrumb class="font-default" :items="breadcrumbItems"></b-breadcrumb>
- <h1 class="font-default">Account Insights</h1>
- <p class="font-default lead">A brief overview of your account</p>
- <hr>
- <div class="row">
- <div class="col-12 col-md-6 mb-3">
- <div class="card bg-midnight">
- <div class="card-body font-default text-white">
- <h1 class="display-4 mb-n2">{{ formatCount(profile.statuses_count) }}</h1>
- <p class="primary lead mb-0 font-weight-bold">Posts</p>
- </div>
- </div>
- </div>
- <div class="col-12 col-md-6 mb-3">
- <div class="card bg-midnight">
- <div class="card-body font-default text-white">
- <h1 class="display-4 mb-n2">{{ formatCount(profile.followers_count) }}</h1>
- <p class="primary lead mb-0 font-weight-bold">Followers</p>
- </div>
- </div>
- </div>
- </div>
- <div v-if="profile.statuses_count" class="card my-3 bg-midnight">
- <div class="card-header bg-dark border-bottom border-primary text-white font-default lead">Popular Posts</div>
- <div v-if="!popularLoaded" class="card-body text-white">
- <b-spinner/>
- </div>
- <ul v-else class="list-group list-group-flush font-default text-white">
- <li v-for="post in popular" class="list-group-item bg-midnight">
- <div class="media align-items-center">
- <img
- v-if="post.media_attachments.length"
- :src="post.media_attachments[0].url"
- onerror="this.onerror=null;this.src='/storage/no-preview.png?v=0'"
- class="media-photo shadow">
- <div class="media-body">
- <p class="media-caption mb-0">{{ post.content_text.slice(0, 40) }}</p>
- <p class="mb-0">
- <span class="font-weight-bold">{{ post.favourites_count }} Likes</span>
- <span class="mx-2">·</span>
- <span class="text-muted">Posted {{ timeago(post.created_at) }} ago</span>
- </p>
- </div>
- <button class="btn btn-primary primary font-weight-bold rounded-pill" @click="gotoPost(post)">View</button>
- </div>
- </li>
- </ul>
- </div>
- </div>
- </div>
- </div>
- </div>
- </template>
- <script type="text/javascript">
- import Drawer from './../partials/drawer.vue';
- import Sidebar from './../partials/sidebar.vue';
- import StatusCard from './../partials/TimelineStatus.vue';
- export default {
- components: {
- "drawer": Drawer,
- "sidebar": Sidebar,
- "status-card": StatusCard
- },
- data() {
- return {
- isLoaded: true,
- isLoading: true,
- profile: window._sharedData.user,
- feed: [],
- popular: [],
- popularLoaded: false,
- breadcrumbItems: [
- {
- text: 'Discover',
- href: '/i/web/discover'
- },
- {
- text: 'Account Insights',
- active: true
- }
- ]
- }
- },
- mounted() {
- this.fetchConfig();
- },
- methods: {
- fetchConfig() {
- axios.get('/api/pixelfed/v2/discover/meta')
- .then(res => {
- if(res.data.insights.enabled == false) {
- this.$router.push('/i/web/discover');
- }
- this.fetchPopular();
- })
- },
- fetchPopular() {
- axios.get('/api/pixelfed/v2/discover/account-insights')
- .then(res => {
- this.popular = res.data.filter(p => {
- return p.favourites_count;
- });
- this.popularLoaded = true;
- })
- },
- formatCount(val) {
- return App.util.format.count(val);
- },
- timeago(ts) {
- return App.util.format.timeAgo(ts);
- },
- gotoPost(status) {
- this.$router.push({
- name: 'post',
- path: `/i/web/post/${status.id}`,
- params: {
- id: status.id,
- cachedStatus: status,
- cachedProfile: this.profile
- }
- })
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .discover-insights-component {
- .bg-stellar {
- background: #7474BF;
- background: -webkit-linear-gradient(to right, #348AC7, #7474BF);
- background: linear-gradient(to right, #348AC7, #7474BF);
- }
- .bg-midnight {
- background: #232526;
- background: -webkit-linear-gradient(to right, #414345, #232526);
- background: linear-gradient(to right, #414345, #232526);
- }
- .font-default {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
- letter-spacing: -0.7px;
- }
- .active {
- font-weight: 700;
- }
- .media-photo {
- width: 70px;
- height: 70px;
- border-radius: 8px;
- margin-right: 2rem;
- object-fit: cover;
- }
- .media-caption {
- letter-spacing: -0.3px;
- font-size: 17px;
- opacity: 0.7;
- }
- }
- </style>
|