diff --git a/javascripts/discourse/api-initializers/hamburger-click-outside-transformer.js b/javascripts/discourse/api-initializers/hamburger-click-outside-transformer.js new file mode 100644 index 0000000..8aa1f9a --- /dev/null +++ b/javascripts/discourse/api-initializers/hamburger-click-outside-transformer.js @@ -0,0 +1,10 @@ +import { apiInitializer } from "discourse/lib/api"; + +export default apiInitializer("0.8", (api) => { + api.registerValueTransformer( + "hamburger-dropdown-click-outside-exceptions", + ({ value }) => { + return [...value, ".topic-drafts-menu-content"]; + } + ); +}); diff --git a/javascripts/discourse/components/sidebar-new-topic-button.gjs b/javascripts/discourse/components/sidebar-new-topic-button.gjs index 1379567..77110fc 100644 --- a/javascripts/discourse/components/sidebar-new-topic-button.gjs +++ b/javascripts/discourse/components/sidebar-new-topic-button.gjs @@ -3,6 +3,7 @@ import { tracked } from "@glimmer/tracking"; import { action } from "@ember/object"; import didInsert from "@ember/render-modifiers/modifiers/did-insert"; import didUpdate from "@ember/render-modifiers/modifiers/did-update"; +import willDestroy from "@ember/render-modifiers/modifiers/will-destroy"; import { service } from "@ember/service"; import { gt } from "truth-helpers"; import CreateTopicButton from "discourse/components/create-topic-button"; @@ -13,6 +14,8 @@ export default class SidebarNewTopicButton extends Component { @service currentUser; @service siteSettings; @service router; + @service header; + @service appEvents; @tracked category; @tracked tag; @@ -74,12 +77,30 @@ export default class SidebarNewTopicButton extends Component { this.tag = this.router.currentRoute.attributes?.tag || null; } + @action + watchForComposer() { + // this covers opening drafts from the hamburger menu + this.appEvents.on("composer:will-open", this, this.closeHamburger); + } + + @action + stopWatchingForComposer() { + this.appEvents.off("composer:will-open", this, this.closeHamburger); + } + + @action + closeHamburger() { + this.header.hamburgerVisible = false; + } +