From 8036474ddad2f20c27a2fb023395306d6b9e577d Mon Sep 17 00:00:00 2001 From: Dessalines Date: Fri, 31 Jan 2020 20:02:20 -0500 Subject: Starting to work on user message scope. --- ui/src/components/navbar.tsx | 53 +++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 35 deletions(-) (limited to 'ui/src/components/navbar.tsx') 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 { 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 { } 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 { } 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 { } 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 { } } - keepFetchingUnreads() { - this.fetchUnreads(); - setInterval(() => this.fetchUnreads(), 15000); - } - fetchUnreads() { if (this.state.isLoggedIn) { let repliesForm: GetRepliesForm = { @@ -330,24 +314,23 @@ export class Navbar extends Component { } } - notify(replies: Array) { - 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` ); }; -- cgit v1.2.3