From fd62f9f9ce1397d24c452ea15c021e6433d59e9f Mon Sep 17 00:00:00 2001 From: Nemael Date: Wed, 8 Jun 2022 13:54:45 +0000 Subject: [PATCH] [IMP] mail: introduce EmojiCategory model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit introduces the EmojiCategory model Part of Task-2365687 closes odoo/odoo#93117 Signed-off-by: Alexandre KΓΌhn (aku) --- addons/mail/static/src/models/emoji.js | 18 +++++++-- .../mail/static/src/models/emoji_category.js | 38 +++++++++++++++++++ .../static/src/models/emoji_category_view.js | 21 ++++++++++ .../mail/static/src/models/emoji_list_view.js | 20 +++++++++- .../mail/static/src/models/emoji_registry.js | 13 +++++++ 5 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 addons/mail/static/src/models/emoji_category.js create mode 100644 addons/mail/static/src/models/emoji_category_view.js diff --git a/addons/mail/static/src/models/emoji.js b/addons/mail/static/src/models/emoji.js index 8c635916a05..25cb3ceec20 100644 --- a/addons/mail/static/src/models/emoji.js +++ b/addons/mail/static/src/models/emoji.js @@ -1,17 +1,30 @@ /** @odoo-module **/ import { registerModel } from '@mail/model/model_core'; -import { attr, one, many } from '@mail/model/model_field'; +import { attr, many, one } from '@mail/model/model_field'; +import { replace } from '@mail/model/model_field_command'; registerModel({ name: 'Emoji', identifyingFields: ['unicode'], + recordMethods: { + /** + * @private + * @returns {FieldCommand} + */ + _computeEmojiRegistry() { + return replace(this.messaging.emojiRegistry); + }, + }, fields: { description: attr({ readonly: true, - required: true, + }), + emojiCategories: many('EmojiCategory', { + inverse: 'allEmojis', }), emojiRegistry: one('EmojiRegistry', { + compute: '_computeEmojiRegistry', inverse: 'allEmojis', readonly: true, required: true, @@ -23,7 +36,6 @@ registerModel({ }), sources: attr({ readonly: true, - required: true, }), unicode: attr({ readonly: true, diff --git a/addons/mail/static/src/models/emoji_category.js b/addons/mail/static/src/models/emoji_category.js new file mode 100644 index 00000000000..6cf51185522 --- /dev/null +++ b/addons/mail/static/src/models/emoji_category.js @@ -0,0 +1,38 @@ +/** @odoo-module **/ + +import { registerModel } from '@mail/model/model_core'; +import { attr, many, one } from '@mail/model/model_field'; +import { replace } from '@mail/model/model_field_command'; + +registerModel({ + name: 'EmojiCategory', + identifyingFields: ['categoryName'], + recordMethods: { + /** + * @private + * @returns {FieldCommand} + */ + _computeEmojiRegistry() { + return replace(this.messaging.emojiRegistry); + }, + }, + fields: { + allEmojis: many('Emoji', { + inverse: 'emojiCategories', + }), + categoryName: attr({ + readonly: true, + required: true, + }), + emojiCategoryViews: many('EmojiCategoryView', { + inverse: 'emojiCategory', + readonly: true, + isCausal: true, + }), + emojiRegistry: one('EmojiRegistry', { + compute: '_computeEmojiRegistry', + inverse: 'allCategories', + required: true, + }), + }, +}); diff --git a/addons/mail/static/src/models/emoji_category_view.js b/addons/mail/static/src/models/emoji_category_view.js new file mode 100644 index 00000000000..4a89593e962 --- /dev/null +++ b/addons/mail/static/src/models/emoji_category_view.js @@ -0,0 +1,21 @@ +/** @odoo-module **/ + +import { registerModel } from '@mail/model/model_core'; +import { one } from '@mail/model/model_field'; + +registerModel({ + name: 'EmojiCategoryView', + identifyingFields: ['emojiCategory', 'emojiListView'], + fields: { + emojiCategory: one('EmojiCategory', { + inverse: 'emojiCategoryViews', + readonly: true, + required: true, + }), + emojiListView: one('EmojiListView', { + inverse: 'emojiCategoryViews', + readonly: true, + required: true, + }), + } +}); diff --git a/addons/mail/static/src/models/emoji_list_view.js b/addons/mail/static/src/models/emoji_list_view.js index d9e31075c0b..0c40d1a17ab 100644 --- a/addons/mail/static/src/models/emoji_list_view.js +++ b/addons/mail/static/src/models/emoji_list_view.js @@ -1,7 +1,7 @@ /** @odoo-module **/ import { registerModel } from '@mail/model/model_core'; -import { one, many } from '@mail/model/model_field'; +import { many, one } from '@mail/model/model_field'; import { insertAndReplace, replace } from '@mail/model/model_field_command'; registerModel({ @@ -30,8 +30,26 @@ registerModel({ }) ); }, + + /** + * @private + * @returns {FieldCommand} + */ + _computeEmojiCategoryViews() { + return insertAndReplace( + this.messaging.emojiRegistry.allCategories.map(emojiCategory => { + return { emojiCategory: replace(emojiCategory) }; + }) + ); + }, }, fields: { + emojiCategoryViews: many('EmojiCategoryView', { + compute: '_computeEmojiCategoryViews', + inverse: 'emojiListView', + readonly: true, + isCausal: true, + }), emojiViews: many('EmojiView', { compute: '_computeEmojiViews', inverse: 'emojiListView', diff --git a/addons/mail/static/src/models/emoji_registry.js b/addons/mail/static/src/models/emoji_registry.js index feb2b509071..d5aed909aec 100644 --- a/addons/mail/static/src/models/emoji_registry.js +++ b/addons/mail/static/src/models/emoji_registry.js @@ -94,5 +94,18 @@ registerModel({ ]), inverse: 'emojiRegistry', }), + allCategories: many('EmojiCategory', { + default: insertAndReplace([ + { categoryName: "all", allEmojis: insertAndReplace(["😊", "πŸ˜ƒ", "πŸ˜†", "πŸ˜‚", "πŸ˜‰", "😎", "😜", "πŸ˜‹", "😝", "😳", "😐", "πŸ˜•", "😞", "😱", "😲", "😨", "😠", "😈", "😘", "πŸ˜‡", "😒", "😭", "❀️", "πŸ’”", "😍", "πŸ‘³", "πŸ‘", "πŸ‘Ž", "πŸ‘Œ", "πŸ’©", "πŸ™ˆ", "πŸ™‰", "πŸ™Š", "🐞", "😺", "🐻", "🐌", "πŸ—", "πŸ€", "🌹", "πŸ”₯", "β˜€οΈ", "⛅️", "🌈", "☁️", "⚑️", "⭐️", "πŸͺ", "πŸ•", "πŸ”", "🍟", "πŸŽ‚", "🍰", "β˜•οΈ", "🍌", "🍣", "πŸ™", "🍺", "🍷", "🍸", "🍹", "🍻", "πŸ§€", "πŸ‘»", "πŸ’€", "πŸ‘½", "πŸŽ‰", "πŸ†", "πŸ”‘", "πŸ“Œ", "πŸ“―", "🎡", "🎺", "🎸", "πŸƒ", "🚲", "⚽️", "🏈", "🎱", "🎬", "🎀"].map(unicode => ({ unicode }))) }, + { categoryName: "🀠", allEmojis: insertAndReplace(["😊", "πŸ˜ƒ", "πŸ˜†", "πŸ˜‚", "πŸ˜‰", "😎", "😜", "πŸ˜‹", "😝", "😳", "😐", "πŸ˜•", "😞", "😱", "😲", "😨", "😠", "😈", "😘", "πŸ˜‡", "😒", "😭", "❀️", "πŸ’”", "😍", "πŸ‘³", "πŸ‘", "πŸ‘Ž", "πŸ‘Œ", "πŸ’©"].map(unicode => ({ unicode }))) }, + { categoryName: "🐿", allEmojis: insertAndReplace(["πŸ™ˆ", "πŸ™‰", "πŸ™Š", "🐞", "😺", "🐻", "🐌", "πŸ—"].map(unicode => ({ unicode }))) }, + { categoryName: "🌿", allEmojis: insertAndReplace(["πŸ€", "🌹", "πŸ”₯", "β˜€οΈ", "⛅️", "🌈", "☁️", "⚑️", "⭐️"].map(unicode => ({ unicode }))) }, + { categoryName: "🍽", allEmojis: insertAndReplace(["πŸͺ", "πŸ•", "πŸ”", "🍟", "πŸŽ‚", "🍰", "β˜•οΈ", "🍌", "🍣", "πŸ™", "🍺", "🍷", "🍸", "🍹", "🍻", "πŸ§€"].map(unicode => ({ unicode }))) }, + { categoryName: "πŸ“¦", allEmojis: insertAndReplace(["πŸ‘»", "πŸ’€", "πŸ‘½", "πŸŽ‰", "πŸ†", "πŸ”‘", "πŸ“Œ", "πŸ“―", "🎡", "🎺", "🎸"].map(unicode => ({ unicode }))) }, + { categoryName: "⚽️", allEmojis: insertAndReplace(["πŸƒ", "🚲", "⚽️", "🏈", "🎱", "🎬", "🎀"].map(unicode => ({ unicode }))) }, + + ]), + inverse: 'emojiRegistry', + }), }, });