From 93ebe2f19f35fb0271c4de28ed8ef854d85a3f1a Mon Sep 17 00:00:00 2001 From: V Shankar Date: Mon, 8 Sep 2025 12:51:48 +0530 Subject: [PATCH] fix: realtime updates on file grid view (#33930) --- frappe/public/js/frappe/list/list_view.js | 16 ++++++++++------ frappe/public/js/frappe/views/file/file_view.js | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index c3eb7eeae2..852f07dc8f 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -1744,12 +1744,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { // in the listview according to filters applied // let's remove it manually this.data = this.data.filter((d) => !names.includes(d.name)); - for (let name of names) { - this.$result - .find(`.list-row-checkbox[data-name='${name.replace(/'/g, "\\'")}']`) - .closest(".list-row-container") - .remove(); - } + this.remove_list_items(names); return; } @@ -1804,6 +1799,15 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { return false; } + remove_list_items(names) { + for (let name of names) { + this.$result + .find(`.list-row-checkbox[data-name='${name.replace(/'/g, "\\'")}']`) + .closest(".list-row-container") + .remove(); + } + } + set_rows_as_checked() { if (!this.$checks || !this.$checks.length) { return; diff --git a/frappe/public/js/frappe/views/file/file_view.js b/frappe/public/js/frappe/views/file/file_view.js index ef718189e9..dff7e1b893 100644 --- a/frappe/public/js/frappe/views/file/file_view.js +++ b/frappe/public/js/frappe/views/file/file_view.js @@ -170,7 +170,10 @@ frappe.views.FileView = class FileView extends frappe.views.ListView { prepare_data(data) { super.prepare_data(data); + this.prepare_file_data(); + } + prepare_file_data() { this.data = this.data.map((d) => this.prepare_datum(d)); // Bring folders to the top @@ -244,6 +247,7 @@ frappe.views.FileView = class FileView extends frappe.views.ListView { render() { this.$result.empty().removeClass("file-grid-view"); if (frappe.views.FileView.grid_view) { + this.prepare_file_data(); this.render_grid_view(); } else { super.render(); @@ -256,12 +260,25 @@ frappe.views.FileView = class FileView extends frappe.views.ListView { render_list() { if (frappe.views.FileView.grid_view) { + this.prepare_file_data(); this.render_grid_view(); } else { super.render_list(); } } + remove_list_items(names) { + if (frappe.views.FileView.grid_view) { + for (let name of names) { + this.$result + .find(`.file-wrapper[data-name='${name.replace(/'/g, "\\'")}']`) + .remove(); + } + } else { + super.remove_list_items(names); + } + } + render_grid_view() { const base_url = frappe.urllib.get_base_url(); let html = this.data