home.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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. import { MockProvider } from "../../providers/mock-provider/mock-provider";
  14. @IonicPage()
  15. @Component({
  16. selector: "page-home",
  17. templateUrl: "home.html"
  18. })
  19. export class HomePage {
  20. menuController: MenuController;
  21. tweets;
  22. mock;
  23. constructor(
  24. public navCtrl: NavController,
  25. private menuCtrl: MenuController,
  26. private feed: FeedProvider,
  27. private mockProv: MockProvider,
  28. private storage: Storage,
  29. private loadingCtrl: LoadingController
  30. ) {}
  31. ionViewDidLoad() {
  32. this.menuCtrl.enable(true, "sideNav");
  33. }
  34. async ionViewDidEnter() {
  35. const loading = this.loadingCtrl.create();
  36. loading.present();
  37. this.mock = await this.storage.get("mockup");
  38. console.log('mockup?', this.mock);
  39. if (this.mock) {
  40. this.mockProv
  41. .loadHomeTimeline()
  42. .then(tweets => {
  43. console.log("HOME tweets are: ", tweets);
  44. this.tweets = tweets;
  45. loading.dismiss();
  46. })
  47. .catch(err => console.error('error in timeline', err));
  48. // console.log('tweets from htl are:',this.tweets);
  49. } else {
  50. console.log('entered ionic view');
  51. this.feed
  52. .loadHomeTimeline()
  53. .then(tweets => {
  54. this.tweets = tweets;
  55. loading.dismiss();
  56. })
  57. .catch(err => console.error(err));
  58. }
  59. // loading.dismiss();
  60. }
  61. doRefresh(refresher: Refresher) {
  62. if (this.mock) {
  63. console.log('mock refresher called',refresher);
  64. this.mockProv.loadHomeTimeline().then(tweets => {
  65. this.tweets = tweets;
  66. refresher.complete();
  67. });
  68. } else {
  69. this.feed.loadHomeTimeline().then(tweets => {
  70. this.tweets = tweets;
  71. refresher.complete();
  72. });
  73. }
  74. }
  75. loadMore(infiniteScroll: InfiniteScroll) {
  76. this.feed
  77. .loadHomeTimeline(this.oldestPublicTweet, this.oldestPrivateTweet)
  78. .then(tweets => {
  79. this.tweets = this.tweets.concat(tweets);
  80. infiniteScroll.complete();
  81. });
  82. }
  83. writeTweet() {
  84. console.log('Writing the tweet');
  85. this.navCtrl.push(WriteTweetPage);
  86. }
  87. get publicTweets() {
  88. return this.tweets.filter(tweet => !tweet.private_tweet);
  89. }
  90. get privateTweets() {
  91. return this.tweets.filter(tweet => tweet.private_tweet);
  92. // return null;
  93. }
  94. get oldestPublicTweet() {
  95. // return null;
  96. if (this.publicTweets.length > 0) {
  97. return this.publicTweets.reduce((acc, cur) =>
  98. acc.id < cur.id ? acc : cur
  99. );
  100. } else {
  101. return undefined;
  102. }
  103. }
  104. get oldestPrivateTweet() {
  105. if (this.privateTweets.length > 0) {
  106. return this.privateTweets.reduce((acc, cur) =>
  107. new Date(acc.created_at) < new Date(cur.created_at) ? acc : cur
  108. );
  109. } else {
  110. return undefined;
  111. }
  112. }
  113. }