home.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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. privateTweet:boolean = false;
  22. public color = 'primary';
  23. constructor(
  24. public navCtrl: NavController,
  25. private menuCtrl: MenuController,
  26. private feed: FeedProvider,
  27. private alertCtrl: AlertController,
  28. private loadingCtrl: LoadingController
  29. ) {}
  30. ionViewDidLoad() {
  31. this.menuCtrl.enable(true, "sideNav");
  32. }
  33. ionViewDidEnter() {
  34. const alertText = {
  35. title: "Loading tweets failed",
  36. subTitle: "Please try again.",
  37. buttons: ["OK"]
  38. };
  39. const loading = this.loadingCtrl.create();
  40. loading.present();
  41. this.feed
  42. .loadHomeTimeline()
  43. .then(tweets => {
  44. this.tweets=[];
  45. Object.assign(this.tweets, tweets);
  46. console.log("HOME tweets are: ", 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. return this.tweets.filter(tweet => tweet.private_tweet);
  77. }
  78. get oldestPublicTweet() {
  79. if (this.publicTweets.length > 0) {
  80. return this.publicTweets.reduce((acc, cur) =>
  81. acc.id < cur.id ? acc : cur
  82. );
  83. } else {
  84. return undefined;
  85. }
  86. }
  87. get oldestPrivateTweet() {
  88. if (this.privateTweets.length > 0) {
  89. return this.privateTweets.reduce((acc, cur) =>
  90. new Date(acc.created_at) < new Date(cur.created_at) ? acc : cur
  91. );
  92. } else {
  93. return undefined;
  94. }
  95. }
  96. privateTweetOnly(){
  97. this.privateTweet = !this.privateTweet;
  98. const loading = this.loadingCtrl.create();
  99. loading.present();
  100. this.tweets = this.privateTweets;
  101. if(this.privateTweet){
  102. this.color = 'black';
  103. loading.dismiss();
  104. }
  105. else{
  106. this.color = 'white';
  107. this.feed
  108. .loadHomeTimeline()
  109. .then(tweets => (this.tweets = tweets))
  110. .catch(err => console.error(err))
  111. .then(() => loading.dismiss());
  112. }
  113. }
  114. }