diff options
author | Dessalines <tyhou13@gmx.com> | 2019-04-21 13:52:55 -0700 |
---|---|---|
committer | Dessalines <tyhou13@gmx.com> | 2019-04-21 13:52:55 -0700 |
commit | 016920aeb7dc47f32412829c70b872c54caf10e3 (patch) | |
tree | 4bb62c262bec180514fa7631a9b2416046c76edb /ui | |
parent | 273a38f61f03b4e1316ff2a0a75607dc77aaaf44 (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.tsx | 14 | ||||
-rw-r--r-- | ui/src/components/community.tsx | 14 | ||||
-rw-r--r-- | ui/src/components/post-listing.tsx | 20 | ||||
-rw-r--r-- | ui/src/components/post.tsx | 6 | ||||
-rw-r--r-- | ui/src/components/sidebar.tsx | 39 | ||||
-rw-r--r-- | ui/src/interfaces.ts | 2 |
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>; } |