home.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import { Component } from "@angular/core";
  2. import {
  3. IonicPage,
  4. NavController,
  5. MenuController,
  6. InfiniteScroll,
  7. Refresher,
  8. LoadingController
  9. } from "ionic-angular";
  10. import { Storage } from "@ionic/storage";
  11. import { WriteTweetPage } from "../write-tweet/write-tweet";
  12. import { FeedProvider } from "../../providers/feed/feed";
  13. @IonicPage()
  14. @Component({
  15. selector: "page-home",
  16. templateUrl: "home.html"
  17. })
  18. export class HomePage {
  19. menuController: MenuController;
  20. tweets;
  21. userId: string;
  22. constructor(
  23. public navCtrl: NavController,
  24. private menuCtrl: MenuController,
  25. private storage: Storage,
  26. private feed: FeedProvider,
  27. private loadingCtrl: LoadingController
  28. ) {
  29. this.storage.get("userId").then(userId => (this.userId = userId));
  30. }
  31. ionViewDidLoad() {
  32. this.menuCtrl.enable(true, "sideNav");
  33. }
  34. ionViewDidEnter() {
  35. const loading = this.loadingCtrl.create();
  36. loading.present();
  37. this.feed
  38. .loadHomeTimeline(this.userId)
  39. .then(tweets => (this.tweets = tweets))
  40. .catch(err => console.error(err))
  41. .then(() => loading.dismiss());
  42. }
  43. doRefresh(refresher: Refresher) {
  44. this.feed.loadHomeTimeline(this.userId).then(tweets => {
  45. this.tweets = tweets;
  46. refresher.complete();
  47. });
  48. }
  49. loadMore(infiniteScroll: InfiniteScroll) {
  50. this.feed
  51. .loadHomeTimeline(
  52. this.userId,
  53. this.oldestPublicTweet,
  54. this.oldestPrivateTweet
  55. )
  56. .then(tweets => {
  57. this.tweets = this.tweets.concat(tweets);
  58. infiniteScroll.complete();
  59. });
  60. }
  61. writeTweet() {
  62. this.navCtrl.push(WriteTweetPage);
  63. }
  64. get publicTweets() {
  65. return this.tweets.filter(tweet => !tweet.private_tweet);
  66. }
  67. get privateTweets() {
  68. return this.tweets.filter(tweet => tweet.private_tweet);
  69. }
  70. get oldestPublicTweet() {
  71. if (this.publicTweets.length > 0) {
  72. return this.publicTweets.reduce((acc, cur) =>
  73. acc.id < cur.id ? acc : cur
  74. );
  75. } else {
  76. return undefined;
  77. }
  78. }
  79. get oldestPrivateTweet() {
  80. if (this.privateTweets.length > 0) {
  81. return this.privateTweets.reduce((acc, cur) =>
  82. new Date(acc.created_at) < new Date(cur.created_at) ? acc : cur
  83. );
  84. } else {
  85. return undefined;
  86. }
  87. }
  88. }