home.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { Component } from "@angular/core";
  2. import {
  3. IonicPage,
  4. NavController,
  5. MenuController,
  6. InfiniteScroll,
  7. AlertController,
  8. Refresher,
  9. LoadingController
  10. } from "ionic-angular";
  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. cachedTweets=[];
  22. privateTweet:boolean = false;
  23. public color = 'primary';
  24. constructor(
  25. public navCtrl: NavController,
  26. private menuCtrl: MenuController,
  27. private feed: FeedProvider,
  28. private alertCtrl: AlertController,
  29. private loadingCtrl: LoadingController
  30. ) {}
  31. ionViewDidLoad() {
  32. this.menuCtrl.enable(true, "sideNav");
  33. }
  34. ionViewDidEnter() {
  35. const alertText = {
  36. title: "Loading tweets failed",
  37. subTitle: "Please try again.",
  38. buttons: ["OK"]
  39. };
  40. const loading = this.loadingCtrl.create();
  41. loading.present();
  42. this.feed
  43. .loadHomeTimeline()
  44. .then(tweets => {
  45. this.tweets=[];
  46. Object.assign(this.tweets, tweets);
  47. })
  48. .catch(err => {
  49. console.error("err is:", err);
  50. alertText.subTitle = err.message;
  51. this.alertCtrl.create(alertText).present()
  52. })
  53. .then(() => loading.dismiss());
  54. }
  55. doRefresh(refresher: Refresher) {
  56. this.feed.loadHomeTimeline().then(tweets => {
  57. this.tweets = tweets;
  58. refresher.complete();
  59. });
  60. }
  61. loadMore(infiniteScroll: InfiniteScroll) {
  62. this.feed
  63. .loadHomeTimeline(this.oldestPublicTweet, this.oldestPrivateTweet)
  64. .then(tweets => {
  65. this.tweets = this.tweets.concat(tweets);
  66. infiniteScroll.complete();
  67. });
  68. }
  69. writeTweet() {
  70. this.navCtrl.push(WriteTweetPage);
  71. }
  72. get publicTweets() {
  73. return this.tweets.filter(tweet => !tweet.private_tweet);
  74. }
  75. get privateTweets() {
  76. Object.assign(this.cachedTweets ,this.tweets);
  77. return this.tweets.filter(tweet => tweet.private_tweet);
  78. }
  79. get oldestPublicTweet() {
  80. if (this.publicTweets.length > 0) {
  81. return this.publicTweets.reduce((acc, cur) =>
  82. acc.id < cur.id ? acc : cur
  83. );
  84. } else {
  85. return undefined;
  86. }
  87. }
  88. get oldestPrivateTweet() {
  89. if (this.privateTweets.length > 0) {
  90. return this.privateTweets.reduce((acc, cur) =>
  91. new Date(acc.created_at) < new Date(cur.created_at) ? acc : cur
  92. );
  93. } else {
  94. return undefined;
  95. }
  96. }
  97. privateTweetOnly(){
  98. this.privateTweet = !this.privateTweet;
  99. const loading = this.loadingCtrl.create();
  100. loading.present();
  101. if(this.privateTweet){
  102. this.color = 'black';
  103. this.tweets = this.privateTweets;
  104. loading.dismiss();
  105. }
  106. else{
  107. this.color = 'white';
  108. this.tweets = this.cachedTweets;
  109. loading.dismiss();
  110. }
  111. }
  112. }