diff --git a/addons/hr_holidays/static/tests/thread_icon_patch_tests.js b/addons/hr_holidays/static/tests/thread_icon_patch_tests.js index aee87d6bcf6..b13b94c3306 100644 --- a/addons/hr_holidays/static/tests/thread_icon_patch_tests.js +++ b/addons/hr_holidays/static/tests/thread_icon_patch_tests.js @@ -21,7 +21,7 @@ QUnit.test("thread icon of a chat when correspondent is on leave & online", asyn await openDiscuss(); assert.containsOnce( $, - ".o-mail-DiscussCategoryItem:contains(Demo) .o-mail-ThreadIcon .fa-plane[title='Online']" + ".o-mail-DiscussSidebarChannel:contains(Demo) .o-mail-ThreadIcon .fa-plane[title='Online']" ); }); @@ -42,7 +42,7 @@ QUnit.test("thread icon of a chat when correspondent is on leave & away", async await openDiscuss(); assert.containsOnce( $, - ".o-mail-DiscussCategoryItem:contains(Demo) .o-mail-ThreadIcon .fa-plane[title='Away']" + ".o-mail-DiscussSidebarChannel:contains(Demo) .o-mail-ThreadIcon .fa-plane[title='Away']" ); }); @@ -63,6 +63,6 @@ QUnit.test("thread icon of a chat when correspondent is on leave & offline", asy await openDiscuss(); assert.containsOnce( $, - ".o-mail-DiscussCategoryItem:contains(Demo) .o-mail-ThreadIcon .fa-plane[title='Out of office']" + ".o-mail-DiscussSidebarChannel:contains(Demo) .o-mail-ThreadIcon .fa-plane[title='Out of office']" ); }); diff --git a/addons/im_livechat/static/src/core/store_service_patch.js b/addons/im_livechat/static/src/core/store_service_patch.js index 350d8a2fe7a..4af864acd1d 100644 --- a/addons/im_livechat/static/src/core/store_service_patch.js +++ b/addons/im_livechat/static/src/core/store_service_patch.js @@ -9,7 +9,7 @@ patch(Store.prototype, "im_livechat", { setup(env) { this._super(env); this.discuss.livechat = { - extraClass: "o-mail-DiscussCategory-livechat", + extraClass: "o-mail-DiscussSidebarCategory-livechat", id: "livechat", name: _t("Livechat"), isOpen: false, diff --git a/addons/im_livechat/static/src/discuss_app/discuss_sidebar_categories_livechat.js b/addons/im_livechat/static/src/discuss_app/discuss_sidebar_categories_livechat.js new file mode 100644 index 00000000000..c4ee7b70c97 --- /dev/null +++ b/addons/im_livechat/static/src/discuss_app/discuss_sidebar_categories_livechat.js @@ -0,0 +1,13 @@ +/* @odoo-module */ + +import { discussSidebarCategoriesRegistry } from "@mail/discuss/core/web/discuss_sidebar_categories"; + +discussSidebarCategoriesRegistry.add( + "livechats", + { + predicate: (store) => + store.discuss.livechat.threads.some((localId) => store.threads[localId]?.is_pinned), + value: (store) => store.discuss.livechat, + }, + { sequence: 20 } +); diff --git a/addons/im_livechat/static/src/discuss_app/sidebar_patch.js b/addons/im_livechat/static/src/discuss_app/sidebar_patch.js deleted file mode 100644 index ef7ab8fc698..00000000000 --- a/addons/im_livechat/static/src/discuss_app/sidebar_patch.js +++ /dev/null @@ -1,13 +0,0 @@ -/* @odoo-module */ - -import { Sidebar } from "@mail/core/web/sidebar"; - -import { patch } from "@web/core/utils/patch"; - -patch(Sidebar.prototype, "im_livechat", { - get shouldDisplayLivechatCategory() { - return this.store.discuss.livechat.threads.some( - (localId) => this.store.threads[localId]?.is_pinned - ); - }, -}); diff --git a/addons/im_livechat/static/src/discuss_app/sidebar_patch.xml b/addons/im_livechat/static/src/discuss_app/sidebar_patch.xml deleted file mode 100644 index 442cc8ed2f7..00000000000 --- a/addons/im_livechat/static/src/discuss_app/sidebar_patch.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/addons/im_livechat/static/tests/channel_invite_tests.js b/addons/im_livechat/static/tests/channel_invite_tests.js index ada709ba11b..0089557aa1e 100644 --- a/addons/im_livechat/static/tests/channel_invite_tests.js +++ b/addons/im_livechat/static/tests/channel_invite_tests.js @@ -98,11 +98,11 @@ QUnit.test("Partners invited most frequently by the current user come first", as const { openDiscuss } = await start(); await openDiscuss(); - await click(".o-mail-DiscussCategoryItem:contains(Visitor #1)"); + await click(".o-mail-DiscussSidebarChannel:contains(Visitor #1)"); await click("button[title='Add Users']"); await click(".o-discuss-ChannelInvitation-selectable:contains(John) input"); await click("button:contains(Invite)"); - await click(".o-mail-DiscussCategoryItem:contains(Visitor #2)"); + await click(".o-mail-DiscussSidebarChannel:contains(Visitor #2)"); await click("button[title='Add Users']"); const partnerSuggestions = document.querySelectorAll(".o-discuss-ChannelInvitation-selectable"); assert.ok(partnerSuggestions[0].textContent.includes("John")); diff --git a/addons/im_livechat/static/tests/discuss_patch_tests.js b/addons/im_livechat/static/tests/discuss_patch_tests.js index 5ca22855a43..180e185ed2f 100644 --- a/addons/im_livechat/static/tests/discuss_patch_tests.js +++ b/addons/im_livechat/static/tests/discuss_patch_tests.js @@ -85,7 +85,7 @@ QUnit.test("add livechat in the sidebar on visitor sending first message", async }); const { env, openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategory-livechat"); + assert.containsNone($, ".o-mail-DiscussSidebarCategory-livechat"); // simulate livechat visitor sending a message const [channel] = pyEnv["discuss.channel"].searchRead([["id", "=", channelId]]); await afterNextRender(async () => @@ -95,11 +95,14 @@ QUnit.test("add livechat in the sidebar on visitor sending first message", async message_content: "new message", }) ); - assert.containsOnce($, ".o-mail-DiscussCategory-livechat"); - assert.containsOnce($, ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem"); + assert.containsOnce($, ".o-mail-DiscussSidebarCategory-livechat"); assert.containsOnce( $, - ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem:contains(Visitor (Belgium))" + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel" + ); + assert.containsOnce( + $, + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel:contains(Visitor (Belgium))" ); }); @@ -175,14 +178,14 @@ QUnit.test( ]); const { openDiscuss } = await start(); await openDiscuss(); - assert.strictEqual($(".o-mail-DiscussCategoryItem:eq(0)").text(), "Visitor 12"); - assert.strictEqual($(".o-mail-DiscussCategoryItem:eq(1)").text(), "Visitor 11"); + assert.strictEqual($(".o-mail-DiscussSidebarChannel:eq(0)").text(), "Visitor 12"); + assert.strictEqual($(".o-mail-DiscussSidebarChannel:eq(1)").text(), "Visitor 11"); // post a new message on the last channel - await click(".o-mail-DiscussCategoryItem:eq(1)"); + await click(".o-mail-DiscussSidebarChannel:eq(1)"); await insertText(".o-mail-Composer-input", "Blabla"); await click(".o-mail-Composer-send"); - assert.containsN($, ".o-mail-DiscussCategoryItem", 2); - assert.strictEqual($(".o-mail-DiscussCategoryItem:eq(0)").text(), "Visitor 11"); - assert.strictEqual($(".o-mail-DiscussCategoryItem:eq(1)").text(), "Visitor 12"); + assert.containsN($, ".o-mail-DiscussSidebarChannel", 2); + assert.strictEqual($(".o-mail-DiscussSidebarChannel:eq(0)").text(), "Visitor 11"); + assert.strictEqual($(".o-mail-DiscussSidebarChannel:eq(1)").text(), "Visitor 12"); } ); diff --git a/addons/im_livechat/static/tests/go_to_oldest_unread_thread_tests.js b/addons/im_livechat/static/tests/go_to_oldest_unread_thread_tests.js index 56f21f748da..a1f2c0b29b7 100644 --- a/addons/im_livechat/static/tests/go_to_oldest_unread_thread_tests.js +++ b/addons/im_livechat/static/tests/go_to_oldest_unread_thread_tests.js @@ -70,21 +70,18 @@ QUnit.test("tab on discuss composer goes to oldest unread livechat", async (asse const { openDiscuss } = await start(); await openDiscuss(channelIds[0]); - assert.containsOnce($, ".o-mail-DiscussCategoryItem.o-active:contains(Visitor 11)"); - assert.containsOnce( - $, - ".o-mail-Composer-footer:contains(Tab to next livechat)" - ); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel.o-active:contains(Visitor 11)"); + assert.containsOnce($, ".o-mail-Composer-footer:contains(Tab to next livechat)"); await afterNextRender(() => { document.querySelector(".o-mail-Composer-input").focus(); triggerHotkey("Tab"); }); - assert.containsOnce($, ".o-mail-DiscussCategoryItem.o-active:contains(Visitor 13)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel.o-active:contains(Visitor 13)"); await afterNextRender(() => { document.querySelector(".o-mail-Composer-input").focus(); triggerHotkey("Tab"); }); - assert.containsOnce($, ".o-mail-DiscussCategoryItem.o-active:contains(Visitor 12)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel.o-active:contains(Visitor 12)"); }); QUnit.test("switching to folded chat window unfolds it", async (assert) => { @@ -231,7 +228,7 @@ QUnit.test("tab on composer doesn't switch thread if user is typing", async (ass await insertText(".o-mail-Composer-input", "Hello, "); triggerHotkey("Tab"); await nextTick(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem.o-active:contains(Visitor 11)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel.o-active:contains(Visitor 11)"); }); QUnit.test("tab on composer doesn't switch thread if no unread thread", async (assert) => { @@ -264,5 +261,5 @@ QUnit.test("tab on composer doesn't switch thread if no unread thread", async (a document.querySelector(".o-mail-Composer-input").focus(); triggerHotkey("Tab"); await nextTick(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem.o-active:contains(Visitor 11)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel.o-active:contains(Visitor 11)"); }); diff --git a/addons/im_livechat/static/tests/sidebar_patch_tests.js b/addons/im_livechat/static/tests/sidebar_patch_tests.js index fd659e80ca7..4f18a3b3b64 100644 --- a/addons/im_livechat/static/tests/sidebar_patch_tests.js +++ b/addons/im_livechat/static/tests/sidebar_patch_tests.js @@ -20,8 +20,8 @@ QUnit.test("Unknown visitor", async (assert) => { }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussSidebar .o-mail-DiscussCategory-livechat"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(Visitor 11)"); + assert.containsOnce($, ".o-mail-DiscussSidebar .o-mail-DiscussSidebarCategory-livechat"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(Visitor 11)"); }); QUnit.test("Known user with country", async (assert) => { @@ -44,7 +44,7 @@ QUnit.test("Known user with country", async (assert) => { }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(Jean (Belgium))"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(Jean (Belgium))"); }); QUnit.test("Do not show channel when visitor is typing", async (assert) => { @@ -71,7 +71,7 @@ QUnit.test("Do not show channel when visitor is typing", async (assert) => { }); const { env, openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategory-livechat"); + assert.containsNone($, ".o-mail-DiscussSidebarCategory-livechat"); // simulate livechat visitor typing const channel = pyEnv["discuss.channel"].searchRead([["id", "=", channelId]])[0]; await env.services.rpc("/im_livechat/notify_typing", { @@ -82,7 +82,7 @@ QUnit.test("Do not show channel when visitor is typing", async (assert) => { uuid: channel.uuid, }); await nextTick(); - assert.containsNone($, ".o-mail-DiscussCategory-livechat"); + assert.containsNone($, ".o-mail-DiscussSidebarCategory-livechat"); }); QUnit.test("Close should update the value on the server", async (assert) => { @@ -109,7 +109,7 @@ QUnit.test("Close should update the value on the server", async (assert) => { [[currentUserId]] ); assert.ok(initalSettings.is_discuss_sidebar_category_livechat_open); - await click(".o-mail-DiscussCategory-livechat .btn"); + await click(".o-mail-DiscussSidebarCategory-livechat .btn"); const newSettings = await env.services.orm.call( "res.users.settings", "_find_or_create_for_user", @@ -142,7 +142,7 @@ QUnit.test("Open should update the value on the server", async (assert) => { [[currentUserId]] ); assert.notOk(initalSettings.is_discuss_sidebar_category_livechat_open); - await click(".o-mail-DiscussCategory-livechat .btn"); + await click(".o-mail-DiscussSidebarCategory-livechat .btn"); const newSettings = await env.services.orm.call( "res.users.settings", "_find_or_create_for_user", @@ -168,7 +168,10 @@ QUnit.test("Open from the bus", async (assert) => { }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem"); + assert.containsNone( + $, + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel" + ); await afterNextRender(() => { pyEnv["bus.bus"]._sendone(pyEnv.currentPartner, "mail.record/insert", { "res.users.settings": { @@ -177,7 +180,10 @@ QUnit.test("Open from the bus", async (assert) => { }, }); }); - assert.containsOnce($, ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem"); + assert.containsOnce( + $, + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel" + ); }); QUnit.test("Close from the bus", async (assert) => { @@ -197,7 +203,10 @@ QUnit.test("Close from the bus", async (assert) => { }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem"); + assert.containsOnce( + $, + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel" + ); await afterNextRender(() => { pyEnv["bus.bus"]._sendone(pyEnv.currentPartner, "mail.record/insert", { "res.users.settings": { @@ -206,7 +215,10 @@ QUnit.test("Close from the bus", async (assert) => { }, }); }); - assert.containsNone($, ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem"); + assert.containsNone( + $, + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel" + ); }); QUnit.test("Smiley face avatar for an anonymous livechat item", async (assert) => { @@ -223,7 +235,8 @@ QUnit.test("Smiley face avatar for an anonymous livechat item", async (assert) = const { openDiscuss } = await start(); await openDiscuss(); assert.strictEqual( - $(".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem img")[0].dataset.src, + $(".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel img")[0].dataset + .src, "/mail/static/src/img/smiley/avatar.jpg" ); }); @@ -242,7 +255,8 @@ QUnit.test("Partner profile picture for livechat item linked to a partner", asyn const { openDiscuss } = await start(); await openDiscuss(channelId); assert.strictEqual( - $(".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem img")[0].dataset.src, + $(".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel img")[0].dataset + .src, `/web/image/res.partner/${partnerId}/avatar_128` ); }); @@ -269,7 +283,7 @@ QUnit.test("No counter if the category is unfolded and with unread messages", as await openDiscuss(); assert.containsNone( $, - ".o-mail-DiscussCategory-livechat .o-mail-Discuss-category-counter", + ".o-mail-DiscussSidebarCategory-livechat .o-mail-Discuss-category-counter", "should not have a counter if the category is unfolded and with unread messages" ); }); @@ -293,7 +307,7 @@ QUnit.test("No counter if category is folded and without unread messages", async await openDiscuss(); assert.containsNone( $, - ".o-mail-DiscussCategory-livechat .o-discuss-badge", + ".o-mail-DiscussSidebarCategory-livechat .o-discuss-badge", "should not have a counter if the category is unfolded and with unread messages" ); }); @@ -324,7 +338,10 @@ QUnit.test( }); const { openDiscuss } = await start(); await openDiscuss(); - assert.strictEqual($(".o-mail-DiscussCategory-livechat .o-discuss-badge").text(), "1"); + assert.strictEqual( + $(".o-mail-DiscussSidebarCategory-livechat .o-discuss-badge").text(), + "1" + ); } ); @@ -347,12 +364,12 @@ QUnit.test("Close manually by clicking the title", async (assert) => { await openDiscuss(); assert.containsOnce( $, - ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem", + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel", "Category is unfolded initially" ); // fold the livechat category - await click(".o-mail-DiscussCategory-livechat .btn"); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + await click(".o-mail-DiscussSidebarCategory-livechat .btn"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); }); QUnit.test("Open manually by clicking the title", async (assert) => { @@ -374,12 +391,15 @@ QUnit.test("Open manually by clicking the title", async (assert) => { await openDiscuss(); assert.containsNone( $, - ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem", + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel", "Category is folded initially" ); // open the livechat category - await click(".o-mail-DiscussCategory-livechat .btn"); - assert.containsOnce($, ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem"); + await click(".o-mail-DiscussSidebarCategory-livechat .btn"); + assert.containsOnce( + $, + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel" + ); }); QUnit.test("Category item should be invisible if the category is closed", async (assert) => { @@ -395,9 +415,15 @@ QUnit.test("Category item should be invisible if the category is closed", async }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem"); - await click(".o-mail-DiscussCategory-livechat .btn"); - assert.containsNone($, ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem"); + assert.containsOnce( + $, + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel" + ); + await click(".o-mail-DiscussSidebarCategory-livechat .btn"); + assert.containsNone( + $, + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel" + ); }); QUnit.test( @@ -415,14 +441,20 @@ QUnit.test( }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem"); - await click(".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem"); assert.containsOnce( $, - ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem.o-active" + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel" + ); + await click(".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel"); + assert.containsOnce( + $, + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel.o-active" + ); + await click(".o-mail-DiscussSidebarCategory-livechat .btn"); + assert.containsOnce( + $, + ".o-mail-DiscussSidebarCategory-livechat + .o-mail-DiscussSidebarChannel" ); - await click(".o-mail-DiscussCategory-livechat .btn"); - assert.containsOnce($, ".o-mail-DiscussCategory-livechat + .o-mail-DiscussCategoryItem"); } ); @@ -443,7 +475,7 @@ QUnit.test("Clicking on unpin button unpins the channel", async (assert) => { }, }); await openDiscuss(); - await click(".o-mail-DiscussCategoryItem [title='Unpin Conversation']"); + await click(".o-mail-DiscussSidebarChannel [title='Unpin Conversation']"); assert.verifySteps(["You unpinned your conversation with Visitor 11"]); }); @@ -469,5 +501,5 @@ QUnit.test("Message unread counter", async (assert) => { uuid: pyEnv["discuss.channel"].searchRead([["id", "=", channelId]])[0].uuid, }) ); - assert.containsOnce($, ".o-mail-DiscussCategoryItem .badge:contains(1)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel .badge:contains(1)"); }); diff --git a/addons/mail/static/src/core/common/store_service.js b/addons/mail/static/src/core/common/store_service.js index 2de62d52861..b1374faa5b1 100644 --- a/addons/mail/static/src/core/common/store_service.js +++ b/addons/mail/static/src/core/common/store_service.js @@ -107,7 +107,7 @@ export class Store { isActive: false, threadLocalId: null, channels: { - extraClass: "o-mail-DiscussCategory-channel", + extraClass: "o-mail-DiscussSidebarCategory-channel", id: "channels", name: _t("Channels"), isOpen: false, @@ -118,7 +118,7 @@ export class Store { threads: [], // list of ids }, chats: { - extraClass: "o-mail-DiscussCategory-chat", + extraClass: "o-mail-DiscussSidebarCategory-chat", id: "chats", name: _t("Direct messages"), isOpen: false, diff --git a/addons/mail/static/src/core/common/thread_service.js b/addons/mail/static/src/core/common/thread_service.js index 612b98072cf..1688cc7e461 100644 --- a/addons/mail/static/src/core/common/thread_service.js +++ b/addons/mail/static/src/core/common/thread_service.js @@ -1022,7 +1022,7 @@ export class ThreadService { return thread.message_needaction_counter; } - getDiscussCategoryCounter(categoryId) { + getDiscussSidebarCategoryCounter(categoryId) { return this.store.discuss[categoryId].threads.reduce((acc, threadLocalId) => { const channel = this.store.threads[threadLocalId]; if (categoryId === "channels") { diff --git a/addons/mail/static/src/core/web/discuss_patch.js b/addons/mail/static/src/core/web/discuss_patch.js index 84a36fd9a07..da82acd6f8a 100644 --- a/addons/mail/static/src/core/web/discuss_patch.js +++ b/addons/mail/static/src/core/web/discuss_patch.js @@ -1,11 +1,7 @@ /* @odoo-module */ import { Discuss } from "@mail/core/common/discuss"; +import { DiscussSidebar } from "@mail/core/web/discuss_sidebar"; import { MessagingMenu } from "@mail/core/web/messaging_menu"; -import { Sidebar } from "@mail/core/web/sidebar"; -import { patch } from "@web/core/utils/patch"; - -patch(Discuss, "mail/core/web", { - components: { ...Discuss.components, Sidebar, MessagingMenu }, -}); +Object.assign(Discuss.components, { DiscussSidebar, MessagingMenu }); diff --git a/addons/mail/static/src/core/web/discuss_patch.xml b/addons/mail/static/src/core/web/discuss_patch.xml index ab88bf959e4..f1674c98d33 100644 --- a/addons/mail/static/src/core/web/discuss_patch.xml +++ b/addons/mail/static/src/core/web/discuss_patch.xml @@ -2,7 +2,7 @@ - + diff --git a/addons/mail/static/src/core/web/sidebar.dark.scss b/addons/mail/static/src/core/web/discuss_sidebar.dark.scss similarity index 99% rename from addons/mail/static/src/core/web/sidebar.dark.scss rename to addons/mail/static/src/core/web/discuss_sidebar.dark.scss index dc27077d4c8..d57731b58fc 100644 --- a/addons/mail/static/src/core/web/sidebar.dark.scss +++ b/addons/mail/static/src/core/web/discuss_sidebar.dark.scss @@ -1,4 +1,3 @@ - .o-mail-DiscussSidebar-item { &:hover, &.o-active { background-color: $o-gray-100 !important; diff --git a/addons/mail/static/src/core/web/discuss_sidebar.js b/addons/mail/static/src/core/web/discuss_sidebar.js new file mode 100644 index 00000000000..75a8ee121c9 --- /dev/null +++ b/addons/mail/static/src/core/web/discuss_sidebar.js @@ -0,0 +1,27 @@ +/* @odoo-module */ + +import { useStore } from "@mail/core/common/messaging_hook"; + +import { Component } from "@odoo/owl"; + +import { registry } from "@web/core/registry"; + +export const discussSidebarItemsRegistry = registry.category("mail.discuss_sidebar_items"); + +/** + * @typedef {Object} Props + * @extends {Component} + */ +export class DiscussSidebar extends Component { + static template = "mail.DiscussSidebar"; + static props = {}; + static components = {}; + + setup() { + this.store = useStore(); + } + + get discussSidebarItems() { + return discussSidebarItemsRegistry.getAll(); + } +} diff --git a/addons/mail/static/src/core/web/discuss_sidebar.scss b/addons/mail/static/src/core/web/discuss_sidebar.scss new file mode 100644 index 00000000000..a8161683a4e --- /dev/null +++ b/addons/mail/static/src/core/web/discuss_sidebar.scss @@ -0,0 +1,13 @@ +.o-mail-DiscussSidebar { + width: 300px; +} + +.o-mail-DiscussSidebar-badge { + padding: 3px 6px; +} + +.o-mail-DiscussSidebar-item { + &:hover, &.o-active { + background-color: $o-gray-200 !important; + } +} diff --git a/addons/mail/static/src/core/web/discuss_sidebar.xml b/addons/mail/static/src/core/web/discuss_sidebar.xml new file mode 100644 index 00000000000..eb21e02f334 --- /dev/null +++ b/addons/mail/static/src/core/web/discuss_sidebar.xml @@ -0,0 +1,8 @@ + + + +
+ +
+
+
diff --git a/addons/mail/static/src/core/web/discuss_sidebar_mailboxes.js b/addons/mail/static/src/core/web/discuss_sidebar_mailboxes.js new file mode 100644 index 00000000000..9a475b02540 --- /dev/null +++ b/addons/mail/static/src/core/web/discuss_sidebar_mailboxes.js @@ -0,0 +1,37 @@ +/* @odoo-module */ + +import { useStore } from "@mail/core/common/messaging_hook"; +import { ThreadIcon } from "@mail/core/common/thread_icon"; +import { discussSidebarItemsRegistry } from "@mail/core/web/discuss_sidebar"; + +import { Component, useState } from "@odoo/owl"; + +import { useService } from "@web/core/utils/hooks"; +import { markEventHandled } from "@web/core/utils/misc"; + +/** + * @typedef {Object} Props + * @extends {Component} + */ +export class DiscussSidebarMailboxes extends Component { + static template = "mail.DiscussSidebarMailboxes"; + static props = {}; + static components = { ThreadIcon }; + + setup() { + this.store = useStore(); + /** @type {import("@mail/core/common/thread_service").ThreadService} */ + this.threadService = useState(useService("mail.thread")); + } + + /** + * @param {MouseEvent} ev + * @param {import("@mail/core/common/thread_model").Thread} thread + */ + openThread(ev, thread) { + markEventHandled(ev, "sidebar.openThread"); + this.threadService.setDiscussThread(thread); + } +} + +discussSidebarItemsRegistry.add("mailbox", DiscussSidebarMailboxes, { sequence: 20 }); diff --git a/addons/mail/static/src/core/web/discuss_sidebar_mailboxes.xml b/addons/mail/static/src/core/web/discuss_sidebar_mailboxes.xml new file mode 100644 index 00000000000..1649999687e --- /dev/null +++ b/addons/mail/static/src/core/web/discuss_sidebar_mailboxes.xml @@ -0,0 +1,39 @@ + + + + +
+ + + + + + + + + +
+
+ + + + + +
diff --git a/addons/mail/static/src/core/web/sidebar.scss b/addons/mail/static/src/core/web/sidebar.scss deleted file mode 100644 index 5698e6441bd..00000000000 --- a/addons/mail/static/src/core/web/sidebar.scss +++ /dev/null @@ -1,32 +0,0 @@ -.o-mail-DiscussSidebar { - width: 300px; - - .o-mail-DiscussCategory-icon { - width: 15px; - height: 15px; - } - - .o-mail-DiscussCategory-im-status { - transform: scale(0.75); - } -} - -.o-mail-DiscussSidebar-badge { - padding: 3px 6px; -} - -.o-mail-DiscussSidebar-item { - &:hover, &.o-active { - background-color: $o-gray-200 !important; - } - - &:hover .o-mail-DiscussCategoryItem-commands { - display: flex !important; - } -} - -.o-mail-DiscussCategoryItem-threadIcon { - font-size: xx-small; - width: 13px; - height: 13px; -} diff --git a/addons/mail/static/src/core/web/sidebar.xml b/addons/mail/static/src/core/web/sidebar.xml deleted file mode 100644 index 5a719400a1b..00000000000 --- a/addons/mail/static/src/core/web/sidebar.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - - -
-
- - - - - - - - - -
-
- - - - - - - -
-
- - - - - - - -
-
- - -
-
-
- - -
-
- -
-
- - - - - - - - - - - - - - - - diff --git a/addons/mail/static/src/discuss/call/web/discuss_patch.js b/addons/mail/static/src/discuss/call/web/discuss_patch.js index 6073289efbe..792fc3abd62 100644 --- a/addons/mail/static/src/discuss/call/web/discuss_patch.js +++ b/addons/mail/static/src/discuss/call/web/discuss_patch.js @@ -1,25 +1,27 @@ /* @odoo-module */ import { Discuss } from "@mail/core/common/discuss"; -import { useEffect } from "@odoo/owl"; +import { useChildSubEnv, useEffect, useState } from "@odoo/owl"; import { patch } from "@web/core/utils/patch"; patch(Discuss.prototype, "discuss/call/web", { setup(...args) { this._super(...args); - Object.assign(this.state, { openInviteButton: 0 }); + const state = useState({ openInviteButton: 0 }); + useChildSubEnv({ + onStartMeeting: () => { + state.openInviteButton++; + }, + }); useEffect( () => { - if (this.state.openInviteButton === 0) { + if (state.openInviteButton === 0) { return; } this.threadActions.actions.find((action) => action.id === "add-users")?.onSelect(); }, - () => [this.state.openInviteButton] + () => [state.openInviteButton] ); }, - onStartMeeting() { - this.state.openInviteButton++; - }, }); diff --git a/addons/mail/static/src/discuss/call/web/discuss_patch.xml b/addons/mail/static/src/discuss/call/web/discuss_patch.xml deleted file mode 100644 index 1c51126aca2..00000000000 --- a/addons/mail/static/src/discuss/call/web/discuss_patch.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - onStartMeeting - - - diff --git a/addons/mail/static/src/discuss/call/web/discuss_sidebar_call_indicator.js b/addons/mail/static/src/discuss/call/web/discuss_sidebar_call_indicator.js new file mode 100644 index 00000000000..5f2906aac70 --- /dev/null +++ b/addons/mail/static/src/discuss/call/web/discuss_sidebar_call_indicator.js @@ -0,0 +1,24 @@ +/* @odoo-module */ + +import { Thread } from "@mail/core/common/thread_model"; +import { useRtc } from "@mail/discuss/call/common/rtc_hook"; +import { discussSidebarChannelIndicatorsRegistry } from "@mail/discuss/core/web/discuss_sidebar_categories"; + +import { Component } from "@odoo/owl"; + +/** + * @typedef {Object} Props + * @property {import("@mail/core/common/thread_model").Thread} thread + * @extends {Component} + */ +export class DiscussSidebarCallIndicator extends Component { + static template = "mail.DiscussSidebarCallIndicator"; + static props = { thread: { type: Thread } }; + static components = {}; + + setup() { + this.rtc = useRtc(); + } +} + +discussSidebarChannelIndicatorsRegistry.add("call-indicator", DiscussSidebarCallIndicator); diff --git a/addons/mail/static/src/discuss/call/web/discuss_sidebar_call_indicator.xml b/addons/mail/static/src/discuss/call/web/discuss_sidebar_call_indicator.xml new file mode 100644 index 00000000000..c7900901ae2 --- /dev/null +++ b/addons/mail/static/src/discuss/call/web/discuss_sidebar_call_indicator.xml @@ -0,0 +1,10 @@ + + + +
+ + diff --git a/addons/mail/static/src/discuss/call/web/discuss_sidebar_patch.js b/addons/mail/static/src/discuss/call/web/discuss_sidebar_patch.js deleted file mode 100644 index ca156104401..00000000000 --- a/addons/mail/static/src/discuss/call/web/discuss_sidebar_patch.js +++ /dev/null @@ -1,25 +0,0 @@ -/* @odoo-module */ - -import { Sidebar } from "@mail/core/web/sidebar"; -import { useRtc } from "@mail/discuss/call/common/rtc_hook"; -import { useDiscussCoreCommon } from "@mail/discuss/core/common/discuss_core_common_service"; - -import { patch } from "@web/core/utils/patch"; - -Sidebar.props = [...Sidebar.props, "onStartMeeting?"]; - -patch(Sidebar.prototype, "discuss/call/web", { - setup() { - this._super(...arguments); - this.discussCoreCommonService = useDiscussCoreCommon(); - this.rtc = useRtc(); - }, - async onClickStartMeeting() { - const thread = await this.discussCoreCommonService.createGroupChat({ - default_display_mode: "video_full_screen", - partners_to: [this.store.self.id], - }); - this.rtc.toggleCall(thread, { video: true }); - this.props.onStartMeeting?.(); - }, -}); diff --git a/addons/mail/static/src/discuss/call/web/discuss_sidebar_patch.xml b/addons/mail/static/src/discuss/call/web/discuss_sidebar_patch.xml deleted file mode 100644 index ecbd98b6e14..00000000000 --- a/addons/mail/static/src/discuss/call/web/discuss_sidebar_patch.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - -
- -
-
-
-
-
diff --git a/addons/mail/static/src/discuss/call/web/discuss_sidebar_start_meeting.js b/addons/mail/static/src/discuss/call/web/discuss_sidebar_start_meeting.js new file mode 100644 index 00000000000..903b535d0f3 --- /dev/null +++ b/addons/mail/static/src/discuss/call/web/discuss_sidebar_start_meeting.js @@ -0,0 +1,35 @@ +/* @odoo-module */ + +import { useStore } from "@mail/core/common/messaging_hook"; +import { discussSidebarItemsRegistry } from "@mail/core/web/discuss_sidebar"; +import { useRtc } from "@mail/discuss/call/common/rtc_hook"; +import { useDiscussCoreCommon } from "@mail/discuss/core/common/discuss_core_common_service"; + +import { Component } from "@odoo/owl"; + +/** + * @typedef {Object} Props + * @extends {Component} + */ +export class DiscussSidebarStartMeeting extends Component { + static template = "mail.DiscussSidebarStartMeeting"; + static props = {}; + static components = {}; + + setup() { + this.discussCoreCommonService = useDiscussCoreCommon(); + this.rtc = useRtc(); + this.store = useStore(); + } + + async onClickStartMeeting() { + const thread = await this.discussCoreCommonService.createGroupChat({ + default_display_mode: "video_full_screen", + partners_to: [this.store.self.id], + }); + this.rtc.toggleCall(thread, { video: true }); + this.env.onStartMeeting?.(); + } +} + +discussSidebarItemsRegistry.add("start-meeting", DiscussSidebarStartMeeting, { sequence: 10 }); diff --git a/addons/mail/static/src/discuss/call/web/discuss_sidebar_start_meeting.xml b/addons/mail/static/src/discuss/call/web/discuss_sidebar_start_meeting.xml new file mode 100644 index 00000000000..27234448f0c --- /dev/null +++ b/addons/mail/static/src/discuss/call/web/discuss_sidebar_start_meeting.xml @@ -0,0 +1,9 @@ + + + +
+ +
+
+
+
diff --git a/addons/mail/static/src/core/web/sidebar.js b/addons/mail/static/src/discuss/core/web/discuss_sidebar_categories.js similarity index 73% rename from addons/mail/static/src/core/web/sidebar.js rename to addons/mail/static/src/discuss/core/web/discuss_sidebar_categories.js index df10e8e1f5d..bdd99a2e3ec 100644 --- a/addons/mail/static/src/core/web/sidebar.js +++ b/addons/mail/static/src/discuss/core/web/discuss_sidebar_categories.js @@ -1,63 +1,123 @@ /* @odoo-module */ import { ImStatus } from "@mail/core/common/im_status"; -import { useMessaging, useStore } from "@mail/core/common/messaging_hook"; +import { useStore } from "@mail/core/common/messaging_hook"; import { ThreadIcon } from "@mail/core/common/thread_icon"; +import { discussSidebarItemsRegistry } from "@mail/core/web/discuss_sidebar"; +import { ChannelSelector } from "@mail/discuss/core/web/channel_selector"; import { onExternalClick } from "@mail/utils/common/hooks"; -import { markEventHandled } from "@web/core/utils/misc"; import { Component, useState } from "@odoo/owl"; import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog"; import { _t } from "@web/core/l10n/translation"; +import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; +import { markEventHandled } from "@web/core/utils/misc"; + +export const discussSidebarCategoriesRegistry = registry.category( + "mail.discuss_sidebar_categories" +); +export const discussSidebarChannelIndicatorsRegistry = registry.category( + "mail.discuss_sidebar_channel_indicators" +); + +discussSidebarCategoriesRegistry.add( + "channels", + { value: (store) => store.discuss.channels }, + { sequence: 10 } +); +discussSidebarCategoriesRegistry.add( + "chats", + { value: (store) => store.discuss.chats }, + { sequence: 30 } +); /** * @typedef {Object} Props * @extends {Component} */ -export class Sidebar extends Component { - static template = "mail.DiscussSidebar"; - static components = { ThreadIcon, ImStatus }; - static props = []; +export class DiscussSidebarCategories extends Component { + static template = "mail.DiscussSidebarCategories"; + static props = {}; + static components = { ChannelSelector, ImStatus, ThreadIcon }; setup() { - this.messaging = useMessaging(); this.store = useStore(); /** @type {import("@mail/core/common/thread_service").ThreadService} */ this.threadService = useState(useService("mail.thread")); - this.actionService = useService("action"); - this.dialogService = useService("dialog"); - this.userSettings = useService("mail.user_settings"); - this.orm = useService("orm"); this.state = useState({ editing: false, quickSearchVal: "", }); + this.actionService = useService("action"); + this.dialogService = useService("dialog"); + this.userSettings = useService("mail.user_settings"); + this.orm = useService("orm"); onExternalClick("selector", () => { this.state.editing = false; }); } - openThread(ev, thread) { - markEventHandled(ev, "sidebar.openThread"); - this.threadService.setDiscussThread(thread); + addToCategory(category) { + this.state.editing = category.id; } - async toggleCategory(category) { - category.isOpen = !category.isOpen; - await this.orm.call( - "res.users.settings", - "set_res_users_settings", - [[this.userSettings.id]], - { - new_settings: { - [category.serverStateKey]: category.isOpen, - }, - } + askConfirmation(body) { + return new Promise((resolve) => { + this.dialogService.add(ConfirmationDialog, { + body: body, + confirm: resolve, + cancel: () => {}, + }); + }); + } + + get categories() { + return discussSidebarCategoriesRegistry.getAll(); + } + + get channelIndicators() { + return discussSidebarChannelIndicatorsRegistry.getAll(); + } + + filteredThreads(category) { + return category.threads.filter((threadLocalId) => { + const thread = this.store.threads[threadLocalId]; + return ( + (thread.is_pinned || thread.group_based_subscription) && + (!this.state.quickSearchVal || thread.name.includes(this.state.quickSearchVal)) + ); + }); + } + + get hasQuickSearch() { + return ( + Object.values(this.store.threads).filter( + (thread) => thread.is_pinned && thread.model === "discuss.channel" + ).length > 19 ); } + /** + * @param {import("@mail/core/common/thread_model").Thread} thread + */ + async leaveChannel(thread) { + if (thread.type !== "group" && thread.isAdmin) { + await this.askConfirmation( + _t("You are the administrator of this channel. Are you sure you want to leave?") + ); + } + if (thread.type === "group") { + await this.askConfirmation( + _t( + "You are about to leave this group conversation and will no longer have access to it unless you are invited again. Are you sure you want to continue?" + ) + ); + } + this.threadService.leaveChannel(thread); + } + openCategory(category) { if (category.id === "channels") { this.actionService.doAction({ @@ -73,6 +133,9 @@ export class Sidebar extends Component { } } + /** + * @param {import("@mail/core/common/thread_model").Thread} thread + */ openSettings(thread) { if (thread.type === "channel") { this.actionService.doAction({ @@ -85,55 +148,32 @@ export class Sidebar extends Component { } } - addToCategory(category) { - this.state.editing = category.id; + /** + * @param {MouseEvent} ev + * @param {import("@mail/core/common/thread_model").Thread} thread + */ + openThread(ev, thread) { + markEventHandled(ev, "sidebar.openThread"); + this.threadService.setDiscussThread(thread); } stopEditing() { this.state.editing = false; } - async leaveChannel(thread) { - if (thread.type !== "group" && thread.isAdmin) { - await this.askConfirmation( - _t("You are the administrator of this channel. Are you sure you want to leave?") - ); - } - if (thread.type === "group") { - await this.askConfirmation( - _t( - "You are about to leave this group conversation and will no longer have access to it unless you are invited again. Are you sure you want to continue?" - ) - ); - } - this.threadService.leaveChannel(thread); - } - - askConfirmation(body) { - return new Promise((resolve) => { - this.dialogService.add(ConfirmationDialog, { - body: body, - confirm: resolve, - cancel: () => {}, - }); - }); - } - - get hasQuickSearch() { - return ( - Object.values(this.store.threads).filter( - (thread) => thread.is_pinned && thread.model === "discuss.channel" - ).length > 19 + async toggleCategory(category) { + category.isOpen = !category.isOpen; + await this.orm.call( + "res.users.settings", + "set_res_users_settings", + [[this.userSettings.id]], + { + new_settings: { + [category.serverStateKey]: category.isOpen, + }, + } ); } - - filteredThreads(category) { - return category.threads.filter((threadLocalId) => { - const thread = this.store.threads[threadLocalId]; - return ( - (thread.is_pinned || thread.group_based_subscription) && - (!this.state.quickSearchVal || thread.name.includes(this.state.quickSearchVal)) - ); - }); - } } + +discussSidebarItemsRegistry.add("channels", DiscussSidebarCategories, { sequence: 30 }); diff --git a/addons/mail/static/src/discuss/core/web/discuss_sidebar_categories.scss b/addons/mail/static/src/discuss/core/web/discuss_sidebar_categories.scss new file mode 100644 index 00000000000..fb0a5f8f929 --- /dev/null +++ b/addons/mail/static/src/discuss/core/web/discuss_sidebar_categories.scss @@ -0,0 +1,21 @@ +.o-mail-DiscussSidebar { + .o-mail-DiscussSidebarCategory-icon { + width: 15px; + height: 15px; + } + + .o-mail-DiscussSidebarCategory-im-status { + transform: scale(0.75); + } +} + +.o-mail-DiscussSidebar-item { + &:hover .o-mail-DiscussSidebarChannel-commands { + display: flex !important; + } +} +.o-mail-DiscussSidebarChannel-threadIcon { + font-size: xx-small; + width: 13px; + height: 13px; +} diff --git a/addons/mail/static/src/discuss/core/web/discuss_sidebar_categories.xml b/addons/mail/static/src/discuss/core/web/discuss_sidebar_categories.xml new file mode 100644 index 00000000000..9481710fb13 --- /dev/null +++ b/addons/mail/static/src/discuss/core/web/discuss_sidebar_categories.xml @@ -0,0 +1,73 @@ + + + +
+ + + + + + + + + + +
+
+ + +
+
+
+ + +
+
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + + diff --git a/addons/mail/static/src/discuss/core/web/discuss_tour.js b/addons/mail/static/src/discuss/core/web/discuss_tour.js index 7d637ac1111..12fe425e638 100644 --- a/addons/mail/static/src/discuss/core/web/discuss_tour.js +++ b/addons/mail/static/src/discuss/core/web/discuss_tour.js @@ -10,7 +10,7 @@ registry.category("web_tour.tours").add("mail_tour", { sequence: 80, steps: () => [ { - trigger: ".o-mail-DiscussCategory-channel .o-mail-DiscussCategory-add", + trigger: ".o-mail-DiscussSidebarCategory-channel .o-mail-DiscussSidebarCategory-add", content: Markup( _t( "

Channels make it easy to organize information across different topics and groups.

Try to create your first channel (e.g. sales, marketing, product XYZ, after work party, etc).

" @@ -81,7 +81,7 @@ registry.category("web_tour.tours").add("mail_tour", { position: "bottom", }, { - trigger: ".o-mail-DiscussCategory-chat .o-mail-DiscussCategory-add", + trigger: ".o-mail-DiscussSidebarCategory-chat .o-mail-DiscussSidebarCategory-add", content: Markup( _t( "

Chat with coworkers in real-time using direct messages.

You might need to invite users from the Settings app first.

" diff --git a/addons/mail/static/src/discuss/core/web/sidebar_patch.js b/addons/mail/static/src/discuss/core/web/sidebar_patch.js deleted file mode 100644 index e5557706815..00000000000 --- a/addons/mail/static/src/discuss/core/web/sidebar_patch.js +++ /dev/null @@ -1,6 +0,0 @@ -/* @odoo-module */ - -import { Sidebar } from "@mail/core/web/sidebar"; -import { ChannelSelector } from "@mail/discuss/core/web/channel_selector"; - -Object.assign(Sidebar.components, { ChannelSelector }); diff --git a/addons/mail/static/src/discuss/core/web/sidebar_patch.xml b/addons/mail/static/src/discuss/core/web/sidebar_patch.xml deleted file mode 100644 index ea32f2a19b2..00000000000 --- a/addons/mail/static/src/discuss/core/web/sidebar_patch.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - -
- -
-
-
-
diff --git a/addons/mail/static/src/js/tours/load_message_order_tour.js b/addons/mail/static/src/js/tours/load_message_order_tour.js index daf90136dbc..c87d67e0680 100644 --- a/addons/mail/static/src/js/tours/load_message_order_tour.js +++ b/addons/mail/static/src/js/tours/load_message_order_tour.js @@ -6,7 +6,7 @@ registry.category("web_tour.tours").add("mail.load_message_order", { test: true, steps: () => [ { - trigger: ".o-mail-DiscussCategoryItem:contains(MyTestChannel)", + trigger: ".o-mail-DiscussSidebarChannel:contains(MyTestChannel)", run: "click", }, { diff --git a/addons/mail/static/tests/composer/composer_tests.js b/addons/mail/static/tests/composer/composer_tests.js index c85dbd4f3d3..656f30383fd 100644 --- a/addons/mail/static/tests/composer/composer_tests.js +++ b/addons/mail/static/tests/composer/composer_tests.js @@ -190,8 +190,8 @@ QUnit.test( const textarea = $(".o-mail-Composer-input")[0]; textarea.setSelectionRange(0, textarea.value.length); await nextTick(); - await click($(".o-mail-DiscussCategoryItem:eq(1)")); - await click($(".o-mail-DiscussCategoryItem:eq(0)")); + await click($(".o-mail-DiscussSidebarChannel:eq(1)")); + await click($(".o-mail-DiscussSidebarChannel:eq(0)")); assert.ok(textarea.selectionStart === 0 && textarea.selectionEnd === textarea.value.length); } ); @@ -478,10 +478,10 @@ QUnit.test("leave command on channel", async (assert) => { }, }); await openDiscuss(channelId); - assert.hasClass($(".o-mail-DiscussCategoryItem:contains(general)"), "o-active"); + assert.hasClass($(".o-mail-DiscussSidebarChannel:contains(general)"), "o-active"); await insertText(".o-mail-Composer-input", "/leave"); await afterNextRender(() => triggerHotkey("Enter")); - assert.containsNone($, ".o-mail-DiscussCategoryItem:contains(general)"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel:contains(general)"); assert.containsOnce($, ".o-mail-Discuss:contains(No conversation selected.)"); assert.verifySteps(["You unsubscribed from general."]); }); @@ -525,10 +525,10 @@ QUnit.test("leave command on chat", async (assert) => { }, }); await openDiscuss(channelId); - assert.hasClass($(".o-mail-DiscussCategoryItem:contains(Chuck Norris)"), "o-active"); + assert.hasClass($(".o-mail-DiscussSidebarChannel:contains(Chuck Norris)"), "o-active"); await insertText(".o-mail-Composer-input", "/leave"); await afterNextRender(() => triggerHotkey("Enter")); - assert.containsNone($, ".o-mail-DiscussCategoryItem:contains(Chuck Norris)"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel:contains(Chuck Norris)"); assert.containsOnce($, ".o-mail-Discuss:contains(No conversation selected.)"); assert.verifySteps(["You unpinned your conversation with Chuck Norris"]); }); diff --git a/addons/mail/static/tests/crosstab/crosstab_tests.js b/addons/mail/static/tests/crosstab/crosstab_tests.js index 7bf7fa2124a..593a1b4495e 100644 --- a/addons/mail/static/tests/crosstab/crosstab_tests.js +++ b/addons/mail/static/tests/crosstab/crosstab_tests.js @@ -66,7 +66,7 @@ QUnit.test("Thread rename", async (assert) => { await tab1.insertText(".o-mail-Discuss-threadName", "Sales", { replace: true }); await afterNextRender(() => triggerHotkey("Enter")); assert.containsOnce(tab2.target, ".o-mail-Discuss-threadName[title='Sales']"); - assert.containsOnce(tab2.target, ".o-mail-DiscussCategoryItem:contains(Sales)"); + assert.containsOnce(tab2.target, ".o-mail-DiscussSidebarChannel:contains(Sales)"); }); QUnit.test("Thread description update", async (assert) => { @@ -118,7 +118,7 @@ QUnit.test("Channel subscription is renewed when channel is left", async (assert }, }); await openDiscuss(); - await click(".o-mail-DiscussCategoryItem .btn[title='Leave this channel']"); + await click(".o-mail-DiscussSidebarChannel .btn[title='Leave this channel']"); assert.verifySteps(["update-channels"]); }); diff --git a/addons/mail/static/tests/discuss/call/call_tests.js b/addons/mail/static/tests/discuss/call/call_tests.js index 6e9d791025c..21428a16f56 100644 --- a/addons/mail/static/tests/discuss/call/call_tests.js +++ b/addons/mail/static/tests/discuss/call/call_tests.js @@ -207,6 +207,6 @@ QUnit.test("Create a direct message channel when clicking on start a meeting", a const { openDiscuss } = await start(); await openDiscuss(); await click("button:contains(Start a meeting)"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(Mitchell Admin)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(Mitchell Admin)"); assert.containsOnce($, ".o-discuss-Call"); }); diff --git a/addons/mail/static/tests/discuss/call/web/call_tests.js b/addons/mail/static/tests/discuss/call/web/call_tests.js index 0cad45aa2de..70ec3acb1d5 100644 --- a/addons/mail/static/tests/discuss/call/web/call_tests.js +++ b/addons/mail/static/tests/discuss/call/web/call_tests.js @@ -12,7 +12,7 @@ QUnit.test("no default rtc after joining a chat conversation", async (assert) => pyEnv["res.users"].create({ partner_id: partnerId }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); await click(".o-mail-DiscussSidebar i[title='Start a conversation']"); await afterNextRender(() => @@ -22,7 +22,7 @@ QUnit.test("no default rtc after joining a chat conversation", async (assert) => await triggerEvent(document.body, ".o-discuss-ChannelSelector input", "keydown", { key: "Enter", }); - assert.containsOnce($, ".o-mail-DiscussCategoryItem"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel"); assert.containsNone($, ".o-mail-Discuss-content .o-mail-Message"); assert.containsNone($, ".o-discuss-Call"); }); @@ -36,7 +36,7 @@ QUnit.test("no default rtc after joining a group conversation", async (assert) = pyEnv["res.users"].create([{ partner_id: partnerId_1 }, { partner_id: partnerId_2 }]); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); await click(".o-mail-DiscussSidebar i[title='Start a conversation']"); await afterNextRender(() => editInput(document.body, ".o-discuss-ChannelSelector input", "mario") @@ -49,7 +49,7 @@ QUnit.test("no default rtc after joining a group conversation", async (assert) = await triggerEvent(document.body, ".o-discuss-ChannelSelector input", "keydown", { key: "Enter", }); - assert.containsOnce($, ".o-mail-DiscussCategoryItem"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel"); assert.containsNone($, ".o-mail-Discuss-content .o-mail-Message"); assert.containsNone($, ".o-discuss-Call"); }); diff --git a/addons/mail/static/tests/discuss/core/suggestion_tests.js b/addons/mail/static/tests/discuss/core/suggestion_tests.js index 837b6ce5c32..84cb5c91cae 100644 --- a/addons/mail/static/tests/discuss/core/suggestion_tests.js +++ b/addons/mail/static/tests/discuss/core/suggestion_tests.js @@ -118,11 +118,11 @@ QUnit.test("Sort partner suggestions by recent chats", async (assert) => { ]); const { openDiscuss } = await start(); await openDiscuss(); - await click(".o-mail-DiscussCategoryItem:contains('User 2')"); + await click(".o-mail-DiscussSidebarChannel:contains('User 2')"); await insertText(".o-mail-Composer-input", "This is a test"); await click(".o-mail-Composer-send:not(:disabled)"); assert.containsOnce($, ".o-mail-Message:contains('This is a test')"); - await click(".o-mail-DiscussCategoryItem:contains('General')"); + await click(".o-mail-DiscussSidebarChannel:contains('General')"); await insertText(".o-mail-Composer-input", "@"); await insertText(".o-mail-Composer-input", "User"); assert.containsN($, ".o-mail-Composer-suggestion", 3); diff --git a/addons/mail/static/tests/discuss/core/web/discuss_tests.js b/addons/mail/static/tests/discuss/core/web/discuss_tests.js index bc9cb61e1c1..d4600bacc6b 100644 --- a/addons/mail/static/tests/discuss/core/web/discuss_tests.js +++ b/addons/mail/static/tests/discuss/core/web/discuss_tests.js @@ -29,14 +29,14 @@ QUnit.test("can create a new channel [REQUIRE FOCUS]", async (assert) => { }, }); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); await click(".o-mail-DiscussSidebar i[title='Add or join a channel']"); await afterNextRender(() => editInput(document.body, ".o-discuss-ChannelSelector input", "abc") ); await click(".o-discuss-ChannelSelector-suggestion"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel"); assert.containsNone($, ".o-mail-Discuss-content .o-mail-Message"); assert.verifySteps([ "/mail/init_messaging", @@ -56,7 +56,7 @@ QUnit.test( pyEnv["res.users"].create({ partner_id: partnerId }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); await click("i[title='Start a conversation']"); await afterNextRender(() => @@ -64,7 +64,7 @@ QUnit.test( ); await click(".o-discuss-ChannelSelector-suggestion"); assert.containsOnce($, ".o-discuss-ChannelSelector span[title='Mario']"); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); await triggerEvent(document.body, ".o-discuss-ChannelSelector input", "keydown", { key: "Backspace", @@ -78,7 +78,7 @@ QUnit.test( key: "Enter", }); assert.containsOnce($, ".o-discuss-ChannelSelector span[title='Mario']"); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); } ); @@ -101,7 +101,7 @@ QUnit.test("can join a chat conversation", async (assert) => { }, }); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); await click(".o-mail-DiscussSidebar i[title='Start a conversation']"); await afterNextRender(() => @@ -111,7 +111,7 @@ QUnit.test("can join a chat conversation", async (assert) => { await triggerEvent(document.body, ".o-discuss-ChannelSelector input", "keydown", { key: "Enter", }); - assert.containsOnce($, ".o-mail-DiscussCategoryItem"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel"); assert.containsNone($, ".o-mail-Message"); assert.verifySteps([ "/mail/init_messaging", @@ -131,7 +131,7 @@ QUnit.test("can create a group chat conversation", async (assert) => { pyEnv["res.users"].create([{ partner_id: partnerId_1 }, { partner_id: partnerId_2 }]); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); await click(".o-mail-DiscussSidebar i[title='Start a conversation']"); await insertText(".o-discuss-ChannelSelector input", "Mario"); await click(".o-discuss-ChannelSelector-suggestion"); @@ -140,7 +140,7 @@ QUnit.test("can create a group chat conversation", async (assert) => { await triggerEvent(document.body, ".o-discuss-ChannelSelector input", "keydown", { key: "Enter", }); - assert.containsN($, ".o-mail-DiscussCategoryItem", 1); + assert.containsN($, ".o-mail-DiscussSidebarChannel", 1); assert.containsNone($, ".o-mail-Message"); }); @@ -150,7 +150,7 @@ QUnit.test("should create DM chat when adding self and another user", async (ass pyEnv["res.users"].create({ partner_id }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); await click(".o-mail-DiscussSidebar i[title='Start a conversation']"); await insertText(".o-discuss-ChannelSelector input", "Mi"); // Mitchell Admin await click(".o-discuss-ChannelSelector-suggestion"); @@ -159,7 +159,7 @@ QUnit.test("should create DM chat when adding self and another user", async (ass await triggerEvent(document.body, ".o-discuss-ChannelSelector input", "keydown", { key: "Enter", }); - assert.strictEqual($(".o-mail-DiscussCategoryItem:contains(Mario)").text(), "Mario"); + assert.strictEqual($(".o-mail-DiscussSidebarChannel:contains(Mario)").text(), "Mario"); }); QUnit.test("chat search should display no result when no matches found", async (assert) => { @@ -178,7 +178,7 @@ QUnit.test( pyEnv["res.users"].create({ partner_id: partnerId }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); await click(".o-mail-DiscussSidebar i[title='Start a conversation']"); await insertText(".o-discuss-ChannelSelector", "Panda"); assert.containsOnce($, ".o-discuss-ChannelSelector-suggestion"); @@ -190,13 +190,16 @@ QUnit.test( QUnit.test("sidebar: add channel", async (assert) => { const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategory-channel .o-mail-DiscussCategory-add"); + assert.containsOnce( + $, + ".o-mail-DiscussSidebarCategory-channel .o-mail-DiscussSidebarCategory-add" + ); assert.hasAttrValue( - $(".o-mail-DiscussCategory-channel .o-mail-DiscussCategory-add")[0], + $(".o-mail-DiscussSidebarCategory-channel .o-mail-DiscussSidebarCategory-add")[0], "title", "Add or join a channel" ); - await click(".o-mail-DiscussCategory-channel .o-mail-DiscussCategory-add"); + await click(".o-mail-DiscussSidebarCategory-channel .o-mail-DiscussSidebarCategory-add"); assert.containsOnce($, ".o-discuss-ChannelSelector"); assert.containsOnce($, ".o-discuss-ChannelSelector input[placeholder='Add or join a channel']"); }); @@ -209,10 +212,10 @@ QUnit.test("Chat is added to discuss on other tab that the one that joined", asy const tab2 = await start({ asTab: true }); await tab1.openDiscuss(); await tab2.openDiscuss(); - await tab1.click(".o-mail-DiscussCategory-chat .o-mail-DiscussCategory-add"); + await tab1.click(".o-mail-DiscussSidebarCategory-chat .o-mail-DiscussSidebarCategory-add"); await tab1.insertText(".o-discuss-ChannelSelector input", "Jer"); await tab1.click(".o-discuss-ChannelSelector-suggestion"); await afterNextRender(() => triggerHotkey("Enter")); - assert.containsOnce(tab1.target, ".o-mail-DiscussCategoryItem:contains(Jerry Golay)"); - assert.containsOnce(tab2.target, ".o-mail-DiscussCategoryItem:contains(Jerry Golay)"); + assert.containsOnce(tab1.target, ".o-mail-DiscussSidebarChannel:contains(Jerry Golay)"); + assert.containsOnce(tab2.target, ".o-mail-DiscussSidebarChannel:contains(Jerry Golay)"); }); diff --git a/addons/mail/static/tests/discuss/core/web/sidebar_tests.js b/addons/mail/static/tests/discuss/core/web/sidebar_tests.js index a7a80ca6b63..4659625eeca 100644 --- a/addons/mail/static/tests/discuss/core/web/sidebar_tests.js +++ b/addons/mail/static/tests/discuss/core/web/sidebar_tests.js @@ -30,7 +30,7 @@ QUnit.test("sidebar find shows channels matching search term", async (assert) => }, }); await openDiscuss(); - await click(".o-mail-DiscussCategory-add"); + await click(".o-mail-DiscussSidebarCategory-add"); await insertText(".o-discuss-ChannelSelector input", "test"); await def; await nextAnimationFrame(); // ensures search_read rpc is rendered. @@ -60,7 +60,7 @@ QUnit.test( }, }); await openDiscuss(); - await click(".o-mail-DiscussCategory-add"); + await click(".o-mail-DiscussSidebarCategory-add"); await insertText(".o-discuss-ChannelSelector input", "test"); await def; await nextAnimationFrame(); // ensures search_read rpc is rendered. diff --git a/addons/mail/static/tests/discuss/typing/typing_tests.js b/addons/mail/static/tests/discuss/typing/typing_tests.js index b07df9da2c8..06a2cc4abcf 100644 --- a/addons/mail/static/tests/discuss/typing/typing_tests.js +++ b/addons/mail/static/tests/discuss/typing/typing_tests.js @@ -337,7 +337,10 @@ QUnit.test("chat: correspondent is typing", async (assert) => { }); const { env, openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($(".o-mail-DiscussCategoryItem"), ".o-mail-DiscussCategoryItem-threadIcon"); + assert.containsOnce( + $(".o-mail-DiscussSidebarChannel"), + ".o-mail-DiscussSidebarChannel-threadIcon" + ); assert.containsOnce($, ".fa-circle.text-success"); // simulate receive typing notification from demo "is typing" diff --git a/addons/mail/static/tests/discuss_app/discuss_tests.js b/addons/mail/static/tests/discuss_app/discuss_tests.js index 8980b14503d..9ff396dfc35 100644 --- a/addons/mail/static/tests/discuss_app/discuss_tests.js +++ b/addons/mail/static/tests/discuss_app/discuss_tests.js @@ -240,10 +240,10 @@ QUnit.test("sidebar: chat im_status rendering", async (assert) => { ]); const { openDiscuss } = await start({ hasTimeControl: true }); await openDiscuss(); - assert.containsN($, ".o-mail-DiscussCategoryItem-threadIcon", 3); - const chat1 = $(".o-mail-DiscussCategoryItem")[0]; - const chat2 = $(".o-mail-DiscussCategoryItem")[1]; - const chat3 = $(".o-mail-DiscussCategoryItem")[2]; + assert.containsN($, ".o-mail-DiscussSidebarChannel-threadIcon", 3); + const chat1 = $(".o-mail-DiscussSidebarChannel")[0]; + const chat2 = $(".o-mail-DiscussSidebarChannel")[1]; + const chat3 = $(".o-mail-DiscussSidebarChannel")[2]; assert.strictEqual(chat1.textContent, "Partner1"); assert.strictEqual(chat2.textContent, "Partner2"); assert.strictEqual(chat3.textContent, "Partner3"); @@ -313,7 +313,7 @@ QUnit.test("sidebar: chat custom name", async (assert) => { }); const { openDiscuss } = await start(); await openDiscuss(); - assert.strictEqual($(".o-mail-DiscussCategoryItem span").text(), "Marc"); + assert.strictEqual($(".o-mail-DiscussSidebarChannel span").text(), "Marc"); }); QUnit.test("reply to message from inbox (message linked to document)", async (assert) => { @@ -473,11 +473,11 @@ QUnit.test("basic rendering: sidebar", async (assert) => { assert.containsOnce($, ".o-mail-DiscussSidebar button:contains(Inbox)"); assert.containsOnce($, ".o-mail-DiscussSidebar button:contains(Starred)"); assert.containsOnce($, ".o-mail-DiscussSidebar button:contains(History)"); - assert.containsN($, ".o-mail-DiscussCategory", 2); - assert.containsOnce($, ".o-mail-DiscussCategory-channel"); - assert.containsOnce($, ".o-mail-DiscussCategory-chat"); - assert.strictEqual($(".o-mail-DiscussCategory-channel").text(), "Channels"); - assert.strictEqual($(".o-mail-DiscussCategory-chat").text(), "Direct messages"); + assert.containsN($, ".o-mail-DiscussSidebarCategory", 2); + assert.containsOnce($, ".o-mail-DiscussSidebarCategory-channel"); + assert.containsOnce($, ".o-mail-DiscussSidebarCategory-chat"); + assert.strictEqual($(".o-mail-DiscussSidebarCategory-channel").text(), "Channels"); + assert.strictEqual($(".o-mail-DiscussSidebarCategory-chat").text(), "Direct messages"); }); QUnit.test("sidebar: Inbox should have icon", async (assert) => { @@ -511,20 +511,23 @@ QUnit.test("sidebar: basic channel rendering", async (assert) => { pyEnv["discuss.channel"].create({ name: "General" }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem"); - assert.strictEqual($(".o-mail-DiscussCategoryItem").text(), "General"); - assert.containsOnce($(".o-mail-DiscussCategoryItem"), "img[data-alt='Thread Image']"); - assert.containsOnce($(".o-mail-DiscussCategoryItem"), ".o-mail-DiscussCategoryItem-commands"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel"); + assert.strictEqual($(".o-mail-DiscussSidebarChannel").text(), "General"); + assert.containsOnce($(".o-mail-DiscussSidebarChannel"), "img[data-alt='Thread Image']"); + assert.containsOnce( + $(".o-mail-DiscussSidebarChannel"), + ".o-mail-DiscussSidebarChannel-commands" + ); assert.hasClass( - $(".o-mail-DiscussCategoryItem .o-mail-DiscussCategoryItem-commands"), + $(".o-mail-DiscussSidebarChannel .o-mail-DiscussSidebarChannel-commands"), "d-none" ); assert.containsOnce( - $(".o-mail-DiscussCategoryItem .o-mail-DiscussCategoryItem-commands"), + $(".o-mail-DiscussSidebarChannel .o-mail-DiscussSidebarChannel-commands"), "i[title='Channel settings']" ); assert.containsOnce( - $(".o-mail-DiscussCategoryItem .o-mail-DiscussCategoryItem-commands"), + $(".o-mail-DiscussSidebarChannel .o-mail-DiscussSidebarChannel-commands"), "div[title='Leave this channel']" ); }); @@ -534,10 +537,10 @@ QUnit.test("channel become active", async (assert) => { pyEnv["discuss.channel"].create({ name: "General" }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem"); - assert.containsNone($, ".o-mail-DiscussCategoryItem.o-active"); - await click(".o-mail-DiscussCategoryItem"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem.o-active"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel.o-active"); + await click(".o-mail-DiscussSidebarChannel"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel.o-active"); }); QUnit.test("channel become active - show composer in discuss content", async (assert) => { @@ -545,7 +548,7 @@ QUnit.test("channel become active - show composer in discuss content", async (as pyEnv["discuss.channel"].create({ name: "General" }); const { openDiscuss } = await start(); await openDiscuss(); - await click(".o-mail-DiscussCategoryItem"); + await click(".o-mail-DiscussSidebarChannel"); assert.containsOnce($, ".o-mail-Thread"); assert.containsOnce($, ".o-mail-Composer"); }); @@ -565,8 +568,8 @@ QUnit.test("sidebar: channel rendering with needaction counter", async (assert) }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(general)"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(general) .badge:contains(1)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(general)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(general) .badge:contains(1)"); }); QUnit.test("sidebar: chat rendering with unread counter", async (assert) => { @@ -579,10 +582,10 @@ QUnit.test("sidebar: chat rendering with unread counter", async (assert) => { }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem .badge:contains(100)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel .badge:contains(100)"); assert.containsNone( $, - ".o-mail-DiscussCategoryItem .o-mail-DiscussCategoryItem-commands:contains(Unpin Conversation)" + ".o-mail-DiscussSidebarChannel .o-mail-DiscussSidebarChannel-commands:contains(Unpin Conversation)" ); }); @@ -621,7 +624,7 @@ QUnit.test("basic top bar rendering", async (assert) => { assert.isVisible($unstarAll); assert.ok($unstarAll[0].disabled); - await click(".o-mail-DiscussCategoryItem:contains(General)"); + await click(".o-mail-DiscussSidebarChannel:contains(General)"); assert.strictEqual($(".o-mail-Discuss-threadName").val(), "General"); assert.isVisible($(".o-mail-Discuss-header button[title='Add Users']")); }); @@ -927,19 +930,19 @@ QUnit.test("auto-focus composer on opening thread", async (assert) => { await openDiscuss(); assert.containsOnce($, "button:contains(Inbox)"); assert.hasClass($("button:contains(Inbox)"), "o-active"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(General)"); - assert.doesNotHaveClass($(".o-mail-DiscussCategoryItem:contains(General)"), "o-active"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(Demo User)"); - assert.doesNotHaveClass($(".o-mail-DiscussCategoryItem:contains(Demo User)"), "o-active"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(General)"); + assert.doesNotHaveClass($(".o-mail-DiscussSidebarChannel:contains(General)"), "o-active"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(Demo User)"); + assert.doesNotHaveClass($(".o-mail-DiscussSidebarChannel:contains(Demo User)"), "o-active"); assert.containsNone($, ".o-mail-Composer"); - await click(".o-mail-DiscussCategoryItem:contains(General)"); - assert.hasClass($(".o-mail-DiscussCategoryItem:contains(General)"), "o-active"); + await click(".o-mail-DiscussSidebarChannel:contains(General)"); + assert.hasClass($(".o-mail-DiscussSidebarChannel:contains(General)"), "o-active"); assert.containsOnce($, ".o-mail-Composer"); assert.strictEqual(document.activeElement, $(".o-mail-Composer-input")[0]); - await click(".o-mail-DiscussCategoryItem:contains(Demo User)"); - assert.hasClass($(".o-mail-DiscussCategoryItem:contains(Demo User)"), "o-active"); + await click(".o-mail-DiscussSidebarChannel:contains(Demo User)"); + assert.hasClass($(".o-mail-DiscussSidebarChannel:contains(Demo User)"), "o-active"); assert.containsOnce($, ".o-mail-Composer"); assert.strictEqual(document.activeElement, $(".o-mail-Composer-input")[0]); }); @@ -1110,7 +1113,7 @@ QUnit.test("should auto-pin chat when receiving a new DM", async (assert) => { }); const { env, openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategoryItem:contains(Demo)"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel:contains(Demo)"); // simulate receiving the first message on channel 11 await afterNextRender(() => @@ -1121,7 +1124,7 @@ QUnit.test("should auto-pin chat when receiving a new DM", async (assert) => { thread_model: "discuss.channel", }) ); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(Demo)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(Demo)"); }); QUnit.test("'Add Users' button should be displayed in the topbar of channels", async (assert) => { @@ -1254,18 +1257,18 @@ QUnit.test( ]); const { openDiscuss } = await start(); await openDiscuss(); - await click(".o-mail-DiscussCategoryItem:contains('Michel Online')"); + await click(".o-mail-DiscussSidebarChannel:contains('Michel Online')"); assert.containsOnce($, ".o-mail-Discuss-header .o-mail-ImStatus [title='Online']"); - await click(".o-mail-DiscussCategoryItem:contains('Jacqueline Offline')"); + await click(".o-mail-DiscussSidebarChannel:contains('Jacqueline Offline')"); assert.containsOnce($, ".o-mail-Discuss-header .o-mail-ImStatus [title='Offline']"); - await click(".o-mail-DiscussCategoryItem:contains('Nabuchodonosor Idle')"); + await click(".o-mail-DiscussSidebarChannel:contains('Nabuchodonosor Idle')"); assert.containsOnce($, ".o-mail-Discuss-header .o-mail-ImStatus [title='Idle']"); - await click(".o-mail-DiscussCategoryItem:contains('Robert Fired')"); + await click(".o-mail-DiscussSidebarChannel:contains('Robert Fired')"); assert.containsOnce( $, ".o-mail-Discuss-header .o-mail-ImStatus [title='No IM status available']" ); - await click(".o-mail-DiscussCategoryItem:contains('OdooBot')"); + await click(".o-mail-DiscussSidebarChannel:contains('OdooBot')"); assert.containsOnce($, ".o-mail-Discuss-header .o-mail-ImStatus [title='Bot']"); } ); @@ -1338,14 +1341,14 @@ QUnit.test("Channel is added to discuss after invitation", async (assert) => { }, }); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategoryItem:contains(General)"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel:contains(General)"); await afterNextRender(() => { env.services.orm.call("discuss.channel", "add_members", [[channelId]], { partner_ids: [pyEnv.currentPartnerId], context: { mockedUserId: userId }, }); }); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(General)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(General)"); assert.verifySteps(["You have been invited to #General"]); }); @@ -1828,7 +1831,9 @@ QUnit.test("Message shows up even if channel data is incomplete", async (assert) thread_model: "discuss.channel", }) ); - await click(".o-mail-DiscussCategory-chat + .o-mail-DiscussCategoryItem:contains(Albert)"); + await click( + ".o-mail-DiscussSidebarCategory-chat + .o-mail-DiscussSidebarChannel:contains(Albert)" + ); assert.containsOnce($, ".o-mail-Message:contains(hello world)"); }); @@ -1841,7 +1846,7 @@ QUnit.test("Create a direct message channel when clicking on start a meeting", a const { openDiscuss } = await start(); await openDiscuss(channelId); await click("button:contains(Start a meeting)"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(Mitchell Admin)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(Mitchell Admin)"); assert.containsOnce($, ".o-discuss-Call"); await waitUntil(".o-discuss-ChannelInvitation"); assert.containsOnce($, ".o-discuss-ChannelInvitation"); @@ -1857,7 +1862,7 @@ QUnit.test( await click(".o-mail-NotificationItem:contains(General)"); await click("[title='Open Actions Menu']"); await click("[title='Open in Discuss']"); - await click(".o-mail-DiscussCategoryItem:contains(General) [title='Channel settings']"); + await click(".o-mail-DiscussSidebarChannel:contains(General) [title='Channel settings']"); assert.strictEqual($(".o_breadcrumb").text(), "DiscussGeneral"); } ); diff --git a/addons/mail/static/tests/discuss_app/inbox_tests.js b/addons/mail/static/tests/discuss_app/inbox_tests.js index 496df9e5206..85be0a85b0a 100644 --- a/addons/mail/static/tests/discuss_app/inbox_tests.js +++ b/addons/mail/static/tests/discuss_app/inbox_tests.js @@ -404,13 +404,13 @@ QUnit.test("inbox: mark all messages as read", async (assert) => { const { openDiscuss } = await start(); await openDiscuss(); assert.containsOnce($, "button:contains(Inbox) .badge:contains(2)"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(General) .badge:contains(2)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(General) .badge:contains(2)"); assert.containsN($, ".o-mail-Discuss-content .o-mail-Message", 2); assert.notOk($("button:contains(Mark all read)")[0].disabled); await click(".o-mail-Discuss-header button:contains(Mark all read)"); assert.containsNone($, "button:contains(Inbox) .badge"); - assert.containsNone($, ".o-mail-DiscussCategoryItem:contains(General) .badge"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel:contains(General) .badge"); assert.containsNone($, ".o-mail-Message"); assert.ok($("button:contains(Mark all read)")[0].disabled); }); @@ -501,7 +501,7 @@ QUnit.test("inbox messages are never squashed", async (assert) => { assert.containsN($, ".o-mail-Message", 2); assert.doesNotHaveClass($(".o-mail-Message:contains(body1)"), "o-squashed"); assert.doesNotHaveClass($(".o-mail-Message:contains(body2)"), "o-squashed"); - await click(".o-mail-DiscussCategoryItem:contains(test)"); + await click(".o-mail-DiscussSidebarChannel:contains(test)"); assert.hasClass($(".o-mail-Message:contains(body2)"), "o-squashed"); }); diff --git a/addons/mail/static/tests/discuss_app/sidebar_tests.js b/addons/mail/static/tests/discuss_app/sidebar_tests.js index deafa53b54c..6d6897a5927 100644 --- a/addons/mail/static/tests/discuss_app/sidebar_tests.js +++ b/addons/mail/static/tests/discuss_app/sidebar_tests.js @@ -25,10 +25,10 @@ QUnit.test("toggling category button hide category items", async (assert) => { const { openDiscuss } = await start(); await openDiscuss(); assert.containsOnce($, "button.o-active:contains('Inbox')"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel"); - await click(".o-mail-DiscussCategory-icon"); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + await click(".o-mail-DiscussSidebarCategory-icon"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); }); QUnit.test("toggling category button does not hide active category items", async (assert) => { @@ -39,12 +39,12 @@ QUnit.test("toggling category button does not hide active category items", async ]); const { openDiscuss } = await start(); await openDiscuss(channelId); - assert.containsN($, ".o-mail-DiscussCategoryItem", 2); - assert.containsOnce($, ".o-mail-DiscussCategoryItem.o-active"); + assert.containsN($, ".o-mail-DiscussSidebarChannel", 2); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel.o-active"); - await click(".o-mail-DiscussCategory-icon"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem.o-active"); + await click(".o-mail-DiscussSidebarCategory-icon"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel.o-active"); }); QUnit.test("Closing a category sends the updated user setting to the server.", async (assert) => { @@ -60,7 +60,7 @@ QUnit.test("Closing a category sends the updated user setting to the server.", a }, }); await openDiscuss(); - await click(".o-mail-DiscussCategory-icon"); + await click(".o-mail-DiscussSidebarCategory-icon"); assert.verifySteps(["/web/dataset/call_kw/res.users.settings/set_res_users_settings"]); }); @@ -82,7 +82,7 @@ QUnit.test("Opening a category sends the updated user setting to the server.", a }, }); await openDiscuss(); - await click(".o-mail-DiscussCategory-icon"); + await click(".o-mail-DiscussSidebarCategory-icon"); assert.verifySteps(["/web/dataset/call_kw/res.users.settings/set_res_users_settings"]); }); @@ -105,7 +105,7 @@ QUnit.test( }); const { openDiscuss } = await start(); await openDiscuss(); - await click(".o-mail-DiscussCategory-channel span:contains(Channels)"); + await click(".o-mail-DiscussSidebarCategory-channel span:contains(Channels)"); assert.containsOnce($, "i[title='View or join channels']"); } ); @@ -142,9 +142,9 @@ QUnit.test("channel - states: close manually by clicking the title", async (asse }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(general)"); - await click(".o-mail-DiscussCategory-channel span:contains(Channels)"); - assert.containsNone($, ".o-mail-DiscussCategoryItem:contains(general)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(general)"); + await click(".o-mail-DiscussSidebarCategory-channel span:contains(Channels)"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel:contains(general)"); }); QUnit.test("channel - states: open manually by clicking the title", async (assert) => { @@ -156,9 +156,9 @@ QUnit.test("channel - states: open manually by clicking the title", async (asser }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategoryItem:contains(general)"); - await click(".o-mail-DiscussCategory-channel span:contains(Channels)"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(general)"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel:contains(general)"); + await click(".o-mail-DiscussSidebarCategory-channel span:contains(Channels)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(general)"); }); QUnit.test("sidebar: inbox with counter", async (assert) => { @@ -180,7 +180,7 @@ QUnit.test("default thread rendering", async (assert) => { assert.containsOnce($, "button:contains(Inbox)"); assert.containsOnce($, "button:contains(Starred)"); assert.containsOnce($, "button:contains(History)"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(General)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(General)"); assert.hasClass($("button:contains(Inbox)"), "o-active"); assert.containsOnce( $, @@ -201,8 +201,8 @@ QUnit.test("default thread rendering", async (assert) => { ".o-mail-Thread:contains(No history messages Messages marked as read will appear in the history.)" ); - await click(".o-mail-DiscussCategoryItem:contains(General)"); - assert.hasClass($(".o-mail-DiscussCategoryItem:contains(General)"), "o-active"); + await click(".o-mail-DiscussSidebarChannel:contains(General)"); + assert.hasClass($(".o-mail-DiscussSidebarChannel:contains(General)"), "o-active"); assert.containsOnce($, ".o-mail-Thread:contains(There are no messages in this conversation.)"); }); @@ -213,7 +213,7 @@ QUnit.test("sidebar quick search at 20 or more pinned channels", async (assert) } const { openDiscuss } = await start(); await openDiscuss(); - assert.containsN($, ".o-mail-DiscussCategoryItem", 20); + assert.containsN($, ".o-mail-DiscussSidebarChannel", 20); assert.containsOnce($, ".o-mail-DiscussSidebar input[placeholder='Quick search...']"); await editInput( @@ -221,22 +221,22 @@ QUnit.test("sidebar quick search at 20 or more pinned channels", async (assert) ".o-mail-DiscussSidebar input[placeholder='Quick search...']", "1" ); - assert.containsN($, ".o-mail-DiscussCategoryItem", 11); + assert.containsN($, ".o-mail-DiscussSidebarChannel", 11); await editInput( document.body, ".o-mail-DiscussSidebar input[placeholder='Quick search...']", "12" ); - assert.containsOnce($, ".o-mail-DiscussCategoryItem"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(channel12)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(channel12)"); await editInput( document.body, ".o-mail-DiscussSidebar input[placeholder='Quick search...']", "123" ); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); }); QUnit.test("sidebar: basic chat rendering", async (assert) => { @@ -251,14 +251,14 @@ QUnit.test("sidebar: basic chat rendering", async (assert) => { }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(Demo)"); - const $chat = $(".o-mail-DiscussCategoryItem:contains(Demo)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(Demo)"); + const $chat = $(".o-mail-DiscussSidebarChannel:contains(Demo)"); assert.containsOnce($chat, "img[data-alt='Thread Image']"); assert.containsOnce($chat, "span:contains(Demo)"); - assert.containsOnce($chat, ".o-mail-DiscussCategoryItem-commands"); + assert.containsOnce($chat, ".o-mail-DiscussSidebarChannel-commands"); assert.containsOnce( $chat, - ".o-mail-DiscussCategoryItem-commands div[title='Unpin Conversation']" + ".o-mail-DiscussSidebarChannel-commands div[title='Unpin Conversation']" ); assert.containsNone($chat, ".badge"); }); @@ -268,7 +268,7 @@ QUnit.test("sidebar: show pinned channel", async (assert) => { pyEnv["discuss.channel"].create({ name: "General" }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(General)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(General)"); }); QUnit.test("sidebar: open pinned channel", async (assert) => { @@ -276,7 +276,7 @@ QUnit.test("sidebar: open pinned channel", async (assert) => { pyEnv["discuss.channel"].create({ name: "General" }); const { openDiscuss } = await start(); await openDiscuss(); - await click(".o-mail-DiscussCategoryItem:contains(General)"); + await click(".o-mail-DiscussSidebarChannel:contains(General)"); assert.strictEqual($(".o-mail-Discuss-threadName").val(), "General"); assert.containsOnce($, ".o-mail-Composer-input[placeholder='Message #General…']"); }); @@ -302,12 +302,12 @@ QUnit.test("sidebar: open channel and leave it", async (assert) => { }, }); await openDiscuss(); - await click(".o-mail-DiscussCategoryItem:contains(General)"); + await click(".o-mail-DiscussSidebarChannel:contains(General)"); assert.verifySteps([]); - await click(".o-mail-DiscussCategoryItem:contains(General) .btn[title='Leave this channel']"); + await click(".o-mail-DiscussSidebarChannel:contains(General) .btn[title='Leave this channel']"); assert.verifySteps(["action_unfollow"]); - assert.containsNone($, ".o-mail-DiscussCategoryItem:contains(General)"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel:contains(General)"); assert.notOk($(".o-mail-Discuss-threadName")?.val() === "General"); }); @@ -316,9 +316,9 @@ QUnit.test("sidebar: unpin channel from bus", async (assert) => { const channelId = pyEnv["discuss.channel"].create({ name: "General" }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(General)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(General)"); - await click(".o-mail-DiscussCategoryItem:contains(General)"); + await click(".o-mail-DiscussSidebarChannel:contains(General)"); assert.strictEqual($(".o-mail-Discuss-threadName").val(), "General"); // Simulate receiving a leave channel notification @@ -326,7 +326,7 @@ QUnit.test("sidebar: unpin channel from bus", async (assert) => { await afterNextRender(() => { pyEnv["bus.bus"]._sendone(pyEnv.currentPartner, "discuss.channel/unpin", { id: channelId }); }); - assert.containsNone($, ".o-mail-DiscussCategoryItem:contains(General)"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel:contains(General)"); assert.notOk($(".o-mail-Discuss-threadName")?.val() === "General"); }); @@ -354,7 +354,7 @@ QUnit.test("chat - channel should count unread message [REQUIRE FOCUS]", async ( assert.containsOnce($, ".o-discuss-badge"); assert.strictEqual($(".o-discuss-badge").text(), "1"); - await click(".o-mail-DiscussCategoryItem:contains(Demo)"); + await click(".o-mail-DiscussSidebarChannel:contains(Demo)"); assert.containsNone($, ".o-discuss-badge"); }); @@ -373,11 +373,11 @@ QUnit.test("mark channel as seen on last message visible [REQUIRE FOCUS]", async }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(test)"); - assert.hasClass($(".o-mail-DiscussCategoryItem:contains(test)"), "o-unread"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(test)"); + assert.hasClass($(".o-mail-DiscussSidebarChannel:contains(test)"), "o-unread"); - await click(".o-mail-DiscussCategoryItem:contains(test)"); - assert.doesNotHaveClass($(".o-mail-DiscussCategoryItem:contains(test)"), "o-unread"); + await click(".o-mail-DiscussSidebarChannel:contains(test)"); + assert.doesNotHaveClass($(".o-mail-DiscussSidebarChannel:contains(test)"), "o-unread"); }); QUnit.test( @@ -391,7 +391,7 @@ QUnit.test( pyEnv["discuss.channel"].create({ name: "general" }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategory:contains(Channels) .badge"); + assert.containsNone($, ".o-mail-DiscussSidebarCategory:contains(Channels) .badge"); } ); @@ -433,7 +433,7 @@ QUnit.test( ]); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategory:contains(Channels) .badge"); + assert.containsNone($, ".o-mail-DiscussSidebarCategory:contains(Channels) .badge"); } ); @@ -448,7 +448,7 @@ QUnit.test( }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategory:contains(Channels) .badge"); + assert.containsNone($, ".o-mail-DiscussSidebarCategory:contains(Channels) .badge"); } ); @@ -490,7 +490,10 @@ QUnit.test( }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategory:contains(Channels) .badge:contains(2)"); + assert.containsOnce( + $, + ".o-mail-DiscussSidebarCategory:contains(Channels) .badge:contains(2)" + ); } ); @@ -510,7 +513,7 @@ QUnit.test( }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategory:contains(Direct messages) .badge"); + assert.containsNone($, ".o-mail-DiscussSidebarCategory:contains(Direct messages) .badge"); } ); @@ -530,7 +533,7 @@ QUnit.test( }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategory:contains(Direct messages) .badge"); + assert.containsNone($, ".o-mail-DiscussSidebarCategory:contains(Direct messages) .badge"); } ); @@ -550,7 +553,7 @@ QUnit.test( }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsNone($, ".o-mail-DiscussCategory:contains(Direct messages) .badge"); + assert.containsNone($, ".o-mail-DiscussSidebarCategory:contains(Direct messages) .badge"); } ); @@ -586,7 +589,7 @@ QUnit.test( await openDiscuss(); assert.containsOnce( $, - ".o-mail-DiscussCategory:contains(Direct messages) .badge:contains(2)" + ".o-mail-DiscussSidebarCategory:contains(Direct messages) .badge:contains(2)" ); } ); @@ -596,7 +599,7 @@ QUnit.test("chat - command: should have add command when category is unfolded", await openDiscuss(); assert.containsOnce( $, - ".o-mail-DiscussCategory:contains(Direct messages) i[title='Start a conversation']" + ".o-mail-DiscussSidebarCategory:contains(Direct messages) i[title='Start a conversation']" ); }); @@ -612,7 +615,7 @@ QUnit.test( await openDiscuss(); assert.containsNone( $, - ".o-mail-DiscussCategory:contains(Direct messages) i[title='Start a conversation']" + ".o-mail-DiscussSidebarCategory:contains(Direct messages) i[title='Start a conversation']" ); } ); @@ -626,9 +629,9 @@ QUnit.test("chat - states: close manually by clicking the title", async (assert) }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem"); - await click(".o-mail-DiscussCategory:contains(Direct messages) div"); - assert.containsNone($, ".o-mail-DiscussCategoryItem"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel"); + await click(".o-mail-DiscussSidebarCategory:contains(Direct messages) div"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel"); }); QUnit.test("sidebar channels should be ordered case insensitive alphabetically", async (assert) => { @@ -643,10 +646,10 @@ QUnit.test("sidebar channels should be ordered case insensitive alphabetically", await openDiscuss(); assert.deepEqual( [ - $(".o-mail-DiscussCategoryItem:eq(0)").text(), - $(".o-mail-DiscussCategoryItem:eq(1)").text(), - $(".o-mail-DiscussCategoryItem:eq(2)").text(), - $(".o-mail-DiscussCategoryItem:eq(3)").text(), + $(".o-mail-DiscussSidebarChannel:eq(0)").text(), + $(".o-mail-DiscussSidebarChannel:eq(1)").text(), + $(".o-mail-DiscussSidebarChannel:eq(2)").text(), + $(".o-mail-DiscussSidebarChannel:eq(3)").text(), ], ["abc", "Abc", "Xyz", "Xyz"] ); @@ -673,7 +676,7 @@ QUnit.test("channel - avatar: should have correct avatar", async (assert) => { }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem img"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel img"); assert.containsOnce( $, `img[data-src='${getOrigin()}/discuss/channel/${channelId}/avatar_128?unique=100111']` @@ -721,7 +724,7 @@ QUnit.test("channel - states: close should update the value on the server", asyn [[currentUserId]] ); assert.ok(initalSettings.is_discuss_sidebar_category_channel_open); - await click(".o-mail-DiscussCategory span:contains(Channels)"); + await click(".o-mail-DiscussSidebarCategory span:contains(Channels)"); const newSettings = await env.services.orm.call( "res.users.settings", "_find_or_create_for_user", @@ -747,7 +750,7 @@ QUnit.test("channel - states: open should update the value on the server", async ); assert.notOk(initalSettings.is_discuss_sidebar_category_channel_open); - await click(".o-mail-DiscussCategory span:contains(Channels)"); + await click(".o-mail-DiscussSidebarCategory span:contains(Channels)"); const newSettings = await env.services.orm.call( "res.users.settings", "_find_or_create_for_user", @@ -773,7 +776,7 @@ QUnit.test("channel - states: close from the bus", async (assert) => { }, }); }); - assert.containsOnce($, ".o-mail-DiscussCategory-channel .oi-chevron-right"); + assert.containsOnce($, ".o-mail-DiscussSidebarCategory-channel .oi-chevron-right"); assert.containsNone($, "button:contains(channel1)"); }); @@ -794,7 +797,7 @@ QUnit.test("channel - states: open from the bus", async (assert) => { }, }); }); - assert.containsOnce($, ".o-mail-DiscussCategory-channel .oi-chevron-down"); + assert.containsOnce($, ".o-mail-DiscussSidebarCategory-channel .oi-chevron-down"); assert.containsOnce($, "button:contains(channel1)"); }); @@ -805,11 +808,11 @@ QUnit.test( pyEnv["discuss.channel"].create({ name: "channel1" }); const { openDiscuss } = await start(); await openDiscuss(); - await click(".o-mail-DiscussCategoryItem:contains(channel1)"); + await click(".o-mail-DiscussSidebarChannel:contains(channel1)"); assert.containsOnce($, "button:contains(channel1).o-active"); - await click(".o-mail-DiscussCategory span:contains(Channels)"); - assert.containsOnce($, ".o-mail-DiscussCategory-channel .oi-chevron-right"); + await click(".o-mail-DiscussSidebarCategory span:contains(Channels)"); + assert.containsOnce($, ".o-mail-DiscussSidebarCategory-channel .oi-chevron-right"); assert.containsOnce($, "button:contains(channel1)"); await click("button:contains(Inbox)"); @@ -828,7 +831,7 @@ QUnit.test("chat - states: open manually by clicking the title", async (assert) }); const { openDiscuss } = await start(); await openDiscuss(); - await click(".o-mail-DiscussCategory-chat span:contains(Direct messages)"); + await click(".o-mail-DiscussSidebarCategory-chat span:contains(Direct messages)"); assert.containsOnce($, "button:contains(Mitchell Admin)"); }); @@ -849,7 +852,7 @@ QUnit.test("chat - states: close should call update server data", async (assert) ); assert.ok(initalSettings.is_discuss_sidebar_category_chat_open); - await click(".o-mail-DiscussCategory-chat span:contains(Direct messages)"); + await click(".o-mail-DiscussSidebarCategory-chat span:contains(Direct messages)"); const newSettings = await env.services.orm.call( "res.users.settings", "_find_or_create_for_user", @@ -875,7 +878,7 @@ QUnit.test("chat - states: open should call update server data", async (assert) ); assert.notOk(initalSettings.is_discuss_sidebar_category_chat_open); - await click(".o-mail-DiscussCategory-chat span:contains(Direct messages)"); + await click(".o-mail-DiscussSidebarCategory-chat span:contains(Direct messages)"); const newSettings = await env.services.orm.call( "res.users.settings", "_find_or_create_for_user", @@ -901,7 +904,7 @@ QUnit.test("chat - states: close from the bus", async (assert) => { }, }); }); - assert.containsOnce($, ".o-mail-DiscussCategory-chat .oi-chevron-right"); + assert.containsOnce($, ".o-mail-DiscussSidebarCategory-chat .oi-chevron-right"); assert.containsNone($, "button:contains(Mitchell Admin)"); }); @@ -922,7 +925,7 @@ QUnit.test("chat - states: open from the bus", async (assert) => { }, }); }); - assert.containsOnce($, ".o-mail-DiscussCategory-chat .oi-chevron-down"); + assert.containsOnce($, ".o-mail-DiscussSidebarCategory-chat .oi-chevron-down"); assert.containsOnce($, "button:contains(Mitchell Admin)"); }); @@ -933,18 +936,18 @@ QUnit.test( pyEnv["discuss.channel"].create({ channel_type: "chat" }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategory-chat .oi-chevron-down"); + assert.containsOnce($, ".o-mail-DiscussSidebarCategory-chat .oi-chevron-down"); assert.containsOnce($, "button:contains(Mitchell Admin)"); await click("button:contains(Mitchell Admin)"); assert.containsOnce($, "button:contains(Mitchell Admin).o-active"); - await click(".o-mail-DiscussCategory-chat span:contains(Direct messages)"); - assert.containsOnce($, ".o-mail-DiscussCategory-chat .oi-chevron-right"); + await click(".o-mail-DiscussSidebarCategory-chat span:contains(Direct messages)"); + assert.containsOnce($, ".o-mail-DiscussSidebarCategory-chat .oi-chevron-right"); assert.containsOnce($, "button:contains(Mitchell Admin)"); await click("button:contains(Inbox)"); - assert.containsOnce($, ".o-mail-DiscussCategory-chat .oi-chevron-right"); + assert.containsOnce($, ".o-mail-DiscussSidebarCategory-chat .oi-chevron-right"); assert.containsNone($, "button:contains(Mitchell Admin)"); } ); @@ -965,7 +968,7 @@ QUnit.test("chat - avatar: should have correct avatar", async (assert) => { const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem img"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel img"); assert.containsOnce($, `img[data-src='/web/image/res.partner/${partnerId}/avatar_128']`); }); @@ -1005,7 +1008,7 @@ QUnit.test("chat should be sorted by last activity time [REQUIRE FOCUS]", async ]); const { openDiscuss } = await start(); await openDiscuss(); - let $chats = $(".o-mail-DiscussCategory-chat ~ .o-mail-DiscussCategoryItem"); + let $chats = $(".o-mail-DiscussSidebarCategory-chat ~ .o-mail-DiscussSidebarChannel"); assert.strictEqual($chats.length, 2); assert.strictEqual($($chats[0]).text(), "Yoshi"); assert.strictEqual($($chats[1]).text(), "Demo"); @@ -1014,7 +1017,7 @@ QUnit.test("chat should be sorted by last activity time [REQUIRE FOCUS]", async await click($($chats[1])); await insertText(".o-mail-Composer-input", "Blabla"); await click(".o-mail-Composer-send"); - $chats = $(".o-mail-DiscussCategory-chat ~ .o-mail-DiscussCategoryItem"); + $chats = $(".o-mail-DiscussSidebarCategory-chat ~ .o-mail-DiscussSidebarChannel"); assert.strictEqual($chats.length, 2); assert.strictEqual($($chats[0]).text(), "Demo"); assert.strictEqual($($chats[1]).text(), "Yoshi"); @@ -1025,9 +1028,9 @@ QUnit.test("Can unpin chat channel", async (assert) => { pyEnv["discuss.channel"].create({ channel_type: "chat" }); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(Mitchell Admin)"); - await click(".o-mail-DiscussCategoryItem [title='Unpin Conversation']"); - assert.containsNone($, ".o-mail-DiscussCategoryItem:contains(Mitchell Admin)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(Mitchell Admin)"); + await click(".o-mail-DiscussSidebarChannel [title='Unpin Conversation']"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel:contains(Mitchell Admin)"); }); QUnit.test("Unpinning chat should display notification", async (assert) => { @@ -1039,7 +1042,7 @@ QUnit.test("Unpinning chat should display notification", async (assert) => { }, }); await openDiscuss(); - await click(".o-mail-DiscussCategoryItem [title='Unpin Conversation']"); + await click(".o-mail-DiscussSidebarChannel [title='Unpin Conversation']"); assert.verifySteps(["You unpinned your conversation with Mitchell Admin"]); }); @@ -1048,7 +1051,7 @@ QUnit.test("Can leave channel", async (assert) => { const channelId = pyEnv["discuss.channel"].create({ name: "General" }); const { env, openDiscuss } = await start(); await openDiscuss(channelId); - assert.containsOnce($, ".o-mail-DiscussCategoryItem:contains(General)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel:contains(General)"); const messageId = pyEnv["mail.message"].create({ body: '
Mitchell Admin left the channel
', model: "discuss.channel", @@ -1062,7 +1065,7 @@ QUnit.test("Can leave channel", async (assert) => { [channelId, "discuss.channel/new_message", { id: channelId, message }], ]); }); - assert.containsNone($, ".o-mail-DiscussCategoryItem:contains(General)"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel:contains(General)"); }); QUnit.test("Do no channel_info after unpin", async (assert) => { @@ -1077,7 +1080,7 @@ QUnit.test("Do no channel_info after unpin", async (assert) => { }, }); await openDiscuss(channelId); - await click(".o-mail-DiscussCategoryItem-commands [title='Unpin Conversation']"); + await click(".o-mail-DiscussSidebarChannel-commands [title='Unpin Conversation']"); await afterNextRender(() => { env.services.rpc("/mail/message/post", { thread_id: channelId, @@ -1118,8 +1121,8 @@ QUnit.test("Group unread counter up to date after mention is marked as seen", as ]); const { openDiscuss } = await start(); await openDiscuss(); - assert.containsOnce($, ".o-mail-DiscussCategoryItem .o-discuss-badge"); - await click(".o-mail-DiscussCategoryItem"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel .o-discuss-badge"); + await click(".o-mail-DiscussSidebarChannel"); await waitUntil(".o-discuss-badge", 0); }); @@ -1132,7 +1135,7 @@ QUnit.test("Unpinning channel closes its chat window", async (assert) => { await click(".o-mail-NotificationItem"); assert.containsOnce($, ".o-mail-ChatWindow:contains(Sales)"); await openDiscuss(); - await click(".o-mail-DiscussCategoryItem:contains(Sales) [title='Leave this channel']"); + await click(".o-mail-DiscussSidebarChannel:contains(Sales) [title='Leave this channel']"); await openFormView("discuss.channel"); assert.containsNone($, ".o-mail-ChatWindow:contains(Sales)"); }); diff --git a/addons/mail/static/tests/message/message_tests.js b/addons/mail/static/tests/message/message_tests.js index 0268aa46c2d..e8709d53d58 100644 --- a/addons/mail/static/tests/message/message_tests.js +++ b/addons/mail/static/tests/message/message_tests.js @@ -690,11 +690,11 @@ QUnit.test("redirect to author (open chat)", async (assert) => { }); const { openDiscuss } = await start(); await openDiscuss(channelId_1); - assert.containsOnce($, ".o-mail-DiscussCategoryItem.o-active:contains(General)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel.o-active:contains(General)"); assert.containsOnce($, ".o-mail-Discuss-content .o-mail-Message-avatarContainer img"); await click(".o-mail-Discuss-content .o-mail-Message-avatarContainer img"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem.o-active:contains(Demo)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel.o-active:contains(Demo)"); }); QUnit.test("open chat from avatar should not work on self-authored messages", async (assert) => { @@ -720,7 +720,7 @@ QUnit.test("open chat from avatar should not work on self-authored messages", as // try to click on self, to test it doesn't work click(".o-mail-Message-avatar").catch(() => {}); await nextAnimationFrame(); - assert.containsNone($, ".o-mail-DiscussCategoryItem.o-active:contains(Mitchell Admin)"); + assert.containsNone($, ".o-mail-DiscussSidebarChannel.o-active:contains(Mitchell Admin)"); assert.containsNone($, ".breadcrumb:contains(Mitchell Admin)"); // should not open form view neither }); @@ -1500,7 +1500,7 @@ QUnit.test("Mark as unread", async (assert) => { await click("[title='Expand']"); await click("[title='Mark as Unread']"); assert.containsOnce($, ".o-mail-Thread-newMessage"); - assert.containsOnce($, ".o-mail-DiscussCategoryItem .badge:contains(1)"); + assert.containsOnce($, ".o-mail-DiscussSidebarChannel .badge:contains(1)"); }); QUnit.test("Avatar of unknown author", async (assert) => { diff --git a/addons/mail/static/tests/thread/thread_tests.js b/addons/mail/static/tests/thread/thread_tests.js index 1c52f316198..a4d94be1ea8 100644 --- a/addons/mail/static/tests/thread/thread_tests.js +++ b/addons/mail/static/tests/thread/thread_tests.js @@ -175,12 +175,12 @@ QUnit.test( await openDiscuss(channelId_1); const scrolltop_1 = $(".o-mail-Thread")[0].scrollHeight / 2; $(".o-mail-Thread")[0].scrollTo({ top: scrolltop_1 }); - await click(".o-mail-DiscussCategoryItem:contains(channel-2)"); + await click(".o-mail-DiscussSidebarChannel:contains(channel-2)"); const scrolltop_2 = $(".o-mail-Thread")[0].scrollHeight / 3; $(".o-mail-Thread")[0].scrollTo({ top: scrolltop_2 }); - await click(".o-mail-DiscussCategoryItem:contains(channel-1)"); + await click(".o-mail-DiscussSidebarChannel:contains(channel-1)"); assert.ok(isScrolledTo($(".o-mail-Thread")[0], scrolltop_1)); - await click(".o-mail-DiscussCategoryItem:contains(channel-2)"); + await click(".o-mail-DiscussSidebarChannel:contains(channel-2)"); assert.ok(isScrolledTo($(".o-mail-Thread")[0], scrolltop_2)); } ); @@ -869,11 +869,11 @@ QUnit.test("Thread messages are only loaded once", async (assert) => { }, ]); await openDiscuss(); - await click(".o-mail-DiscussCategoryItem:eq(0)"); + await click(".o-mail-DiscussSidebarChannel:eq(0)"); await waitUntil(".o-mail-Message:contains(channel1)"); - await click(".o-mail-DiscussCategoryItem:eq(1)"); + await click(".o-mail-DiscussSidebarChannel:eq(1)"); await waitUntil(".o-mail-Message:contains(channel2)"); - await click(".o-mail-DiscussCategoryItem:eq(0)"); + await click(".o-mail-DiscussSidebarChannel:eq(0)"); await waitUntil(".o-mail-Message:contains(channel1)"); assert.verifySteps([`load messages - ${channelIds[0]}`, `load messages - ${channelIds[1]}`]); }); @@ -983,7 +983,7 @@ QUnit.test("can be marked as read while loading", async function (assert) { }); await openDiscuss(undefined, { waitUntilMessagesLoaded: false }); assert.containsOnce($, ".o-discuss-badge:contains(1)"); - await click(".o-mail-DiscussCategoryItem:contains(Demo)"); + await click(".o-mail-DiscussSidebarChannel:contains(Demo)"); await afterNextRender(loadDeferred.resolve); assert.containsNone($, ".o-discuss-badge"); });