| @@ -65,6 +65,10 @@ const routes: Routes = [ | |||||
| path: 'league-table', | path: 'league-table', | ||||
| loadChildren: () => import('./league-table/league-table.module').then( m => m.LeagueTablePageModule) | loadChildren: () => import('./league-table/league-table.module').then( m => m.LeagueTablePageModule) | ||||
| }, | }, | ||||
| { | |||||
| path: 'bookmarks', | |||||
| loadChildren: () => import('./bookmarks/bookmarks.module').then( m => m.BookmarksPageModule) | |||||
| }, | |||||
| ]; | ]; | ||||
| @NgModule({ | @NgModule({ | ||||
| @@ -0,0 +1,17 @@ | |||||
| import { NgModule } from '@angular/core'; | |||||
| import { Routes, RouterModule } from '@angular/router'; | |||||
| import { BookmarksPage } from './bookmarks.page'; | |||||
| const routes: Routes = [ | |||||
| { | |||||
| path: '', | |||||
| component: BookmarksPage | |||||
| } | |||||
| ]; | |||||
| @NgModule({ | |||||
| imports: [RouterModule.forChild(routes)], | |||||
| exports: [RouterModule], | |||||
| }) | |||||
| export class BookmarksPageRoutingModule {} | |||||
| @@ -0,0 +1,20 @@ | |||||
| import { NgModule } from '@angular/core'; | |||||
| import { CommonModule } from '@angular/common'; | |||||
| import { FormsModule } from '@angular/forms'; | |||||
| import { IonicModule } from '@ionic/angular'; | |||||
| import { BookmarksPageRoutingModule } from './bookmarks-routing.module'; | |||||
| import { BookmarksPage } from './bookmarks.page'; | |||||
| @NgModule({ | |||||
| imports: [ | |||||
| CommonModule, | |||||
| FormsModule, | |||||
| IonicModule, | |||||
| BookmarksPageRoutingModule | |||||
| ], | |||||
| declarations: [BookmarksPage] | |||||
| }) | |||||
| export class BookmarksPageModule {} | |||||
| @@ -0,0 +1,21 @@ | |||||
| <ion-content> | |||||
| <section class="header-with-action-buttons"> | |||||
| <div class="nav"> | |||||
| <button (click)="back()"> <ion-icon name="chevron-back-outline"></ion-icon> <span> BACK </span> </button> | |||||
| </div> | |||||
| <header> Bookmarks({{ this.bookmarked_articles.length }}) <br> <span> All your bookmarked posts in one place </span> </header> | |||||
| </section> | |||||
| <ion-list lines="full"> | |||||
| <ion-item *ngFor="let news of bookmarked_articles" | |||||
| (click)="showNewsDetails(news.alias, news.type)"> | |||||
| <ion-thumbnail slot="start"> | |||||
| <ion-img [src]="news.image"></ion-img> | |||||
| </ion-thumbnail> | |||||
| <ion-label> | |||||
| <h3> {{ news.title }} </h3> | |||||
| </ion-label> | |||||
| </ion-item> | |||||
| </ion-list> | |||||
| </ion-content> | |||||
| @@ -0,0 +1,15 @@ | |||||
| @import '../colors'; | |||||
| ion-list { | |||||
| ion-item { | |||||
| --padding-top: 10px; | |||||
| --padding-bottom: 10px; | |||||
| } | |||||
| h3 { | |||||
| font-size: 1rem; | |||||
| white-space: normal; | |||||
| line-height: 1.5; | |||||
| color: darken($blue-grey, 10%); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,24 @@ | |||||
| import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
| import { IonicModule } from '@ionic/angular'; | |||||
| import { BookmarksPage } from './bookmarks.page'; | |||||
| describe('BookmarksPage', () => { | |||||
| let component: BookmarksPage; | |||||
| let fixture: ComponentFixture<BookmarksPage>; | |||||
| beforeEach(async(() => { | |||||
| TestBed.configureTestingModule({ | |||||
| declarations: [ BookmarksPage ], | |||||
| imports: [IonicModule.forRoot()] | |||||
| }).compileComponents(); | |||||
| fixture = TestBed.createComponent(BookmarksPage); | |||||
| component = fixture.componentInstance; | |||||
| fixture.detectChanges(); | |||||
| })); | |||||
| it('should create', () => { | |||||
| expect(component).toBeTruthy(); | |||||
| }); | |||||
| }); | |||||
| @@ -0,0 +1,90 @@ | |||||
| import { Component, OnInit } from '@angular/core'; | |||||
| import { Location } from '@angular/common'; | |||||
| import { UserService } from '../services/user.service'; | |||||
| import { NewsService, IMAGE_BASE_URL } from '../services/news.service'; | |||||
| import { Platform } from '@ionic/angular'; | |||||
| import { Router } from '@angular/router'; | |||||
| @Component({ | |||||
| selector: 'app-bookmarks', | |||||
| templateUrl: './bookmarks.page.html', | |||||
| styleUrls: ['./bookmarks.page.scss'], | |||||
| }) | |||||
| export class BookmarksPage implements OnInit { | |||||
| bookmarked_articles: Array<{ | |||||
| title: string, | |||||
| alias: string, | |||||
| image: string, | |||||
| type: string, | |||||
| }> = []; | |||||
| image_url = IMAGE_BASE_URL; | |||||
| constructor( | |||||
| private location: Location, | |||||
| private userService: UserService, | |||||
| private newsService: NewsService, | |||||
| private router: Router, | |||||
| private platform: Platform, | |||||
| ) { } | |||||
| back() { | |||||
| this.location.back(); | |||||
| } | |||||
| getType(type: string) { | |||||
| let returnType: string = ''; | |||||
| console.log(type); | |||||
| switch(type) { | |||||
| case 'Photos': returnType = 'gallery'; break; | |||||
| case 'Videos': returnType = 'videos'; break; | |||||
| case 'News': returnType = 'news'; break; | |||||
| } | |||||
| return returnType; | |||||
| } | |||||
| showNewsDetails(alias_title: string, type: string) { | |||||
| this.router.navigate(['/home-details', { alias_title: alias_title, type: type }]); | |||||
| } | |||||
| ngOnInit() { | |||||
| this.userService.getUserProfile().then((data: any) => { | |||||
| let bookmarked_articles: Array<string> = data.bookmarked_articles; | |||||
| this.bookmarked_articles = []; | |||||
| for (let i = 0; i < bookmarked_articles.length; i += 1) { | |||||
| this.newsService.getArticleDetails(bookmarked_articles[i]).then((info: any) => { | |||||
| if (this.platform.is('android') || this.platform.is('capacitor')) { | |||||
| this.bookmarked_articles.push({ | |||||
| title: JSON.parse(info.data)['content'].data.short_title ? JSON.parse(info.data)['content'].data.short_title : JSON.parse(info.data)['content'].data.asset_title, | |||||
| alias: bookmarked_articles[i], | |||||
| image: this.image_url + JSON.parse(info.data)['content'].data.image_path + JSON.parse(info.data)['content'].data.image_file_name, | |||||
| type: this.getType(JSON.parse(info.data)['EntityData'].entities[0].ent_display_name) | |||||
| }); | |||||
| } else { | |||||
| this.bookmarked_articles.push({ | |||||
| title: info.content.data.short_title ? info.content.data.short_title : info.content.data.asset_title, | |||||
| alias: bookmarked_articles[i], | |||||
| image: this.image_url + info.content.data.image_path + info.content.data.image_file_name, | |||||
| type: this.getType(info.EntityData.entities[0].ent_display_name) | |||||
| }); | |||||
| } | |||||
| }, (e) => { | |||||
| // alert(JSON.stringify(e)); | |||||
| }); | |||||
| } | |||||
| }, () => { | |||||
| this.bookmarked_articles = []; | |||||
| }); | |||||
| } | |||||
| } | |||||
| @@ -41,6 +41,14 @@ | |||||
| </div> | </div> | ||||
| </li> | </li> | ||||
| <li [routerLink]="['/bookmarks']"> | |||||
| <div> | |||||
| <ion-icon name="bookmarks-outline"></ion-icon> | |||||
| <label> Bookmarks </label> | |||||
| </div> | |||||
| </li> | |||||
| <!-- <li [routerLink]="['/collections']"> | <!-- <li [routerLink]="['/collections']"> | ||||
| <div> | <div> | ||||
| <ion-icon name="trophy-outline"></ion-icon> | <ion-icon name="trophy-outline"></ion-icon> | ||||
| @@ -63,15 +63,19 @@ export class UserService { | |||||
| } | } | ||||
| getUserProfile() { | getUserProfile() { | ||||
| const httpOptions = { | |||||
| headers: new HttpHeaders({ | |||||
| 'Access-Control-Allow-Origin': '*', | |||||
| 'Content-Type': 'application/json', | |||||
| 'Authorization': 'Bearer ' + JSON.parse(localStorage.getItem('FBToken')).token | |||||
| }) | |||||
| }; | |||||
| return this.http.get(this.BASE_URL + '/user-details/', httpOptions).toPromise(); | |||||
| if (localStorage.getItem('FBToken')) { | |||||
| const httpOptions = { | |||||
| headers: new HttpHeaders({ | |||||
| 'Access-Control-Allow-Origin': '*', | |||||
| 'Content-Type': 'application/json', | |||||
| 'Authorization': 'Bearer ' + JSON.parse(localStorage.getItem('FBToken')).token | |||||
| }) | |||||
| }; | |||||
| return this.http.get(this.BASE_URL + '/user-details/', httpOptions).toPromise(); | |||||
| } else { | |||||
| return Promise.reject(null); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||