diff --git a/app/assets/javascripts/discourse/app/components/edit-category-general.js b/app/assets/javascripts/discourse/app/components/edit-category-general.js index 6fc54434de4..a2a477f6a1e 100644 --- a/app/assets/javascripts/discourse/app/components/edit-category-general.js +++ b/app/assets/javascripts/discourse/app/components/edit-category-general.js @@ -1,7 +1,8 @@ import discourseComputed from "discourse-common/utils/decorators"; import { isEmpty } from "@ember/utils"; import { not } from "@ember/object/computed"; -import { later } from "@ember/runloop"; +import { action } from "@ember/object"; +import { later, cancel } from "@ember/runloop"; import { buildCategoryPanel } from "discourse/components/edit-category-panel"; import { categoryBadgeHTML } from "discourse/helpers/category-link"; import Category from "discourse/models/category"; @@ -19,6 +20,12 @@ export default buildCategoryPanel("general", { this._focusCategoryName(); }, + willDestroyElement() { + this._super(...arguments); + + this._laterFocus && cancel(this._laterFocus); + }, + canSelectParentCategory: not("category.isUncategorizedCategory"), uncategorizedSiteSettingLink: Discourse.getURL( "/admin/site_settings/category/all_results?filter=allow_uncategorized_topics" @@ -103,19 +110,16 @@ export default buildCategoryPanel("general", { return !isUncategorizedCategory && categoryId; }, - actions: { - showCategoryTopic() { - window.open(this.get("category.topic_url"), "_blank").focus(); - return false; - } + @action + showCategoryTopic() { + window.open(this.get("category.topic_url"), "_blank").focus(); + return false; }, _focusCategoryName() { - later(() => { - if (this.element && !this.isDestroying && !this.isDestroyed) { - const categoryName = this.element.querySelector(".category-name"); - categoryName && categoryName.focus(); - } + this._laterFocus = later(() => { + const categoryName = this.element.querySelector(".category-name"); + categoryName && categoryName.focus(); }, 25); } });