summaryrefslogtreecommitdiff
path: root/addons/mail/static/src/components/composer_text_input
diff options
context:
space:
mode:
authorJulien Giannone <jgi@odoo.com>2020-09-21 18:58:55 +0000
committerSébastien Theys <seb@odoo.com>2020-09-21 20:29:32 +0000
commit8bb3b09a2abf27011e4920a9dc045fc27e1ec628 (patch)
treede8b38bf7f933f28ae2f9d9f593d885bf8b0c676 /addons/mail/static/src/components/composer_text_input
parentd40fd8e3e29d1954f60ebbd64a319ae564b7a639 (diff)
[IMP] mail: reintroduce channel mentions, canned responses, commands
task-2280308 closes odoo/odoo#58166 X-original-commit: b63d0d2ee5f3bff24a5e1e1cd962d59bebef082d Related: odoo/enterprise#13392 Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
Diffstat (limited to 'addons/mail/static/src/components/composer_text_input')
-rw-r--r--addons/mail/static/src/components/composer_text_input/composer_text_input.js66
-rw-r--r--addons/mail/static/src/components/composer_text_input/composer_text_input.xml35
2 files changed, 26 insertions, 75 deletions
diff --git a/addons/mail/static/src/components/composer_text_input/composer_text_input.js b/addons/mail/static/src/components/composer_text_input/composer_text_input.js
index ef21d023cb5..10cdd7ff0a7 100644
--- a/addons/mail/static/src/components/composer_text_input/composer_text_input.js
+++ b/addons/mail/static/src/components/composer_text_input/composer_text_input.js
@@ -4,7 +4,7 @@ odoo.define('mail/static/src/components/composer_text_input/composer_text_input.
const useStore = require('mail/static/src/component_hooks/use_store/use_store.js');
const components = {
- PartnerMentionSuggestion: require('mail/static/src/components/partner_mention_suggestion/partner_mention_suggestion.js'),
+ ComposerSuggestionList: require('mail/static/src/components/composer_suggestion_list/composer_suggestion_list.js'),
};
const { markEventHandled } = require('mail/static/src/utils/utils.js');
@@ -208,10 +208,10 @@ class ComposerTextInput extends Component {
_onKeydownTextarea(ev) {
switch (ev.key) {
case 'Escape':
- if (this.composer.hasSuggestedPartners) {
+ if (this.composer.hasSuggestions) {
ev.preventDefault();
- this.composer.closeMentionSuggestions();
- markEventHandled(ev, 'ComposerTextInput.closeMentionSuggestions');
+ this.composer.closeSuggestions();
+ markEventHandled(ev, 'ComposerTextInput.closeSuggestions');
}
break;
// UP, DOWN, TAB: prevent moving cursor if navigation in mention suggestions
@@ -222,7 +222,7 @@ class ComposerTextInput extends Component {
case 'Home':
case 'End':
case 'Tab':
- if (this.composer.hasSuggestedPartners) {
+ if (this.composer.hasSuggestions) {
// We use preventDefault here to avoid keys native actions but actions are handled in keyUp
ev.preventDefault();
}
@@ -239,7 +239,7 @@ class ComposerTextInput extends Component {
* @param {KeyboardEvent} ev
*/
_onKeydownTextareaEnter(ev) {
- if (this.composer.hasSuggestedPartners) {
+ if (this.composer.hasSuggestions) {
ev.preventDefault();
return;
}
@@ -292,72 +292,50 @@ class ComposerTextInput extends Component {
break;
// ENTER, HOME, END, UP, DOWN, PAGE UP, PAGE DOWN, TAB: check if navigation in mention suggestions
case 'Enter':
- if (this.composer.hasSuggestedPartners) {
- if (this.composer.activeSuggestedPartner) {
- this.composer.insertMentionedPartner(this.composer.activeSuggestedPartner);
- this.composer.closeMentionSuggestions();
- this.focus();
- }
+ if (this.composer.hasSuggestions) {
+ this.composer.insertSuggestion();
+ this.composer.closeSuggestions();
+ this.focus();
}
break;
case 'ArrowUp':
case 'PageUp':
- if (this.composer.hasSuggestedPartners) {
- this.composer.setPreviousSuggestedPartnerActive();
+ if (this.composer.hasSuggestions) {
+ this.composer.setPreviousSuggestionActive();
}
break;
case 'ArrowDown':
case 'PageDown':
- if (this.composer.hasSuggestedPartners) {
- this.composer.setNextSuggestedPartnerActive();
+ if (this.composer.hasSuggestions) {
+ this.composer.setNextSuggestionActive();
}
break;
case 'Home':
- if (this.composer.hasSuggestedPartners) {
- this.composer.setFirstSuggestedPartnerActive();
+ if (this.composer.hasSuggestions) {
+ this.composer.setFirstSuggestionActive();
}
break;
case 'End':
- if (this.composer.hasSuggestedPartners) {
- this.composer.setLastSuggestedPartnerActive();
+ if (this.composer.hasSuggestions) {
+ this.composer.setLastSuggestionActive();
}
break;
case 'Tab':
- if (this.composer.hasSuggestedPartners) {
+ if (this.composer.hasSuggestions) {
if (ev.shiftKey) {
- this.composer.setPreviousSuggestedPartnerActive();
+ this.composer.setPreviousSuggestionActive();
} else {
- this.composer.setNextSuggestedPartnerActive();
+ this.composer.setNextSuggestionActive();
}
}
break;
// Otherwise, check if a mention is typed
default:
this.saveStateInStore();
- this.composer._detectDelimiter();
+ this.composer.detectSuggestionDelimiter();
}
}
- /**
- * @private
- * @param {Event} ev
- */
- _onPartnerMentionSuggestionClicked(ev) {
- this.composer.insertMentionedPartner(ev.detail.partner);
- this.composer.closeMentionSuggestions();
- this.focus();
- }
-
- /**
- * @private
- * @param {MouseEvent} ev
- */
- _onPartnerMentionSuggestionMouseOver(ev) {
- this.composer.update({
- activeSuggestedPartner: [['link', ev.detail.partner]],
- });
- }
-
}
Object.assign(ComposerTextInput, {
diff --git a/addons/mail/static/src/components/composer_text_input/composer_text_input.xml b/addons/mail/static/src/components/composer_text_input/composer_text_input.xml
index 32fff1289eb..a834a61f1b7 100644
--- a/addons/mail/static/src/components/composer_text_input/composer_text_input.xml
+++ b/addons/mail/static/src/components/composer_text_input/composer_text_input.xml
@@ -4,37 +4,10 @@
<t t-name="mail.ComposerTextInput" owl="1">
<div class="o_ComposerTextInput">
<t t-if="composer">
- <t t-if="composer.hasSuggestedPartners">
- <div class="o_ComposerTextInput_mentionDropdown" t-att-class="{ 'o-lowPosition': props.hasMentionSuggestionsBelowPosition }">
- <div
- t-att-class="{
- 'dropdown': props.hasMentionSuggestionsBelowPosition,
- 'dropup': !props.hasMentionSuggestionsBelowPosition,
- }"
- >
- <div class="o_ComposerTextInput_mentionDropdownPropositionList dropdown-menu show">
- <t t-foreach="composer.mainSuggestedPartners" t-as="mainSuggestedPartner" t-key="mainSuggestedPartner.localId">
- <PartnerMentionSuggestion
- isActive="mainSuggestedPartner === composer.activeSuggestedPartner"
- partnerLocalId="mainSuggestedPartner.localId"
- t-on-o-partner-mention-suggestion-clicked="_onPartnerMentionSuggestionClicked"
- t-on-o-partner-mention-suggestion-mouse-over="_onPartnerMentionSuggestionMouseOver"
- />
- </t>
- <t t-if="composer.mainSuggestedPartners.length > 0 and composer.extraSuggestedPartners.length > 0">
- <div role="separator" class="dropdown-divider"/>
- </t>
- <t t-foreach="composer.extraSuggestedPartners" t-as="extraSuggestedPartner" t-key="extraSuggestedPartner.localId">
- <PartnerMentionSuggestion
- isActive="extraSuggestedPartner === composer.activeSuggestedPartner"
- partnerLocalId="extraSuggestedPartner.localId"
- t-on-o-partner-mention-suggestion-clicked="_onPartnerMentionSuggestionClicked"
- t-on-o-partner-mention-suggestion-mouse-over="_onPartnerMentionSuggestionMouseOver"
- />
- </t>
- </div>
- </div>
- </div>
+ <t t-if="composer.hasSuggestions">
+ <ComposerSuggestionList
+ composerLocalId="props.composerLocalId"
+ />
</t>
<textarea class="o_ComposerTextInput_textarea" t-att-class="{ 'o-composer-is-compact': props.isCompact }" t-esc="composer.textInputContent" t-att-placeholder="textareaPlaceholder" t-on-focusin="_onFocusinTextarea" t-on-focusout="_onFocusoutTextarea" t-on-keydown="_onKeydownTextarea" t-on-keyup="_onKeyupTextarea" t-on-input="_onInputTextarea" t-ref="textarea"/>
</t>