mirror of
https://github.com/LemmyNet/lemmy-ui.git
synced 2024-11-22 06:36:17 +00:00
Simplifying getunreadcount. (#455)
This commit is contained in:
parent
ec23617d55
commit
99c9a608d9
|
@ -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",
|
||||
|
|
|
@ -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<NavbarProps, NavbarState> {
|
|||
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<NavbarProps, NavbarState> {
|
|||
})
|
||||
);
|
||||
this.fetchUnreads();
|
||||
} else if (op == UserOperation.GetReplies) {
|
||||
let data = wsJsonToRes<GetRepliesResponse>(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<GetPersonMentionsResponse>(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<PrivateMessagesResponse>(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<GetUnreadCountResponse>(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<NavbarProps, NavbarState> {
|
|||
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<NavbarProps, NavbarState> {
|
|||
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<NavbarProps, NavbarState> {
|
|||
}
|
||||
|
||||
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(),
|
||||
};
|
||||
console.log("Fetching inbox unreads...");
|
||||
|
||||
let personMentionsForm: GetPersonMentions = {
|
||||
sort: SortType.New,
|
||||
unread_only: true,
|
||||
page: 1,
|
||||
limit: fetchLimit,
|
||||
auth: authField(),
|
||||
};
|
||||
let unreadForm: GetUnreadCount = {
|
||||
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)
|
||||
);
|
||||
}
|
||||
WebSocketService.Instance.send(wsClient.getUnreadCount(unreadForm));
|
||||
|
||||
console.log("Fetching reports...");
|
||||
|
||||
|
@ -713,14 +649,6 @@ export class Navbar extends Component<NavbarProps, NavbarState> {
|
|||
);
|
||||
}
|
||||
|
||||
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 &&
|
||||
|
|
|
@ -533,11 +533,20 @@ export class Inbox extends Component<any, InboxState> {
|
|||
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<any, InboxState> {
|
|||
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<any, InboxState> {
|
|||
let data = wsJsonToRes<GetPersonMentionsResponse>(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<any, InboxState> {
|
|||
let data = wsJsonToRes<PrivateMessagesResponse>(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<any, InboxState> {
|
|||
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<any, InboxState> {
|
|||
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<any, InboxState> {
|
|||
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<CommentResponse>(msg).data;
|
||||
|
@ -764,7 +771,7 @@ export class Inbox extends Component<any, InboxState> {
|
|||
}
|
||||
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<any, InboxState> {
|
|||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue