Browse Source

Merge pull request #17610 from ankush/involved_user_first

fix(UX): mentions - prioritize involved users
version-14
Ankush Menat 2 years ago
committed by GitHub
parent
commit
2532bea2f1
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 23 deletions
  1. +13
    -1
      frappe/public/js/frappe/form/controls/text_editor.js
  2. +23
    -0
      frappe/public/js/frappe/form/form.js
  3. +1
    -22
      frappe/public/js/frappe/form/sidebar/review.js

+ 13
- 1
frappe/public/js/frappe/form/controls/text_editor.js View File

@@ -195,7 +195,9 @@ frappe.ui.form.ControlTextEditor = class ControlTextEditor extends frappe.ui.for
let values = await frappe.xcall(method, {
search_term
});
renderList(values, search_term);

let sorted_values = me.prioritize_involved_users_in_mention(values);
renderList(sorted_values, search_term);
}, 300),
renderItem(item) {
let value = item.value;
@@ -204,6 +206,16 @@ frappe.ui.form.ControlTextEditor = class ControlTextEditor extends frappe.ui.for
};
}

prioritize_involved_users_in_mention(values) {
const involved_users = this.frm?.get_involved_users() // input on form
|| cur_frm?.get_involved_users() // comment box / dialog on active form
|| [];

return values
.filter(val => involved_users.includes(val.id))
.concat(values.filter(val => !involved_users.includes(val.id)));
}

get_toolbar_options() {
return [
[{ header: [1, 2, 3, false] }],


+ 23
- 0
frappe/public/js/frappe/form/form.js View File

@@ -1873,6 +1873,29 @@ frappe.ui.form.Form = class FrappeForm {
get_active_tab() {
return this.active_tab_map && this.active_tab_map[this.docname];
}

get_involved_users() {
let user_fields = this.meta.fields
.filter(d => d.fieldtype === 'Link' && d.options === 'User')
.map(d => d.fieldname);

user_fields = [...user_fields, "owner", "modified_by"];
let involved_users = user_fields.map(field => this.doc[field]);

const docinfo = this.get_docinfo();

involved_users = involved_users.concat(
docinfo.communications.map(d => d.sender && d.delivery_status === 'sent'),
docinfo.comments.map(d => d.owner),
docinfo.versions.map(d => d.owner),
docinfo.assignments.map(d => d.owner)
);

return involved_users
.uniqBy(u => u)
.filter(user => !['Administrator', frappe.session.user].includes(user))
.filter(Boolean);
}
};

frappe.validated = 0;


+ 1
- 22
frappe/public/js/frappe/form/sidebar/review.js View File

@@ -38,30 +38,9 @@ frappe.ui.form.Review = class Review {
review_button.click(() => this.show_review_dialog());
}
}
get_involved_users() {
const user_fields = this.frm.meta.fields
.filter(d => d.fieldtype === 'Link' && d.options === 'User')
.map(d => d.fieldname);

user_fields.push('owner');
let involved_users = user_fields.map(field => this.frm.doc[field]);

const docinfo = this.frm.get_docinfo();

involved_users = involved_users.concat(
docinfo.communications.map(d => d.sender && d.delivery_status === 'sent'),
docinfo.comments.map(d => d.owner),
docinfo.versions.map(d => d.owner),
docinfo.assignments.map(d => d.owner)
);

return involved_users
.uniqBy(u => u)
.filter(user => !['Administrator', frappe.session.user].includes(user))
.filter(Boolean);
}
show_review_dialog() {
const user_options = this.get_involved_users();
const user_options = this.frm.get_involved_users();
const review_dialog = new frappe.ui.Dialog({
'title': __('Add Review'),
'fields': [{


Loading…
Cancel
Save