From 04b45dc43c3ffca275c5f2c4aaca9bf9151edeaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20K=C3=BChn?= Date: Wed, 7 Jun 2023 12:39:17 +0000 Subject: [PATCH] [FIX] mail: more friendly pin message dialog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-3347745 closes odoo/odoo#124032 X-original-commit: 860ce3a Signed-off-by: Louis Wicket (wil) Signed-off-by: Alexandre Kühn (aku) --- addons/mail/static/src/core/thread_model.js | 4 ++++ addons/mail/static/src/core_ui/message.xml | 2 +- .../src/core_ui/message_confirm_dialog.js | 19 +++++++++++++++++-- .../src/core_ui/message_confirm_dialog.xml | 4 ++-- .../src/discuss/message_pin/message_patch.js | 19 +++++++++++++------ .../message_pin/pinned_messages_tests.js | 8 ++++---- 6 files changed, 41 insertions(+), 15 deletions(-) diff --git a/addons/mail/static/src/core/thread_model.js b/addons/mail/static/src/core/thread_model.js index 29609f1b926..bbf927551d8 100644 --- a/addons/mail/static/src/core/thread_model.js +++ b/addons/mail/static/src/core/thread_model.js @@ -347,6 +347,10 @@ export class Thread { return this.messages.filter((message) => !message.isTransient); } + get prefix() { + return this.isChatChannel ? "@" : "#"; + } + get lastSelfMessageSeenByEveryone() { const otherSeenInfos = [...this.seenInfos].filter( (seenInfo) => seenInfo.partner.id !== this._store.self?.id diff --git a/addons/mail/static/src/core_ui/message.xml b/addons/mail/static/src/core_ui/message.xml index 411cfc56d3c..a50d77a6725 100644 --- a/addons/mail/static/src/core_ui/message.xml +++ b/addons/mail/static/src/core_ui/message.xml @@ -52,7 +52,7 @@ on - (from #) + (from )
diff --git a/addons/mail/static/src/core_ui/message_confirm_dialog.js b/addons/mail/static/src/core_ui/message_confirm_dialog.js index 70b7ba8a835..e097517ee5d 100644 --- a/addons/mail/static/src/core_ui/message_confirm_dialog.js +++ b/addons/mail/static/src/core_ui/message_confirm_dialog.js @@ -8,13 +8,28 @@ import { useService } from "@web/core/utils/hooks"; export class MessageConfirmDialog extends Component { static components = { Dialog }; - static props = ["close", "message", "messageComponent", "prompt", "onConfirm"]; + static props = [ + "close", + "confirmColor?", + "confirmText?", + "message", + "messageComponent", + "prompt", + "size?", + "title?", + "onConfirm", + ]; + static defaultProps = { + confirmColor: "btn-primary", + confirmText: _t("Confirm"), + size: "xl", + title: _t("Confirmation"), + }; static template = "mail.MessageConfirmDialog"; setup() { /** @type {import("@mail/core/message_service").MessageService} */ this.messageService = useState(useService("mail.message")); - this.title = _t("Confirmation"); } onClickConfirm() { diff --git a/addons/mail/static/src/core_ui/message_confirm_dialog.xml b/addons/mail/static/src/core_ui/message_confirm_dialog.xml index f0bbd41d62b..b8e72b229b8 100644 --- a/addons/mail/static/src/core_ui/message_confirm_dialog.xml +++ b/addons/mail/static/src/core_ui/message_confirm_dialog.xml @@ -2,13 +2,13 @@ - +

- +
diff --git a/addons/mail/static/src/discuss/message_pin/message_patch.js b/addons/mail/static/src/discuss/message_pin/message_patch.js index 84d9a7cb770..c33ee3b520c 100644 --- a/addons/mail/static/src/discuss/message_pin/message_patch.js +++ b/addons/mail/static/src/discuss/message_pin/message_patch.js @@ -5,6 +5,7 @@ import { MessageConfirmDialog } from "@mail/core_ui/message_confirm_dialog"; import { useMessagePinService } from "@mail/discuss/message_pin/message_pin_service"; import { _t } from "@web/core/l10n/translation"; import { patch } from "@web/core/utils/patch"; +import { sprintf } from "@web/core/utils/strings"; patch(Message, "discuss/message_pin", { components: { ...Message.components }, @@ -16,15 +17,21 @@ patch(Message.prototype, "discuss/message_pin", { this.messagePinService = useMessagePinService(); }, onClickPin() { - const prompt = this.messagePinService.getPinnedAt(this.message.id) - ? _t("Are you sure you want to remove this pinned message?") - : _t( - "The following message will be pinned to the channel. Are you sure you want to continue?" - ); + const pinnedAt = this.messagePinService.getPinnedAt(this.message.id); + const thread = this.message.originThread; this.env.services.dialog.add(MessageConfirmDialog, { + confirmColor: pinnedAt ? "btn-danger" : undefined, + confirmText: pinnedAt ? _t("Yes, remove it please") : _t("Yeah, pin it!"), message: this.message, messageComponent: Message, - prompt, + prompt: pinnedAt + ? _t("Well nothing lasts forever, but are you sure you want to unpin this message?") + : sprintf( + _t("You sure want this message pinned to %(conversation)s forever and ever?"), + { conversation: thread.prefix + thread.displayName } + ), + size: "md", + title: pinnedAt ? _t("Unpin Message") : _t("Pin It"), onConfirm: () => this.messagePinService.setPin( this.message, diff --git a/addons/mail/static/tests/discuss/message_pin/pinned_messages_tests.js b/addons/mail/static/tests/discuss/message_pin/pinned_messages_tests.js index 26ff03442e4..958df5761fb 100644 --- a/addons/mail/static/tests/discuss/message_pin/pinned_messages_tests.js +++ b/addons/mail/static/tests/discuss/message_pin/pinned_messages_tests.js @@ -22,7 +22,7 @@ QUnit.test("Pin message", async (assert) => { ); await click(".o-mail-Message [title='Expand']"); await click(".dropdown-item:contains(Pin)"); - await click(".modal-footer button:contains(Confirm)"); + await click(".modal-footer button:contains(pin it)"); assert.containsOnce($, ".o-discuss-PinnedMessagesPanel .o-mail-Message:contains(Hello world)"); }); @@ -41,7 +41,7 @@ QUnit.test("Unpin message", async (assert) => { assert.containsOnce($, ".o-discuss-PinnedMessagesPanel .o-mail-Message"); await click(".o-mail-Message [title='Expand']"); await click(".dropdown-item:contains(Unpin)"); - await click(".modal-footer button:contains(Confirm)"); + await click(".modal-footer button:contains(Yes)"); assert.containsNone($, ".o-discuss-PinnedMessagesPanel .o-mail-Message"); }); @@ -77,7 +77,7 @@ QUnit.test("Open pinned panel from notification", async (assert) => { await openDiscuss(channelId); await click(".o-mail-Message:eq(0) [title='Expand']"); await click(".dropdown-item:contains(Pin)"); - await click(".modal-footer button:contains(Confirm)"); + await click(".modal-footer button:contains(pin it)"); assert.containsNone($, ".o-discuss-PinnedMessagesPanel"); await click(".o_mail_notification a:contains(See all pinned messages)"); assert.containsOnce($, ".o-discuss-PinnedMessagesPanel"); @@ -140,7 +140,7 @@ QUnit.test("Jump to message from notification", async (assert) => { await openDiscuss(channelId); await click(".o-mail-Message:eq(0) [title='Expand']"); await click(".dropdown-item:contains(Pin)"); - await click(".modal-footer button:contains(Confirm)"); + await click(".modal-footer button:contains(pin it)"); await click(".o_mail_notification a:contains(message)"); await nextTick(); assert.isVisible($(".o-mail-Message:contains(Hello world!)"));