Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | 1x 1x 1x 1x 1x 1x 9x 9x 9x 9x 9x 9x 9x 8x 968x 968x 8x 968x 840x 128x 128x 128x 7x 7x 7x 848x 848x 847x 847x 847x 847x 847x 1652x 1504x 1504x | import { Component, OnInit } from '@angular/core'; import { AngularFirestore } from '@angular/fire/firestore'; import { ActivatedRoute, Router } from '@angular/router'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { JokeModel, PageModel, PagerModel } from '../../models'; import { PagerService, PageService, SeoService } from '../../services'; /** * Joke List Component */ @Component({ selector: 'app-joke-list', templateUrl: './joke-list.component.html' }) export class JokeListComponent implements OnInit { /** current page object */ page$: Observable<PageModel>; /** joke object array */ jokes$: Observable<Array<JokeModel>>; /** pager model */ pagerModel: PagerModel = { currentPageNo: 1, maxPageNo: 0, pageSize: 3 }; /** first joke */ firstItem: JokeModel; /** order no of first joke, also it means (count of items * -1) */ firstItemOrderNo: number; /** last item of current page */ lastItemOfCurrentPage: JokeModel; /** last item order no of current page */ lastItemOrderNoOfCurrentPage: number; /** * constructor of JokeListComponent * @param afs: AngularFirestore * @param seo: SeoService * @param router: Router * @param route: ActivatedRoute * @param pagerService: PagerService * @param pageService: PageService */ constructor(private readonly afs: AngularFirestore, private readonly seo: SeoService, public router: Router, private readonly route: ActivatedRoute, private readonly pagerService: PagerService, public pageService: PageService) { } /** * ngOnInit */ ngOnInit(): void { this.route.paramMap.subscribe(pmap => { this.pagerModel.currentPageNo = Number(pmap.get('pageNo')); this.initJokes(); }); this.page$ = this.pageService.getPageFromFirestore(PageModel, 'pages', this.pageService.getRoutePathName()); } /** * init jokes and get first item */ initJokes(): void { if (this.firstItem) { // no need to get firstItem again this.getJokes(); } else { this.afs.collection(`jokes_${this.pageService.locale}`, ref => ref.orderBy('orderNo') .limit(1) ) .valueChanges() .subscribe(jokes => { if (jokes.length > 0) { this.firstItem = jokes[0]; this.firstItemOrderNo = this.firstItem.orderNo; this.getJokes(); } }); } } /** * check page no properties */ checkPageNo(): void { this.pagerModel.maxPageNo = Math.ceil((this.firstItemOrderNo * -1) / this.pagerModel.pageSize); this.pagerService.initPager(this.pagerModel); } /** * get jokes */ getJokes(): void { this.checkPageNo(); const startAtOrderNo = this.firstItemOrderNo + ((this.pagerModel.currentPageNo - 1) * this.pagerModel.pageSize); this.jokes$ = this.pageService.getCollectionOfContentFromFirestore( `jokes_${this.pageService.locale}`, ref => ref.orderBy('orderNo') .startAt(startAtOrderNo) .limit(this.pagerModel.pageSize), `${this.pagerModel.pageSize}-${startAtOrderNo}`); this.jokes$.subscribe(jokes => { if (jokes.length > 0) { this.lastItemOfCurrentPage = jokes[jokes.length - 1]; this.lastItemOrderNoOfCurrentPage = this.lastItemOfCurrentPage.orderNo; } }); } } |