summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorDessalines <tyhou13@gmx.com>2019-04-21 13:52:55 -0700
committerDessalines <tyhou13@gmx.com>2019-04-21 13:52:55 -0700
commit016920aeb7dc47f32412829c70b872c54caf10e3 (patch)
tree4bb62c262bec180514fa7631a9b2416046c76edb /ui
parent273a38f61f03b4e1316ff2a0a75607dc77aaaf44 (diff)
Community moderation fixes.
- Don't show banned communities on main post list. Fixes #95 - Add back in community moderation and editing. Fixes #92
Diffstat (limited to 'ui')
-rw-r--r--ui/src/components/comment-node.tsx14
-rw-r--r--ui/src/components/community.tsx14
-rw-r--r--ui/src/components/post-listing.tsx20
-rw-r--r--ui/src/components/post.tsx6
-rw-r--r--ui/src/components/sidebar.tsx39
-rw-r--r--ui/src/interfaces.ts2
6 files changed, 57 insertions, 38 deletions
diff --git a/ui/src/components/comment-node.tsx b/ui/src/components/comment-node.tsx
index cf7b1bce..415dad77 100644
--- a/ui/src/components/comment-node.tsx
+++ b/ui/src/components/comment-node.tsx
@@ -210,13 +210,6 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
return UserService.Instance.user && this.props.node.comment.creator_id == UserService.Instance.user.id;
}
- get canMod(): boolean {
- let adminsThenMods = this.props.admins.map(a => a.id)
- .concat(this.props.moderators.map(m => m.user_id));
-
- return canMod(UserService.Instance.user, adminsThenMods, this.props.node.comment.creator_id);
- }
-
get isMod(): boolean {
return this.props.moderators && isMod(this.props.moderators.map(m => m.user_id), this.props.node.comment.creator_id);
}
@@ -225,6 +218,13 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
return this.props.admins && isMod(this.props.admins.map(a => a.id), this.props.node.comment.creator_id);
}
+ get canMod(): boolean {
+ let adminsThenMods = this.props.admins.map(a => a.id)
+ .concat(this.props.moderators.map(m => m.user_id));
+
+ return canMod(UserService.Instance.user, adminsThenMods, this.props.node.comment.creator_id);
+ }
+
get canAdmin(): boolean {
return this.props.admins && canMod(UserService.Instance.user, this.props.admins.map(a => a.id), this.props.node.comment.creator_id);
}
diff --git a/ui/src/components/community.tsx b/ui/src/components/community.tsx
index 6271bde5..c89d2f06 100644
--- a/ui/src/components/community.tsx
+++ b/ui/src/components/community.tsx
@@ -1,7 +1,7 @@
import { Component } from 'inferno';
import { Subscription } from "rxjs";
import { retryWhen, delay, take } from 'rxjs/operators';
-import { UserOperation, Community as CommunityI, GetCommunityResponse, CommunityResponse, CommunityUser} from '../interfaces';
+import { UserOperation, Community as CommunityI, GetCommunityResponse, CommunityResponse, CommunityUser, UserView } from '../interfaces';
import { WebSocketService } from '../services';
import { PostListings } from './post-listings';
import { Sidebar } from './sidebar';
@@ -11,6 +11,7 @@ interface State {
community: CommunityI;
communityId: number;
moderators: Array<CommunityUser>;
+ admins: Array<UserView>;
loading: boolean;
}
@@ -29,9 +30,11 @@ export class Community extends Component<any, State> {
number_of_subscribers: null,
number_of_posts: null,
number_of_comments: null,
- published: null
+ published: null,
+ removed: null,
},
moderators: [],
+ admins: [],
communityId: Number(this.props.match.params.id),
loading: true
}
@@ -71,7 +74,11 @@ export class Community extends Component<any, State> {
<PostListings communityId={this.state.communityId} />
</div>
<div class="col-12 col-md-3">
- <Sidebar community={this.state.community} moderators={this.state.moderators} />
+ <Sidebar
+ community={this.state.community}
+ moderators={this.state.moderators}
+ admins={this.state.admins}
+ />
</div>
</div>
}
@@ -90,6 +97,7 @@ export class Community extends Component<any, State> {
let res: GetCommunityResponse = msg;
this.state.community = res.community;
this.state.moderators = res.moderators;
+ this.state.admins = res.admins;
this.state.loading = false;
this.setState(this.state);
} else if (op == UserOperation.EditCommunity) {
diff --git a/ui/src/components/post-listing.tsx b/ui/src/components/post-listing.tsx
index 8803d629..93e88071 100644
--- a/ui/src/components/post-listing.tsx
+++ b/ui/src/components/post-listing.tsx
@@ -174,6 +174,14 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
return UserService.Instance.user && this.props.post.creator_id == UserService.Instance.user.id;
}
+ get isMod(): boolean {
+ return this.props.moderators && isMod(this.props.moderators.map(m => m.user_id), this.props.post.creator_id);
+ }
+
+ get isAdmin(): boolean {
+ return this.props.admins && isMod(this.props.admins.map(a => a.id), this.props.post.creator_id);
+ }
+
get canMod(): boolean {
if (this.props.editable) {
@@ -185,18 +193,6 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
} else return false;
}
- get isMod(): boolean {
- return this.props.moderators && isMod(this.props.moderators.map(m => m.user_id), this.props.post.creator_id);
- }
-
- get isAdmin(): boolean {
- return this.props.admins && isMod(this.props.admins.map(a => a.id), this.props.post.creator_id);
- }
-
- get canAdmin(): boolean {
- return this.props.admins && canMod(UserService.Instance.user, this.props.admins.map(a => a.id), this.props.post.creator_id);
- }
-
handlePostLike(i: PostListing) {
let form: CreatePostLikeForm = {
diff --git a/ui/src/components/post.tsx b/ui/src/components/post.tsx
index 3f243220..3ece6747 100644
--- a/ui/src/components/post.tsx
+++ b/ui/src/components/post.tsx
@@ -148,7 +148,11 @@ export class Post extends Component<any, PostState> {
sidebar() {
return (
<div class="sticky-top">
- <Sidebar community={this.state.community} moderators={this.state.moderators} />
+ <Sidebar
+ community={this.state.community}
+ moderators={this.state.moderators}
+ admins={this.state.admins}
+ />
</div>
);
}
diff --git a/ui/src/components/sidebar.tsx b/ui/src/components/sidebar.tsx
index 2f231f9a..95880448 100644
--- a/ui/src/components/sidebar.tsx
+++ b/ui/src/components/sidebar.tsx
@@ -1,6 +1,6 @@
import { Component, linkEvent } from 'inferno';
import { Link } from 'inferno-router';
-import { Community, CommunityUser, FollowCommunityForm, CommunityForm as CommunityFormI } from '../interfaces';
+import { Community, CommunityUser, FollowCommunityForm, CommunityForm as CommunityFormI, UserView } from '../interfaces';
import { WebSocketService, UserService } from '../services';
import { mdToHtml, getUnixTime } from '../utils';
import { CommunityForm } from './community-form';
@@ -8,6 +8,7 @@ import { CommunityForm } from './community-form';
interface SidebarProps {
community: Community;
moderators: Array<CommunityUser>;
+ admins: Array<UserView>;
}
interface SidebarState {
@@ -54,24 +55,29 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
}
</h5>
<Link className="text-muted" to={`/community/${community.id}`}>/f/{community.name}</Link>
- {community.am_mod &&
- <ul class="list-inline mb-1 text-muted small font-weight-bold">
- <li className="list-inline-item">
- <span class="pointer" onClick={linkEvent(this, this.handleEditClick)}>edit</span>
- </li>
- {this.amCreator &&
+ <ul class="list-inline mb-1 text-muted small font-weight-bold">
+ {this.canMod &&
+ <>
<li className="list-inline-item">
- {/* <span class="pointer" onClick={linkEvent(this, this.handleDeleteClick)}>delete</span> */}
+ <span class="pointer" onClick={linkEvent(this, this.handleEditClick)}>edit</span>
</li>
- }
+ {this.amCreator &&
+ <li className="list-inline-item">
+ {/* <span class="pointer" onClick={linkEvent(this, this.handleDeleteClick)}>delete</span> */}
+ </li>
+ }
+ </>
+ }
+ {this.canAdmin &&
<li className="list-inline-item">
{!this.props.community.removed ?
<span class="pointer" onClick={linkEvent(this, this.handleModRemoveShow)}>remove</span> :
<span class="pointer" onClick={linkEvent(this, this.handleModRemoveSubmit)}>restore</span>
}
</li>
- </ul>
- }
+
+ }
+ </ul>
{this.state.showRemoveDialog &&
<form onSubmit={linkEvent(this, this.handleModRemoveSubmit)}>
<div class="form-group row">
@@ -156,10 +162,13 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
return this.props.community.creator_id == UserService.Instance.user.id;
}
- // private get amMod(): boolean {
- // return UserService.Instance.loggedIn &&
- // this.props.moderators.map(m => m.user_id).includes(UserService.Instance.user.id);
- // }
+ get canMod(): boolean {
+ return UserService.Instance.user && this.props.moderators.map(m => m.user_id).includes(UserService.Instance.user.id);
+ }
+
+ get canAdmin(): boolean {
+ return UserService.Instance.user && this.props.admins.map(a => a.id).includes(UserService.Instance.user.id);
+ }
handleDeleteClick() {
}
diff --git a/ui/src/interfaces.ts b/ui/src/interfaces.ts
index 24bb6157..23b86074 100644
--- a/ui/src/interfaces.ts
+++ b/ui/src/interfaces.ts
@@ -72,6 +72,7 @@ export interface Post {
updated?: string;
creator_name: string;
community_name: string;
+ community_removed: boolean;
number_of_comments: number;
score: number;
upvotes: number;
@@ -350,6 +351,7 @@ export interface GetCommunityResponse {
op: string;
community: Community;
moderators: Array<CommunityUser>;
+ admins: Array<UserView>;
}