From 06030743e826ad00eaec4fc5efa35dd7a80a867c Mon Sep 17 00:00:00 2001
From: David Taylor <david@taylorhq.com>
Date: Fri, 12 Aug 2022 00:07:57 +0100
Subject: [PATCH] DEV: Update sidebar components to use `@glimmer/component`
 (#17875)

Now that all of our singletons have been converted to true Ember Services, we can remove our custom `discourse/component/glimmer` superclass and use explicit injection

This also updates `section-message` to be a templateOnly glimmer component rather than a classic component.
---
 .../javascripts/discourse/app/components/sidebar.js      | 8 ++++++--
 .../app/components/sidebar/categories-section.js         | 6 ++++--
 .../app/components/sidebar/community-section.js          | 8 ++++++--
 .../discourse/app/components/sidebar/messages-section.js | 9 +++++++--
 .../app/components/sidebar/more-section-links.js         | 4 ++--
 .../discourse/app/components/sidebar/section-link.js     | 4 ++--
 .../discourse/app/components/sidebar/section-message.js  | 4 ++--
 .../discourse/app/components/sidebar/section.js          | 7 +++++--
 .../discourse/app/components/sidebar/sections.js         | 8 ++++++--
 .../discourse/app/components/sidebar/tags-section.js     | 6 ++++--
 10 files changed, 44 insertions(+), 20 deletions(-)

diff --git a/app/assets/javascripts/discourse/app/components/sidebar.js b/app/assets/javascripts/discourse/app/components/sidebar.js
index afb309f54f1..44479e77fba 100644
--- a/app/assets/javascripts/discourse/app/components/sidebar.js
+++ b/app/assets/javascripts/discourse/app/components/sidebar.js
@@ -1,7 +1,11 @@
-import GlimmerComponent from "discourse/components/glimmer";
+import Component from "@glimmer/component";
 import { bind } from "discourse-common/utils/decorators";
+import { inject as service } from "@ember/service";
+
+export default class Sidebar extends Component {
+  @service appEvents;
+  @service site;
 
-export default class Sidebar extends GlimmerComponent {
   constructor() {
     super(...arguments);
 
diff --git a/app/assets/javascripts/discourse/app/components/sidebar/categories-section.js b/app/assets/javascripts/discourse/app/components/sidebar/categories-section.js
index fa96b5eb359..75c69bd2551 100644
--- a/app/assets/javascripts/discourse/app/components/sidebar/categories-section.js
+++ b/app/assets/javascripts/discourse/app/components/sidebar/categories-section.js
@@ -4,11 +4,13 @@ import { cached } from "@glimmer/tracking";
 import { inject as service } from "@ember/service";
 import { action } from "@ember/object";
 
-import GlimmerComponent from "discourse/components/glimmer";
+import Component from "@glimmer/component";
 import CategorySectionLink from "discourse/lib/sidebar/categories-section/category-section-link";
 
-export default class SidebarCategoriesSection extends GlimmerComponent {
+export default class SidebarCategoriesSection extends Component {
   @service router;
+  @service topicTrackingState;
+  @service currentUser;
 
   constructor() {
     super(...arguments);
diff --git a/app/assets/javascripts/discourse/app/components/sidebar/community-section.js b/app/assets/javascripts/discourse/app/components/sidebar/community-section.js
index e704cfe18da..d2cd5b72965 100644
--- a/app/assets/javascripts/discourse/app/components/sidebar/community-section.js
+++ b/app/assets/javascripts/discourse/app/components/sidebar/community-section.js
@@ -1,4 +1,4 @@
-import GlimmerComponent from "discourse/components/glimmer";
+import Component from "@glimmer/component";
 import Composer from "discourse/models/composer";
 import { getOwner } from "discourse-common/lib/get-owner";
 import PermissionType from "discourse/models/permission-type";
@@ -30,8 +30,12 @@ const ADMIN_MAIN_SECTION_LINKS = [AdminSectionLink];
 const MORE_SECTION_LINKS = [GroupsSectionLink, UsersSectionLink];
 const MORE_SECONDARY_SECTION_LINKS = [AboutSectionLink, FAQSectionLink];
 
-export default class SidebarCommunitySection extends GlimmerComponent {
+export default class SidebarCommunitySection extends Component {
   @service router;
+  @service topicTrackingState;
+  @service currentUser;
+  @service appEvents;
+  @service siteSettings;
 
   moreSectionLinks = [...MORE_SECTION_LINKS, ...customSectionLinks].map(
     (sectionLinkClass) => {
diff --git a/app/assets/javascripts/discourse/app/components/sidebar/messages-section.js b/app/assets/javascripts/discourse/app/components/sidebar/messages-section.js
index 7c2ff92c3ab..21b132b5a6e 100644
--- a/app/assets/javascripts/discourse/app/components/sidebar/messages-section.js
+++ b/app/assets/javascripts/discourse/app/components/sidebar/messages-section.js
@@ -1,10 +1,11 @@
 import { cached } from "@glimmer/tracking";
 
 import { getOwner } from "discourse-common/lib/get-owner";
-import GlimmerComponent from "discourse/components/glimmer";
+import Component from "@glimmer/component";
 import { bind } from "discourse-common/utils/decorators";
 import GroupMessageSectionLink from "discourse/lib/sidebar/messages-section/group-message-section-link";
 import PersonalMessageSectionLink from "discourse/lib/sidebar/messages-section/personal-message-section-link";
+import { inject as service } from "@ember/service";
 
 export const INBOX = "inbox";
 export const UNREAD = "unread";
@@ -22,7 +23,11 @@ export const PERSONAL_MESSAGES_INBOX_FILTERS = [
 
 export const GROUP_MESSAGES_INBOX_FILTERS = [INBOX, NEW, UNREAD, ARCHIVE];
 
-export default class SidebarMessagesSection extends GlimmerComponent {
+export default class SidebarMessagesSection extends Component {
+  @service appEvents;
+  @service pmTopicTrackingState;
+  @service currentUser;
+
   constructor() {
     super(...arguments);
 
diff --git a/app/assets/javascripts/discourse/app/components/sidebar/more-section-links.js b/app/assets/javascripts/discourse/app/components/sidebar/more-section-links.js
index 3e54ee34d20..f67009bd701 100644
--- a/app/assets/javascripts/discourse/app/components/sidebar/more-section-links.js
+++ b/app/assets/javascripts/discourse/app/components/sidebar/more-section-links.js
@@ -4,9 +4,9 @@ import { inject as service } from "@ember/service";
 import { isEmpty } from "@ember/utils";
 
 import { bind } from "discourse-common/utils/decorators";
-import GlimmerComponent from "discourse/components/glimmer";
+import Component from "@glimmer/component";
 
-export default class SidebarMoreSectionLinks extends GlimmerComponent {
+export default class SidebarMoreSectionLinks extends Component {
   @tracked shouldDisplaySectionLinks = false;
   @tracked activeSectionLink;
   @service router;
diff --git a/app/assets/javascripts/discourse/app/components/sidebar/section-link.js b/app/assets/javascripts/discourse/app/components/sidebar/section-link.js
index 32dc9eae3bc..790a7b0f565 100644
--- a/app/assets/javascripts/discourse/app/components/sidebar/section-link.js
+++ b/app/assets/javascripts/discourse/app/components/sidebar/section-link.js
@@ -1,7 +1,7 @@
-import GlimmerComponent from "@glimmer/component";
+import Component from "@glimmer/component";
 import { htmlSafe } from "@ember/template";
 
-export default class SectionLink extends GlimmerComponent {
+export default class SectionLink extends Component {
   willDestroy() {
     if (this.args.willDestroy) {
       this.args.willDestroy();
diff --git a/app/assets/javascripts/discourse/app/components/sidebar/section-message.js b/app/assets/javascripts/discourse/app/components/sidebar/section-message.js
index 87d5ddb040f..742bb3c18ef 100644
--- a/app/assets/javascripts/discourse/app/components/sidebar/section-message.js
+++ b/app/assets/javascripts/discourse/app/components/sidebar/section-message.js
@@ -1,3 +1,3 @@
-import Component from "@ember/component";
+import templateOnly from "@ember/component/template-only";
 
-export default Component.extend({});
+export default templateOnly();
diff --git a/app/assets/javascripts/discourse/app/components/sidebar/section.js b/app/assets/javascripts/discourse/app/components/sidebar/section.js
index f01b8433a63..c5da94691ec 100644
--- a/app/assets/javascripts/discourse/app/components/sidebar/section.js
+++ b/app/assets/javascripts/discourse/app/components/sidebar/section.js
@@ -1,9 +1,12 @@
-import GlimmerComponent from "discourse/components/glimmer";
+import Component from "@glimmer/component";
+import { inject as service } from "@ember/service";
 
 import { action } from "@ember/object";
 import { tracked } from "@glimmer/tracking";
 
-export default class SidebarSection extends GlimmerComponent {
+export default class SidebarSection extends Component {
+  @service keyValueStore;
+
   @tracked displaySection;
   collapsedSidebarSectionKey = `sidebar-section-${this.args.sectionName}-collapsed`;
 
diff --git a/app/assets/javascripts/discourse/app/components/sidebar/sections.js b/app/assets/javascripts/discourse/app/components/sidebar/sections.js
index 748d408d8f4..93cbe0cc607 100644
--- a/app/assets/javascripts/discourse/app/components/sidebar/sections.js
+++ b/app/assets/javascripts/discourse/app/components/sidebar/sections.js
@@ -1,8 +1,12 @@
-import GlimmerComponent from "discourse/components/glimmer";
+import Component from "@glimmer/component";
 import { customSections as sidebarCustomSections } from "discourse/lib/sidebar/custom-sections";
 import { getOwner, setOwner } from "@ember/application";
+import { inject as service } from "@ember/service";
+
+export default class SidebarSections extends Component {
+  @service siteSettings;
+  @service currentUser;
 
-export default class SidebarSections extends GlimmerComponent {
   customSections;
 
   constructor() {
diff --git a/app/assets/javascripts/discourse/app/components/sidebar/tags-section.js b/app/assets/javascripts/discourse/app/components/sidebar/tags-section.js
index 47a845ceb23..f2722244c4f 100644
--- a/app/assets/javascripts/discourse/app/components/sidebar/tags-section.js
+++ b/app/assets/javascripts/discourse/app/components/sidebar/tags-section.js
@@ -4,11 +4,13 @@ import { cached } from "@glimmer/tracking";
 import { inject as service } from "@ember/service";
 import { action } from "@ember/object";
 
-import GlimmerComponent from "discourse/components/glimmer";
+import Component from "@glimmer/component";
 import TagSectionLink from "discourse/lib/sidebar/tags-section/tag-section-link";
 
-export default class SidebarTagsSection extends GlimmerComponent {
+export default class SidebarTagsSection extends Component {
   @service router;
+  @service topicTrackingState;
+  @service currentUser;
 
   constructor() {
     super(...arguments);