/
mentions.ts
85 lines (77 loc) · 2.31 KB
/
mentions.ts
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
import { Component, Injector } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { IonicPage, NavController, NavParams, Refresher, InfiniteScroll } from 'ionic-angular';
import { MentionsProvider } from './../../providers';
import { canEnterIfAuthenticated } from '../../decorators';
import { ITweet } from './../../reducers';
/**
* Generated class for the MentionsPage page.
*
* See http://ionicframework.com/docs/components/#navigation for more info
* on Ionic pages and navigation.
*/
@canEnterIfAuthenticated
@IonicPage()
@Component({
selector: 'page-mentions',
templateUrl: 'mentions.html',
})
export class MentionsPage {
feed$: Observable<ITweet[]>;
fetching$: Observable<boolean>;
page: number = 0;
itemsToDisplay$ = new BehaviorSubject<number>(1);
constructor(
public navCtrl: NavController,
public navParams: NavParams,
public injector: Injector,
public mentionsProvider: MentionsProvider,
) { }
ionViewDidLoad() {
this.feed$ = this.mentionsProvider.getMentionsPaginated$(this.itemsToDisplay$);
this.fetching$ = this.mentionsProvider.isFetching$();
}
init() {
const hasFeed = this.mentionsProvider.hasFeed();
if (!hasFeed) {
console.log('hasFeed', hasFeed)
this.mentionsProvider
.fetch$()
.first()
.subscribe(() => { }, error => console.log('feed error', error));
}
}
refresh(refresher: Refresher) {
console.log('refresh')
this.mentionsProvider
.fetch$()
.first()
.finally(() => refresher.complete())
.subscribe(() => { }, error => console.log('feed error', error));
}
loadMore(infiniteScroll: InfiniteScroll) {
console.log('loadMore')
let currentLength;
this.feed$
.first()
.subscribe((items: ITweet[]) => (currentLength = items.length));
if (this.mentionsProvider.feedLength() > currentLength) {
this.nextPage();
infiniteScroll.complete();
} else {
this.mentionsProvider
.fetchNextPage$()
.first()
.finally(() => infiniteScroll.complete())
.subscribe(
() => this.nextPage(),
error => console.log('feed error', error),
);
}
}
nextPage = (): void => {
this.page += 1;
this.itemsToDisplay$.next(this.page);
};
}