mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: allows d-menu to refocus trigger (#30522)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import Component from "@glimmer/component";
|
||||
import { concat, hash } from "@ember/helper";
|
||||
import { concat, fn, hash } from "@ember/helper";
|
||||
import { htmlSafe } from "@ember/template";
|
||||
import { modifier as modifierFn } from "ember-modifier";
|
||||
import concatClass from "discourse/helpers/concat-class";
|
||||
@@ -70,7 +70,9 @@ export default class DFloatBody extends Component {
|
||||
{{(if
|
||||
this.supportsCloseOnClickOutside
|
||||
(modifier
|
||||
closeOnClickOutside @instance.close (hash target=this.content)
|
||||
closeOnClickOutside
|
||||
(fn @instance.close (hash focusTrigger=false))
|
||||
(hash target=this.content)
|
||||
)
|
||||
)}}
|
||||
{{(if
|
||||
|
||||
@@ -4,6 +4,7 @@ import { on } from "@ember/modifier";
|
||||
import { action } from "@ember/object";
|
||||
import { getOwner } from "@ember/owner";
|
||||
import didInsert from "@ember/render-modifiers/modifiers/did-insert";
|
||||
import willDestroy from "@ember/render-modifiers/modifiers/will-destroy";
|
||||
import { service } from "@ember/service";
|
||||
import { modifier } from "ember-modifier";
|
||||
import { and } from "truth-helpers";
|
||||
@@ -39,6 +40,11 @@ export default class DMenu extends Component {
|
||||
this.body = element;
|
||||
}
|
||||
|
||||
@action
|
||||
teardownFloatBody() {
|
||||
this.body = null;
|
||||
}
|
||||
|
||||
@action
|
||||
forwardTabToContent(event) {
|
||||
if (!this.body) {
|
||||
@@ -151,6 +157,7 @@ export default class DMenu extends Component {
|
||||
@role="dialog"
|
||||
@inline={{this.options.inline}}
|
||||
{{didInsert this.registerFloatBody}}
|
||||
{{willDestroy this.teardownFloatBody}}
|
||||
>
|
||||
{{#if (has-block)}}
|
||||
{{yield this.componentArgs}}
|
||||
|
||||
@@ -54,7 +54,7 @@ export default class DMenuInstance extends FloatKitInstance {
|
||||
}
|
||||
|
||||
@action
|
||||
async close() {
|
||||
async close(options = { focusTrigger: true }) {
|
||||
if (getOwner(this).isDestroying) {
|
||||
return;
|
||||
}
|
||||
@@ -66,6 +66,10 @@ export default class DMenuInstance extends FloatKitInstance {
|
||||
}
|
||||
|
||||
await this.menu.close(this);
|
||||
|
||||
if (options.focusTrigger) {
|
||||
this.trigger?.focus?.();
|
||||
}
|
||||
}
|
||||
|
||||
@action
|
||||
|
||||
Reference in New Issue
Block a user