import { Component } from "@angular/core"; import { IonicPage, NavController, MenuController, InfiniteScroll } from "ionic-angular"; import { TwitterApiProvider } from "../../providers/twitter-api/twitter-api"; import { WriteTweetPage } from "../write-tweet/write-tweet"; import { P2pDatabaseGunProvider } from "../../providers/p2p-database-gun/p2p-database-gun"; import { P2pStorageIpfsProvider } from "../../providers/p2p-storage-ipfs/p2p-storage-ipfs"; @IonicPage() @Component({ selector: "page-home", templateUrl: "home.html" }) export class HomePage { menuController: MenuController; data: any[] = []; constructor( public navCtrl: NavController, private twitter: TwitterApiProvider, private menuCtrl: MenuController, private gun: P2pDatabaseGunProvider, private ipfs: P2pStorageIpfsProvider ) {} ionViewDidLoad() { this.menuCtrl.enable(true, "sideNav"); } ionViewDidEnter() { this.twitter .fetchHomeFeed() .then( res => (this.data = this.data .concat(res.data) .sort((a, b) => this.sortByDateAsc(a, b))) ); this.gun .getLastTweetFromUser("username") .then(hash => this.ipfs.fetchTweet(hash)) .then(tweet => this.addUserObject(tweet)) .then( res => (this.data = this.data .concat(res) .sort((a, b) => this.sortByDateAsc(a, b))) ); } doRefresh(refresher) { this.twitter.fetchHomeFeed().then(res => { this.data = res.data; console.log(res); refresher.complete(); }); } loadMore(infiniteScroll: InfiniteScroll) { this.twitter .fetchHomeFeedSince(this.data[this.data.length - 1].id) .then(res => { this.data = this.data .concat(res.data) .sort((a, b) => this.sortByDateAsc(a, b)); infiniteScroll.complete(); }); } writeTweet() { this.navCtrl.push(WriteTweetPage); } private async addUserObject(tweet) { tweet.user = await this.twitter.fetchUser(tweet.user_id); return tweet; } private sortByDateAsc(a, b) { const dateA = new Date(a.created_at); const dateB = new Date(b.created_at); if (dateA > dateB) { return -1; } else if (dateA < dateB) { return 1; } else { return 0; } } }