From 11b4355a7bdfafcb41574e07019ff86ec61b39b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20K=C3=BChn?= Date: Mon, 22 May 2023 10:28:07 +0000 Subject: [PATCH] [FIX] mail: several discuss improvements (following MILK redesign) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closes odoo/odoo#121948 Forward-port-of: #121683 Signed-off-by: Sébastien Theys (seb) Signed-off-by: Alexandre Kühn (aku) --- .../static/src/im_status_patch.xml | 4 +- .../static/src/discuss_app/discuss_patch.xml | 8 --- addons/mail/controllers/discuss/binary.py | 2 +- addons/mail/controllers/discuss/channel.py | 2 +- addons/mail/i18n/mail.pot | 7 +++ addons/mail/models/discuss/discuss_channel.py | 2 - addons/mail/static/src/composer/composer.xml | 8 +-- addons/mail/static/src/core/thread_service.js | 12 ++++ addons/mail/static/src/core_ui/message.scss | 2 +- addons/mail/static/src/core_ui/message.xml | 26 ++++----- .../static/src/core_ui/message_in_reply.xml | 2 +- .../src/core_ui/message_seen_indicator.js | 9 +++ .../src/core_ui/message_seen_indicator.xml | 2 +- .../static/src/core_ui/primary_variables.scss | 1 + addons/mail/static/src/core_ui/thread.scss | 8 +++ addons/mail/static/src/core_ui/thread.xml | 10 ++-- .../mail/static/src/discuss/call_settings.xml | 2 +- .../src/discuss/channel_member_list.scss | 4 +- .../src/discuss/channel_member_list.xml | 6 +- .../src/discuss_app/autoresize_input.xml | 2 +- addons/mail/static/src/discuss_app/discuss.js | 6 +- .../mail/static/src/discuss_app/discuss.scss | 26 ++++----- .../mail/static/src/discuss_app/discuss.xml | 20 +++---- .../src/discuss_app/pinned_messages_panel.xml | 4 +- .../static/src/emoji_picker/emoji_picker.scss | 2 +- .../static/src/emoji_picker/emoji_picker.xml | 4 +- .../src/web/chat_window/chat_window.scss | 12 ++-- .../src/web/chat_window/chat_window.xml | 2 +- .../static/src/web/discuss_app/sidebar.scss | 2 +- .../static/src/web/discuss_app/sidebar.xml | 16 +++--- .../web/messaging_menu/messaging_menu.scss | 7 ++- .../src/web/messaging_menu/messaging_menu.xml | 57 ++++++++++--------- .../web/messaging_menu/notification_item.js | 1 - .../web/messaging_menu/notification_item.xml | 4 +- .../static/src/web/thread_service_patch.js | 7 --- addons/mail/static/tests/emoji/emoji_tests.js | 14 ++--- .../mock_server/models/discuss_channel.js | 3 - addons/mail/views/discuss_channel_views.xml | 2 +- .../tests/test_performance.py | 8 +-- 39 files changed, 168 insertions(+), 148 deletions(-) delete mode 100644 addons/im_livechat/static/src/discuss_app/discuss_patch.xml diff --git a/addons/hr_holidays/static/src/im_status_patch.xml b/addons/hr_holidays/static/src/im_status_patch.xml index afc0998a6b5..69b865bf10b 100644 --- a/addons/hr_holidays/static/src/im_status_patch.xml +++ b/addons/hr_holidays/static/src/im_status_patch.xml @@ -3,8 +3,8 @@ - - + + $0 diff --git a/addons/im_livechat/static/src/discuss_app/discuss_patch.xml b/addons/im_livechat/static/src/discuss_app/discuss_patch.xml deleted file mode 100644 index 347509862a2..00000000000 --- a/addons/im_livechat/static/src/discuss_app/discuss_patch.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - thread and thread.model === 'discuss.channel' and thread.type !== 'livechat' - - - diff --git a/addons/mail/controllers/discuss/binary.py b/addons/mail/controllers/discuss/binary.py index 2220281bbe3..08db367a196 100644 --- a/addons/mail/controllers/discuss/binary.py +++ b/addons/mail/controllers/discuss/binary.py @@ -118,6 +118,6 @@ class BinaryController(http.Controller): raise NotFound() return ( request.env["ir.binary"] - ._get_image_stream_from(attachment_sudo, width=width, height=height) + ._get_image_stream_from(attachment_sudo, width=int(width), height=int(height)) .get_response(as_attachment=kwargs.get("download")) ) diff --git a/addons/mail/controllers/discuss/channel.py b/addons/mail/controllers/discuss/channel.py index 5c3442b1692..814999ae98b 100644 --- a/addons/mail/controllers/discuss/channel.py +++ b/addons/mail/controllers/discuss/channel.py @@ -38,7 +38,7 @@ class ChannelController(http.Controller): except UserError: raise NotFound() - @http.route("/discuss/channel/update_avatar", methods=["POST"], type="json", auth="public") + @http.route("/discuss/channel/update_avatar", methods=["POST"], type="json") def discuss_channel_avatar_update(self, channel_id, data): channel = request.env["discuss.channel"].browse(int(channel_id)).exists() if not channel or not data: diff --git a/addons/mail/i18n/mail.pot b/addons/mail/i18n/mail.pot index 0d17f55cc58..4d9c8659872 100644 --- a/addons/mail/i18n/mail.pot +++ b/addons/mail/i18n/mail.pot @@ -130,6 +130,13 @@ msgstr "" msgid "%s and %s are typing..." msgstr "" +#. module: mail +#. odoo-javascript +#: code:addons/mail/static/src/core_ui/message_seen_indicator.js:0 +#, python-format +msgid "Seen by everyone" +msgstr "" + #. module: mail #. odoo-javascript #: code:addons/mail/static/src/core_ui/message_reactions.js:0 diff --git a/addons/mail/models/discuss/discuss_channel.py b/addons/mail/models/discuss/discuss_channel.py index fff94698ff2..81e153b2a59 100644 --- a/addons/mail/models/discuss/discuss_channel.py +++ b/addons/mail/models/discuss/discuss_channel.py @@ -115,8 +115,6 @@ class Channel(models.Model): for channel in self: if channel.channel_type == 'channel': channel.is_editable = self.sudo(False).env.is_admin() or channel.create_uid.id == self.env.user.id - elif channel.channel_type == 'chat': - channel.is_editable = True elif channel.channel_type == 'group': channel.is_editable = channel.is_member and not self.sudo(False).env.user._is_public() else: diff --git a/addons/mail/static/src/composer/composer.xml b/addons/mail/static/src/composer/composer.xml index 58685e5b57d..72f56bb3953 100644 --- a/addons/mail/static/src/composer/composer.xml +++ b/addons/mail/static/src/composer/composer.xml @@ -62,10 +62,10 @@
diff --git a/addons/mail/static/src/core/thread_service.js b/addons/mail/static/src/core/thread_service.js index 5c9fd91f37d..0032c089bfe 100644 --- a/addons/mail/static/src/core/thread_service.js +++ b/addons/mail/static/src/core/thread_service.js @@ -1089,6 +1089,18 @@ export class ThreadService { } return DEFAULT_AVATAR; } + + /** + * @param {number} threadId + * @param {string} data base64 representation of the binary + * @returns + */ + async notifyThreadAvatarToServer(threadId, data) { + return this.rpc("/discuss/channel/update_avatar", { + channel_id: threadId, + data, + }); + } } export const threadService = { diff --git a/addons/mail/static/src/core_ui/message.scss b/addons/mail/static/src/core_ui/message.scss index 06b7edf02df..27e92b3af22 100644 --- a/addons/mail/static/src/core_ui/message.scss +++ b/addons/mail/static/src/core_ui/message.scss @@ -54,7 +54,7 @@ } button:hover, .focus { - background-color: $o-gray-300 !important; + background-color: $o-gray-200 !important; } } diff --git a/addons/mail/static/src/core_ui/message.xml b/addons/mail/static/src/core_ui/message.xml index a618927c850..a640c1c56c6 100644 --- a/addons/mail/static/src/core_ui/message.xml +++ b/addons/mail/static/src/core_ui/message.xml @@ -36,7 +36,7 @@ -
+
- - - - + + + + - + - View Reactions - Mark as Read - Unfollow - - Mark as Unread - Edit - Delete + View Reactions + Mark as Read + Unfollow + + Mark as Unread + Edit + Delete
diff --git a/addons/mail/static/src/core_ui/message_in_reply.xml b/addons/mail/static/src/core_ui/message_in_reply.xml index cd9e885cdb4..2c3d4811a15 100644 --- a/addons/mail/static/src/core_ui/message_in_reply.xml +++ b/addons/mail/static/src/core_ui/message_in_reply.xml @@ -8,7 +8,7 @@ }"> - + Avatar @: diff --git a/addons/mail/static/src/core_ui/message_seen_indicator.js b/addons/mail/static/src/core_ui/message_seen_indicator.js index 48b4bfd020f..864ce0b8bf5 100644 --- a/addons/mail/static/src/core_ui/message_seen_indicator.js +++ b/addons/mail/static/src/core_ui/message_seen_indicator.js @@ -27,6 +27,15 @@ export class MessageSeenIndicator extends Component { return otherDidNotSee.length === 0; } + get hasEveryoneReceived() { + return !([...this.props.thread.seenInfos].some((seenInfo) => { + return ( + seenInfo.partner.id !== this.props.message.author.id && + (!seenInfo.lastFetchedMessage || seenInfo.lastFetchedMessage.id < this.props.message.id) + ); + })); + } + get isMessagePreviousToLastSelfMessageSeenByEveryone() { if (!this.props.thread.lastSelfMessageSeenByEveryone) { return false; diff --git a/addons/mail/static/src/core_ui/message_seen_indicator.xml b/addons/mail/static/src/core_ui/message_seen_indicator.xml index 39f2541d49b..1491400ca59 100644 --- a/addons/mail/static/src/core_ui/message_seen_indicator.xml +++ b/addons/mail/static/src/core_ui/message_seen_indicator.xml @@ -1,7 +1,7 @@ - + diff --git a/addons/mail/static/src/core_ui/primary_variables.scss b/addons/mail/static/src/core_ui/primary_variables.scss index 31310c0f23c..115c4251d5f 100644 --- a/addons/mail/static/src/core_ui/primary_variables.scss +++ b/addons/mail/static/src/core_ui/primary_variables.scss @@ -13,6 +13,7 @@ $o-mail-Message-sidebarWidth: 48px !default; $o-mail-NavigableList-zIndex: 11; $o-mail-Chatter-minWidth: 530px !default; $o-mail-Discuss-inspector: 250px !default; +$o-mail-Discuss-headerHeight: 48px !default; @mixin o-mail-AttachmentViewer-arrow { background-color: rgba(black, 0.4); diff --git a/addons/mail/static/src/core_ui/thread.scss b/addons/mail/static/src/core_ui/thread.scss index d32f572c49d..c170d2c2875 100644 --- a/addons/mail/static/src/core_ui/thread.scss +++ b/addons/mail/static/src/core_ui/thread.scss @@ -1,3 +1,7 @@ +.o-mail-Thread-date hr { + opacity: $hr-opacity / 2; +} + .o-mail-Thread-newMessage { transition: opacity 0.5s; @@ -25,3 +29,7 @@ background-color: mix(map-get($theme-colors, 'info'), $o-webclient-background-color, 5%); z-index: $o-mail-NavigableList-zIndex - 2; } + +.o-mail-NotificationMessage p { + margin-bottom: 0; +} diff --git a/addons/mail/static/src/core_ui/thread.xml b/addons/mail/static/src/core_ui/thread.xml index 7dc9d19581e..55dff09a31a 100644 --- a/addons/mail/static/src/core_ui/thread.xml +++ b/addons/mail/static/src/core_ui/thread.xml @@ -20,15 +20,15 @@
-
- -
+
+ +
-
New messages +
New messages
@@ -114,7 +114,7 @@ -
diff --git a/addons/mail/static/src/discuss/call_settings.xml b/addons/mail/static/src/discuss/call_settings.xml index db966371a4a..d31684e535c 100644 --- a/addons/mail/static/src/discuss/call_settings.xml +++ b/addons/mail/static/src/discuss/call_settings.xml @@ -2,7 +2,7 @@ -
+
Voice Settings
diff --git a/addons/mail/static/src/discuss/channel_member_list.scss b/addons/mail/static/src/discuss/channel_member_list.scss index a2a190128cb..40103597108 100644 --- a/addons/mail/static/src/discuss/channel_member_list.scss +++ b/addons/mail/static/src/discuss/channel_member_list.scss @@ -1,5 +1,5 @@ -.o-discuss-ChannelMember:hover { - @extend .bg-300; +.o-discuss-ChannelMember.cursor-pointer:hover { + @extend .bg-200; } .o-discuss-ChannelMember-avatar { diff --git a/addons/mail/static/src/discuss/channel_member_list.xml b/addons/mail/static/src/discuss/channel_member_list.xml index 2877f103fb7..e0f5a5334c3 100644 --- a/addons/mail/static/src/discuss/channel_member_list.xml +++ b/addons/mail/static/src/discuss/channel_member_list.xml @@ -2,7 +2,7 @@ -
+
Online - @@ -26,11 +26,11 @@ -
+
- +
diff --git a/addons/mail/static/src/discuss_app/autoresize_input.xml b/addons/mail/static/src/discuss_app/autoresize_input.xml index cb8082127c3..122883dccc6 100644 --- a/addons/mail/static/src/discuss_app/autoresize_input.xml +++ b/addons/mail/static/src/discuss_app/autoresize_input.xml @@ -3,7 +3,7 @@
-
-
+
+ -
-
+
+
diff --git a/addons/mail/static/src/discuss_app/pinned_messages_panel.xml b/addons/mail/static/src/discuss_app/pinned_messages_panel.xml index ea82b166f6d..2d7d18a47c7 100644 --- a/addons/mail/static/src/discuss_app/pinned_messages_panel.xml +++ b/addons/mail/static/src/discuss_app/pinned_messages_panel.xml @@ -1,10 +1,10 @@ -
-

+

Pinned messages

diff --git a/addons/mail/static/src/emoji_picker/emoji_picker.scss b/addons/mail/static/src/emoji_picker/emoji_picker.scss index 6825e1e44d8..ed56b87a28a 100644 --- a/addons/mail/static/src/emoji_picker/emoji_picker.scss +++ b/addons/mail/static/src/emoji_picker/emoji_picker.scss @@ -13,7 +13,7 @@ width: 30px; font-size: 1rem; &:hover { - background-color: $gray-300; + background-color: $gray-200; } } diff --git a/addons/mail/static/src/emoji_picker/emoji_picker.xml b/addons/mail/static/src/emoji_picker/emoji_picker.xml index 1eaaff96b97..5c081e43205 100644 --- a/addons/mail/static/src/emoji_picker/emoji_picker.xml +++ b/addons/mail/static/src/emoji_picker/emoji_picker.xml @@ -60,7 +60,7 @@ - + @@ -71,7 +71,7 @@ - + diff --git a/addons/mail/static/src/web/chat_window/chat_window.scss b/addons/mail/static/src/web/chat_window/chat_window.scss index 70d2eb165e5..ae5fd207a3a 100644 --- a/addons/mail/static/src/web/chat_window/chat_window.scss +++ b/addons/mail/static/src/web/chat_window/chat_window.scss @@ -6,7 +6,7 @@ outline: none; &.o-folded { - height: 48px; + height: $o-mail-Discuss-headerHeight; } .o-mail-ChatWindow-command:hover { @@ -15,12 +15,10 @@ } .o-mail-ChatWindow-header { - height: 48px; + height: $o-mail-Discuss-headerHeight; - .o-mail-ChatWindow-threadAvatar { - img { - height: 28px; - width: 28px; - } + .o-mail-ChatWindow-threadAvatar img { + height: 28px; + width: 28px; } } diff --git a/addons/mail/static/src/web/chat_window/chat_window.xml b/addons/mail/static/src/web/chat_window/chat_window.xml index d83230df505..6cef10aac89 100644 --- a/addons/mail/static/src/web/chat_window/chat_window.xml +++ b/addons/mail/static/src/web/chat_window/chat_window.xml @@ -24,7 +24,7 @@ - diff --git a/addons/mail/static/src/web/discuss_app/sidebar.scss b/addons/mail/static/src/web/discuss_app/sidebar.scss index 14d0657dc19..6d6a104643c 100644 --- a/addons/mail/static/src/web/discuss_app/sidebar.scss +++ b/addons/mail/static/src/web/discuss_app/sidebar.scss @@ -7,7 +7,7 @@ } .o-mail-DiscussSidebar-item:hover { - background-color: $o-gray-300 !important; + background-color: $o-gray-200 !important; .o-mail-DiscussCategoryItem-commands { display: flex !important; diff --git a/addons/mail/static/src/web/discuss_app/sidebar.xml b/addons/mail/static/src/web/discuss_app/sidebar.xml index 467bb3bbbf6..c0f82d97a8f 100644 --- a/addons/mail/static/src/web/discuss_app/sidebar.xml +++ b/addons/mail/static/src/web/discuss_app/sidebar.xml @@ -8,7 +8,7 @@ Start a meeting
-
+
@@ -20,7 +20,7 @@
-
+
@@ -35,11 +35,11 @@ - - + + +
@@ -49,30 +49,33 @@
No conversation yet...
- - - - - - + + body="notificationRequest.body" + displayName="notificationRequest.displayName" + iconSrc="notificationRequest.iconSrc" + onClick="() => notification.requestPermission()" + > + + + + +
+
+ + + +
+
@@ -83,7 +86,6 @@ displayName="thread.displayName" iconSrc="thread.imgUrl" hasMarkAsReadButton="thread.isUnread" - isLast="thread_last" onClick="(isMarkAsRead) => this.onClickThread(isMarkAsRead, thread)" onSwipeRight="hasTouch() and thread.isUnread ? { action: () => this.markAsRead(thread), icon: 'fa-check-circle', bgColor: 'bg-success' } : undefined" onSwipeLeft="hasTouch() and threadService.canUnpin(thread) ? { action: () => this.threadService.unpin(thread), icon: 'fa-times-circle', bgColor: 'bg-danger' } : undefined" @@ -100,6 +102,7 @@ +
diff --git a/addons/mail/static/src/web/messaging_menu/notification_item.js b/addons/mail/static/src/web/messaging_menu/notification_item.js index 19ea10e6214..13efabd55bf 100644 --- a/addons/mail/static/src/web/messaging_menu/notification_item.js +++ b/addons/mail/static/src/web/messaging_menu/notification_item.js @@ -14,7 +14,6 @@ export class NotificationItem extends Component { "displayName", "hasMarkAsReadButton?", "iconSrc?", - "isLast", "onClick", "onSwipeLeft?", "onSwipeRight?", diff --git a/addons/mail/static/src/web/messaging_menu/notification_item.xml b/addons/mail/static/src/web/messaging_menu/notification_item.xml index ae134d9fe85..2ade51f361d 100644 --- a/addons/mail/static/src/web/messaging_menu/notification_item.xml +++ b/addons/mail/static/src/web/messaging_menu/notification_item.xml @@ -3,7 +3,7 @@ -
+
Notification Item Image @@ -24,7 +24,7 @@
- +
diff --git a/addons/mail/static/src/web/thread_service_patch.js b/addons/mail/static/src/web/thread_service_patch.js index a5d4a53e526..089110ec1f6 100644 --- a/addons/mail/static/src/web/thread_service_patch.js +++ b/addons/mail/static/src/web/thread_service_patch.js @@ -199,13 +199,6 @@ patch(ThreadService.prototype, "mail/web", { } delete this.store.followers[follower.id]; }, - - async updateAvatar(threadId, data) { - return this.rpc("/discuss/channel/update_avatar", { - channel_id: threadId, - data, - }); - }, }); patch(threadService, "mail/web", { diff --git a/addons/mail/static/tests/emoji/emoji_tests.js b/addons/mail/static/tests/emoji/emoji_tests.js index fa68557a25b..993cec8ea5e 100644 --- a/addons/mail/static/tests/emoji/emoji_tests.js +++ b/addons/mail/static/tests/emoji/emoji_tests.js @@ -49,22 +49,22 @@ QUnit.test("Basic keyboard navigation", async (assert) => { const { openDiscuss } = await start(); await openDiscuss(channelId); await click("button[aria-label='Emojis']"); - assert.containsOnce($, ".o-mail-EmojiPicker-content .o-mail-Emoji[data-index=0].bg-300"); // bg-300 means active + assert.containsOnce($, ".o-mail-EmojiPicker-content .o-mail-Emoji[data-index=0].bg-200"); // bg-200 means active await afterNextRender(() => triggerHotkey("ArrowRight")); - assert.containsOnce($, ".o-mail-EmojiPicker-content .o-mail-Emoji[data-index=1].bg-300"); + assert.containsOnce($, ".o-mail-EmojiPicker-content .o-mail-Emoji[data-index=1].bg-200"); await afterNextRender(() => triggerHotkey("ArrowDown")); assert.containsOnce( $, - `.o-mail-EmojiPicker-content .o-mail-Emoji[data-index=${EMOJI_PER_ROW + 1}].bg-300` + `.o-mail-EmojiPicker-content .o-mail-Emoji[data-index=${EMOJI_PER_ROW + 1}].bg-200` ); await afterNextRender(() => triggerHotkey("ArrowLeft")); assert.containsOnce( $, - `.o-mail-EmojiPicker-content .o-mail-Emoji[data-index=${EMOJI_PER_ROW}].bg-300` + `.o-mail-EmojiPicker-content .o-mail-Emoji[data-index=${EMOJI_PER_ROW}].bg-200` ); await afterNextRender(() => triggerHotkey("ArrowUp")); - assert.containsOnce($, ".o-mail-EmojiPicker-content .o-mail-Emoji[data-index=0].bg-300"); - const codepoints = $(".o-mail-EmojiPicker-content .o-mail-Emoji[data-index=0].bg-300").data( + assert.containsOnce($, ".o-mail-EmojiPicker-content .o-mail-Emoji[data-index=0].bg-200"); + const codepoints = $(".o-mail-EmojiPicker-content .o-mail-Emoji[data-index=0].bg-200").data( "codepoints" ); await afterNextRender(() => triggerHotkey("Enter")); @@ -148,7 +148,7 @@ QUnit.test("first category should be highlight by default", async (assert) => { const { openDiscuss } = await start(); await openDiscuss(channelId); await click("button[aria-label='Emojis']"); - assert.containsOnce($, ".o-mail-EmojiPicker-header .o-mail-Emoji:eq(0).bg-300"); + assert.containsOnce($, ".o-mail-EmojiPicker-header .o-mail-Emoji:eq(0).bg-200"); }); QUnit.test( diff --git a/addons/mail/static/tests/helpers/mock_server/models/discuss_channel.js b/addons/mail/static/tests/helpers/mock_server/models/discuss_channel.js index 6007c5bcbfa..dee5e9bfe63 100644 --- a/addons/mail/static/tests/helpers/mock_server/models/discuss_channel.js +++ b/addons/mail/static/tests/helpers/mock_server/models/discuss_channel.js @@ -633,9 +633,6 @@ patch(MockServer.prototype, "mail/models/discuss_channel", { case "channel": is_editable = channel.create_uid === this.pyEnv.currentPartnerId; break; - case "chat": - is_editable = true; - break; case "group": is_editable = memberOfCurrentUser; break; diff --git a/addons/mail/views/discuss_channel_views.xml b/addons/mail/views/discuss_channel_views.xml index a7214a89f6e..7ace51caf3d 100644 --- a/addons/mail/views/discuss_channel_views.xml +++ b/addons/mail/views/discuss_channel_views.xml @@ -52,7 +52,7 @@
- +