From dd42bc2a3dc75a33d20bb5b2f9dfbbfb7e12b153 Mon Sep 17 00:00:00 2001
From: SleeplessOne1917 <abias1122@gmail.com>
Date: Fri, 28 Jul 2023 20:07:16 +0000
Subject: [PATCH] ES-Lint tweak (#2001)

---
 .eslintrc.json                                |  5 +-
 src/server/handlers/catch-all-handler.tsx     |  2 +-
 src/shared/components/app/navbar.tsx          |  6 +-
 src/shared/components/app/theme.tsx           |  6 +-
 .../components/comment/comment-node.tsx       | 18 ++---
 .../components/comment/comment-report.tsx     |  2 +-
 .../components/common/markdown-textarea.tsx   |  2 +-
 src/shared/components/common/paginator.tsx    |  2 +-
 .../components/common/password-input.tsx      |  2 +-
 src/shared/components/common/pictrs-image.tsx |  2 +-
 .../common/registration-application.tsx       |  2 +-
 src/shared/components/common/vote-buttons.tsx |  4 +-
 .../components/community/communities.tsx      |  6 +-
 .../components/community/community-link.tsx   |  2 +-
 src/shared/components/community/community.tsx | 54 +++++++-------
 src/shared/components/community/sidebar.tsx   |  4 +-
 src/shared/components/home/admin-settings.tsx |  2 +-
 src/shared/components/home/emojis-form.tsx    |  8 +--
 src/shared/components/home/home.tsx           | 38 +++++-----
 src/shared/components/home/login-reset.tsx    |  2 +-
 src/shared/components/home/login.tsx          |  4 +-
 src/shared/components/home/setup.tsx          |  4 +-
 src/shared/components/home/signup.tsx         | 10 +--
 src/shared/components/home/site-form.tsx      |  2 +-
 src/shared/components/home/tagline-form.tsx   |  6 +-
 src/shared/components/modlog.tsx              |  4 +-
 src/shared/components/person/inbox.tsx        | 68 +++++++++---------
 .../components/person/password-change.tsx     |  2 +-
 src/shared/components/person/profile.tsx      | 28 ++++----
 .../person/registration-applications.tsx      |  4 +-
 src/shared/components/person/reports.tsx      | 14 ++--
 src/shared/components/person/settings.tsx     |  8 +--
 src/shared/components/person/verify-email.tsx |  4 +-
 src/shared/components/post/post-form.tsx      |  2 +-
 src/shared/components/post/post-listing.tsx   | 10 +--
 src/shared/components/post/post-listings.tsx  |  4 +-
 src/shared/components/post/post-report.tsx    |  2 +-
 src/shared/components/post/post.tsx           | 70 +++++++++----------
 .../create-private-message.tsx                |  4 +-
 .../private_message/private-message-form.tsx  |  2 +-
 .../private-message-report.tsx                |  2 +-
 .../private_message/private-message.tsx       |  4 +-
 src/shared/components/search.tsx              |  4 +-
 src/shared/markdown.ts                        | 16 ++---
 src/shared/utils/app/new-vote.ts              |  6 +-
 src/shared/utils/app/selectable-languages.ts  |  4 +-
 src/shared/utils/app/set-theme.ts             |  2 +-
 src/shared/utils/env/get-external-host.ts     |  2 +-
 .../utils/helpers/get-random-from-list.ts     |  2 +-
 .../utils/roles/am-community-creator.ts       |  2 +-
 src/shared/utils/roles/am-site-creator.ts     |  2 +-
 src/shared/utils/roles/am-top-mod.ts          |  2 +-
 src/shared/utils/roles/can-mod.ts             |  4 +-
 53 files changed, 237 insertions(+), 236 deletions(-)

diff --git a/.eslintrc.json b/.eslintrc.json
index ad77740..ea26ba3 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -20,10 +20,11 @@
     "@typescript-eslint/no-explicit-any": 0,
     "@typescript-eslint/explicit-module-boundary-types": 0,
     "@typescript-eslint/no-empty-function": 0,
+    "@typescript-eslint/no-non-null-assertion": 0,
     "arrow-body-style": 0,
     "curly": 0,
     "eol-last": 0,
-    "eqeqeq": 0,
+    "eqeqeq": "error",
     "func-style": 0,
     "import/no-duplicates": 0,
     "max-statements": 0,
@@ -39,7 +40,7 @@
     "no-useless-constructor": 0,
     "no-useless-escape": 0,
     "no-var": 0,
-    "prefer-const": 1,
+    "prefer-const": "error",
     "prefer-rest-params": 0,
     "prettier/prettier": "error",
     "quote-props": 0,
diff --git a/src/server/handlers/catch-all-handler.tsx b/src/server/handlers/catch-all-handler.tsx
index 06d38f3..a40136b 100644
--- a/src/server/handlers/catch-all-handler.tsx
+++ b/src/server/handlers/catch-all-handler.tsx
@@ -48,7 +48,7 @@ export default async (req: Request, res: Response) => {
     let errorPageData: ErrorPageData | undefined = undefined;
     let try_site = await client.getSite(getSiteForm);
 
-    if (try_site.state === "failed" && try_site.msg == "not_logged_in") {
+    if (try_site.state === "failed" && try_site.msg === "not_logged_in") {
       console.error(
         "Incorrect JWT token, skipping auth so frontend can remove jwt cookie"
       );
diff --git a/src/shared/components/app/navbar.tsx b/src/shared/components/app/navbar.tsx
index 5c01718..10b465d 100644
--- a/src/shared/components/app/navbar.tsx
+++ b/src/shared/components/app/navbar.tsx
@@ -480,7 +480,7 @@ export class Navbar extends Component<NavbarProps, NavbarState> {
   }
 
   get unreadInboxCount(): number {
-    if (this.state.unreadInboxCountRes.state == "success") {
+    if (this.state.unreadInboxCountRes.state === "success") {
       const data = this.state.unreadInboxCountRes.data;
       return data.replies + data.mentions + data.private_messages;
     } else {
@@ -489,7 +489,7 @@ export class Navbar extends Component<NavbarProps, NavbarState> {
   }
 
   get unreadReportCount(): number {
-    if (this.state.unreadReportCountRes.state == "success") {
+    if (this.state.unreadReportCountRes.state === "success") {
       const data = this.state.unreadReportCountRes.data;
       return (
         data.post_reports +
@@ -502,7 +502,7 @@ export class Navbar extends Component<NavbarProps, NavbarState> {
   }
 
   get unreadApplicationCount(): number {
-    if (this.state.unreadApplicationCountRes.state == "success") {
+    if (this.state.unreadApplicationCountRes.state === "success") {
       const data = this.state.unreadApplicationCountRes.data;
       return data.registration_applications;
     } else {
diff --git a/src/shared/components/app/theme.tsx b/src/shared/components/app/theme.tsx
index 93f6aed..07c4f8c 100644
--- a/src/shared/components/app/theme.tsx
+++ b/src/shared/components/app/theme.tsx
@@ -22,8 +22,8 @@ export class Theme extends Component<Props> {
         </Helmet>
       );
     } else if (
-      this.props.defaultTheme != "browser" &&
-      this.props.defaultTheme != "browser-compact"
+      this.props.defaultTheme !== "browser" &&
+      this.props.defaultTheme !== "browser-compact"
     ) {
       return (
         <Helmet>
@@ -34,7 +34,7 @@ export class Theme extends Component<Props> {
           />
         </Helmet>
       );
-    } else if (this.props.defaultTheme == "browser-compact") {
+    } else if (this.props.defaultTheme === "browser-compact") {
       return (
         <Helmet>
           <link
diff --git a/src/shared/components/comment/comment-node.tsx b/src/shared/components/comment/comment-node.tsx
index 2576cda..bbbd820 100644
--- a/src/shared/components/comment/comment-node.tsx
+++ b/src/shared/components/comment/comment-node.tsx
@@ -243,7 +243,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
     const cv = this.commentView;
 
     const purgeTypeText =
-      this.state.purgeType == PurgeType.Comment
+      this.state.purgeType === PurgeType.Comment
         ? I18NextService.i18n.t("purge_comment")
         : `${I18NextService.i18n.t("purge")} ${cv.creator.name}`;
 
@@ -278,9 +278,9 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
       : colorList[0];
 
     const showMoreChildren =
-      this.props.viewType == CommentViewType.Tree &&
+      this.props.viewType === CommentViewType.Tree &&
       !this.state.collapsed &&
-      node.children.length == 0 &&
+      node.children.length === 0 &&
       node.comment_view.counts.child_count > 0;
 
     return (
@@ -1210,19 +1210,19 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
 
   get myComment(): boolean {
     return (
-      UserService.Instance.myUserInfo?.local_user_view.person.id ==
+      UserService.Instance.myUserInfo?.local_user_view.person.id ===
       this.commentView.creator.id
     );
   }
 
   get isPostCreator(): boolean {
-    return this.commentView.creator.id == this.commentView.post.creator_id;
+    return this.commentView.creator.id === this.commentView.post.creator_id;
   }
 
   get scoreColor() {
-    if (this.commentView.my_vote == 1) {
+    if (this.commentView.my_vote === 1) {
       return "text-info";
-    } else if (this.commentView.my_vote == -1) {
+    } else if (this.commentView.my_vote === -1) {
       return "text-danger";
     } else {
       return "text-muted";
@@ -1499,7 +1499,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
 
   handleModBanBothSubmit(i: CommentNode, event: any) {
     event.preventDefault();
-    if (i.state.banType == BanType.Community) {
+    if (i.state.banType === BanType.Community) {
       i.handleBanPersonFromCommunity(i);
     } else {
       i.handleBanPerson(i);
@@ -1552,7 +1552,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
     event.preventDefault();
     i.setState({ purgeLoading: true });
 
-    if (i.state.purgeType == PurgeType.Person) {
+    if (i.state.purgeType === PurgeType.Person) {
       i.props.onPurgePerson({
         person_id: i.commentView.creator.id,
         reason: i.state.purgeReason,
diff --git a/src/shared/components/comment/comment-report.tsx b/src/shared/components/comment/comment-report.tsx
index 3b328f6..473481b 100644
--- a/src/shared/components/comment/comment-report.tsx
+++ b/src/shared/components/comment/comment-report.tsx
@@ -35,7 +35,7 @@ export class CommentReport extends Component<
   componentWillReceiveProps(
     nextProps: Readonly<{ children?: InfernoNode } & CommentReportProps>
   ): void {
-    if (this.props != nextProps) {
+    if (this.props !== nextProps) {
       this.setState({ loading: false });
     }
   }
diff --git a/src/shared/components/common/markdown-textarea.tsx b/src/shared/components/common/markdown-textarea.tsx
index c6b42d7..1404bdb 100644
--- a/src/shared/components/common/markdown-textarea.tsx
+++ b/src/shared/components/common/markdown-textarea.tsx
@@ -360,7 +360,7 @@ export class MarkdownTextArea extends Component<
 
   handleEmoji(i: MarkdownTextArea, e: any) {
     let value = e.native;
-    if (value == null) {
+    if (value === null) {
       const emoji = customEmojisLookup.get(e.id)?.custom_emoji;
       if (emoji) {
         value = `![${emoji.alt_text}](${emoji.image_url} "${emoji.shortcode}")`;
diff --git a/src/shared/components/common/paginator.tsx b/src/shared/components/common/paginator.tsx
index bd4ecf8..ed0ed21 100644
--- a/src/shared/components/common/paginator.tsx
+++ b/src/shared/components/common/paginator.tsx
@@ -15,7 +15,7 @@ export class Paginator extends Component<PaginatorProps, any> {
       <div className="paginator my-2">
         <button
           className="btn btn-secondary me-2"
-          disabled={this.props.page == 1}
+          disabled={this.props.page === 1}
           onClick={linkEvent(this, this.handlePrev)}
         >
           {I18NextService.i18n.t("prev")}
diff --git a/src/shared/components/common/password-input.tsx b/src/shared/components/common/password-input.tsx
index 47005a0..3949686 100644
--- a/src/shared/components/common/password-input.tsx
+++ b/src/shared/components/common/password-input.tsx
@@ -146,7 +146,7 @@ class PasswordInput extends Component<PasswordInputProps, PasswordInputState> {
 
     if (strength && ["weak", "medium"].includes(strength)) {
       return "text-warning";
-    } else if (strength == "strong") {
+    } else if (strength === "strong") {
       return "text-success";
     } else {
       return "text-danger";
diff --git a/src/shared/components/common/pictrs-image.tsx b/src/shared/components/common/pictrs-image.tsx
index 5c3d823..f128512 100644
--- a/src/shared/components/common/pictrs-image.tsx
+++ b/src/shared/components/common/pictrs-image.tsx
@@ -56,7 +56,7 @@ export class PictrsImage extends Component<PictrsImageProps, any> {
     const split = this.props.src.split("/pictrs/image/");
 
     // If theres not multiple, then its not a pictrs image
-    if (split.length == 1) {
+    if (split.length === 1) {
       return this.props.src;
     }
 
diff --git a/src/shared/components/common/registration-application.tsx b/src/shared/components/common/registration-application.tsx
index 3857c49..58ae57d 100644
--- a/src/shared/components/common/registration-application.tsx
+++ b/src/shared/components/common/registration-application.tsx
@@ -44,7 +44,7 @@ export class RegistrationApplication extends Component<
       { children?: InfernoNode } & RegistrationApplicationProps
     >
   ): void {
-    if (this.props != nextProps) {
+    if (this.props !== nextProps) {
       this.setState({
         denyExpanded: false,
         approveLoading: false,
diff --git a/src/shared/components/common/vote-buttons.tsx b/src/shared/components/common/vote-buttons.tsx
index 0664e76..8a89a2c 100644
--- a/src/shared/components/common/vote-buttons.tsx
+++ b/src/shared/components/common/vote-buttons.tsx
@@ -193,7 +193,7 @@ export class VoteButtons extends Component<VoteButtonsProps, VoteButtonsState> {
         <button
           type="button"
           className={`btn-animate btn btn-link p-0 ${
-            this.props.my_vote == 1 ? "text-info" : "text-muted"
+            this.props.my_vote === 1 ? "text-info" : "text-muted"
           }`}
           onClick={linkEvent(this, handleUpvote)}
           data-tippy-content={I18NextService.i18n.t("upvote")}
@@ -220,7 +220,7 @@ export class VoteButtons extends Component<VoteButtonsProps, VoteButtonsState> {
           <button
             type="button"
             className={`btn-animate btn btn-link p-0 ${
-              this.props.my_vote == -1 ? "text-danger" : "text-muted"
+              this.props.my_vote === -1 ? "text-danger" : "text-muted"
             }`}
             onClick={linkEvent(this, handleDownvote)}
             data-tippy-content={I18NextService.i18n.t("downvote")}
diff --git a/src/shared/components/community/communities.tsx b/src/shared/components/community/communities.tsx
index 4ab1bfe..966b6c9 100644
--- a/src/shared/components/community/communities.tsx
+++ b/src/shared/components/community/communities.tsx
@@ -172,7 +172,7 @@ export class Communities extends Component<any, CommunitiesState> {
                           {numToSI(cv.counts.comments)}
                         </td>
                         <td className="text-right">
-                          {cv.subscribed == "Subscribed" && (
+                          {cv.subscribed === "Subscribed" && (
                             <button
                               className="btn btn-link d-inline-block"
                               onClick={linkEvent(
@@ -369,8 +369,8 @@ export class Communities extends Component<any, CommunitiesState> {
   findAndUpdateCommunity(res: RequestState<CommunityResponse>) {
     this.setState(s => {
       if (
-        s.listCommunitiesResponse.state == "success" &&
-        res.state == "success"
+        s.listCommunitiesResponse.state === "success" &&
+        res.state === "success"
       ) {
         s.listCommunitiesResponse.data.communities = editCommunity(
           res.data.community_view,
diff --git a/src/shared/components/community/community-link.tsx b/src/shared/components/community/community-link.tsx
index 9583333..77accf6 100644
--- a/src/shared/components/community/community-link.tsx
+++ b/src/shared/components/community/community-link.tsx
@@ -22,7 +22,7 @@ export class CommunityLink extends Component<CommunityLinkProps, any> {
   render() {
     const community = this.props.community;
     let name_: string, title: string, link: string;
-    const local = community.local == null ? true : community.local;
+    const local = community.local === null ? true : community.local;
     if (local) {
       name_ = community.name;
       title = community.title;
diff --git a/src/shared/components/community/community.tsx b/src/shared/components/community/community.tsx
index f89eb83..7df6985 100644
--- a/src/shared/components/community/community.tsx
+++ b/src/shared/components/community/community.tsx
@@ -290,7 +290,7 @@ export class Community extends Component<
 
   get documentTitle(): string {
     const cRes = this.state.communityRes;
-    return cRes.state == "success"
+    return cRes.state === "success"
       ? `${cRes.data.community_view.community.title} - ${this.isoData.site_res.site_view.site.name}`
       : "";
   }
@@ -626,11 +626,11 @@ export class Community extends Component<
     this.updateCommunity(followCommunityRes);
 
     // Update myUserInfo
-    if (followCommunityRes.state == "success") {
+    if (followCommunityRes.state === "success") {
       const communityId = followCommunityRes.data.community_view.community.id;
       const mui = UserService.Instance.myUserInfo;
       if (mui) {
-        mui.follows = mui.follows.filter(i => i.community.id != communityId);
+        mui.follows = mui.follows.filter(i => i.community.id !== communityId);
       }
     }
   }
@@ -657,10 +657,10 @@ export class Community extends Component<
 
   async handleBlockCommunity(form: BlockCommunity) {
     const blockCommunityRes = await HttpService.client.blockCommunity(form);
-    if (blockCommunityRes.state == "success") {
+    if (blockCommunityRes.state === "success") {
       updateCommunityBlock(blockCommunityRes.data);
       this.setState(s => {
-        if (s.communityRes.state == "success") {
+        if (s.communityRes.state === "success") {
           s.communityRes.data.community_view.blocked =
             blockCommunityRes.data.blocked;
         }
@@ -670,7 +670,7 @@ export class Community extends Component<
 
   async handleBlockPerson(form: BlockPerson) {
     const blockPersonRes = await HttpService.client.blockPerson(form);
-    if (blockPersonRes.state == "success") {
+    if (blockPersonRes.state === "success") {
       updatePersonBlock(blockPersonRes.data);
     }
   }
@@ -753,14 +753,14 @@ export class Community extends Component<
 
   async handleCommentReport(form: CreateCommentReport) {
     const reportRes = await HttpService.client.createCommentReport(form);
-    if (reportRes.state == "success") {
+    if (reportRes.state === "success") {
       toast(I18NextService.i18n.t("report_created"));
     }
   }
 
   async handlePostReport(form: CreatePostReport) {
     const reportRes = await HttpService.client.createPostReport(form);
-    if (reportRes.state == "success") {
+    if (reportRes.state === "success") {
       toast(I18NextService.i18n.t("report_created"));
     }
   }
@@ -778,7 +778,7 @@ export class Community extends Component<
   async handleAddAdmin(form: AddAdmin) {
     const addAdminRes = await HttpService.client.addAdmin(form);
 
-    if (addAdminRes.state == "success") {
+    if (addAdminRes.state === "success") {
       this.setState(s => ((s.siteRes.admins = addAdminRes.data.admins), s));
     }
   }
@@ -813,18 +813,18 @@ export class Community extends Component<
 
   updateBanFromCommunity(banRes: RequestState<BanFromCommunityResponse>) {
     // Maybe not necessary
-    if (banRes.state == "success") {
+    if (banRes.state === "success") {
       this.setState(s => {
-        if (s.postsRes.state == "success") {
+        if (s.postsRes.state === "success") {
           s.postsRes.data.posts
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(
               c => (c.creator_banned_from_community = banRes.data.banned)
             );
         }
-        if (s.commentsRes.state == "success") {
+        if (s.commentsRes.state === "success") {
           s.commentsRes.data.comments
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(
               c => (c.creator_banned_from_community = banRes.data.banned)
             );
@@ -836,16 +836,16 @@ export class Community extends Component<
 
   updateBan(banRes: RequestState<BanPersonResponse>) {
     // Maybe not necessary
-    if (banRes.state == "success") {
+    if (banRes.state === "success") {
       this.setState(s => {
-        if (s.postsRes.state == "success") {
+        if (s.postsRes.state === "success") {
           s.postsRes.data.posts
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(c => (c.creator.banned = banRes.data.banned));
         }
-        if (s.commentsRes.state == "success") {
+        if (s.commentsRes.state === "success") {
           s.commentsRes.data.comments
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(c => (c.creator.banned = banRes.data.banned));
         }
         return s;
@@ -855,7 +855,7 @@ export class Community extends Component<
 
   updateCommunity(res: RequestState<CommunityResponse>) {
     this.setState(s => {
-      if (s.communityRes.state == "success" && res.state == "success") {
+      if (s.communityRes.state === "success" && res.state === "success") {
         s.communityRes.data.community_view = res.data.community_view;
         s.communityRes.data.discussion_languages =
           res.data.discussion_languages;
@@ -866,7 +866,7 @@ export class Community extends Component<
 
   updateCommunityFull(res: RequestState<GetCommunityResponse>) {
     this.setState(s => {
-      if (s.communityRes.state == "success" && res.state == "success") {
+      if (s.communityRes.state === "success" && res.state === "success") {
         s.communityRes.data.community_view = res.data.community_view;
         s.communityRes.data.moderators = res.data.moderators;
       }
@@ -875,7 +875,7 @@ export class Community extends Component<
   }
 
   purgeItem(purgeRes: RequestState<PurgeItemResponse>) {
-    if (purgeRes.state == "success") {
+    if (purgeRes.state === "success") {
       toast(I18NextService.i18n.t("purge_success"));
       this.context.router.history.push(`/`);
     }
@@ -883,7 +883,7 @@ export class Community extends Component<
 
   findAndUpdateComment(res: RequestState<CommentResponse>) {
     this.setState(s => {
-      if (s.commentsRes.state == "success" && res.state == "success") {
+      if (s.commentsRes.state === "success" && res.state === "success") {
         s.commentsRes.data.comments = editComment(
           res.data.comment_view,
           s.commentsRes.data.comments
@@ -896,7 +896,7 @@ export class Community extends Component<
 
   createAndUpdateComments(res: RequestState<CommentResponse>) {
     this.setState(s => {
-      if (s.commentsRes.state == "success" && res.state == "success") {
+      if (s.commentsRes.state === "success" && res.state === "success") {
         s.commentsRes.data.comments.unshift(res.data.comment_view);
 
         // Set finished for the parent
@@ -911,7 +911,7 @@ export class Community extends Component<
 
   findAndUpdateCommentReply(res: RequestState<CommentReplyResponse>) {
     this.setState(s => {
-      if (s.commentsRes.state == "success" && res.state == "success") {
+      if (s.commentsRes.state === "success" && res.state === "success") {
         s.commentsRes.data.comments = editWith(
           res.data.comment_reply_view,
           s.commentsRes.data.comments
@@ -923,7 +923,7 @@ export class Community extends Component<
 
   findAndUpdatePost(res: RequestState<PostResponse>) {
     this.setState(s => {
-      if (s.postsRes.state == "success" && res.state == "success") {
+      if (s.postsRes.state === "success" && res.state === "success") {
         s.postsRes.data.posts = editPost(
           res.data.post_view,
           s.postsRes.data.posts
@@ -936,7 +936,7 @@ export class Community extends Component<
   updateModerators(res: RequestState<AddModToCommunityResponse>) {
     // Update the moderators
     this.setState(s => {
-      if (s.communityRes.state == "success" && res.state == "success") {
+      if (s.communityRes.state === "success" && res.state === "success") {
         s.communityRes.data.moderators = res.data.moderators;
       }
       return s;
diff --git a/src/shared/components/community/sidebar.tsx b/src/shared/components/community/sidebar.tsx
index ec454de..ace58f9 100644
--- a/src/shared/components/community/sidebar.tsx
+++ b/src/shared/components/community/sidebar.tsx
@@ -81,13 +81,13 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
   componentWillReceiveProps(
     nextProps: Readonly<{ children?: InfernoNode } & SidebarProps>
   ): void {
-    if (this.props.moderators != nextProps.moderators) {
+    if (this.props.moderators !== nextProps.moderators) {
       this.setState({
         showConfirmLeaveModTeam: false,
       });
     }
 
-    if (this.props.community_view != nextProps.community_view) {
+    if (this.props.community_view !== nextProps.community_view) {
       this.setState({
         showEdit: false,
         showPurgeDialog: false,
diff --git a/src/shared/components/home/admin-settings.tsx b/src/shared/components/home/admin-settings.tsx
index b56dc42..d3c998d 100644
--- a/src/shared/components/home/admin-settings.tsx
+++ b/src/shared/components/home/admin-settings.tsx
@@ -274,7 +274,7 @@ export class AdminSettings extends Component<any, AdminSettingsState> {
         onClick={linkEvent(this, this.handleLeaveAdminTeam)}
         className="btn btn-danger mb-2"
       >
-        {this.state.leaveAdminTeamRes.state == "loading" ? (
+        {this.state.leaveAdminTeamRes.state === "loading" ? (
           <Spinner />
         ) : (
           I18NextService.i18n.t("leave_admin_team")
diff --git a/src/shared/components/home/emojis-form.tsx b/src/shared/components/home/emojis-form.tsx
index cd20ed6..9e65adf 100644
--- a/src/shared/components/home/emojis-form.tsx
+++ b/src/shared/components/home/emojis-form.tsx
@@ -290,8 +290,8 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
       cv.shortcode.length > 0;
     const noDuplicateShortCodes =
       this.state.customEmojis.filter(
-        x => x.shortcode == cv.shortcode && x.id != cv.id
-      ).length == 0;
+        x => x.shortcode === cv.shortcode && x.id !== cv.id
+      ).length === 0;
     return noEmptyFields && noDuplicateShortCodes && !cv.loading && cv.changed;
   }
 
@@ -308,7 +308,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
     const view = customEmojisLookup.get(e.id);
     if (view) {
       const page = this.state.customEmojis.find(
-        x => x.id == view.custom_emoji.id
+        x => x.id === view.custom_emoji.id
       )?.page;
       if (page) {
         this.setState({ page: page });
@@ -420,7 +420,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
     cv: CustomEmojiViewForm;
   }) {
     const pagedIndex = (d.i.state.page - 1) * d.i.itemsPerPage + d.index;
-    if (d.cv.id != 0) {
+    if (d.cv.id !== 0) {
       d.i.props.onDelete({
         id: d.cv.id,
         auth: myAuthRequired(),
diff --git a/src/shared/components/home/home.tsx b/src/shared/components/home/home.tsx
index 5d949f3..a7564d4 100644
--- a/src/shared/components/home/home.tsx
+++ b/src/shared/components/home/home.tsx
@@ -900,7 +900,7 @@ export class Home extends Component<any, HomeState> {
 
   async handleBlockPerson(form: BlockPerson) {
     const blockPersonRes = await HttpService.client.blockPerson(form);
-    if (blockPersonRes.state == "success") {
+    if (blockPersonRes.state === "success") {
       updatePersonBlock(blockPersonRes.data);
     }
   }
@@ -971,14 +971,14 @@ export class Home extends Component<any, HomeState> {
 
   async handleCommentReport(form: CreateCommentReport) {
     const reportRes = await HttpService.client.createCommentReport(form);
-    if (reportRes.state == "success") {
+    if (reportRes.state === "success") {
       toast(I18NextService.i18n.t("report_created"));
     }
   }
 
   async handlePostReport(form: CreatePostReport) {
     const reportRes = await HttpService.client.createPostReport(form);
-    if (reportRes.state == "success") {
+    if (reportRes.state === "success") {
       toast(I18NextService.i18n.t("report_created"));
     }
   }
@@ -996,7 +996,7 @@ export class Home extends Component<any, HomeState> {
   async handleAddAdmin(form: AddAdmin) {
     const addAdminRes = await HttpService.client.addAdmin(form);
 
-    if (addAdminRes.state == "success") {
+    if (addAdminRes.state === "success") {
       this.setState(s => ((s.siteRes.admins = addAdminRes.data.admins), s));
     }
   }
@@ -1028,18 +1028,18 @@ export class Home extends Component<any, HomeState> {
 
   updateBanFromCommunity(banRes: RequestState<BanFromCommunityResponse>) {
     // Maybe not necessary
-    if (banRes.state == "success") {
+    if (banRes.state === "success") {
       this.setState(s => {
-        if (s.postsRes.state == "success") {
+        if (s.postsRes.state === "success") {
           s.postsRes.data.posts
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(
               c => (c.creator_banned_from_community = banRes.data.banned)
             );
         }
-        if (s.commentsRes.state == "success") {
+        if (s.commentsRes.state === "success") {
           s.commentsRes.data.comments
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(
               c => (c.creator_banned_from_community = banRes.data.banned)
             );
@@ -1051,16 +1051,16 @@ export class Home extends Component<any, HomeState> {
 
   updateBan(banRes: RequestState<BanPersonResponse>) {
     // Maybe not necessary
-    if (banRes.state == "success") {
+    if (banRes.state === "success") {
       this.setState(s => {
-        if (s.postsRes.state == "success") {
+        if (s.postsRes.state === "success") {
           s.postsRes.data.posts
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(c => (c.creator.banned = banRes.data.banned));
         }
-        if (s.commentsRes.state == "success") {
+        if (s.commentsRes.state === "success") {
           s.commentsRes.data.comments
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(c => (c.creator.banned = banRes.data.banned));
         }
         return s;
@@ -1069,7 +1069,7 @@ export class Home extends Component<any, HomeState> {
   }
 
   purgeItem(purgeRes: RequestState<PurgeItemResponse>) {
-    if (purgeRes.state == "success") {
+    if (purgeRes.state === "success") {
       toast(I18NextService.i18n.t("purge_success"));
       this.context.router.history.push(`/`);
     }
@@ -1077,7 +1077,7 @@ export class Home extends Component<any, HomeState> {
 
   findAndUpdateComment(res: RequestState<CommentResponse>) {
     this.setState(s => {
-      if (s.commentsRes.state == "success" && res.state == "success") {
+      if (s.commentsRes.state === "success" && res.state === "success") {
         s.commentsRes.data.comments = editComment(
           res.data.comment_view,
           s.commentsRes.data.comments
@@ -1090,7 +1090,7 @@ export class Home extends Component<any, HomeState> {
 
   createAndUpdateComments(res: RequestState<CommentResponse>) {
     this.setState(s => {
-      if (s.commentsRes.state == "success" && res.state == "success") {
+      if (s.commentsRes.state === "success" && res.state === "success") {
         s.commentsRes.data.comments.unshift(res.data.comment_view);
 
         // Set finished for the parent
@@ -1105,7 +1105,7 @@ export class Home extends Component<any, HomeState> {
 
   findAndUpdateCommentReply(res: RequestState<CommentReplyResponse>) {
     this.setState(s => {
-      if (s.commentsRes.state == "success" && res.state == "success") {
+      if (s.commentsRes.state === "success" && res.state === "success") {
         s.commentsRes.data.comments = editWith(
           res.data.comment_reply_view,
           s.commentsRes.data.comments
@@ -1117,7 +1117,7 @@ export class Home extends Component<any, HomeState> {
 
   findAndUpdatePost(res: RequestState<PostResponse>) {
     this.setState(s => {
-      if (s.postsRes.state == "success" && res.state == "success") {
+      if (s.postsRes.state === "success" && res.state === "success") {
         s.postsRes.data.posts = editPost(
           res.data.post_view,
           s.postsRes.data.posts
diff --git a/src/shared/components/home/login-reset.tsx b/src/shared/components/home/login-reset.tsx
index 7d1d002..aeca845 100644
--- a/src/shared/components/home/login-reset.tsx
+++ b/src/shared/components/home/login-reset.tsx
@@ -127,7 +127,7 @@ export class LoginReset extends Component<any, State> {
 
       const res = await HttpService.client.passwordReset({ email });
 
-      if (res.state == "success") {
+      if (res.state === "success") {
         toast(I18NextService.i18n.t("reset_password_mail_sent"));
         i.context.router.history.push("/login");
       }
diff --git a/src/shared/components/home/login.tsx b/src/shared/components/home/login.tsx
index 828cbb5..ad5afca 100644
--- a/src/shared/components/home/login.tsx
+++ b/src/shared/components/home/login.tsx
@@ -48,7 +48,7 @@ export class Login extends Component<any, State> {
   }
 
   get isLemmyMl(): boolean {
-    return isBrowser() && window.location.hostname == "lemmy.ml";
+    return isBrowser() && window.location.hostname === "lemmy.ml";
   }
 
   render() {
@@ -124,7 +124,7 @@ export class Login extends Component<any, State> {
           <div className="mb-3 row">
             <div className="col-sm-10">
               <button type="submit" className="btn btn-secondary">
-                {this.state.loginRes.state == "loading" ? (
+                {this.state.loginRes.state === "loading" ? (
                   <Spinner />
                 ) : (
                   I18NextService.i18n.t("login")
diff --git a/src/shared/components/home/setup.tsx b/src/shared/components/home/setup.tsx
index 7b3d4c2..7dd433a 100644
--- a/src/shared/components/home/setup.tsx
+++ b/src/shared/components/home/setup.tsx
@@ -141,7 +141,7 @@ export class Setup extends Component<any, State> {
         <div className="mb-3 row">
           <div className="col-sm-10">
             <button type="submit" className="btn btn-secondary">
-              {this.state.registerRes.state == "loading" ? (
+              {this.state.registerRes.state === "loading" ? (
                 <Spinner />
               ) : (
                 I18NextService.i18n.t("sign_up")
@@ -184,7 +184,7 @@ export class Setup extends Component<any, State> {
         registerRes: await HttpService.client.register(form),
       });
 
-      if (i.state.registerRes.state == "success") {
+      if (i.state.registerRes.state === "success") {
         const data = i.state.registerRes.data;
 
         UserService.Instance.login({ res: data });
diff --git a/src/shared/components/home/signup.tsx b/src/shared/components/home/signup.tsx
index c57d545..b6f7233 100644
--- a/src/shared/components/home/signup.tsx
+++ b/src/shared/components/home/signup.tsx
@@ -71,7 +71,7 @@ export class Signup extends Component<any, State> {
     });
 
     this.setState(s => {
-      if (s.captchaRes.state == "success") {
+      if (s.captchaRes.state === "success") {
         s.form.captcha_uuid = s.captchaRes.data.ok?.uuid;
       }
       return s;
@@ -90,7 +90,7 @@ export class Signup extends Component<any, State> {
   }
 
   get isLemmyMl(): boolean {
-    return isBrowser() && window.location.hostname == "lemmy.ml";
+    return isBrowser() && window.location.hostname === "lemmy.ml";
   }
 
   render() {
@@ -269,7 +269,7 @@ export class Signup extends Component<any, State> {
         <div className="mb-3 row">
           <div className="col-sm-10">
             <button type="submit" className="btn btn-secondary">
-              {this.state.registerRes.state == "loading" ? (
+              {this.state.registerRes.state === "loading" ? (
                 <Spinner />
               ) : (
                 this.titleName(siteView)
@@ -424,7 +424,7 @@ export class Signup extends Component<any, State> {
 
   handleRegisterEmailChange(i: Signup, event: any) {
     i.state.form.email = event.target.value;
-    if (i.state.form.email == "") {
+    if (i.state.form.email === "") {
       i.state.form.email = undefined;
     }
     i.setState(i.state);
@@ -469,7 +469,7 @@ export class Signup extends Component<any, State> {
     // This was a bad bug, it should only build the new audio on a new file.
     // Replays would stop prematurely if this was rebuilt every time.
 
-    if (i.state.captchaRes.state == "success" && i.state.captchaRes.data.ok) {
+    if (i.state.captchaRes.state === "success" && i.state.captchaRes.data.ok) {
       const captchaRes = i.state.captchaRes.data.ok;
       if (!i.audio) {
         const base64 = `data:audio/wav;base64,${captchaRes.wav}`;
diff --git a/src/shared/components/home/site-form.tsx b/src/shared/components/home/site-form.tsx
index 25e02c8..da44718 100644
--- a/src/shared/components/home/site-form.tsx
+++ b/src/shared/components/home/site-form.tsx
@@ -293,7 +293,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
             </select>
           </div>
         </div>
-        {this.state.siteForm.registration_mode == "RequireApplication" && (
+        {this.state.siteForm.registration_mode === "RequireApplication" && (
           <div className="mb-3 row">
             <label className="col-12 col-form-label">
               {I18NextService.i18n.t("application_questionnaire")}
diff --git a/src/shared/components/home/tagline-form.tsx b/src/shared/components/home/tagline-form.tsx
index c933ffe..4059003 100644
--- a/src/shared/components/home/tagline-form.tsx
+++ b/src/shared/components/home/tagline-form.tsx
@@ -48,7 +48,7 @@ export class TaglineForm extends Component<TaglineFormProps, TaglineFormState> {
               {this.state.taglines.map((cv, index) => (
                 <tr key={index}>
                   <td>
-                    {this.state.editingRow == index && (
+                    {this.state.editingRow === index && (
                       <MarkdownTextArea
                         initialContent={cv}
                         onContentChange={s =>
@@ -59,7 +59,7 @@ export class TaglineForm extends Component<TaglineFormProps, TaglineFormState> {
                         siteLanguages={[]}
                       />
                     )}
-                    {this.state.editingRow != index && <div>{cv}</div>}
+                    {this.state.editingRow !== index && <div>{cv}</div>}
                   </td>
                   <td className="text-right">
                     <button
@@ -141,7 +141,7 @@ export class TaglineForm extends Component<TaglineFormProps, TaglineFormState> {
 
   handleEditTaglineClick(d: { i: TaglineForm; index: number }, event: any) {
     event.preventDefault();
-    if (d.i.state.editingRow == d.index) {
+    if (d.i.state.editingRow === d.index) {
       d.i.setState({ editingRow: undefined });
     } else {
       d.i.setState({ editingRow: d.index });
diff --git a/src/shared/components/modlog.tsx b/src/shared/components/modlog.tsx
index ca1cb33..b91da87 100644
--- a/src/shared/components/modlog.tsx
+++ b/src/shared/components/modlog.tsx
@@ -698,7 +698,7 @@ export class Modlog extends Component<
 
   get combined() {
     const res = this.state.res;
-    const combined = res.state == "success" ? buildCombined(res.data) : [];
+    const combined = res.state === "success" ? buildCombined(res.data) : [];
 
     return (
       <tbody>
@@ -723,7 +723,7 @@ export class Modlog extends Component<
 
   get amAdminOrMod(): boolean {
     const amMod_ =
-      this.state.communityRes.state == "success" &&
+      this.state.communityRes.state === "success" &&
       amMod(this.state.communityRes.data.moderators);
     return amAdmin() || amMod_;
   }
diff --git a/src/shared/components/person/inbox.tsx b/src/shared/components/person/inbox.tsx
index bf246f6..a76fdec 100644
--- a/src/shared/components/person/inbox.tsx
+++ b/src/shared/components/person/inbox.tsx
@@ -194,14 +194,14 @@ export class Inbox extends Component<any, InboxState> {
   }
 
   get hasUnreads(): boolean {
-    if (this.state.unreadOrAll == UnreadOrAll.Unread) {
+    if (this.state.unreadOrAll === UnreadOrAll.Unread) {
       const { repliesRes, mentionsRes, messagesRes } = this.state;
       const replyCount =
-        repliesRes.state == "success" ? repliesRes.data.replies.length : 0;
+        repliesRes.state === "success" ? repliesRes.data.replies.length : 0;
       const mentionCount =
-        mentionsRes.state == "success" ? mentionsRes.data.mentions.length : 0;
+        mentionsRes.state === "success" ? mentionsRes.data.mentions.length : 0;
       const messageCount =
-        messagesRes.state == "success"
+        messagesRes.state === "success"
           ? messagesRes.data.private_messages.length
           : 0;
 
@@ -242,7 +242,7 @@ export class Inbox extends Component<any, InboxState> {
                 className="btn btn-secondary mb-2 mb-sm-3"
                 onClick={linkEvent(this, this.handleMarkAllAsRead)}
               >
-                {this.state.markAllAsReadRes.state == "loading" ? (
+                {this.state.markAllAsReadRes.state === "loading" ? (
                   <Spinner />
                 ) : (
                   capitalizeFirstLetter(
@@ -445,15 +445,15 @@ export class Inbox extends Component<any, InboxState> {
 
   buildCombined(): ReplyType[] {
     const replies: ReplyType[] =
-      this.state.repliesRes.state == "success"
+      this.state.repliesRes.state === "success"
         ? this.state.repliesRes.data.replies.map(this.replyToReplyType)
         : [];
     const mentions: ReplyType[] =
-      this.state.mentionsRes.state == "success"
+      this.state.mentionsRes.state === "success"
         ? this.state.mentionsRes.data.mentions.map(this.mentionToReplyType)
         : [];
     const messages: ReplyType[] =
-      this.state.messagesRes.state == "success"
+      this.state.messagesRes.state === "success"
         ? this.state.messagesRes.data.private_messages.map(
             this.messageToReplyType
           )
@@ -559,9 +559,9 @@ export class Inbox extends Component<any, InboxState> {
 
   all() {
     if (
-      this.state.repliesRes.state == "loading" ||
-      this.state.mentionsRes.state == "loading" ||
-      this.state.messagesRes.state == "loading"
+      this.state.repliesRes.state === "loading" ||
+      this.state.mentionsRes.state === "loading" ||
+      this.state.messagesRes.state === "loading"
     ) {
       return (
         <h1 className="h4">
@@ -754,7 +754,7 @@ export class Inbox extends Component<any, InboxState> {
 
   async refetch() {
     const sort = this.state.sort;
-    const unread_only = this.state.unreadOrAll == UnreadOrAll.Unread;
+    const unread_only = this.state.unreadOrAll === UnreadOrAll.Unread;
     const page = this.state.page;
     const limit = fetchLimit;
     const auth = myAuthRequired();
@@ -806,7 +806,7 @@ export class Inbox extends Component<any, InboxState> {
       }),
     });
 
-    if (i.state.markAllAsReadRes.state == "success") {
+    if (i.state.markAllAsReadRes.state === "success") {
       i.setState({
         repliesRes: { state: "empty" },
         mentionsRes: { state: "empty" },
@@ -837,7 +837,7 @@ export class Inbox extends Component<any, InboxState> {
 
   async handleBlockPerson(form: BlockPerson) {
     const blockPersonRes = await HttpService.client.blockPerson(form);
-    if (blockPersonRes.state == "success") {
+    if (blockPersonRes.state === "success") {
       updatePersonBlock(blockPersonRes.data);
     }
   }
@@ -868,7 +868,7 @@ export class Inbox extends Component<any, InboxState> {
 
   async handleDeleteComment(form: DeleteComment) {
     const res = await HttpService.client.deleteComment(form);
-    if (res.state == "success") {
+    if (res.state === "success") {
       toast(I18NextService.i18n.t("deleted"));
       this.findAndUpdateComment(res);
     }
@@ -876,7 +876,7 @@ export class Inbox extends Component<any, InboxState> {
 
   async handleRemoveComment(form: RemoveComment) {
     const res = await HttpService.client.removeComment(form);
-    if (res.state == "success") {
+    if (res.state === "success") {
       toast(I18NextService.i18n.t("remove_comment"));
       this.findAndUpdateComment(res);
     }
@@ -958,7 +958,7 @@ export class Inbox extends Component<any, InboxState> {
   async handleCreateMessage(form: CreatePrivateMessage) {
     const res = await HttpService.client.createPrivateMessage(form);
     this.setState(s => {
-      if (s.messagesRes.state == "success" && res.state == "success") {
+      if (s.messagesRes.state === "success" && res.state === "success") {
         s.messagesRes.data.private_messages.unshift(
           res.data.private_message_view
         );
@@ -982,18 +982,18 @@ export class Inbox extends Component<any, InboxState> {
 
   updateBanFromCommunity(banRes: RequestState<BanFromCommunityResponse>) {
     // Maybe not necessary
-    if (banRes.state == "success") {
+    if (banRes.state === "success") {
       this.setState(s => {
-        if (s.repliesRes.state == "success") {
+        if (s.repliesRes.state === "success") {
           s.repliesRes.data.replies
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(
               c => (c.creator_banned_from_community = banRes.data.banned)
             );
         }
-        if (s.mentionsRes.state == "success") {
+        if (s.mentionsRes.state === "success") {
           s.mentionsRes.data.mentions
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(
               c => (c.creator_banned_from_community = banRes.data.banned)
             );
@@ -1005,16 +1005,16 @@ export class Inbox extends Component<any, InboxState> {
 
   updateBan(banRes: RequestState<BanPersonResponse>) {
     // Maybe not necessary
-    if (banRes.state == "success") {
+    if (banRes.state === "success") {
       this.setState(s => {
-        if (s.repliesRes.state == "success") {
+        if (s.repliesRes.state === "success") {
           s.repliesRes.data.replies
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(c => (c.creator.banned = banRes.data.banned));
         }
-        if (s.mentionsRes.state == "success") {
+        if (s.mentionsRes.state === "success") {
           s.mentionsRes.data.mentions
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(c => (c.creator.banned = banRes.data.banned));
         }
         return s;
@@ -1023,7 +1023,7 @@ export class Inbox extends Component<any, InboxState> {
   }
 
   purgeItem(purgeRes: RequestState<PurgeItemResponse>) {
-    if (purgeRes.state == "success") {
+    if (purgeRes.state === "success") {
       toast(I18NextService.i18n.t("purge_success"));
       this.context.router.history.push(`/`);
     }
@@ -1032,22 +1032,22 @@ export class Inbox extends Component<any, InboxState> {
   reportToast(
     res: RequestState<PrivateMessageReportResponse | CommentReportResponse>
   ) {
-    if (res.state == "success") {
+    if (res.state === "success") {
       toast(I18NextService.i18n.t("report_created"));
     }
   }
 
   // A weird case, since you have only replies and mentions, not comment responses
   findAndUpdateComment(res: RequestState<CommentResponse>) {
-    if (res.state == "success") {
+    if (res.state === "success") {
       this.setState(s => {
-        if (s.repliesRes.state == "success") {
+        if (s.repliesRes.state === "success") {
           s.repliesRes.data.replies = editWith(
             res.data.comment_view,
             s.repliesRes.data.replies
           );
         }
-        if (s.mentionsRes.state == "success") {
+        if (s.mentionsRes.state === "success") {
           s.mentionsRes.data.mentions = editWith(
             res.data.comment_view,
             s.mentionsRes.data.mentions
@@ -1065,7 +1065,7 @@ export class Inbox extends Component<any, InboxState> {
 
   findAndUpdateCommentReply(res: RequestState<CommentReplyResponse>) {
     this.setState(s => {
-      if (s.repliesRes.state == "success" && res.state == "success") {
+      if (s.repliesRes.state === "success" && res.state === "success") {
         s.repliesRes.data.replies = editCommentReply(
           res.data.comment_reply_view,
           s.repliesRes.data.replies
@@ -1077,7 +1077,7 @@ export class Inbox extends Component<any, InboxState> {
 
   findAndUpdateMention(res: RequestState<PersonMentionResponse>) {
     this.setState(s => {
-      if (s.mentionsRes.state == "success" && res.state == "success") {
+      if (s.mentionsRes.state === "success" && res.state === "success") {
         s.mentionsRes.data.mentions = editMention(
           res.data.person_mention_view,
           s.mentionsRes.data.mentions
diff --git a/src/shared/components/person/password-change.tsx b/src/shared/components/person/password-change.tsx
index 1a60c96..bfbeb71 100644
--- a/src/shared/components/person/password-change.tsx
+++ b/src/shared/components/person/password-change.tsx
@@ -81,7 +81,7 @@ export class PasswordChange extends Component<any, State> {
         <div className="mb-3 row">
           <div className="col-sm-10">
             <button type="submit" className="btn btn-secondary">
-              {this.state.passwordChangeRes.state == "loading" ? (
+              {this.state.passwordChangeRes.state === "loading" ? (
                 <Spinner />
               ) : (
                 capitalizeFirstLetter(I18NextService.i18n.t("save"))
diff --git a/src/shared/components/person/profile.tsx b/src/shared/components/person/profile.tsx
index d493f78..9aaa3d3 100644
--- a/src/shared/components/person/profile.tsx
+++ b/src/shared/components/person/profile.tsx
@@ -300,7 +300,7 @@ export class Profile extends Component<
   get documentTitle(): string {
     const siteName = this.state.siteRes.site_view.site.name;
     const res = this.state.personRes;
-    return res.state == "success"
+    return res.state === "success"
       ? `@${res.data.person_view.person.name} - ${siteName}`
       : siteName;
   }
@@ -764,7 +764,7 @@ export class Profile extends Component<
 
     const personRes = i.state.personRes;
 
-    if (personRes.state == "success") {
+    if (personRes.state === "success") {
       const person = personRes.data.person_view.person;
       const ban = !person.banned;
 
@@ -793,7 +793,7 @@ export class Profile extends Component<
       block,
       auth: myAuthRequired(),
     });
-    if (res.state == "success") {
+    if (res.state === "success") {
       updatePersonBlock(res.data);
     }
   }
@@ -924,7 +924,7 @@ export class Profile extends Component<
   async handleAddAdmin(form: AddAdmin) {
     const addAdminRes = await HttpService.client.addAdmin(form);
 
-    if (addAdminRes.state == "success") {
+    if (addAdminRes.state === "success") {
       this.setState(s => ((s.siteRes.admins = addAdminRes.data.admins), s));
     }
   }
@@ -958,7 +958,7 @@ export class Profile extends Component<
     // Maybe not necessary
     if (banRes.state === "success") {
       this.setState(s => {
-        if (s.personRes.state == "success") {
+        if (s.personRes.state === "success") {
           s.personRes.data.posts
             .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(
@@ -978,14 +978,14 @@ export class Profile extends Component<
 
   updateBan(banRes: RequestState<BanPersonResponse>) {
     // Maybe not necessary
-    if (banRes.state == "success") {
+    if (banRes.state === "success") {
       this.setState(s => {
-        if (s.personRes.state == "success") {
+        if (s.personRes.state === "success") {
           s.personRes.data.posts
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(c => (c.creator.banned = banRes.data.banned));
           s.personRes.data.comments
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(c => (c.creator.banned = banRes.data.banned));
           s.personRes.data.person_view.person.banned = banRes.data.banned;
         }
@@ -995,7 +995,7 @@ export class Profile extends Component<
   }
 
   purgeItem(purgeRes: RequestState<PurgeItemResponse>) {
-    if (purgeRes.state == "success") {
+    if (purgeRes.state === "success") {
       toast(I18NextService.i18n.t("purge_success"));
       this.context.router.history.push(`/`);
     }
@@ -1003,7 +1003,7 @@ export class Profile extends Component<
 
   findAndUpdateComment(res: RequestState<CommentResponse>) {
     this.setState(s => {
-      if (s.personRes.state == "success" && res.state == "success") {
+      if (s.personRes.state === "success" && res.state === "success") {
         s.personRes.data.comments = editComment(
           res.data.comment_view,
           s.personRes.data.comments
@@ -1016,7 +1016,7 @@ export class Profile extends Component<
 
   createAndUpdateComments(res: RequestState<CommentResponse>) {
     this.setState(s => {
-      if (s.personRes.state == "success" && res.state == "success") {
+      if (s.personRes.state === "success" && res.state === "success") {
         s.personRes.data.comments.unshift(res.data.comment_view);
         // Set finished for the parent
         s.finished.set(
@@ -1030,7 +1030,7 @@ export class Profile extends Component<
 
   findAndUpdateCommentReply(res: RequestState<CommentReplyResponse>) {
     this.setState(s => {
-      if (s.personRes.state == "success" && res.state == "success") {
+      if (s.personRes.state === "success" && res.state === "success") {
         s.personRes.data.comments = editWith(
           res.data.comment_reply_view,
           s.personRes.data.comments
@@ -1042,7 +1042,7 @@ export class Profile extends Component<
 
   findAndUpdatePost(res: RequestState<PostResponse>) {
     this.setState(s => {
-      if (s.personRes.state == "success" && res.state == "success") {
+      if (s.personRes.state === "success" && res.state === "success") {
         s.personRes.data.posts = editPost(
           res.data.post_view,
           s.personRes.data.posts
diff --git a/src/shared/components/person/registration-applications.tsx b/src/shared/components/person/registration-applications.tsx
index 757170f..fbf5f46 100644
--- a/src/shared/components/person/registration-applications.tsx
+++ b/src/shared/components/person/registration-applications.tsx
@@ -220,7 +220,7 @@ export class RegistrationApplications extends Component<
   }
 
   async refetch() {
-    const unread_only = this.state.unreadOrAll == UnreadOrAll.Unread;
+    const unread_only = this.state.unreadOrAll === UnreadOrAll.Unread;
     this.setState({
       appsRes: { state: "loading" },
     });
@@ -239,7 +239,7 @@ export class RegistrationApplications extends Component<
       form
     );
     this.setState(s => {
-      if (s.appsRes.state == "success" && approveRes.state == "success") {
+      if (s.appsRes.state === "success" && approveRes.state === "success") {
         s.appsRes.data.registration_applications = editRegistrationApplication(
           approveRes.data.registration_application,
           s.appsRes.data.registration_applications
diff --git a/src/shared/components/person/reports.tsx b/src/shared/components/person/reports.tsx
index d298930..ba488f6 100644
--- a/src/shared/components/person/reports.tsx
+++ b/src/shared/components/person/reports.tsx
@@ -352,18 +352,18 @@ export class Reports extends Component<any, ReportsState> {
   get buildCombined(): ItemType[] {
     const commentRes = this.state.commentReportsRes;
     const comments =
-      commentRes.state == "success"
+      commentRes.state === "success"
         ? commentRes.data.comment_reports.map(this.commentReportToItemType)
         : [];
 
     const postRes = this.state.postReportsRes;
     const posts =
-      postRes.state == "success"
+      postRes.state === "success"
         ? postRes.data.post_reports.map(this.postReportToItemType)
         : [];
     const pmRes = this.state.messageReportsRes;
     const privateMessages =
-      pmRes.state == "success"
+      pmRes.state === "success"
         ? pmRes.data.private_message_reports.map(
             this.privateMessageReportToItemType
           )
@@ -565,7 +565,7 @@ export class Reports extends Component<any, ReportsState> {
   }
 
   async refetch() {
-    const unresolved_only = this.state.unreadOrAll == UnreadOrAll.Unread;
+    const unresolved_only = this.state.unreadOrAll === UnreadOrAll.Unread;
     const page = this.state.page;
     const limit = fetchLimit;
     const auth = myAuthRequired();
@@ -617,7 +617,7 @@ export class Reports extends Component<any, ReportsState> {
 
   findAndUpdateCommentReport(res: RequestState<CommentReportResponse>) {
     this.setState(s => {
-      if (s.commentReportsRes.state == "success" && res.state == "success") {
+      if (s.commentReportsRes.state === "success" && res.state === "success") {
         s.commentReportsRes.data.comment_reports = editCommentReport(
           res.data.comment_report_view,
           s.commentReportsRes.data.comment_reports
@@ -629,7 +629,7 @@ export class Reports extends Component<any, ReportsState> {
 
   findAndUpdatePostReport(res: RequestState<PostReportResponse>) {
     this.setState(s => {
-      if (s.postReportsRes.state == "success" && res.state == "success") {
+      if (s.postReportsRes.state === "success" && res.state === "success") {
         s.postReportsRes.data.post_reports = editPostReport(
           res.data.post_report_view,
           s.postReportsRes.data.post_reports
@@ -643,7 +643,7 @@ export class Reports extends Component<any, ReportsState> {
     res: RequestState<PrivateMessageReportResponse>
   ) {
     this.setState(s => {
-      if (s.messageReportsRes.state == "success" && res.state == "success") {
+      if (s.messageReportsRes.state === "success" && res.state === "success") {
         s.messageReportsRes.data.private_message_reports =
           editPrivateMessageReport(
             res.data.private_message_report_view,
diff --git a/src/shared/components/person/settings.tsx b/src/shared/components/person/settings.tsx
index 1db77c9..4a6a21c 100644
--- a/src/shared/components/person/settings.tsx
+++ b/src/shared/components/person/settings.tsx
@@ -887,7 +887,7 @@ export class Settings extends Component<any, SettingsState> {
                   id="user-remove-totp"
                   type="checkbox"
                   checked={
-                    this.state.saveUserSettingsForm.generate_totp_2fa == false
+                    this.state.saveUserSettingsForm.generate_totp_2fa === false
                   }
                   onChange={linkEvent(this, this.handleRemoveTotp)}
                 />
@@ -1132,13 +1132,13 @@ export class Settings extends Component<any, SettingsState> {
 
   handleNewPasswordChange(i: Settings, event: any) {
     const newPass: string | undefined =
-      event.target.value == "" ? undefined : event.target.value;
+      event.target.value === "" ? undefined : event.target.value;
     i.setState(s => ((s.changePasswordForm.new_password = newPass), s));
   }
 
   handleNewPasswordVerifyChange(i: Settings, event: any) {
     const newPassVerify: string | undefined =
-      event.target.value == "" ? undefined : event.target.value;
+      event.target.value === "" ? undefined : event.target.value;
     i.setState(
       s => ((s.changePasswordForm.new_password_verify = newPassVerify), s)
     );
@@ -1146,7 +1146,7 @@ export class Settings extends Component<any, SettingsState> {
 
   handleOldPasswordChange(i: Settings, event: any) {
     const oldPass: string | undefined =
-      event.target.value == "" ? undefined : event.target.value;
+      event.target.value === "" ? undefined : event.target.value;
     i.setState(s => ((s.changePasswordForm.old_password = oldPass), s));
   }
 
diff --git a/src/shared/components/person/verify-email.tsx b/src/shared/components/person/verify-email.tsx
index 66e5959..b736146 100644
--- a/src/shared/components/person/verify-email.tsx
+++ b/src/shared/components/person/verify-email.tsx
@@ -35,7 +35,7 @@ export class VerifyEmail extends Component<any, State> {
       }),
     });
 
-    if (this.state.verifyRes.state == "success") {
+    if (this.state.verifyRes.state === "success") {
       toast(I18NextService.i18n.t("email_verified"));
       this.props.history.push("/login");
     }
@@ -61,7 +61,7 @@ export class VerifyEmail extends Component<any, State> {
         <div className="row">
           <div className="col-12 col-lg-6 offset-lg-3 mb-4">
             <h1 className="h4 mb-4">{I18NextService.i18n.t("verify_email")}</h1>
-            {this.state.verifyRes.state == "loading" && (
+            {this.state.verifyRes.state === "loading" && (
               <h5>
                 <Spinner large />
               </h5>
diff --git a/src/shared/components/post/post-form.tsx b/src/shared/components/post/post-form.tsx
index 98def03..afa2fff 100644
--- a/src/shared/components/post/post-form.tsx
+++ b/src/shared/components/post/post-form.tsx
@@ -312,7 +312,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
   componentWillReceiveProps(
     nextProps: Readonly<{ children?: InfernoNode } & PostFormProps>
   ): void {
-    if (this.props != nextProps) {
+    if (this.props !== nextProps) {
       this.setState(
         s => (
           (s.form.community_id = getIdFromString(
diff --git a/src/shared/components/post/post-listing.tsx b/src/shared/components/post/post-listing.tsx
index 30b1865..d661443 100644
--- a/src/shared/components/post/post-listing.tsx
+++ b/src/shared/components/post/post-listing.tsx
@@ -765,7 +765,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
 
   get unreadCount(): number | undefined {
     const pv = this.postView;
-    return pv.unread_comments == pv.counts.comments || pv.unread_comments == 0
+    return pv.unread_comments === pv.counts.comments || pv.unread_comments === 0
       ? undefined
       : pv.unread_comments;
   }
@@ -1136,7 +1136,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
   removeAndBanDialogs() {
     const post = this.postView;
     const purgeTypeText =
-      this.state.purgeType == PurgeType.Post
+      this.state.purgeType === PurgeType.Post
         ? I18NextService.i18n.t("purge_post")
         : `${I18NextService.i18n.t("purge")} ${post.creator.name}`;
     return (
@@ -1405,7 +1405,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
 
   private get myPost(): boolean {
     return (
-      this.postView.creator.id ==
+      this.postView.creator.id ===
       UserService.Instance.myUserInfo?.local_user_view.person.id
     );
   }
@@ -1644,7 +1644,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
 
     const ban = !i.props.post_view.creator_banned_from_community;
     // If its an unban, restore all their data
-    if (ban == false) {
+    if (ban === false) {
       i.setState({ removeData: false });
     }
     const person_id = i.props.post_view.creator.id;
@@ -1652,7 +1652,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
     const reason = i.state.banReason;
     const expires = futureDaysToUnixTime(i.state.banExpireDays);
 
-    if (i.state.banType == BanType.Community) {
+    if (i.state.banType === BanType.Community) {
       const community_id = i.postView.community.id;
       i.props.onBanPersonFromCommunity({
         community_id,
diff --git a/src/shared/components/post/post-listings.tsx b/src/shared/components/post/post-listings.tsx
index 1fdaeba..3f6c304 100644
--- a/src/shared/components/post/post-listings.tsx
+++ b/src/shared/components/post/post-listings.tsx
@@ -141,7 +141,7 @@ export class PostListings extends Component<PostListingsProps, any> {
     // Sort by oldest
     // Remove the ones that have no length
     for (const e of urlMap.entries()) {
-      if (e[1].length == 1) {
+      if (e[1].length === 1) {
         urlMap.delete(e[0]);
       } else {
         e[1].sort((a, b) => a.post.published.localeCompare(b.post.published));
@@ -155,7 +155,7 @@ export class PostListings extends Component<PostListingsProps, any> {
         const found = urlMap.get(url);
         if (found) {
           // If its the oldest, add
-          if (pv.post.id == found[0].post.id) {
+          if (pv.post.id === found[0].post.id) {
             this.duplicatesMap.set(pv.post.id, found.slice(1));
           }
           // Otherwise, delete it
diff --git a/src/shared/components/post/post-report.tsx b/src/shared/components/post/post-report.tsx
index 9b2540b..8de646f 100644
--- a/src/shared/components/post/post-report.tsx
+++ b/src/shared/components/post/post-report.tsx
@@ -28,7 +28,7 @@ export class PostReport extends Component<PostReportProps, PostReportState> {
   componentWillReceiveProps(
     nextProps: Readonly<{ children?: InfernoNode } & PostReportProps>
   ): void {
-    if (this.props != nextProps) {
+    if (this.props !== nextProps) {
       this.setState({ loading: false });
     }
   }
diff --git a/src/shared/components/post/post.tsx b/src/shared/components/post/post.tsx
index 003ad71..b1b8e32 100644
--- a/src/shared/components/post/post.tsx
+++ b/src/shared/components/post/post.tsx
@@ -309,7 +309,7 @@ export class Post extends Component<any, PostState> {
     const wrappedElement = document.getElementsByClassName("comments")[0];
     if (wrappedElement && this.isBottom(wrappedElement)) {
       const commentCount =
-        this.state.commentsRes.state == "success"
+        this.state.commentsRes.state === "success"
           ? this.state.commentsRes.data.comments.length
           : 0;
 
@@ -323,13 +323,13 @@ export class Post extends Component<any, PostState> {
 
   get documentTitle(): string {
     const siteName = this.state.siteRes.site_view.site.name;
-    return this.state.postRes.state == "success"
+    return this.state.postRes.state === "success"
       ? `${this.state.postRes.data.post_view.post.name} - ${siteName}`
       : siteName;
   }
 
   get imageTag(): string | undefined {
-    if (this.state.postRes.state == "success") {
+    if (this.state.postRes.state === "success") {
       const post = this.state.postRes.data.post_view.post;
       const thumbnail = post.thumbnail_url;
       const url = post.url;
@@ -413,9 +413,9 @@ export class Post extends Component<any, PostState> {
                 {this.state.showSidebarMobile && this.sidebar()}
               </div>
               {this.sortRadios()}
-              {this.state.commentViewType == CommentViewType.Tree &&
+              {this.state.commentViewType === CommentViewType.Tree &&
                 this.commentsTree()}
-              {this.state.commentViewType == CommentViewType.Flat &&
+              {this.state.commentViewType === CommentViewType.Flat &&
                 this.commentsFlat()}
             </main>
             <aside className="d-none d-md-block col-md-4 col-lg-3">
@@ -535,7 +535,7 @@ export class Post extends Component<any, PostState> {
     const commentsRes = this.state.commentsRes;
     const postRes = this.state.postRes;
 
-    if (commentsRes.state == "success" && postRes.state == "success") {
+    if (commentsRes.state === "success" && postRes.state === "success") {
       return (
         <div>
           <CommentNodes
@@ -607,7 +607,7 @@ export class Post extends Component<any, PostState> {
     const showContextButton = depth ? depth > 0 : false;
 
     return (
-      res.state == "success" && (
+      res.state === "success" && (
         <div>
           {!!this.state.commentId && (
             <>
@@ -664,7 +664,7 @@ export class Post extends Component<any, PostState> {
   }
 
   commentTree(): CommentNodeI[] {
-    if (this.state.commentsRes.state == "success") {
+    if (this.state.commentsRes.state === "success") {
       return buildCommentsTree(
         this.state.commentsRes.data.comments,
         !!this.state.commentId
@@ -696,14 +696,14 @@ export class Post extends Component<any, PostState> {
   }
 
   handleViewPost(i: Post) {
-    if (i.state.postRes.state == "success") {
+    if (i.state.postRes.state === "success") {
       const id = i.state.postRes.data.post_view.post.id;
       i.context.router.history.push(`/post/${id}`);
     }
   }
 
   handleViewContext(i: Post) {
-    if (i.state.commentsRes.state == "success") {
+    if (i.state.commentsRes.state === "success") {
       const parentId = getCommentParentId(
         i.state.commentsRes.data.comments.at(0)?.comment
       );
@@ -732,7 +732,7 @@ export class Post extends Component<any, PostState> {
       const communityId = followCommunityRes.data.community_view.community.id;
       const mui = UserService.Instance.myUserInfo;
       if (mui) {
-        mui.follows = mui.follows.filter(i => i.community.id != communityId);
+        mui.follows = mui.follows.filter(i => i.community.id !== communityId);
       }
     }
   }
@@ -759,10 +759,10 @@ export class Post extends Component<any, PostState> {
 
   async handleBlockCommunity(form: BlockCommunity) {
     const blockCommunityRes = await HttpService.client.blockCommunity(form);
-    if (blockCommunityRes.state == "success") {
+    if (blockCommunityRes.state === "success") {
       updateCommunityBlock(blockCommunityRes.data);
       this.setState(s => {
-        if (s.postRes.state == "success") {
+        if (s.postRes.state === "success") {
           s.postRes.data.community_view.blocked =
             blockCommunityRes.data.blocked;
         }
@@ -772,7 +772,7 @@ export class Post extends Component<any, PostState> {
 
   async handleBlockPerson(form: BlockPerson) {
     const blockPersonRes = await HttpService.client.blockPerson(form);
-    if (blockPersonRes.state == "success") {
+    if (blockPersonRes.state === "success") {
       updatePersonBlock(blockPersonRes.data);
     }
   }
@@ -855,14 +855,14 @@ export class Post extends Component<any, PostState> {
 
   async handleCommentReport(form: CreateCommentReport) {
     const reportRes = await HttpService.client.createCommentReport(form);
-    if (reportRes.state == "success") {
+    if (reportRes.state === "success") {
       toast(I18NextService.i18n.t("report_created"));
     }
   }
 
   async handlePostReport(form: CreatePostReport) {
     const reportRes = await HttpService.client.createPostReport(form);
-    if (reportRes.state == "success") {
+    if (reportRes.state === "success") {
       toast(I18NextService.i18n.t("report_created"));
     }
   }
@@ -895,8 +895,8 @@ export class Post extends Component<any, PostState> {
   async handleFetchChildren(form: GetComments) {
     const moreCommentsRes = await HttpService.client.getComments(form);
     if (
-      this.state.commentsRes.state == "success" &&
-      moreCommentsRes.state == "success"
+      this.state.commentsRes.state === "success" &&
+      moreCommentsRes.state === "success"
     ) {
       const newComments = moreCommentsRes.data.comments;
       // Remove the first comment, since it is the parent
@@ -929,19 +929,19 @@ export class Post extends Component<any, PostState> {
 
   updateBanFromCommunity(banRes: RequestState<BanFromCommunityResponse>) {
     // Maybe not necessary
-    if (banRes.state == "success") {
+    if (banRes.state === "success") {
       this.setState(s => {
         if (
-          s.postRes.state == "success" &&
-          s.postRes.data.post_view.creator.id ==
+          s.postRes.state === "success" &&
+          s.postRes.data.post_view.creator.id ===
             banRes.data.person_view.person.id
         ) {
           s.postRes.data.post_view.creator_banned_from_community =
             banRes.data.banned;
         }
-        if (s.commentsRes.state == "success") {
+        if (s.commentsRes.state === "success") {
           s.commentsRes.data.comments
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(
               c => (c.creator_banned_from_community = banRes.data.banned)
             );
@@ -953,18 +953,18 @@ export class Post extends Component<any, PostState> {
 
   updateBan(banRes: RequestState<BanPersonResponse>) {
     // Maybe not necessary
-    if (banRes.state == "success") {
+    if (banRes.state === "success") {
       this.setState(s => {
         if (
-          s.postRes.state == "success" &&
-          s.postRes.data.post_view.creator.id ==
+          s.postRes.state === "success" &&
+          s.postRes.data.post_view.creator.id ===
             banRes.data.person_view.person.id
         ) {
           s.postRes.data.post_view.creator.banned = banRes.data.banned;
         }
-        if (s.commentsRes.state == "success") {
+        if (s.commentsRes.state === "success") {
           s.commentsRes.data.comments
-            .filter(c => c.creator.id == banRes.data.person_view.person.id)
+            .filter(c => c.creator.id === banRes.data.person_view.person.id)
             .forEach(c => (c.creator.banned = banRes.data.banned));
         }
         return s;
@@ -974,7 +974,7 @@ export class Post extends Component<any, PostState> {
 
   updateCommunity(communityRes: RequestState<CommunityResponse>) {
     this.setState(s => {
-      if (s.postRes.state == "success" && communityRes.state == "success") {
+      if (s.postRes.state === "success" && communityRes.state === "success") {
         s.postRes.data.community_view = communityRes.data.community_view;
       }
       return s;
@@ -983,7 +983,7 @@ export class Post extends Component<any, PostState> {
 
   updateCommunityFull(res: RequestState<GetCommunityResponse>) {
     this.setState(s => {
-      if (s.postRes.state == "success" && res.state == "success") {
+      if (s.postRes.state === "success" && res.state === "success") {
         s.postRes.data.community_view = res.data.community_view;
         s.postRes.data.moderators = res.data.moderators;
       }
@@ -993,7 +993,7 @@ export class Post extends Component<any, PostState> {
 
   updatePost(post: RequestState<PostResponse>) {
     this.setState(s => {
-      if (s.postRes.state == "success" && post.state == "success") {
+      if (s.postRes.state === "success" && post.state === "success") {
         s.postRes.data.post_view = post.data.post_view;
       }
       return s;
@@ -1001,7 +1001,7 @@ export class Post extends Component<any, PostState> {
   }
 
   purgeItem(purgeRes: RequestState<PurgeItemResponse>) {
-    if (purgeRes.state == "success") {
+    if (purgeRes.state === "success") {
       toast(I18NextService.i18n.t("purge_success"));
       this.context.router.history.push(`/`);
     }
@@ -1024,7 +1024,7 @@ export class Post extends Component<any, PostState> {
 
   findAndUpdateComment(res: RequestState<CommentResponse>) {
     this.setState(s => {
-      if (s.commentsRes.state == "success" && res.state == "success") {
+      if (s.commentsRes.state === "success" && res.state === "success") {
         s.commentsRes.data.comments = editComment(
           res.data.comment_view,
           s.commentsRes.data.comments
@@ -1037,7 +1037,7 @@ export class Post extends Component<any, PostState> {
 
   findAndUpdateCommentReply(res: RequestState<CommentReplyResponse>) {
     this.setState(s => {
-      if (s.commentsRes.state == "success" && res.state == "success") {
+      if (s.commentsRes.state === "success" && res.state === "success") {
         s.commentsRes.data.comments = editWith(
           res.data.comment_reply_view,
           s.commentsRes.data.comments
@@ -1050,7 +1050,7 @@ export class Post extends Component<any, PostState> {
   updateModerators(res: RequestState<AddModToCommunityResponse>) {
     // Update the moderators
     this.setState(s => {
-      if (s.postRes.state == "success" && res.state == "success") {
+      if (s.postRes.state === "success" && res.state === "success") {
         s.postRes.data.moderators = res.data.moderators;
       }
       return s;
diff --git a/src/shared/components/private_message/create-private-message.tsx b/src/shared/components/private_message/create-private-message.tsx
index f2b84f0..805b3ec 100644
--- a/src/shared/components/private_message/create-private-message.tsx
+++ b/src/shared/components/private_message/create-private-message.tsx
@@ -94,7 +94,7 @@ export class CreatePrivateMessage extends Component<
   }
 
   get documentTitle(): string {
-    if (this.state.recipientRes.state == "success") {
+    if (this.state.recipientRes.state === "success") {
       const name_ = this.state.recipientRes.data.person_view.person.name;
       return `${I18NextService.i18n.t("create_private_message")} - ${name_}`;
     } else {
@@ -144,7 +144,7 @@ export class CreatePrivateMessage extends Component<
   async handlePrivateMessageCreate(form: CreatePrivateMessageI) {
     const res = await HttpService.client.createPrivateMessage(form);
 
-    if (res.state == "success") {
+    if (res.state === "success") {
       toast(I18NextService.i18n.t("message_sent"));
 
       // Navigate to the front
diff --git a/src/shared/components/private_message/private-message-form.tsx b/src/shared/components/private_message/private-message-form.tsx
index 4645f8c..60d064f 100644
--- a/src/shared/components/private_message/private-message-form.tsx
+++ b/src/shared/components/private_message/private-message-form.tsx
@@ -58,7 +58,7 @@ export class PrivateMessageForm extends Component<
   componentWillReceiveProps(
     nextProps: Readonly<{ children?: InfernoNode } & PrivateMessageFormProps>
   ): void {
-    if (this.props != nextProps) {
+    if (this.props !== nextProps) {
       this.setState({ loading: false, content: undefined, previewMode: false });
     }
   }
diff --git a/src/shared/components/private_message/private-message-report.tsx b/src/shared/components/private_message/private-message-report.tsx
index d15f18c..de6ef77 100644
--- a/src/shared/components/private_message/private-message-report.tsx
+++ b/src/shared/components/private_message/private-message-report.tsx
@@ -31,7 +31,7 @@ export class PrivateMessageReport extends Component<Props, State> {
   componentWillReceiveProps(
     nextProps: Readonly<{ children?: InfernoNode } & Props>
   ): void {
-    if (this.props != nextProps) {
+    if (this.props !== nextProps) {
       this.setState({ loading: false });
     }
   }
diff --git a/src/shared/components/private_message/private-message.tsx b/src/shared/components/private_message/private-message.tsx
index 14270b6..099d875 100644
--- a/src/shared/components/private_message/private-message.tsx
+++ b/src/shared/components/private_message/private-message.tsx
@@ -59,7 +59,7 @@ export class PrivateMessage extends Component<
 
   get mine(): boolean {
     return (
-      UserService.Instance.myUserInfo?.local_user_view.person.id ==
+      UserService.Instance.myUserInfo?.local_user_view.person.id ===
       this.props.private_message_view.creator.id
     );
   }
@@ -67,7 +67,7 @@ export class PrivateMessage extends Component<
   componentWillReceiveProps(
     nextProps: Readonly<{ children?: InfernoNode } & PrivateMessageProps>
   ): void {
-    if (this.props != nextProps) {
+    if (this.props !== nextProps) {
       this.setState({
         showReply: false,
         showEdit: false,
diff --git a/src/shared/components/search.tsx b/src/shared/components/search.tsx
index 36bfca8..2891870 100644
--- a/src/shared/components/search.tsx
+++ b/src/shared/components/search.tsx
@@ -545,7 +545,7 @@ export class Search extends Component<any, SearchState> {
     } = this.state;
 
     const hasCommunities =
-      communitiesRes.state == "success" &&
+      communitiesRes.state === "success" &&
       communitiesRes.data.communities.length > 0;
 
     return (
@@ -619,7 +619,7 @@ export class Search extends Component<any, SearchState> {
     } = this.state;
 
     // Push the possible resolve / federated objects first
-    if (resolveObjectResponse.state == "success") {
+    if (resolveObjectResponse.state === "success") {
       const { comment, post, community, person } = resolveObjectResponse.data;
 
       if (comment) {
diff --git a/src/shared/markdown.ts b/src/shared/markdown.ts
index 142000d..4762d4b 100644
--- a/src/shared/markdown.ts
+++ b/src/shared/markdown.ts
@@ -197,7 +197,7 @@ export function setupMarkdown() {
     const item = tokens[idx] as any;
     const title = item.attrs.length >= 3 ? item.attrs[2][1] : "";
     const customEmoji = customEmojisLookup.get(title);
-    const isCustomEmoji = customEmoji != undefined;
+    const isCustomEmoji = customEmoji !== undefined;
     if (!isCustomEmoji) {
       return defaultRenderer?.(tokens, idx, options, env, self) ?? "";
     }
@@ -242,9 +242,9 @@ export function updateEmojiDataModel(custom_emoji_view: CustomEmojiView) {
     skins: [{ src: custom_emoji_view.custom_emoji.image_url }],
   };
   const categoryIndex = customEmojis.findIndex(
-    x => x.id == custom_emoji_view.custom_emoji.category
+    x => x.id === custom_emoji_view.custom_emoji.category
   );
-  if (categoryIndex == -1) {
+  if (categoryIndex === -1) {
     customEmojis.push({
       id: custom_emoji_view.custom_emoji.category,
       name: custom_emoji_view.custom_emoji.category,
@@ -252,9 +252,9 @@ export function updateEmojiDataModel(custom_emoji_view: CustomEmojiView) {
     });
   } else {
     const emojiIndex = customEmojis[categoryIndex].emojis.findIndex(
-      x => x.id == custom_emoji_view.custom_emoji.shortcode
+      x => x.id === custom_emoji_view.custom_emoji.shortcode
     );
-    if (emojiIndex == -1) {
+    if (emojiIndex === -1) {
       customEmojis[categoryIndex].emojis.push(emoji);
     } else {
       customEmojis[categoryIndex].emojis[emojiIndex] = emoji;
@@ -276,10 +276,10 @@ export function removeFromEmojiDataModel(id: number) {
   }
   if (!view) return;
   const categoryIndex = customEmojis.findIndex(
-    x => x.id == view?.custom_emoji.category
+    x => x.id === view?.custom_emoji.category
   );
   const emojiIndex = customEmojis[categoryIndex].emojis.findIndex(
-    x => x.id == view?.custom_emoji.shortcode
+    x => x.id === view?.custom_emoji.shortcode
   );
   customEmojis[categoryIndex].emojis = customEmojis[
     categoryIndex
@@ -317,7 +317,7 @@ export function setupTribute() {
           const customEmoji = customEmojisLookup.get(
             item.original.key
           )?.custom_emoji;
-          if (customEmoji == undefined) return `${item.original.val}`;
+          if (customEmoji === undefined) return `${item.original.val}`;
           else
             return `![${customEmoji.alt_text}](${customEmoji.image_url} "${customEmoji.shortcode}")`;
         },
diff --git a/src/shared/utils/app/new-vote.ts b/src/shared/utils/app/new-vote.ts
index 030fa79..431d07b 100644
--- a/src/shared/utils/app/new-vote.ts
+++ b/src/shared/utils/app/new-vote.ts
@@ -1,9 +1,9 @@
 import { VoteType } from "../../interfaces";
 
 export default function newVote(voteType: VoteType, myVote?: number): number {
-  if (voteType == VoteType.Upvote) {
-    return myVote == 1 ? 0 : 1;
+  if (voteType === VoteType.Upvote) {
+    return myVote === 1 ? 0 : 1;
   } else {
-    return myVote == -1 ? 0 : -1;
+    return myVote === -1 ? 0 : -1;
   }
 }
diff --git a/src/shared/utils/app/selectable-languages.ts b/src/shared/utils/app/selectable-languages.ts
index 8079abd..d1754cc 100644
--- a/src/shared/utils/app/selectable-languages.ts
+++ b/src/shared/utils/app/selectable-languages.ts
@@ -17,8 +17,8 @@ export default function selectableLanguages(
 ): Language[] {
   const allLangIds = allLanguages.map(l => l.id);
   let myLangs = myUserInfo?.discussion_languages ?? allLangIds;
-  myLangs = myLangs.length == 0 ? allLangIds : myLangs;
-  const siteLangs = siteLanguages.length == 0 ? allLangIds : siteLanguages;
+  myLangs = myLangs.length === 0 ? allLangIds : myLangs;
+  const siteLangs = siteLanguages.length === 0 ? allLangIds : siteLanguages;
 
   if (showAll) {
     return allLanguages;
diff --git a/src/shared/utils/app/set-theme.ts b/src/shared/utils/app/set-theme.ts
index 6d9d46c..9c6488f 100644
--- a/src/shared/utils/app/set-theme.ts
+++ b/src/shared/utils/app/set-theme.ts
@@ -9,7 +9,7 @@ export default async function setTheme(theme: string, forceReload = false) {
     return;
   }
   // This is only run on a force reload
-  if (theme == "browser") {
+  if (theme === "browser") {
     theme = "darkly";
   }
 
diff --git a/src/shared/utils/env/get-external-host.ts b/src/shared/utils/env/get-external-host.ts
index 7e2635d..093055e 100644
--- a/src/shared/utils/env/get-external-host.ts
+++ b/src/shared/utils/env/get-external-host.ts
@@ -6,7 +6,7 @@ export default function getExternalHost() {
     ? `${window.location.hostname}${
         ["1234", "1235"].includes(window.location.port)
           ? ":8536"
-          : window.location.port == ""
+          : window.location.port === ""
           ? ""
           : `:${window.location.port}`
       }`
diff --git a/src/shared/utils/helpers/get-random-from-list.ts b/src/shared/utils/helpers/get-random-from-list.ts
index 065eb7a..a0ddecb 100644
--- a/src/shared/utils/helpers/get-random-from-list.ts
+++ b/src/shared/utils/helpers/get-random-from-list.ts
@@ -1,5 +1,5 @@
 export default function getRandomFromList<T>(list: T[]): T | undefined {
-  return list.length == 0
+  return list.length === 0
     ? undefined
     : list.at(Math.floor(Math.random() * list.length));
 }
diff --git a/src/shared/utils/roles/am-community-creator.ts b/src/shared/utils/roles/am-community-creator.ts
index 3671ef2..3fcd228 100644
--- a/src/shared/utils/roles/am-community-creator.ts
+++ b/src/shared/utils/roles/am-community-creator.ts
@@ -8,5 +8,5 @@ export default function amCommunityCreator(
 ): boolean {
   const myId = myUserInfo?.local_user_view.person.id;
   // Don't allow mod actions on yourself
-  return myId == mods?.at(0)?.moderator.id && myId != creator_id;
+  return myId === mods?.at(0)?.moderator.id && myId !== creator_id;
 }
diff --git a/src/shared/utils/roles/am-site-creator.ts b/src/shared/utils/roles/am-site-creator.ts
index 9da2840..071d28c 100644
--- a/src/shared/utils/roles/am-site-creator.ts
+++ b/src/shared/utils/roles/am-site-creator.ts
@@ -7,5 +7,5 @@ export default function amSiteCreator(
   myUserInfo = UserService.Instance.myUserInfo
 ): boolean {
   const myId = myUserInfo?.local_user_view.person.id;
-  return myId == admins?.at(0)?.person.id && myId != creator_id;
+  return myId === admins?.at(0)?.person.id && myId !== creator_id;
 }
diff --git a/src/shared/utils/roles/am-top-mod.ts b/src/shared/utils/roles/am-top-mod.ts
index 9163d7c..3f96208 100644
--- a/src/shared/utils/roles/am-top-mod.ts
+++ b/src/shared/utils/roles/am-top-mod.ts
@@ -5,5 +5,5 @@ export default function amTopMod(
   mods: CommunityModeratorView[],
   myUserInfo = UserService.Instance.myUserInfo
 ): boolean {
-  return mods.at(0)?.moderator.id == myUserInfo?.local_user_view.person.id;
+  return mods.at(0)?.moderator.id === myUserInfo?.local_user_view.person.id;
 }
diff --git a/src/shared/utils/roles/can-mod.ts b/src/shared/utils/roles/can-mod.ts
index df639b7..ae2bf44 100644
--- a/src/shared/utils/roles/can-mod.ts
+++ b/src/shared/utils/roles/can-mod.ts
@@ -16,9 +16,9 @@ export default function canMod(
 
   if (myUserInfo) {
     const myIndex = adminsThenMods.findIndex(
-      id => id == myUserInfo.local_user_view.person.id
+      id => id === myUserInfo.local_user_view.person.id
     );
-    if (myIndex == -1) {
+    if (myIndex === -1) {
       return false;
     } else {
       // onSelf +1 on mod actions not for yourself, IE ban, remove, etc
-- 
2.44.1