refactor: refactor tags code in list sidebar

This commit is contained in:
prssanna 2020-07-17 14:58:23 +05:30
parent dff4172cdb
commit e283f60506
2 changed files with 32 additions and 66 deletions

View file

@ -63,74 +63,40 @@ frappe.views.ListSidebar = class ListSidebar {
filters: (me.list_view.filter_area ? me.list_view.get_filters_for_args() : me.default_filters) || []
},
callback: function(r) {
me.render_stat("_user_tags", (r.message.stats || {})["_user_tags"]);
me.render_stat((r.message.stats || {})["_user_tags"]);
let stats_dropdown = me.sidebar.find('.list-stats-dropdown');
frappe.utils.setup_search(stats_dropdown, '.stat-link', '.stat-label');
}
});
}
render_stat(field, stat, tags) {
var me = this;
var sum = 0;
var stats = [];
var label = frappe.meta.docfield_map[this.doctype][field] ?
frappe.meta.docfield_map[this.doctype][field].label : field;
stat = (stat || []).sort(function(a, b) {
return b[1] - a[1];
});
$.each(stat, function(i, v) {
sum = sum + v[1];
});
if (tags) {
for (var t in tags) {
var nfound = -1;
for (var i in stat) {
if (tags[t] === stat[i][0]) {
stats.push(stat[i]);
nfound = i;
break;
}
}
if (nfound < 0) {
stats.push([tags[t], 0]);
} else {
me.tempstats["_user_tags"].splice(nfound, 1);
}
}
field = "_user_tags";
} else {
stats = stat;
}
var context = {
field: field,
stat: stats,
sum: sum,
label: field === '_user_tags' ? (tags ? __(label) : __("Tags")) : __(label),
render_stat(stats) {
let args = {
stats: stats,
label: __("Tags")
};
$(frappe.render_template("list_sidebar_stat", context))
.on("click", ".stat-link", function() {
var fieldname = $(this).attr('data-field');
var label = $(this).attr('data-label');
var condition = "like";
var existing = me.list_view.filter_area.filter_list.get_filter(fieldname);
if(existing) {
existing.remove();
}
if (label == "No Tags") {
label = "%,%";
condition = "not like";
}
me.list_view.filter_area.add(
me.doctype,
fieldname,
condition,
label
);
})
.appendTo(this.sidebar.find(".list-stats-dropdown"));
let tag_list = $(frappe.render_template("list_sidebar_stat", args)).on("click", ".stat-link", (e) => {
let fieldname = $(e.currentTarget).attr('data-field');
let label = $(e.currentTarget).attr('data-label');
let condition = "like";
let existing = this.list_view.filter_area.filter_list.get_filter(fieldname);
if (existing) {
existing.remove();
}
if (label == "No Tags") {
label = "%,%";
condition = "not like";
}
this.list_view.filter_area.add(
this.doctype,
fieldname,
condition,
label
);
});
this.sidebar.find(".list-stats-dropdown .stat-result").html(tag_list);
}
set_fieldtype(df) {

View file

@ -1,13 +1,13 @@
{% if(!stat.length) { %}
{% if (!stats.length) { %}
<li class="stat-no-records text-muted">{{ __("No records tagged.") }}</li>
{% } else {
for (var i=0, l=stat.length; i < l; i++) {
var stat_label = stat[i][0];
var stat_count = stat[i][1];
for (var i=0, l=stats.length; i < l; i++) {
var stat_label = stats[i][0];
var stat_count = stats[i][1];
%}
<li>
<a class="stat-link dropdown-item" data-label="{{ stat_label %}" data-field="{{ field %}" href="#" onclick="return false;">
<a class="stat-link dropdown-item" data-label="{{ stat_label %}" data-field="_user_tags" href="#" onclick="return false;">
<span class="stat-label">{{ __(stat_label) }}</span>
<span>{{ stat_count }}</span>
</a>