diff --git a/addons/mail/static/src/components/autocomplete_input/autocomplete_input.js b/addons/mail/static/src/components/autocomplete_input/autocomplete_input.js index d5c27b082b1..a2da7d6bdc9 100644 --- a/addons/mail/static/src/components/autocomplete_input/autocomplete_input.js +++ b/addons/mail/static/src/components/autocomplete_input/autocomplete_input.js @@ -57,6 +57,13 @@ export class AutocompleteInput extends Component { $(this.root.el).autocomplete('destroy'); } + /** + * @returns {AutocompleteInputView} + */ + get autocompleteInputView() { + return this.messaging && this.messaging.models['AutocompleteInputView'].get(this.props.localId); + } + //-------------------------------------------------------------------------- // Public //-------------------------------------------------------------------------- @@ -154,8 +161,6 @@ Object.assign(AutocompleteInput, { defaultProps: { isFocusOnMount: false, isHtml: false, - placeholder: '', - onFocusin: () => {}, }, props: { customClass: { @@ -174,10 +179,7 @@ Object.assign(AutocompleteInput, { type: Boolean, optional: true, }, - onFocusin: { - type: Function, - optional: true, - }, + localId: String, onHide: { type: Function, optional: true, diff --git a/addons/mail/static/src/components/autocomplete_input/autocomplete_input.xml b/addons/mail/static/src/components/autocomplete_input/autocomplete_input.xml index 0946b325944..9f7a3ad68b1 100644 --- a/addons/mail/static/src/components/autocomplete_input/autocomplete_input.xml +++ b/addons/mail/static/src/components/autocomplete_input/autocomplete_input.xml @@ -2,7 +2,7 @@ - + diff --git a/addons/mail/static/src/components/chat_window/chat_window.xml b/addons/mail/static/src/components/chat_window/chat_window.xml index 9d79424b9fe..7d74faad3d5 100644 --- a/addons/mail/static/src/components/chat_window/chat_window.xml +++ b/addons/mail/static/src/components/chat_window/chat_window.xml @@ -40,10 +40,9 @@ diff --git a/addons/mail/static/src/components/discuss/discuss.js b/addons/mail/static/src/components/discuss/discuss.js index 1e81074a169..23695f41bca 100644 --- a/addons/mail/static/src/components/discuss/discuss.js +++ b/addons/mail/static/src/components/discuss/discuss.js @@ -12,7 +12,6 @@ export class Discuss extends LegacyComponent { setup() { this._updateLocalStoreProps(); // bind since passed as props - this._onMobileAddItemHeaderInputSelect = this._onMobileAddItemHeaderInputSelect.bind(this); this._onMobileAddItemHeaderInputSource = this._onMobileAddItemHeaderInputSource.bind(this); useUpdate({ func: () => this._update() }); this._onHideMobileAddItemHeader = this._onHideMobileAddItemHeader.bind(this); @@ -93,25 +92,6 @@ export class Discuss extends LegacyComponent { this.discussView.discuss.clearIsAddingItem(); } - /** - * @private - * @param {Event} ev - * @param {Object} ui - * @param {Object} ui.item - * @param {integer} ui.item.id - */ - _onMobileAddItemHeaderInputSelect(ev, ui) { - if (!this.discussView) { - return; - } - const discuss = this.discussView.discuss; - if (discuss.isAddingChannel) { - discuss.handleAddChannelAutocompleteSelect(ev, ui); - } else { - discuss.handleAddChatAutocompleteSelect(ev, ui); - } - } - /** * @private * @param {Object} req diff --git a/addons/mail/static/src/components/discuss/discuss.xml b/addons/mail/static/src/components/discuss/discuss.xml index 229e96e8f7b..3217126a528 100644 --- a/addons/mail/static/src/components/discuss/discuss.xml +++ b/addons/mail/static/src/components/discuss/discuss.xml @@ -33,8 +33,8 @@ className="'o_Discuss_mobileAddItemHeaderInput'" isFocusOnMount="true" isHtml="discussView.discuss.isAddingChannel" - placeholder="discussView.discuss.isAddingChannel ? discussView.discuss.addChannelInputPlaceholder : discussView.discuss.addChatInputPlaceholder" - select="_onMobileAddItemHeaderInputSelect" + localId="discussView.mobileAddItemHeaderAutocompleteInputView.localId" + select="discussView.onMobileAddItemHeaderInputSelect" source="_onMobileAddItemHeaderInputSource" onHide="_onHideMobileAddItemHeader" /> diff --git a/addons/mail/static/src/components/discuss_sidebar_category/discuss_sidebar_category.xml b/addons/mail/static/src/components/discuss_sidebar_category/discuss_sidebar_category.xml index 5ca3cbe1dc1..e66d479a496 100644 --- a/addons/mail/static/src/components/discuss_sidebar_category/discuss_sidebar_category.xml +++ b/addons/mail/static/src/components/discuss_sidebar_category/discuss_sidebar_category.xml @@ -31,9 +31,9 @@ this._mounted()); onWillUnmount(() => this._willUnmount()); } @@ -67,13 +66,6 @@ export class MessagingMenu extends Component { this.messagingMenu.close(); } - /** - * @private - */ - _onHideMobileNewMessage() { - this.messagingMenu.toggleMobileNewMessage(); - } - /** * @private * @param {Event} ev diff --git a/addons/mail/static/src/components/messaging_menu/messaging_menu.xml b/addons/mail/static/src/components/messaging_menu/messaging_menu.xml index cb1644c8379..dd6ccc53808 100644 --- a/addons/mail/static/src/components/messaging_menu/messaging_menu.xml +++ b/addons/mail/static/src/components/messaging_menu/messaging_menu.xml @@ -43,10 +43,10 @@ className="'o_MessagingMenu_mobileNewMessageInput'" customClass="id + '_mobileNewMessageInputAutocomplete'" isFocusOnMount="true" - placeholder="messagingMenu.mobileNewMessageInputPlaceholder" + localId="messagingMenu.mobileNewMessageAutocompleteInputView.localId" select="_onMobileNewMessageInputSelect" source="_onMobileNewMessageInputSource" - onHide="_onHideMobileNewMessage" + onHide="messagingMenu.onHideMobileNewMessage" /> diff --git a/addons/mail/static/src/models/autocomplete_input_view.js b/addons/mail/static/src/models/autocomplete_input_view.js index b901cb6a047..1bda453b5ad 100644 --- a/addons/mail/static/src/models/autocomplete_input_view.js +++ b/addons/mail/static/src/models/autocomplete_input_view.js @@ -1,7 +1,8 @@ /** @odoo-module **/ import { registerModel } from '@mail/model/model_core'; -import { one } from '@mail/model/model_field'; +import { attr, one } from '@mail/model/model_field'; +import { clear } from '@mail/model/model_field_command'; registerModel({ name: 'AutocompleteInputView', @@ -11,6 +12,40 @@ registerModel({ 'discussViewOwnerAsMobileAddItemHeader', 'messagingMenuOwnerAsMobileNewMessageInput', ]], + recordMethods: { + /** + * @param {FocusEvent} ev + */ + onFocusin(ev) { + if (this.chatWindowOwnerAsNewMessage) { + this.chatWindowOwnerAsNewMessage.onFocusInNewMessageFormInput(ev); + return; + } + }, + /** + * @private + * @returns {string} + */ + _computePlaceholder() { + if (this.chatWindowOwnerAsNewMessage) { + return this.chatWindowOwnerAsNewMessage.newMessageFormInputPlaceholder; + } + if (this.discussViewOwnerAsMobileAddItemHeader) { + if (this.discussViewOwnerAsMobileAddItemHeader.discuss.isAddingChannel) { + return this.discussViewOwnerAsMobileAddItemHeader.discuss.addChannelInputPlaceholder; + } else { + return this.discussViewOwnerAsMobileAddItemHeader.discuss.addChatInputPlaceholder; + } + } + if (this.discussSidebarCategoryOwnerAsAddingItem) { + return this.discussSidebarCategoryOwnerAsAddingItem.newItemPlaceholderText; + } + if (this.messagingMenuOwnerAsMobileNewMessageInput) { + return this.messagingMenuOwnerAsMobileNewMessageInput.mobileNewMessageInputPlaceholder; + } + return clear(); + }, + }, fields: { chatWindowOwnerAsNewMessage: one('ChatWindow', { inverse: 'newMessageAutocompleteInputView', @@ -28,5 +63,8 @@ registerModel({ inverse: 'mobileNewMessageAutocompleteInputView', readonly: true, }), + placeholder: attr({ + compute: '_computePlaceholder', + }), }, }); diff --git a/addons/mail/static/src/models/discuss_view.js b/addons/mail/static/src/models/discuss_view.js index 780a83e6fd1..0fb0d46d4cb 100644 --- a/addons/mail/static/src/models/discuss_view.js +++ b/addons/mail/static/src/models/discuss_view.js @@ -59,6 +59,22 @@ registerModel({ } mailbox.open(); }, + /** + * @param {Event} ev + * @param {Object} ui + * @param {Object} ui.item + * @param {integer} ui.item.id + */ + onMobileAddItemHeaderInputSelect(ev, ui) { + if (!this.exists()) { + return; + } + if (this.discuss.isAddingChannel) { + this.discuss.handleAddChannelAutocompleteSelect(ev, ui); + } else { + this.discuss.handleAddChatAutocompleteSelect(ev, ui); + } + }, /** * @private * @returns {FieldCommand} diff --git a/addons/mail/static/src/models/messaging_menu.js b/addons/mail/static/src/models/messaging_menu.js index 2506144eef8..329f1c4b734 100644 --- a/addons/mail/static/src/models/messaging_menu.js +++ b/addons/mail/static/src/models/messaging_menu.js @@ -42,6 +42,9 @@ registerModel({ } this.toggleOpen(); }, + onHideMobileNewMessage() { + this.update({ isMobileNewMessageToggled: false }); + }, /** * Toggle the visibility of the messaging menu "new message" input in * mobile.