diff options
| author | shpuld <shp@cock.li> | 2019-02-02 22:29:10 +0200 |
|---|---|---|
| committer | shpuld <shp@cock.li> | 2019-02-02 22:29:10 +0200 |
| commit | dbb16d56e29b8a32fb7c1a7af56a7953f571cdb4 (patch) | |
| tree | cb7f2e2adc5fe9db8cafb8faa1554cfa81c0c26f /src/components/friends_list | |
| parent | 8ce513ed09124fa0183943c359950f49ebcf2f89 (diff) | |
follows/followers pagination ready for review
Diffstat (limited to 'src/components/friends_list')
| -rw-r--r-- | src/components/friends_list/friends_list.js | 61 | ||||
| -rw-r--r-- | src/components/friends_list/friends_list.vue | 12 |
2 files changed, 73 insertions, 0 deletions
diff --git a/src/components/friends_list/friends_list.js b/src/components/friends_list/friends_list.js new file mode 100644 index 00000000..d5c1837a --- /dev/null +++ b/src/components/friends_list/friends_list.js @@ -0,0 +1,61 @@ +import UserCard from '../user_card/user_card.vue' + +const FriendsList = { + data () { + return { + loading: false, + bottomedOut: false, + error: false + } + }, + props: ['userId'], + created () { + window.addEventListener('scroll', this.scrollLoad) + if (this.user.followers.length === 0) { + this.fetchFriends() + } + }, + destroyed () { + window.removeEventListener('scroll', this.scrollLoad) + this.$store.dispatch('clearFriendsAndFollowers', this.userId) + }, + computed: { + user () { + return this.$store.getters.userById(this.userId) + }, + friends () { + return this.user.friends + } + }, + methods: { + fetchFriends () { + if (!this.loading) { + this.loading = true + this.$store.dispatch('addFriends', this.userId).then(friends => { + this.error = false + this.loading = false + this.bottomedOut = friends.length === 0 + }).catch(() => { + this.error = true + this.loading = false + }) + } + }, + scrollLoad (e) { + const bodyBRect = document.body.getBoundingClientRect() + const height = Math.max(bodyBRect.height, -(bodyBRect.y)) + if (this.loading === false && + this.bottomedOut === false && + this.$el.offsetHeight > 0 && + (window.innerHeight + window.pageYOffset) >= (height - 750) + ) { + this.fetchFriends() + } + } + }, + components: { + UserCard + } +} + +export default FriendsList diff --git a/src/components/friends_list/friends_list.vue b/src/components/friends_list/friends_list.vue new file mode 100644 index 00000000..75657cc8 --- /dev/null +++ b/src/components/friends_list/friends_list.vue @@ -0,0 +1,12 @@ +<template> + <div> + <user-card v-for="friend in friends" :key="friend.id" :user="friend" :showFollows="true"></user-card> + <div @click="fetchFriends" class="new-status-notification text-center panel-footer"> + <span v-if="error" class="alert error">Error loading follows</span> + <i v-else-if="loading" class="icon-spin3 animate-spin"/> + <span v-else-if="bottomedOut"></span> + </div> + </div> +</template> + +<script src="./friends_list.js" /> |
