feat: allow addition of buttons in list

This commit is contained in:
Rushabh Mehta 2019-04-24 17:02:28 +05:30
parent a11128c6d0
commit 3ab2850b74
4 changed files with 80 additions and 12 deletions

View file

@ -21,6 +21,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "description_and_status",
"fieldtype": "Section Break",
"hidden": 0,
@ -53,6 +54,7 @@
"collapsible": 0,
"columns": 0,
"default": "Open",
"fetch_if_empty": 0,
"fieldname": "status",
"fieldtype": "Select",
"hidden": 0,
@ -86,6 +88,7 @@
"collapsible": 0,
"columns": 0,
"default": "Medium",
"fetch_if_empty": 0,
"fieldname": "priority",
"fieldtype": "Select",
"hidden": 0,
@ -120,6 +123,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "column_break_2",
"fieldtype": "Column Break",
"hidden": 0,
@ -150,6 +154,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "color",
"fieldtype": "Color",
"hidden": 0,
@ -157,7 +162,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Color",
"length": 0,
@ -182,6 +187,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "date",
"fieldtype": "Date",
"hidden": 0,
@ -189,7 +195,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_list_view": 0,
"in_standard_filter": 1,
"label": "Due Date",
"length": 0,
@ -215,6 +221,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "owner",
"fieldtype": "Link",
"hidden": 0,
@ -247,6 +254,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "description_section",
"fieldtype": "Section Break",
"hidden": 0,
@ -279,6 +287,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "description",
"fieldtype": "Text Editor",
"hidden": 0,
@ -314,6 +323,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "section_break_6",
"fieldtype": "Section Break",
"hidden": 0,
@ -345,6 +355,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "reference_type",
"fieldtype": "Link",
"hidden": 0,
@ -352,7 +363,7 @@
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Reference Type",
"length": 0,
@ -379,6 +390,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "reference_name",
"fieldtype": "Dynamic Link",
"hidden": 0,
@ -413,6 +425,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "column_break_10",
"fieldtype": "Column Break",
"hidden": 0,
@ -443,6 +456,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "role",
"fieldtype": "Link",
"hidden": 0,
@ -477,6 +491,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "assigned_by",
"fieldtype": "Link",
"hidden": 0,
@ -510,6 +525,7 @@
"collapsible": 0,
"columns": 0,
"fetch_from": "assigned_by.full_name",
"fetch_if_empty": 0,
"fieldname": "assigned_by_full_name",
"fieldtype": "Read Only",
"hidden": 0,
@ -543,6 +559,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "sender",
"fieldtype": "Data",
"hidden": 1,
@ -575,6 +592,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fetch_if_empty": 0,
"fieldname": "assignment_rule",
"fieldtype": "Link",
"hidden": 0,
@ -603,17 +621,16 @@
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"icon": "fa fa-check",
"idx": 2,
"image_view": 0,
"in_create": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2019-03-07 16:11:25.764549",
"menu_index": 0,
"modified": "2019-04-24 15:45:23.290491",
"modified_by": "Administrator",
"module": "Desk",
"name": "ToDo",
@ -660,7 +677,6 @@
],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"search_fields": "description, reference_type, reference_name",
"show_name_in_global_search": 0,
"sort_order": "DESC",

View file

@ -1,4 +1,7 @@
frappe.listview_settings['ToDo'] = {
hide_name_column: true,
add_fields: ["reference_type", "reference_name"],
onload: function(me) {
if (!frappe.route_options) {
frappe.route_options = {
@ -8,7 +11,22 @@ frappe.listview_settings['ToDo'] = {
}
me.page.set_title(__("To Do"));
},
hide_name_column: true,
button: {
show: function(doc) {
return doc.reference_name;
},
get_label: function(doc) {
return __('Open');
},
get_description: function(doc) {
return __('Open {0}', [`${doc.reference_type} ${doc.reference_name}`])
},
action: function(doc) {
frappe.set_route('Form', doc.reference_type, doc.reference_name);
}
},
refresh: function(me) {
if (me.todo_sidebar_setup) return;
@ -19,5 +37,4 @@ frappe.listview_settings['ToDo'] = {
me.todo_sidebar_setup = true;
},
add_fields: ["reference_type", "reference_name"],
}

View file

@ -373,7 +373,10 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
if (this.data.length > 0) {
// append rows
this.$result.append(
this.data.map(doc => this.get_list_row_html(doc)).join('')
this.data.map((doc, i) => {
doc._idx = i;
return this.get_list_row_html(doc);
}).join('')
);
}
this.on_row_checked();
@ -473,7 +476,8 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
}
get_list_row_html(doc) {
return this.get_list_row_html_skeleton(this.get_left_html(doc), this.get_right_html(doc));
return this.get_list_row_html_skeleton(this.get_left_html(doc),
this.get_right_html(doc));
}
get_list_row_html_skeleton(left = '', right = '') {
@ -580,7 +584,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
get_meta_html(doc) {
let html = '';
if (doc[this.meta.title_field || ''] !== doc.name) {
if (!this.settings.hide_name_column && doc[this.meta.title_field || ''] !== doc.name) {
html += `
<div class="level-item hidden-xs hidden-sm ellipsis">
<a class="text-muted ellipsis" href="${this.get_form_link(doc)}">
@ -589,6 +593,19 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
</div>
`;
}
if (this.settings.button && this.settings.button.show(doc)) {
html += `
<div class="level-item hidden-xs">
<button class="btn btn-action btn-default btn-xs"
data-name="${doc.name}" data-idx="${doc._idx}"
title="${this.settings.button.get_description(doc)}">
${this.settings.button.get_label(doc)}
</a>
</div>
`;
}
const modified = comment_when(doc.modified, true);
const last_assignee = JSON.parse(doc._assign || '[]').slice(-1)[0];
@ -710,6 +727,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
this.setup_check_events();
this.setup_like();
this.setup_realtime_updates();
this.setup_action_handler();
}
setup_filterable() {
@ -762,6 +780,16 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList {
});
}
setup_action_handler() {
this.$result.on('click', '.btn-action', (e) => {
const $button = $(e.currentTarget);
const doc = this.data[$button.attr('data-idx')];
this.settings.button.action(doc);
e.stopPropagation();
return false;
});
}
setup_check_events() {
this.$result.on('change', 'input[type=checkbox]', e => {
const $target = $(e.currentTarget);

View file

@ -11,9 +11,16 @@ from frappe.utils import cint, get_fullname, getdate
class EnergyPointLog(Document):
def validate(self):
self.map_milestone_reference()
if self.type in ['Appreciation', 'Criticism'] and self.user == self.owner:
frappe.throw(_('You cannot give review points to yourself'))
def map_milestone_reference(self):
# link energy point to the original reference, if set by milestone
if self.reference_doctype == 'Milestone':
self.reference_doctype, self.reference_name = frappe.db.get_value('Milestone', self.reference_name,
['reference_type', 'reference_name'])
def after_insert(self):
alert_dict = get_alert_dict(self)
if alert_dict: