home.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { Component } from "@angular/core";
  2. import {
  3. IonicPage,
  4. NavController,
  5. MenuController,
  6. InfiniteScroll,
  7. Refresher
  8. } from "ionic-angular";
  9. import { Storage } from "@ionic/storage";
  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. userId: string;
  21. constructor(
  22. public navCtrl: NavController,
  23. private menuCtrl: MenuController,
  24. private storage: Storage,
  25. private feed: FeedProvider
  26. ) {
  27. this.storage.get("userId").then(userId => (this.userId = userId));
  28. }
  29. ionViewDidLoad() {
  30. this.menuCtrl.enable(true, "sideNav");
  31. }
  32. ionViewDidEnter() {
  33. this.feed
  34. .loadHomeTimeline(this.userId)
  35. .then(tweets => (this.tweets = tweets));
  36. }
  37. doRefresh(refresher: Refresher) {
  38. this.feed.loadHomeTimeline(this.userId).then(tweets => {
  39. this.tweets = tweets;
  40. refresher.complete();
  41. });
  42. }
  43. loadMore(infiniteScroll: InfiniteScroll) {
  44. console.log("triggered");
  45. this.feed
  46. .loadHomeTimeline(
  47. this.userId,
  48. this.oldestPublicTweet,
  49. this.oldestPrivateTweet
  50. )
  51. .then(tweets => {
  52. this.tweets = this.tweets.concat(tweets);
  53. infiniteScroll.complete();
  54. });
  55. }
  56. writeTweet() {
  57. this.navCtrl.push(WriteTweetPage);
  58. }
  59. get publicTweets() {
  60. return this.tweets.filter(tweet => !tweet.private_tweet);
  61. }
  62. get privateTweets() {
  63. return this.tweets.filter(tweet => tweet.private_tweet);
  64. }
  65. get oldestPublicTweet() {
  66. if (this.publicTweets.length > 0) {
  67. return this.publicTweets.reduce(
  68. (acc, cur) => (acc.id < cur.id ? acc : cur)
  69. );
  70. } else {
  71. return undefined;
  72. }
  73. }
  74. get oldestPrivateTweet() {
  75. if (this.privateTweets.length > 0) {
  76. return this.privateTweets.reduce(
  77. (acc, cur) =>
  78. new Date(acc.created_at) < new Date(cur.created_at) ? acc : cur
  79. );
  80. } else {
  81. return undefined;
  82. }
  83. }
  84. }