{
"name": "lemmy-ui",
- "version": "0.18.0-beta.6",
+ "version": "0.18.0-rc.1",
"description": "An isomorphic UI for lemmy",
"repository": "https://github.com/LemmyNet/lemmy-ui",
"license": "AGPL-3.0",
isBrowser,
myAuth,
numToSI,
+ poll,
showAvatars,
toast,
+ updateUnreadCountsInterval,
} from "../../utils";
import { Icon } from "../common/icon";
import { PictrsImage } from "../common/pictrs-image";
if (isBrowser()) {
// On the first load, check the unreads
this.requestNotificationPermission();
- await this.fetchUnreads();
+ this.fetchUnreads();
this.requestNotificationPermission();
document.addEventListener("mouseup", this.handleOutsideMenuClick);
return amAdmin() || moderatesS;
}
- async fetchUnreads() {
- const auth = myAuth();
- if (auth) {
- this.setState({ unreadInboxCountRes: { state: "loading" } });
- this.setState({
- unreadInboxCountRes: await HttpService.client.getUnreadCount({
- auth,
- }),
- });
-
- if (this.moderatesSomething) {
- this.setState({ unreadReportCountRes: { state: "loading" } });
- this.setState({
- unreadReportCountRes: await HttpService.client.getReportCount({
- auth,
- }),
- });
- }
-
- if (amAdmin()) {
- this.setState({ unreadApplicationCountRes: { state: "loading" } });
- this.setState({
- unreadApplicationCountRes:
- await HttpService.client.getUnreadRegistrationApplicationCount({
+ fetchUnreads() {
+ poll(async () => {
+ if (window.document.visibilityState !== "hidden") {
+ const auth = myAuth();
+ if (auth) {
+ this.setState({
+ unreadInboxCountRes: await HttpService.client.getUnreadCount({
auth,
}),
- });
+ });
+
+ if (this.moderatesSomething) {
+ this.setState({
+ unreadReportCountRes: await HttpService.client.getReportCount({
+ auth,
+ }),
+ });
+ }
+
+ if (amAdmin()) {
+ this.setState({
+ unreadApplicationCountRes:
+ await HttpService.client.getUnreadRegistrationApplicationCount({
+ auth,
+ }),
+ });
+ }
+ }
}
- }
+ }, updateUnreadCountsInterval);
}
get unreadInboxCount(): number {
export const markdownFieldCharacterLimit = 50000;
export const maxUploadImages = 20;
export const concurrentImageUpload = 4;
+export const updateUnreadCountsInterval = 30000;
export const relTags = "noopener nofollow";
return myVote == -1 ? 0 : -1;
}
}
+
+function sleep(millis: number): Promise<void> {
+ return new Promise(resolve => setTimeout(resolve, millis));
+}
+
+/**
+ * Polls / repeatedly runs a promise, every X milliseconds
+ */
+export async function poll(promiseFn: any, millis: number) {
+ if (window.document.visibilityState !== "hidden") {
+ await promiseFn();
+ }
+ await sleep(millis);
+ return poll(promiseFn, millis);
+}