summaryrefslogtreecommitdiffstats
path: root/ui/src
diff options
context:
space:
mode:
authorDessalines <tyhou13@gmx.com>2019-04-09 23:19:12 -0700
committerDessalines <tyhou13@gmx.com>2019-04-09 23:19:12 -0700
commit3ff85b1fdb0d80f860fe44a24930bffb73c258a0 (patch)
tree4e78de81b7a58912c7261f70992767ab0aa900a2 /ui/src
parent42939df0406028af1a0f49e6f44f529a4cf9ecba (diff)
Adding trending communities.
- Fixes #29 - Communities fetching now has sort and limit.
Diffstat (limited to 'ui/src')
-rw-r--r--ui/src/components/communities.tsx9
-rw-r--r--ui/src/components/login.tsx2
-rw-r--r--ui/src/components/main.tsx56
-rw-r--r--ui/src/components/post-form.tsx8
-rw-r--r--ui/src/interfaces.ts6
-rw-r--r--ui/src/services/WebSocketService.ts8
6 files changed, 66 insertions, 23 deletions
diff --git a/ui/src/components/communities.tsx b/ui/src/components/communities.tsx
index 268aa115..4d2512cc 100644
--- a/ui/src/components/communities.tsx
+++ b/ui/src/components/communities.tsx
@@ -2,7 +2,7 @@ import { Component, linkEvent } from 'inferno';
import { Link } from 'inferno-router';
import { Subscription } from "rxjs";
import { retryWhen, delay, take } from 'rxjs/operators';
-import { UserOperation, Community, ListCommunitiesResponse, CommunityResponse, FollowCommunityForm } from '../interfaces';
+import { UserOperation, Community, ListCommunitiesResponse, CommunityResponse, FollowCommunityForm, ListCommunitiesForm, SortType } from '../interfaces';
import { WebSocketService } from '../services';
import { msgOp } from '../utils';
@@ -30,7 +30,12 @@ export class Communities extends Component<any, CommunitiesState> {
(err) => console.error(err),
() => console.log('complete')
);
- WebSocketService.Instance.listCommunities();
+
+ let listCommunitiesForm: ListCommunitiesForm = {
+ sort: SortType[SortType.TopAll]
+ }
+
+ WebSocketService.Instance.listCommunities(listCommunitiesForm);
}
diff --git a/ui/src/components/login.tsx b/ui/src/components/login.tsx
index 933b08be..2d2339f5 100644
--- a/ui/src/components/login.tsx
+++ b/ui/src/components/login.tsx
@@ -103,7 +103,7 @@ export class Login extends Component<any, State> {
<div class="form-group row">
<label class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
- <input type="email" class="form-control" value={this.state.registerForm.email} onInput={linkEvent(this, this.handleRegisterEmailChange)} minLength={3} />
+ <input type="email" class="form-control" placeholder="Optional" value={this.state.registerForm.email} onInput={linkEvent(this, this.handleRegisterEmailChange)} minLength={3} />
</div>
</div>
<div class="form-group row">
diff --git a/ui/src/components/main.tsx b/ui/src/components/main.tsx
index 8faf858a..55066d00 100644
--- a/ui/src/components/main.tsx
+++ b/ui/src/components/main.tsx
@@ -2,13 +2,14 @@ import { Component } from 'inferno';
import { Link } from 'inferno-router';
import { Subscription } from "rxjs";
import { retryWhen, delay, take } from 'rxjs/operators';
-import { UserOperation, CommunityUser, GetFollowedCommunitiesResponse } from '../interfaces';
+import { UserOperation, CommunityUser, GetFollowedCommunitiesResponse, ListCommunitiesForm, ListCommunitiesResponse, Community, SortType } from '../interfaces';
import { WebSocketService, UserService } from '../services';
import { PostListings } from './post-listings';
import { msgOp, repoUrl } from '../utils';
interface State {
subscribedCommunities: Array<CommunityUser>;
+ trendingCommunities: Array<Community>;
loading: boolean;
}
@@ -17,6 +18,7 @@ export class Main extends Component<any, State> {
private subscription: Subscription;
private emptyState: State = {
subscribedCommunities: [],
+ trendingCommunities: [],
loading: true
}
@@ -36,6 +38,13 @@ export class Main extends Component<any, State> {
if (UserService.Instance.loggedIn) {
WebSocketService.Instance.getFollowedCommunities();
}
+
+ let listCommunitiesForm: ListCommunitiesForm = {
+ sort: SortType[SortType.New],
+ limit: 8
+ }
+
+ WebSocketService.Instance.listCommunities(listCommunitiesForm);
}
componentWillUnmount() {
@@ -50,21 +59,22 @@ export class Main extends Component<any, State> {
<PostListings />
</div>
<div class="col-12 col-md-4">
- {UserService.Instance.loggedIn ?
+ {this.state.loading ?
+ <h4><svg class="icon icon-spinner spin"><use xlinkHref="#icon-spinner"></use></svg></h4> :
+ <div>
+ {this.trendingCommunities()}
+ {UserService.Instance.loggedIn ?
<div>
- {this.state.loading ?
- <h4><svg class="icon icon-spinner spin"><use xlinkHref="#icon-spinner"></use></svg></h4> :
- <div>
- <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>
- }
+ <h4>Subscribed forums</h4>
+ <ul class="list-inline">
+ {this.state.subscribedCommunities.map(community =>
+ <li class="list-inline-item"><Link to={`/community/${community.community_id}`}>{community.community_name}</Link></li>
+ )}
+ </ul>
</div> :
- this.landing()
+ this.landing()
+ }
+ </div>
}
</div>
</div>
@@ -72,6 +82,19 @@ export class Main extends Component<any, State> {
)
}
+ trendingCommunities() {
+ return (
+ <div>
+ <h4>Trending forums</h4>
+ <ul class="list-inline">
+ {this.state.trendingCommunities.map(community =>
+ <li class="list-inline-item"><Link to={`/community/${community.id}`}>{community.name}</Link></li>
+ )}
+ </ul>
+ </div>
+ )
+ }
+
landing() {
return (
<div>
@@ -99,6 +122,11 @@ export class Main extends Component<any, State> {
this.state.subscribedCommunities = res.communities;
this.state.loading = false;
this.setState(this.state);
+ } else if (op == UserOperation.ListCommunities) {
+ let res: ListCommunitiesResponse = msg;
+ this.state.trendingCommunities = res.communities;
+ this.state.loading = false;
+ this.setState(this.state);
}
}
}
diff --git a/ui/src/components/post-form.tsx b/ui/src/components/post-form.tsx
index 03ace380..67a3f42e 100644
--- a/ui/src/components/post-form.tsx
+++ b/ui/src/components/post-form.tsx
@@ -1,7 +1,7 @@
import { Component, linkEvent } from 'inferno';
import { Subscription } from "rxjs";
import { retryWhen, delay, take } from 'rxjs/operators';
-import { PostForm as PostFormI, Post, PostResponse, UserOperation, Community, ListCommunitiesResponse } from '../interfaces';
+import { PostForm as PostFormI, Post, PostResponse, UserOperation, Community, ListCommunitiesResponse, ListCommunitiesForm, SortType } from '../interfaces';
import { WebSocketService } from '../services';
import { msgOp } from '../utils';
import * as autosize from 'autosize';
@@ -56,7 +56,11 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
() => console.log('complete')
);
- WebSocketService.Instance.listCommunities();
+ let listCommunitiesForm: ListCommunitiesForm = {
+ sort: SortType[SortType.TopAll]
+ }
+
+ WebSocketService.Instance.listCommunities(listCommunitiesForm);
}
componentDidMount() {
diff --git a/ui/src/interfaces.ts b/ui/src/interfaces.ts
index 66088647..b6139134 100644
--- a/ui/src/interfaces.ts
+++ b/ui/src/interfaces.ts
@@ -67,6 +67,12 @@ export interface CommunityResponse {
community: Community;
}
+export interface ListCommunitiesForm {
+ sort: string;
+ limit?: number;
+ auth?: string;
+}
+
export interface ListCommunitiesResponse {
op: string;
communities: Array<Community>;
diff --git a/ui/src/services/WebSocketService.ts b/ui/src/services/WebSocketService.ts
index b5efd6a7..99d65adf 100644
--- a/ui/src/services/WebSocketService.ts
+++ b/ui/src/services/WebSocketService.ts
@@ -1,5 +1,5 @@
import { wsUri } from '../env';
-import { LoginForm, RegisterForm, UserOperation, CommunityForm, PostForm, CommentForm, CommentLikeForm, GetPostsForm, CreatePostLikeForm, FollowCommunityForm, GetUserDetailsForm } from '../interfaces';
+import { LoginForm, RegisterForm, UserOperation, CommunityForm, PostForm, CommentForm, CommentLikeForm, GetPostsForm, CreatePostLikeForm, FollowCommunityForm, GetUserDetailsForm, ListCommunitiesForm } from '../interfaces';
import { webSocket } from 'rxjs/webSocket';
import { Subject } from 'rxjs';
import { retryWhen, delay, take } from 'rxjs/operators';
@@ -47,9 +47,9 @@ export class WebSocketService {
this.subject.next(this.wsSendWrapper(UserOperation.FollowCommunity, followCommunityForm));
}
- public listCommunities() {
- let data = {auth: UserService.Instance.auth };
- this.subject.next(this.wsSendWrapper(UserOperation.ListCommunities, data));
+ public listCommunities(form: ListCommunitiesForm) {
+ this.setAuth(form, false);
+ this.subject.next(this.wsSendWrapper(UserOperation.ListCommunities, form));
}
public getFollowedCommunities() {