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", {