home.ts 2.5 KB

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