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', + }), }, });