diff --git a/addons/mail/static/src/core/common/chat_window.js b/addons/mail/static/src/core/common/chat_window.js index f6730a32bd2..3ddd6a84da5 100644 --- a/addons/mail/static/src/core/common/chat_window.js +++ b/addons/mail/static/src/core/common/chat_window.js @@ -20,6 +20,7 @@ import { DropdownItem } from "@web/core/dropdown/dropdown_item"; import { localization } from "@web/core/l10n/localization"; import { _t } from "@web/core/l10n/translation"; import { useService } from "@web/core/utils/hooks"; +import { Typing } from "@mail/discuss/typing/common/typing"; /** * @typedef {Object} Props @@ -36,6 +37,7 @@ export class ChatWindow extends Component { ThreadIcon, ImStatus, AutoresizeInput, + Typing, }; static props = ["chatWindow", "right?"]; static template = "mail.ChatWindow"; @@ -47,6 +49,7 @@ export class ChatWindow extends Component { this.messageEdition = useMessageEdition(); this.messageHighlight = useMessageHighlight(); this.messageToReplyTo = useMessageToReplyTo(); + this.typingService = useState(useService("discuss.typing")); this.state = useState({ actionsMenuOpened: false, jumpThreadPresent: 0, diff --git a/addons/mail/static/src/core/common/chat_window.scss b/addons/mail/static/src/core/common/chat_window.scss index 14da6df1532..e0eb91c800f 100644 --- a/addons/mail/static/src/core/common/chat_window.scss +++ b/addons/mail/static/src/core/common/chat_window.scss @@ -37,3 +37,7 @@ } } +.o-mail-ChatWindow-typing { + font-size: $small-font-size * 0.9; + z-index: $o-mail-NavigableList-zIndex - 2; +} diff --git a/addons/mail/static/src/core/common/chat_window.xml b/addons/mail/static/src/core/common/chat_window.xml index e16e07f9b26..a263df533b8 100644 --- a/addons/mail/static/src/core/common/chat_window.xml +++ b/addons/mail/static/src/core/common/chat_window.xml @@ -61,7 +61,12 @@ - +
+
+ +
+
+
diff --git a/addons/mail/static/src/discuss/typing/common/typing.js b/addons/mail/static/src/discuss/typing/common/typing.js index 73c2646d21d..bddbfea373a 100644 --- a/addons/mail/static/src/discuss/typing/common/typing.js +++ b/addons/mail/static/src/discuss/typing/common/typing.js @@ -8,8 +8,8 @@ import { useService } from "@web/core/utils/hooks"; /** * @typedef {Object} Props * @property {import("@mail/core/common/thread_model").Thread} channel - * @property {string} size - * @property {boolean} displayText + * @property {string} [size] + * @property {boolean} [displayText] * @extends {Component} */ export class Typing extends Component { diff --git a/addons/mail/static/tests/discuss/typing/typing_tests.js b/addons/mail/static/tests/discuss/typing/typing_tests.js index 28b9fdcebe6..6298e5880a9 100644 --- a/addons/mail/static/tests/discuss/typing/typing_tests.js +++ b/addons/mail/static/tests/discuss/typing/typing_tests.js @@ -356,7 +356,7 @@ QUnit.test("chat: correspondent is typing in chat window", async () => { is_typing: true, }) ); - await contains("[title='Demo is typing...']"); + await contains("[title='Demo is typing...']", { count: 2 }); // icon in header & text above composer // simulate receive typing notification from demo "no longer is typing" pyEnv.withUser(userId, () => env.services.rpc("/discuss/channel/notify_typing", {