kopia lustrzana https://github.com/pixelfed/pixelfed
				
				
				
			
		
			
				
	
	
		
			183 wiersze
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			183 wiersze
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Vue
		
	
	
| <template>
 | |
| 	<div class="discover-find-friends-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">Find Friends</h1>
 | |
| 					<!-- <p class="font-default lead">Posts from hashtags you follow</p> -->
 | |
| 					<hr>
 | |
| 
 | |
| 					<b-spinner v-if="isLoading" />
 | |
| 
 | |
| 					<div v-if="!isLoading" class="row justify-content-center">
 | |
| 						<div class="col-12 col-lg-10 mb-3" v-for="(profile, index) in popularAccounts">
 | |
| 							<div class="card shadow-sm border-0 rounded-px">
 | |
| 								<div class="card-body p-2">
 | |
| 									<profile-card
 | |
| 										:key="'pfc' + index"
 | |
| 										:profile="profile"
 | |
| 										class="w-100"
 | |
| 										v-on:follow="follow(index)"
 | |
| 										v-on:unfollow="unfollow(index)"
 | |
| 									/>
 | |
| 								</div>
 | |
| 							</div>
 | |
| 						</div>
 | |
| 					</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';
 | |
| import ProfileCard from './../partials/profile/ProfileHoverCard.vue';
 | |
| 
 | |
| export default {
 | |
| 	components: {
 | |
| 		"drawer": Drawer,
 | |
| 		"sidebar": Sidebar,
 | |
| 		"status-card": StatusCard,
 | |
| 		"profile-card": ProfileCard
 | |
| 	},
 | |
| 
 | |
| 	data() {
 | |
| 		return {
 | |
| 			isLoaded: true,
 | |
| 			isLoading: true,
 | |
| 			profile: window._sharedData.user,
 | |
| 			feed: [],
 | |
| 			popular: [],
 | |
| 			popularAccounts: [],
 | |
| 			popularLoaded: false,
 | |
| 			breadcrumbItems: [
 | |
| 				{
 | |
| 					text: 'Discover',
 | |
| 					href: '/i/web/discover'
 | |
| 				},
 | |
| 				{
 | |
| 					text: 'Find Friends',
 | |
| 					active: true
 | |
| 				}
 | |
| 			]
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| 	mounted() {
 | |
| 		this.fetchConfig();
 | |
| 	},
 | |
| 
 | |
| 	methods: {
 | |
| 		fetchConfig() {
 | |
| 			axios.get('/api/pixelfed/v2/discover/meta')
 | |
| 			.then(res => {
 | |
| 				if(res.data.friends.enabled == false) {
 | |
| 					this.$router.push('/i/web/discover');
 | |
| 				} else {
 | |
| 					this.fetchPopularAccounts();
 | |
| 				}
 | |
| 			})
 | |
| 			.catch(e => {
 | |
| 				this.isLoading = false;
 | |
| 			})
 | |
| 		},
 | |
| 
 | |
| 		fetchPopular() {
 | |
| 			axios.get('/api/pixelfed/v2/discover/account-insights')
 | |
| 			.then(res => {
 | |
| 				this.popular = res.data;
 | |
| 				this.popularLoaded = true;
 | |
| 				this.isLoading = false;
 | |
| 			})
 | |
| 			.catch(e => {
 | |
| 				this.isLoading = false;
 | |
| 			})
 | |
| 		},
 | |
| 
 | |
| 		formatCount(val) {
 | |
| 			return App.util.format.count(val);
 | |
| 		},
 | |
| 
 | |
| 		timeago(ts) {
 | |
| 			return App.util.format.timeAgo(ts);
 | |
| 		},
 | |
| 
 | |
| 		fetchPopularAccounts() {
 | |
| 			axios.get('/api/pixelfed/discover/accounts/popular')
 | |
| 			.then(res => {
 | |
| 				this.popularAccounts = res.data;
 | |
| 				this.isLoading = false;
 | |
| 			})
 | |
| 			.catch(e => {
 | |
| 				this.isLoading = false;
 | |
| 			})
 | |
| 		},
 | |
| 
 | |
| 		follow(index) {
 | |
| 			axios.post('/api/v1/accounts/' + this.popularAccounts[index].id + '/follow')
 | |
| 			.then(res => {
 | |
| 				this.newlyFollowed++;
 | |
| 				this.$store.commit('updateRelationship', [res.data]);
 | |
| 				this.$emit('update-profile', {
 | |
| 					'following_count': this.profile.following_count + 1
 | |
| 				})
 | |
| 			});
 | |
| 		},
 | |
| 
 | |
| 		unfollow(index) {
 | |
| 			axios.post('/api/v1/accounts/' + this.popularAccounts[index].id + '/unfollow')
 | |
| 			.then(res => {
 | |
| 				this.newlyFollowed--;
 | |
| 				this.$store.commit('updateRelationship', [res.data]);
 | |
| 				this.$emit('update-profile', {
 | |
| 					'following_count': this.profile.following_count - 1
 | |
| 				})
 | |
| 			});
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| </script>
 | |
| 
 | |
| <style lang="scss">
 | |
| 	.discover-find-friends-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;
 | |
| 		}
 | |
| 
 | |
| 		.profile-hover-card-inner {
 | |
| 			width: 100%;
 | |
| 
 | |
| 			.d-flex {
 | |
| 				max-width: 100% !important;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| </style>
 |