123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- <template>
- <div class="discover-my-memories web-wrapper">
- <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 v-if="tabIndex === 0" class="col-md-6 col-lg-6">
- <b-breadcrumb class="font-default" :items="breadcrumbItems"></b-breadcrumb>
- <h1 class="font-default">My Memories</h1>
- <p class="font-default lead">Posts from this day in previous years</p>
- <hr>
- <b-spinner v-if="!feedLoaded" />
- <status-card
- v-for="(post, idx) in feed"
- :key="'ti0:'+idx+':'+post.id"
- :profile="profile"
- :status="post"
- />
- <p v-if="feedLoaded && feed.length == 0" class="lead">No memories found :(</p>
- </div>
- <div v-else-if="tabIndex === 1" class="col-md-6 col-lg-6">
- <b-breadcrumb class="font-default" :items="breadcrumbItems"></b-breadcrumb>
- <h1 class="font-default">My Memories</h1>
- <p class="font-default lead">Posts I've liked from this day in previous years</p>
- <hr>
- <b-spinner v-if="!likedLoaded" />
- <status-card
- v-for="(post, idx) in liked"
- :key="'ti1:'+idx+':'+post.id"
- :profile="profile"
- :status="post"
- />
- <p v-if="likedLoaded && liked.length == 0" class="lead">No memories found :(</p>
- </div>
- <div class="col-md-2 col-lg-3">
- <div class="nav flex-column nav-pills font-default">
- <a class="nav-link" :class="{ active: tabIndex == 0 }" href="#" @click.prevent="toggleTab(0)">My Posts</a>
- <a class="nav-link" :class="{ active: tabIndex == 1 }" href="#" @click.prevent="toggleTab(1)">Posts I've Liked</a>
- </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,
- profile: window._sharedData.user,
- curDate: undefined,
- tabIndex: 0,
- feedLoaded: false,
- likedLoaded: false,
- feed: [],
- liked: [],
- breadcrumbItems: [
- {
- text: 'Discover',
- href: '/i/web/discover'
- },
- {
- text: 'My Memories',
- active: true
- }
- ]
- }
- },
- mounted() {
- this.curDate = new Date();
- this.fetchConfig();
- },
- methods: {
- fetchConfig() {
- if(
- window._sharedData.hasOwnProperty('discoverMeta') &&
- window._sharedData.discoverMeta
- ) {
- this.config = window._sharedData.discoverMeta;
- this.isLoaded = true;
- if(this.config.memories.enabled == false) {
- this.$router.push('/i/web/discover');
- } else {
- this.fetchMemories();
- }
- return;
- }
- axios.get('/api/pixelfed/v2/discover/meta')
- .then(res => {
- this.config = res.data;
- this.isLoaded = true;
- window._sharedData.discoverMeta = res.data;
- if(res.data.memories.enabled == false) {
- this.$router.push('/i/web/discover');
- } else {
- this.fetchMemories();
- }
- })
- },
- fetchMemories() {
- axios.get('/api/pixelfed/v2/discover/memories')
- .then(res => {
- this.feed = res.data;
- this.feedLoaded = true;
- });
- },
- fetchLiked() {
- axios.get('/api/pixelfed/v2/discover/memories?type=liked')
- .then(res => {
- this.liked = res.data;
- this.likedLoaded = true;
- });
- },
- toggleTab(idx) {
- if(idx == 1) {
- if(!this.likedLoaded) {
- this.fetchLiked();
- }
- }
- this.tabIndex = idx;
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .discover-my-memories {
- .bg-stellar {
- background: #7474BF;
- background: -webkit-linear-gradient(to right, #348AC7, #7474BF);
- background: linear-gradient(to right, #348AC7, #7474BF);
- }
- .font-default {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
- letter-spacing: -0.7px;
- }
- .active {
- font-weight: 700;
- }
- }
- </style>
|