refactor: load email list for to, cc, bcc in a better

This commit is contained in:
Shariq Ansari 2024-07-10 18:38:05 +05:30
parent 19072dd3d6
commit 41324dda27
3 changed files with 43 additions and 17 deletions

View File

@ -132,3 +132,36 @@ def set_as_primary(contact, field, value):
contact.save()
return True
@frappe.whitelist()
def search_emails(txt: str):
doctype = "Contact"
meta = frappe.get_meta(doctype)
filters = [["Contact", "email_id", "is", "set"]]
if meta.get("fields", {"fieldname": "enabled", "fieldtype": "Check"}):
filters.append([doctype, "enabled", "=", 1])
if meta.get("fields", {"fieldname": "disabled", "fieldtype": "Check"}):
filters.append([doctype, "disabled", "!=", 1])
or_filters = []
search_fields = ["full_name", "email_id", "name"]
if txt:
for f in search_fields:
or_filters.append([doctype, f.strip(), "like", f"%{txt}%"])
results = frappe.get_list(
doctype,
filters=filters,
fields=search_fields,
or_filters=or_filters,
limit_start=0,
limit_page_length=20,
order_by='email_id, full_name, name',
ignore_permissions=False,
as_list=True,
strict=False,
)
return results

View File

@ -133,7 +133,7 @@ const signature = createResource({
})
function setSignature(editor) {
signature.data = signature.data.replace(/\n/g, '<br>')
signature.data = signature.data?.replace(/\n/g, '<br>')
let emailContent = editor.getHTML()
emailContent = emailContent.startsWith('<p></p>')
? emailContent.slice(7)

View File

@ -133,30 +133,26 @@ watchDebounced(
query,
(val) => {
val = val || ''
if (text.value === val) return
if (text.value === val && options.value?.length) return
text.value = val
reload(val)
},
{ debounce: 300, immediate: true }
{ debounce: 300, immediate: true },
)
const filterOptions = createResource({
url: 'frappe.desk.search.search_link',
url: 'crm.api.contact.search_emails',
method: 'POST',
cache: [text.value, 'Contact'],
params: {
txt: text.value,
doctype: 'Contact',
},
params: { txt: text.value },
transform: (data) => {
let allData = data
.filter((c) => {
return c.description.split(', ')[1]
})
.map((option) => {
let email = option.description.split(', ')[1]
let fullName = option[0]
let email = option[1]
let name = option[2]
return {
label: option.label || email,
label: fullName || name || email,
value: email,
}
})
@ -177,10 +173,7 @@ const options = computed(() => {
function reload(val) {
filterOptions.update({
params: {
txt: val,
doctype: 'Contact',
},
params: { txt: val },
})
filterOptions.reload()
}