diff options
author | Dessalines <tyhou13@gmx.com> | 2019-04-05 12:14:54 -0700 |
---|---|---|
committer | Dessalines <tyhou13@gmx.com> | 2019-04-05 12:14:54 -0700 |
commit | 38fa7969f95f49f20074ad8b982d8d92923071ad (patch) | |
tree | 2de5f93884ff6b315dcdab48a43662b85f1a0d85 /ui/src/components/main.tsx | |
parent | 2c66d86e2686c09e56d7b65ab679ce929d499478 (diff) |
Adding a front page / fetching subscribed forums.
- Adding subscribed to post view. Fixes #25
Diffstat (limited to 'ui/src/components/main.tsx')
-rw-r--r-- | ui/src/components/main.tsx | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/ui/src/components/main.tsx b/ui/src/components/main.tsx new file mode 100644 index 00000000..b7b0a562 --- /dev/null +++ b/ui/src/components/main.tsx @@ -0,0 +1,85 @@ +import { Component, linkEvent } from 'inferno'; +import { Link } from 'inferno-router'; +import { Subscription } from "rxjs"; +import { retryWhen, delay, take } from 'rxjs/operators'; +import { UserOperation, Community as CommunityI, GetCommunityResponse, CommunityResponse, Post, GetPostsForm, ListingSortType, ListingType, GetPostsResponse, CreatePostLikeForm, CreatePostLikeResponse, CommunityUser, GetFollowedCommunitiesResponse } from '../interfaces'; +import { WebSocketService, UserService } from '../services'; +import { MomentTime } from './moment-time'; +import { PostListings } from './post-listings'; +import { Sidebar } from './sidebar'; +import { msgOp, mdToHtml } from '../utils'; + +interface State { + subscribedCommunities: Array<CommunityUser>; +} + +export class Main extends Component<any, State> { + + private subscription: Subscription; + private emptyState: State = { + subscribedCommunities: [] + } + + constructor(props, context) { + super(props, context); + + this.state = this.emptyState; + + this.subscription = WebSocketService.Instance.subject + .pipe(retryWhen(errors => errors.pipe(delay(3000), take(10)))) + .subscribe( + (msg) => this.parseMessage(msg), + (err) => console.error(err), + () => console.log('complete') + ); + + if (UserService.Instance.loggedIn) { + WebSocketService.Instance.getFollowedCommunities(); + } + } + + componentWillUnmount() { + this.subscription.unsubscribe(); + } + + render() { + return ( + <div class="container"> + <div class="row"> + <div class="col-12 col-lg-9"> + <PostListings /> + </div> + <div class="col-12 col-lg-3"> + <h4>A Landing message</h4> + {UserService.Instance.loggedIn && + <div> + <hr /> + <h4>Subscribed forums</h4> + <ul class="list-unstyled"> + {this.state.subscribedCommunities.map(community => + <li><Link to={`/community/${community.community_id}`}>{community.community_name}</Link></li> + )} + </ul> + </div> + } + </div> + </div> + </div> + ) + } + + + parseMessage(msg: any) { + console.log(msg); + let op: UserOperation = msgOp(msg); + if (msg.error) { + alert(msg.error); + return; + } else if (op == UserOperation.GetFollowedCommunities) { + let res: GetFollowedCommunitiesResponse = msg; + this.state.subscribedCommunities = res.communities; + this.setState(this.state); + } + } +} + |