From b7241f34b4479caf293d8f553df36ce8fd53ea0c Mon Sep 17 00:00:00 2001 From: Aditya Hase Date: Wed, 6 Feb 2019 19:38:02 +0530 Subject: [PATCH] feat(dashboard): Provide modal to update filters --- .../dashboard_chart/dashboard_chart.js | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/frappe/desk/doctype/dashboard_chart/dashboard_chart.js b/frappe/desk/doctype/dashboard_chart/dashboard_chart.js index ff84a0a976..657402501f 100644 --- a/frappe/desk/doctype/dashboard_chart/dashboard_chart.js +++ b/frappe/desk/doctype/dashboard_chart/dashboard_chart.js @@ -1,8 +1,73 @@ // Copyright (c) 2019, Frappe Technologies and contributors // For license information, please see license.txt +frappe.provide("frappe.dashboard_chart_sources"); frappe.ui.form.on('Dashboard Chart', { refresh: function(frm) { + frm.trigger("show_filters"); + }, + source: function(frm) { + frm.trigger("show_filters"); + }, + + show_filters: function(frm) { + if (frm.doc.source) { + if (frappe.dashboard_chart_sources && frappe.dashboard_chart_sources[frm.doc.source]) { + frm.trigger('render_filters_table'); + } else { + frappe.call({ + method: 'frappe.core.page.dashboard.dashboard.get_script', + args: { + source_name: frm.doc.source + }, + callback: result => { + frappe.dom.eval(result.message.script || ''); + frm.trigger('render_filters_table'); + } + }); + } + } + }, + + render_filters_table: function(frm) { + let fields = frappe.dashboard_chart_sources[frm.doc.source].filters; + + let wrapper = $(frm.get_field('filters_json').wrapper).empty(); + let table = $(` + + + + + + + +
${__('Filter')}${__('Value')}
`).appendTo(wrapper); + $(`

${__("Click table to edit")}

`).appendTo(wrapper); + + let filters = JSON.parse(frm.doc.filters_json || '{}'); + fields.map( f => { + const filter_row = $(`${f.label}${filters[f.fieldname]}`); + table.find('tbody').append(filter_row); + }); + + table.on('click', () => { + let dialog = new frappe.ui.Dialog({ + title: __('Set Filters'), + fields: fields, + primary_action: function() { + let values = this.get_values(); + if(values) { + this.hide(); + frm.set_value('filters_json', JSON.stringify(values)); + frm.trigger('show_filters'); + } + } + }); + dialog.show(); + dialog.set_values(filters); + }); } }); + +