From a1cdcb832a210df6a4b7690d03f19c5fea4e4ad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Tue, 30 Apr 2024 14:16:53 +0200 Subject: [PATCH] fix: Return a file element even if the rendered list does not contained one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- apps/files/js/filelist.js | 14 ++++++++++++-- apps/files/tests/js/filelistSpec.js | 4 ++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 55608ada2667d..4e798003df4c4 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -1357,8 +1357,18 @@ * @return {Object} jQuery object of the matching row */ findFileEl: function(fileName){ - // use filterAttr to avoid escaping issues - return this.$fileList.find('tr').filterAttr('data-file', fileName); + var fileRow = this.$fileList.find('tr').filterAttr('data-file', fileName); + if (fileRow.length) { + return fileRow; + } + + // The row we try to get might not have been rendered due to pagination, + // so in case we find the file in the file list return the rendered row instead + var fileData = this.files.find(function (el){ + return el.name === fileName; + }); + + return fileData ? this._renderRow(fileData, {updateSummary: false, silent: true}) : fileRow; }, /** diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index 3d80591fd1443..252956f96491d 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -825,7 +825,7 @@ describe('OCA.Files.FileList tests', function() { // element is renamed before the request finishes $tr = fileList.findFileEl('Tu_after_three.txt'); expect($tr.length).toEqual(1); - expect(fileList.findFileEl('One.txt').length).toEqual(0); + expect($('.files-fileList tr').find('[data-name="One.txt"]').length).toEqual(0); // file actions are hidden expect($tr.hasClass('busy')).toEqual(true); @@ -1426,7 +1426,7 @@ describe('OCA.Files.FileList tests', function() { name: 'File with index 28b.txt' }); expect($('.files-fileList tr').length).toEqual(20); - expect(fileList.findFileEl('File with index 28b.txt').length).toEqual(0); + expect($('.files-fileList tr').find('[data-name="File with index 28b.txt"]').length).toEqual(0); fileList._nextPage(true); expect($('.files-fileList tr').length).toEqual(40); expect(fileList.findFileEl('File with index 28b.txt').index()).toEqual(29);