return Err(self.error("Not allowed to edit comment."))?
}
- // Check for a community ban
- if CommunityUserBanView::get(&conn, user_id, orig_comment.community_id).is_ok() {
- return Err(self.error("You have been banned from this community"))?
- }
+ // You are allowed to mark the comment as read even if you're banned.
+ if self.read.is_none() {
+ // Check for a community ban
+ if CommunityUserBanView::get(&conn, user_id, orig_comment.community_id).is_ok() {
+ return Err(self.error("You have been banned from this community"))?
+ }
- // Check for a site ban
- if UserView::read(&conn, user_id)?.banned {
- return Err(self.error("You have been banned from the site"))?
+ // Check for a site ban
+ if UserView::read(&conn, user_id)?.banned {
+ return Err(self.error("You have been banned from the site"))?
+ }
}
let content_slurs_removed = remove_slurs(&self.content.to_owned());
}
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);
+ if (this.props.admins && this.props.moderators) {
+ 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);
+ } else {
+ return false;
+ }
}
get canAdmin(): boolean {
return (
<div>
{this.state.replies.map(reply =>
- <CommentNodes nodes={[{comment: reply}]} noIndent viewOnly markable />
+ <CommentNodes nodes={[{comment: reply}]} noIndent markable />
)}
</div>
);
} else if (op == UserOperation.EditComment) {
let res: CommentResponse = msg;
+ let found = this.state.replies.find(c => c.id == res.comment.id);
+ found.content = res.comment.content;
+ found.updated = res.comment.updated;
+ found.removed = res.comment.removed;
+ found.upvotes = res.comment.upvotes;
+ found.downvotes = res.comment.downvotes;
+ found.score = res.comment.score;
+
// If youre in the unread view, just remove it from the list
if (this.state.unreadType == UnreadType.Unread && res.comment.read) {
this.state.replies = this.state.replies.filter(r => r.id !== res.comment.id);
let found = this.state.replies.find(c => c.id == res.comment.id);
found.read = res.comment.read;
}
-
this.sendRepliesCount();
+
+ this.setState(this.state);
+ } else if (op == UserOperation.CreateComment) {
+ // let res: CommentResponse = msg;
+ alert('Reply sent');
+ // this.state.replies.unshift(res.comment); // TODO do this right
+ // this.setState(this.state);
+ } else if (op == UserOperation.SaveComment) {
+ let res: CommentResponse = msg;
+ let found = this.state.replies.find(c => c.id == res.comment.id);
+ found.saved = res.comment.saved;
+ this.setState(this.state);
+ } else if (op == UserOperation.CreateCommentLike) {
+ let res: CommentResponse = msg;
+ let found: Comment = this.state.replies.find(c => c.id === res.comment.id);
+ found.score = res.comment.score;
+ found.upvotes = res.comment.upvotes;
+ found.downvotes = res.comment.downvotes;
+ if (res.comment.my_vote !== null)
+ found.my_vote = res.comment.my_vote;
this.setState(this.state);
}
}
import { Link } from 'inferno-router';
import { Subscription } from "rxjs";
import { retryWhen, delay, take } from 'rxjs/operators';
-import { UserOperation, Post, Comment, CommunityUser, GetUserDetailsForm, SortType, UserDetailsResponse, UserView } from '../interfaces';
+import { UserOperation, Post, Comment, CommunityUser, GetUserDetailsForm, SortType, UserDetailsResponse, UserView, CommentResponse } from '../interfaces';
import { WebSocketService } from '../services';
import { msgOp, fetchLimit } from '../utils';
import { PostListing } from './post-listing';
<div>
{i.type_ == "posts"
? <PostListing post={i.data as Post} showCommunity viewOnly />
- : <CommentNodes nodes={[{comment: i.data as Comment}]} noIndent viewOnly />
+ : <CommentNodes nodes={[{comment: i.data as Comment}]} noIndent />
}
</div>
)
this.state.posts = res.posts;
document.title = `/u/${this.state.user.name} - Lemmy`;
this.setState(this.state);
- }
+ } else if (op == UserOperation.EditComment) {
+ let res: CommentResponse = msg;
+
+ let found = this.state.comments.find(c => c.id == res.comment.id);
+ found.content = res.comment.content;
+ found.updated = res.comment.updated;
+ found.removed = res.comment.removed;
+ found.upvotes = res.comment.upvotes;
+ found.downvotes = res.comment.downvotes;
+ found.score = res.comment.score;
+
+ this.setState(this.state);
+ } else if (op == UserOperation.CreateComment) {
+ // let res: CommentResponse = msg;
+ alert('Reply sent');
+ // this.state.comments.unshift(res.comment); // TODO do this right
+ // this.setState(this.state);
+ } else if (op == UserOperation.SaveComment) {
+ let res: CommentResponse = msg;
+ let found = this.state.comments.find(c => c.id == res.comment.id);
+ found.saved = res.comment.saved;
+ this.setState(this.state);
+ } else if (op == UserOperation.CreateCommentLike) {
+ let res: CommentResponse = msg;
+ let found: Comment = this.state.comments.find(c => c.id === res.comment.id);
+ found.score = res.comment.score;
+ found.upvotes = res.comment.upvotes;
+ found.downvotes = res.comment.downvotes;
+ if (res.comment.my_vote !== null)
+ found.my_vote = res.comment.my_vote;
+ this.setState(this.state);
+ }
}
}