From 9704d9aed619485679b9de20a3ff7a09610bca04 Mon Sep 17 00:00:00 2001 From: Martin Brennan Date: Thu, 16 Feb 2023 20:24:29 +1000 Subject: [PATCH] DEV: Glimmerize ChatMessageActionsDesktop/Mobile components (#20325) These are fairly small components, so we can change to using glimmer without too much trouble. --- .../chat-message-actions-desktop.hbs | 33 +++++----- .../chat-message-actions-desktop.js | 33 +++++----- .../chat-message-actions-mobile.hbs | 42 +++++++------ .../components/chat-message-actions-mobile.js | 62 ++++++++++--------- 4 files changed, 92 insertions(+), 78 deletions(-) diff --git a/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-desktop.hbs b/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-desktop.hbs index cc0a38248ab..cb665429b06 100644 --- a/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-desktop.hbs +++ b/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-desktop.hbs @@ -1,56 +1,61 @@ -
+
{{#if this.chatStateManager.isFullPageActive}} - {{#each this.emojiReactions as |reaction|}} + {{#each @emojiReactions as |reaction|}} {{/each}} {{/if}} - {{#if this.messageCapabilities.canReact}} + {{#if @messageCapabilities.canReact}} {{/if}} - {{#if this.messageCapabilities.canBookmark}} + {{#if @messageCapabilities.canBookmark}} - + {{/if}} - {{#if this.messageCapabilities.canReply}} + {{#if @messageCapabilities.canReply}} {{/if}} - {{#if this.messageCapabilities.hasThread}} + {{#if @messageCapabilities.hasThread}} {{/if}} - {{#if this.secondaryButtons.length}} + {{#if @secondaryButtons.length}} {{/if}} diff --git a/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-desktop.js b/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-desktop.js index d88a31d8148..8b62c14c239 100644 --- a/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-desktop.js +++ b/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-desktop.js @@ -1,4 +1,4 @@ -import Component from "@ember/component"; +import Component from "@glimmer/component"; import { action } from "@ember/object"; import { createPopper } from "@popperjs/core"; import { schedule } from "@ember/runloop"; @@ -6,25 +6,28 @@ import { inject as service } from "@ember/service"; const MSG_ACTIONS_VERTICAL_PADDING = -10; -export default Component.extend({ - tagName: "", +export default class ChatMessageActionsDesktop extends Component { + @service chatStateManager; - chatStateManager: service(), - - messageActions: null, - - didReceiveAttrs() { - this._super(...arguments); + popper = null; + @action + destroyPopper() { this.popper?.destroy(); + this.popper = null; + } + + @action + attachPopper() { + this.destroyPopper(); schedule("afterRender", () => { this.popper = createPopper( document.querySelector( - `.chat-message-container[data-id="${this.message.id}"]` + `.chat-message-container[data-id="${this.args.message.id}"]` ), document.querySelector( - `.chat-message-actions-container[data-id="${this.message.id}"] .chat-message-actions` + `.chat-message-actions-container[data-id="${this.args.message.id}"] .chat-message-actions` ), { placement: "top-end", @@ -39,10 +42,10 @@ export default Component.extend({ } ); }); - }, + } @action handleSecondaryButtons(id) { - this.messageActions?.[id]?.(); - }, -}); + this.args.messageActions?.[id]?.(); + } +} diff --git a/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-mobile.hbs b/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-mobile.hbs index 02adea78cdc..87aeca6861b 100644 --- a/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-mobile.hbs +++ b/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-mobile.hbs @@ -1,4 +1,10 @@ -
+
- + - {{this.message.message}} + {{@message.message}}
    - {{#each this.secondaryButtons as |button|}} + {{#each @secondaryButtons as |button|}}
  • {{/each}}
- {{#if - (or this.messageCapabilities.canReact this.messageCapabilities.canReply) - }} + {{#if (or @messageCapabilities.canReact @messageCapabilities.canReply)}}
- {{#if this.messageCapabilities.canReact}} - {{#each this.emojiReactions as |reaction|}} + {{#if @messageCapabilities.canReact}} + {{#each @emojiReactions as |reaction|}} {{/each}} @@ -56,27 +60,27 @@ {{/if}} - {{#if this.messageCapabilities.canBookmark}} + {{#if @messageCapabilities.canBookmark}} - + {{/if}} - {{#if this.messageCapabilities.canReply}} + {{#if @messageCapabilities.canReply}} diff --git a/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-mobile.js b/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-mobile.js index 1457f56e55e..d13716b8333 100644 --- a/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-mobile.js +++ b/plugins/chat/assets/javascripts/discourse/components/chat-message-actions-mobile.js @@ -1,43 +1,49 @@ -import Component from "@ember/component"; +import Component from "@glimmer/component"; +import { getOwner } from "discourse-common/lib/get-owner"; +import { tracked } from "@glimmer/tracking"; import discourseLater from "discourse-common/lib/later"; import { action } from "@ember/object"; import { isTesting } from "discourse-common/config/environment"; -export default Component.extend({ - tagName: "", - hasExpandedReply: false, - messageActions: null, +export default class ChatMessageActionsMobile extends Component { + @tracked hasExpandedReply = false; + @tracked showFadeIn = false; - didInsertElement() { - this._super(...arguments); + messageActions = null; - discourseLater(this._addFadeIn); + get capabilities() { + return getOwner(this).lookup("capabilities:main"); + } + + @action + fadeAndVibrate() { + discourseLater(this.#addFadeIn.bind(this)); if (this.capabilities.canVibrate && !isTesting()) { navigator.vibrate(5); } - }, + } @action expandReply(event) { event.stopPropagation(); - this.set("hasExpandedReply", true); - }, + this.hasExpandedReply = true; + } @action collapseMenu(event) { event.stopPropagation(); - this.onCloseMenu(); - }, + this.#onCloseMenu(); + } @action actAndCloseMenu(fn) { fn?.(); - this.onCloseMenu(); - }, + this.#onCloseMenu(); + } - onCloseMenu() { - this._removeFadeIn(); + #onCloseMenu() { + this.#removeFadeIn(); // we don't want to remove the component right away as it's animating // 200 is equal to the duration of the css animation @@ -48,19 +54,15 @@ export default Component.extend({ // by ensuring we are not hovering any message anymore // we also ensure the menu is fully removed - this.onHoverMessage?.(null); + this.args.onHoverMessage?.(null); }, 200); - }, + } - _addFadeIn() { - document - .querySelector(".chat-message-actions-backdrop") - ?.classList.add("fade-in"); - }, + #addFadeIn() { + this.showFadeIn = true; + } - _removeFadeIn() { - document - .querySelector(".chat-message-actions-backdrop") - ?.classList?.remove("fade-in"); - }, -}); + #removeFadeIn() { + this.showFadeIn = false; + } +}