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