summaryrefslogtreecommitdiffstats
path: root/ui/src/components/navbar.tsx
diff options
context:
space:
mode:
authorDessalines <tyhou13@gmx.com>2020-01-31 20:02:20 -0500
committerDessalines <tyhou13@gmx.com>2020-01-31 20:02:20 -0500
commit8036474ddad2f20c27a2fb023395306d6b9e577d (patch)
tree28f3546c9086931f33d9ee6d910c9aa43a5a1f77 /ui/src/components/navbar.tsx
parent5188bddd4ddb1d4f4bc4add24db210789054c2a5 (diff)
Starting to work on user message scope.
Diffstat (limited to 'ui/src/components/navbar.tsx')
-rw-r--r--ui/src/components/navbar.tsx53
1 files changed, 18 insertions, 35 deletions
diff --git a/ui/src/components/navbar.tsx b/ui/src/components/navbar.tsx
index 1828fce9..d433ad1f 100644
--- a/ui/src/components/navbar.tsx
+++ b/ui/src/components/navbar.tsx
@@ -14,6 +14,7 @@ import {
SortType,
GetSiteResponse,
Comment,
+ CommentResponse,
PrivateMessage,
WebSocketJsonResponse,
} from '../interfaces';
@@ -58,7 +59,7 @@ export class Navbar extends Component<any, NavbarState> {
super(props, context);
this.state = this.emptyState;
- this.keepFetchingUnreads();
+ this.fetchUnreads();
// Subscribe to user changes
this.userSub = UserService.Instance.sub.subscribe(user => {
@@ -211,13 +212,6 @@ export class Navbar extends Component<any, NavbarState> {
} else if (res.op == UserOperation.GetReplies) {
let data = res.data as GetRepliesResponse;
let unreadReplies = data.replies.filter(r => !r.read);
- if (
- unreadReplies.length > 0 &&
- this.state.fetchCount > 1 &&
- JSON.stringify(this.state.replies) !== JSON.stringify(unreadReplies)
- ) {
- this.notify(unreadReplies);
- }
this.state.replies = unreadReplies;
this.setState(this.state);
@@ -225,13 +219,6 @@ export class Navbar extends Component<any, NavbarState> {
} else if (res.op == UserOperation.GetUserMentions) {
let data = res.data as GetUserMentionsResponse;
let unreadMentions = data.mentions.filter(r => !r.read);
- if (
- unreadMentions.length > 0 &&
- this.state.fetchCount > 1 &&
- JSON.stringify(this.state.mentions) !== JSON.stringify(unreadMentions)
- ) {
- this.notify(unreadMentions);
- }
this.state.mentions = unreadMentions;
this.setState(this.state);
@@ -239,17 +226,19 @@ export class Navbar extends Component<any, NavbarState> {
} else if (res.op == UserOperation.GetPrivateMessages) {
let data = res.data as PrivateMessagesResponse;
let unreadMessages = data.messages.filter(r => !r.read);
- if (
- unreadMessages.length > 0 &&
- this.state.fetchCount > 1 &&
- JSON.stringify(this.state.messages) !== JSON.stringify(unreadMessages)
- ) {
- this.notify(unreadMessages);
- }
this.state.messages = unreadMessages;
this.setState(this.state);
this.sendUnreadCount();
+ } else if (res.op == UserOperation.CreateComment) {
+ // TODO do private messages too
+ let data = res.data as CommentResponse;
+
+ if (UserService.Instance.user) {
+ if (data.recipient_ids.includes(UserService.Instance.user.id)) {
+ this.notify(data.comment);
+ }
+ }
} else if (res.op == UserOperation.GetSite) {
let data = res.data as GetSiteResponse;
@@ -261,11 +250,6 @@ export class Navbar extends Component<any, NavbarState> {
}
}
- keepFetchingUnreads() {
- this.fetchUnreads();
- setInterval(() => this.fetchUnreads(), 15000);
- }
-
fetchUnreads() {
if (this.state.isLoggedIn) {
let repliesForm: GetRepliesForm = {
@@ -330,24 +314,23 @@ export class Navbar extends Component<any, NavbarState> {
}
}
- notify(replies: Array<Comment | PrivateMessage>) {
- let recentReply = replies[0];
+ notify(reply: Comment | PrivateMessage) {
if (Notification.permission !== 'granted') Notification.requestPermission();
else {
var notification = new Notification(
- `${replies.length} ${i18n.t('unread_messages')}`,
+ `${this.state.unreadCount} ${i18n.t('unread_messages')}`,
{
- icon: recentReply.creator_avatar
- ? recentReply.creator_avatar
+ icon: reply.creator_avatar
+ ? reply.creator_avatar
: `${window.location.protocol}//${window.location.host}/static/assets/apple-touch-icon.png`,
- body: `${recentReply.creator_name}: ${recentReply.content}`,
+ body: `${reply.creator_name}: ${reply.content}`,
}
);
notification.onclick = () => {
this.context.router.history.push(
- isCommentType(recentReply)
- ? `/post/${recentReply.post_id}/comment/${recentReply.id}`
+ isCommentType(reply)
+ ? `/post/${reply.post_id}/comment/${reply.id}`
: `/inbox`
);
};