diff --git a/frappe/desk/search.py b/frappe/desk/search.py index 7fca885bee..0f9c86cf8e 100644 --- a/frappe/desk/search.py +++ b/frappe/desk/search.py @@ -393,7 +393,7 @@ def get_names_for_mentions(search_term): def get_users_for_mentions(): return frappe.get_all( "User", - fields=["name as id", "full_name as value"], + fields=["name as id", "full_name as value", "email"], filters={ "name": ["not in", ("Administrator", "Guest")], "allowed_in_mentions": True, diff --git a/frappe/public/js/frappe/form/controls/text_editor.js b/frappe/public/js/frappe/form/controls/text_editor.js index 8edcb6d889..ce0e516f65 100644 --- a/frappe/public/js/frappe/form/controls/text_editor.js +++ b/frappe/public/js/frappe/form/controls/text_editor.js @@ -252,10 +252,12 @@ frappe.ui.form.ControlTextEditor = class ControlTextEditor extends frappe.ui.for return null; } let me = this; + return { allowedChars: /^[A-Za-z0-9_]*$/, mentionDenotationChars: ["@"], isolateCharacter: true, + source: frappe.utils.debounce(async function (search_term, renderList) { let method = me.mention_search_method || "frappe.desk.search.get_names_for_mentions"; @@ -268,7 +270,8 @@ frappe.ui.form.ControlTextEditor = class ControlTextEditor extends frappe.ui.for }, 300), renderItem(item) { let value = item.value; - return `${value} ${item.is_group ? frappe.utils.icon("users") : ""}`; + let email = item?.email ? `(${item?.email})` : ""; + return `${value} ${email} ${item.is_group ? frappe.utils.icon("users") : ""}`; }, }; }