From 1fd6bbc9371b8619568b01ec9d511ba854bf4b68 Mon Sep 17 00:00:00 2001
From: Dessalines <dessalines@users.noreply.github.com>
Date: Thu, 22 Jul 2021 16:18:13 -0400
Subject: [PATCH] Have setting to disable notifs for new posts. Fixes #132
 (#345)

---
 package.json                                  |  2 +-
 src/shared/components/community/community.tsx |  4 ++-
 src/shared/components/home/home.tsx           | 20 +++++++++++---
 src/shared/components/person/person.tsx       | 27 +++++++++++++++++++
 yarn.lock                                     |  8 +++---
 5 files changed, 52 insertions(+), 9 deletions(-)

diff --git a/package.json b/package.json
index 270dad9..3b03e3c 100644
--- a/package.json
+++ b/package.json
@@ -69,7 +69,7 @@
     "husky": "^7.0.1",
     "import-sort-style-module": "^6.0.0",
     "iso-639-1": "^2.1.9",
-    "lemmy-js-client": "0.11.0",
+    "lemmy-js-client": "0.11.3-rc.2",
     "lint-staged": "^11.0.1",
     "mini-css-extract-plugin": "^2.1.0",
     "node-fetch": "^2.6.1",
diff --git a/src/shared/components/community/community.tsx b/src/shared/components/community/community.tsx
index 09bc837..64db8e1 100644
--- a/src/shared/components/community/community.tsx
+++ b/src/shared/components/community/community.tsx
@@ -490,7 +490,9 @@ export class Community extends Component<any, State> {
     } else if (op == UserOperation.CreatePost) {
       let data = wsJsonToRes<PostResponse>(msg).data;
       this.state.posts.unshift(data.post_view);
-      notifyPost(data.post_view, this.context.router);
+      if (UserService.Instance.localUserView?.local_user.show_new_post_notifs) {
+        notifyPost(data.post_view, this.context.router);
+      }
       this.setState(this.state);
     } else if (op == UserOperation.CreatePostLike) {
       let data = wsJsonToRes<PostResponse>(msg).data;
diff --git a/src/shared/components/home/home.tsx b/src/shared/components/home/home.tsx
index 3a74901..ab2df75 100644
--- a/src/shared/components/home/home.tsx
+++ b/src/shared/components/home/home.tsx
@@ -849,17 +849,31 @@ export class Home extends Component<any, HomeState> {
               .includes(data.post_view.community.id)
           ) {
             this.state.posts.unshift(data.post_view);
-            notifyPost(data.post_view, this.context.router);
+            if (
+              UserService.Instance.localUserView?.local_user
+                .show_new_post_notifs
+            ) {
+              notifyPost(data.post_view, this.context.router);
+            }
           }
         } else if (this.state.listingType == ListingType.Local) {
           // If you're on the local view, only push it if its local
           if (data.post_view.post.local) {
             this.state.posts.unshift(data.post_view);
-            notifyPost(data.post_view, this.context.router);
+            if (
+              UserService.Instance.localUserView?.local_user
+                .show_new_post_notifs
+            ) {
+              notifyPost(data.post_view, this.context.router);
+            }
           }
         } else {
           this.state.posts.unshift(data.post_view);
-          notifyPost(data.post_view, this.context.router);
+          if (
+            UserService.Instance.localUserView?.local_user.show_new_post_notifs
+          ) {
+            notifyPost(data.post_view, this.context.router);
+          }
         }
         this.setState(this.state);
       }
diff --git a/src/shared/components/person/person.tsx b/src/shared/components/person/person.tsx
index b6cc4b3..2259367 100644
--- a/src/shared/components/person/person.tsx
+++ b/src/shared/components/person/person.tsx
@@ -830,6 +830,26 @@ export class Person extends Component<any, PersonState> {
               </label>
             </div>
           </div>
+          <div class="form-group">
+            <div class="form-check">
+              <input
+                class="form-check-input"
+                id="user-show-new-post-notifs"
+                type="checkbox"
+                checked={this.state.saveUserSettingsForm.show_new_post_notifs}
+                onChange={linkEvent(
+                  this,
+                  this.handleUserSettingsShowNewPostNotifs
+                )}
+              />
+              <label
+                class="form-check-label"
+                htmlFor="user-show-new-post-notifs"
+              >
+                {i18n.t("show_new_post_notifs")}
+              </label>
+            </div>
+          </div>
           <div class="form-group">
             <div class="form-check">
               <input
@@ -1016,6 +1036,11 @@ export class Person extends Component<any, PersonState> {
     i.setState(i.state);
   }
 
+  handleUserSettingsShowNewPostNotifs(i: Person, event: any) {
+    i.state.saveUserSettingsForm.show_new_post_notifs = event.target.checked;
+    i.setState(i.state);
+  }
+
   handleUserSettingsShowScoresChange(i: Person, event: any) {
     i.state.saveUserSettingsForm.show_scores = event.target.checked;
     UserService.Instance.localUserView.local_user.show_scores =
@@ -1199,6 +1224,8 @@ export class Person extends Component<any, PersonState> {
         UserService.Instance.localUserView.local_user.show_scores;
       this.state.saveUserSettingsForm.show_read_posts =
         UserService.Instance.localUserView.local_user.show_read_posts;
+      this.state.saveUserSettingsForm.show_new_post_notifs =
+        UserService.Instance.localUserView.local_user.show_new_post_notifs;
       this.state.saveUserSettingsForm.email =
         UserService.Instance.localUserView.local_user.email;
       this.state.saveUserSettingsForm.bio =
diff --git a/yarn.lock b/yarn.lock
index 9ed1bff..8e30236 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5342,10 +5342,10 @@ lcid@^1.0.0:
   dependencies:
     invert-kv "^1.0.0"
 
-lemmy-js-client@0.11.0:
-  version "0.11.0"
-  resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.11.0.tgz#aab1d445c55ca486eac3e396818371b9adfdf564"
-  integrity sha512-maLAwvLXbq8ncFY1Bg3MkQ4b2yeDATPUKRldFqlLt7fvDF9Mkfa3udFrroLEyNep2t3vROAtwA1gjf+Fqop0+w==
+lemmy-js-client@0.11.3-rc.2:
+  version "0.11.3-rc.2"
+  resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.11.3-rc.2.tgz#2debf0e524dbdade7056900ea1f202be8bde1e1c"
+  integrity sha512-4dMjUxUdEGS9SlxDJDDAwR5CxSEeHWR8tbHAel1tCVPdxJmFWqOlbucjWDGNyAQIUOEC8hhNdtf3dlIftEF2Rw==
 
 levn@^0.4.1:
   version "0.4.1"
-- 
2.44.1