How to add filters dynamically in listview

in listview i want to add some filters dynamically like below code and result of listview should fetch according to that deafult filters.
how can we achieve that?

frappe.listview_settings['Asset'] = {
    onload(listview) {
        // triggers once before the list is loaded
        frappe.call({
            method: "some.function.call", 
            callback: function (r) {
                 // below step is not working
                filters = ['Project', '=', r.message]
            }
        });
    },
}
1 Like

Hi,
try use:

frappe.set_route(“List”,”Asset”,”List”, {“project”: [“=“, r.message]})
2 Likes

Thanks this worked perfectly fine. I was looking to hide the “Clear Filter” button but my JQuery code is not reflecting in the onload function.

frappe.listview_settings['DocType'] = {

    onload(listview) {

        // triggers once before the list is loaded
        frappe.call({

            method: "some.function",

            callback: (r) => {

                let projects = r.message.length > 0 ? r.message.map(m => m.parent) : [""];

                frappe.set_route("List", "DocType", "List", { "project": ["in", projects] });

                $('button:contains("Clear Filters")').remove();

            }

        });

    },

}

You are welcome.
Try use .then(() => …):

frappe.set_route("List", "DocType", "List", { "project": ["in", projects] })

                .then(() => $('button:contains("Clear Filters")').remove());

frappe.set_route return promise.

@Jiri_Sir I have tried this snippet but no effect in the JQuery code

Hi @Avinash_Utekar,
now I see :frowning:
The button (“Clear …”) does not exist after the frappe.set_route refresh the page. It exists only if the filter popup window is open.
Maybe try after frappe.set_route set some variable and then check this variable in shown event:

var open = false;
frappe.set_route("List", "DocType", "List", { "project": ["in", projects] })
                .then(() => open = true);

$(".filter-button").on("shown.bs.popover", () => {
  if (open){
    $('button:contains("Clear Filters")').remove();
  }
})

1 Like