From: Dessalines Date: Sun, 17 Oct 2021 17:42:30 +0000 (-0400) Subject: Simplifying getunreadcount. (#455) X-Git-Url: http://these/git/%22%7B%7D/static/git-logo.png?a=commitdiff_plain;h=99c9a608d9696a7168eced5eca29f76871454b5e;p=lemmy-ui.git Simplifying getunreadcount. (#455) --- diff --git a/package.json b/package.json index 6385a34..b3eb288 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "husky": "^7.0.2", "import-sort-style-module": "^6.0.0", "iso-639-1": "^2.1.9", - "lemmy-js-client": "0.13.1-rc.1", + "lemmy-js-client": "0.13.4-rc.1", "lint-staged": "^11.0.1", "mini-css-extract-plugin": "^2.3.0", "node-fetch": "^2.6.1", diff --git a/src/shared/components/app/navbar.tsx b/src/shared/components/app/navbar.tsx index 865b72d..dc736aa 100644 --- a/src/shared/components/app/navbar.tsx +++ b/src/shared/components/app/navbar.tsx @@ -2,19 +2,12 @@ import { Component, createRef, linkEvent, RefObject } from "inferno"; import { Link } from "inferno-router"; import { CommentResponse, - CommentView, - GetPersonMentions, - GetPersonMentionsResponse, - GetPrivateMessages, - GetReplies, - GetRepliesResponse, GetReportCount, GetReportCountResponse, GetSiteResponse, + GetUnreadCount, + GetUnreadCountResponse, PrivateMessageResponse, - PrivateMessagesResponse, - PrivateMessageView, - SortType, UserOperation, } from "lemmy-js-client"; import { Subscription } from "rxjs"; @@ -23,7 +16,6 @@ import { UserService, WebSocketService } from "../../services"; import { authField, donateLemmyUrl, - fetchLimit, getLanguage, isBrowser, notifyComment, @@ -47,9 +39,6 @@ interface NavbarProps { interface NavbarState { isLoggedIn: boolean; expanded: boolean; - replies: CommentView[]; - mentions: CommentView[]; - messages: PrivateMessageView[]; unreadInboxCount: number; unreadReportCount: number; searchParam: string; @@ -68,9 +57,6 @@ export class Navbar extends Component { isLoggedIn: !!this.props.site_res.my_user, unreadInboxCount: 0, unreadReportCount: 0, - replies: [], - mentions: [], - messages: [], expanded: false, searchParam: "", toggleSearch: false, @@ -577,30 +563,10 @@ export class Navbar extends Component { }) ); this.fetchUnreads(); - } else if (op == UserOperation.GetReplies) { - let data = wsJsonToRes(msg).data; - let unreadReplies = data.replies.filter(r => !r.comment.read); - - this.state.replies = unreadReplies; - this.state.unreadInboxCount = this.calculateUnreadInboxCount(); - this.setState(this.state); - this.sendUnreadCount(); - } else if (op == UserOperation.GetPersonMentions) { - let data = wsJsonToRes(msg).data; - let unreadMentions = data.mentions.filter(r => !r.comment.read); - - this.state.mentions = unreadMentions; - this.state.unreadInboxCount = this.calculateUnreadInboxCount(); - this.setState(this.state); - this.sendUnreadCount(); - } else if (op == UserOperation.GetPrivateMessages) { - let data = wsJsonToRes(msg).data; - let unreadMessages = data.private_messages.filter( - r => !r.private_message.read - ); - - this.state.messages = unreadMessages; - this.state.unreadInboxCount = this.calculateUnreadInboxCount(); + } else if (op == UserOperation.GetUnreadCount) { + let data = wsJsonToRes(msg).data; + this.state.unreadInboxCount = + data.replies + data.mentions + data.private_messages; this.setState(this.state); this.sendUnreadCount(); } else if (op == UserOperation.GetReportCount) { @@ -628,7 +594,6 @@ export class Navbar extends Component { UserService.Instance.myUserInfo.local_user_view.local_user.id ) ) { - this.state.replies.push(data.comment_view); this.state.unreadInboxCount++; this.setState(this.state); this.sendUnreadCount(); @@ -643,7 +608,6 @@ export class Navbar extends Component { data.private_message_view.recipient.id == UserService.Instance.myUserInfo.local_user_view.person.id ) { - this.state.messages.push(data.private_message_view); this.state.unreadInboxCount++; this.setState(this.state); this.sendUnreadCount(); @@ -654,41 +618,13 @@ export class Navbar extends Component { } fetchUnreads() { - // TODO we should just add a count call to the API for these, because this is a limited fetch, - // and it shouldn't have to fetch the actual content - if (this.currentLocation !== "/inbox") { - console.log("Fetching inbox unreads..."); - let repliesForm: GetReplies = { - sort: SortType.New, - unread_only: true, - page: 1, - limit: fetchLimit, - auth: authField(), - }; - - let personMentionsForm: GetPersonMentions = { - sort: SortType.New, - unread_only: true, - page: 1, - limit: fetchLimit, - auth: authField(), - }; - - let privateMessagesForm: GetPrivateMessages = { - unread_only: true, - page: 1, - limit: fetchLimit, - auth: authField(), - }; - - WebSocketService.Instance.send(wsClient.getReplies(repliesForm)); - WebSocketService.Instance.send( - wsClient.getPersonMentions(personMentionsForm) - ); - WebSocketService.Instance.send( - wsClient.getPrivateMessages(privateMessagesForm) - ); - } + console.log("Fetching inbox unreads..."); + + let unreadForm: GetUnreadCount = { + auth: authField(), + }; + + WebSocketService.Instance.send(wsClient.getUnreadCount(unreadForm)); console.log("Fetching reports..."); @@ -713,14 +649,6 @@ export class Navbar extends Component { ); } - calculateUnreadInboxCount(): number { - return ( - this.state.replies.filter(r => !r.comment.read).length + - this.state.mentions.filter(r => !r.comment.read).length + - this.state.messages.filter(r => !r.private_message.read).length - ); - } - get canAdmin(): boolean { return ( UserService.Instance.myUserInfo && diff --git a/src/shared/components/person/inbox.tsx b/src/shared/components/person/inbox.tsx index be9c327..b1f14e2 100644 --- a/src/shared/components/person/inbox.tsx +++ b/src/shared/components/person/inbox.tsx @@ -533,11 +533,20 @@ export class Inbox extends Component { i.state.replies = []; i.state.mentions = []; i.state.messages = []; - i.sendUnreadCount(); + UserService.Instance.unreadInboxCountSub.next(0); window.scrollTo(0, 0); i.setState(i.state); } + sendUnreadCount(read: boolean) { + let urcs = UserService.Instance.unreadInboxCountSub; + if (read) { + urcs.next(urcs.getValue() - 1); + } else { + urcs.next(urcs.getValue() + 1); + } + } + parseMessage(msg: any) { let op = wsUserOp(msg); console.log(msg); @@ -551,7 +560,6 @@ export class Inbox extends Component { this.state.replies = data.replies; this.state.combined = this.buildCombined(); this.state.loading = false; - this.sendUnreadCount(); window.scrollTo(0, 0); this.setState(this.state); setupTippy(); @@ -559,7 +567,6 @@ export class Inbox extends Component { let data = wsJsonToRes(msg).data; this.state.mentions = data.mentions; this.state.combined = this.buildCombined(); - this.sendUnreadCount(); window.scrollTo(0, 0); this.setState(this.state); setupTippy(); @@ -567,7 +574,6 @@ export class Inbox extends Component { let data = wsJsonToRes(msg).data; this.state.messages = data.private_messages; this.state.combined = this.buildCombined(); - this.sendUnreadCount(); window.scrollTo(0, 0); this.setState(this.state); setupTippy(); @@ -635,7 +641,7 @@ export class Inbox extends Component { data.private_message_view.private_message.read; } } - this.sendUnreadCount(); + this.sendUnreadCount(data.private_message_view.private_message.read); this.setState(this.state); } else if (op == UserOperation.MarkAllAsRead) { // Moved to be instant @@ -671,7 +677,8 @@ export class Inbox extends Component { found.comment.read = combinedView.comment.read = data.comment_view.comment.read; } - this.sendUnreadCount(); + + this.sendUnreadCount(data.comment_view.comment.read); this.setState(this.state); setupTippy(); } else if (op == UserOperation.MarkPersonMentionAsRead) { @@ -719,7 +726,7 @@ export class Inbox extends Component { data.person_mention_view.person_mention.read; } } - this.sendUnreadCount(); + this.sendUnreadCount(data.person_mention_view.person_mention.read); this.setState(this.state); } else if (op == UserOperation.CreateComment) { let data = wsJsonToRes(msg).data; @@ -764,7 +771,7 @@ export class Inbox extends Component { } this.state.combined = this.buildCombined(); } - this.sendUnreadCount(); + this.sendUnreadCount(true); this.setState(this.state); setupTippy(); // TODO this seems wrong, you should be using form_id @@ -807,25 +814,6 @@ export class Inbox extends Component { } } - sendUnreadCount() { - UserService.Instance.unreadInboxCountSub.next(this.unreadCount()); - } - - unreadCount(): number { - return ( - this.state.replies.filter(r => !r.comment.read).length + - this.state.mentions.filter(r => !r.person_mention.read).length + - this.state.messages.filter( - r => - UserService.Instance.myUserInfo && - !r.private_message.read && - // TODO also seems very strange and wrong - r.creator.id !== - UserService.Instance.myUserInfo.local_user_view.person.id - ).length - ); - } - isMention(view: any): view is PersonMentionView { return (view as PersonMentionView).person_mention !== undefined; } diff --git a/yarn.lock b/yarn.lock index cc5e52e..625b95a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4915,10 +4915,10 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -lemmy-js-client@0.13.1-rc.1: - version "0.13.1-rc.1" - resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.13.1-rc.1.tgz#e1af4749a5493954a17f87b7b20dcccb8c585f22" - integrity sha512-fncCq6Zu8s6GpeCrkmJS8/rqXcyrJ8p8EyWfXiiuZlWkgzOIi+qZjTRnO63wI6DomYwVOjwk7sry4RbOJSdK5Q== +lemmy-js-client@0.13.4-rc.1: + version "0.13.4-rc.1" + resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.13.4-rc.1.tgz#ddc7fd7c02c17f46c311a6c2656171188a90549e" + integrity sha512-3Tvxa2Xl9jE+9zvwkR6BFDCcdb1RJNPowfyspY4bB4bqC1dmrP/MCLIxmlwGhd/E1IEEE6TA7XX1wldweYn6gw== levn@^0.4.1: version "0.4.1"