From d97599e2576a061fe436447a16dd72854c4ed60d Mon Sep 17 00:00:00 2001 From: HUmnanANirudh Date: Mon, 29 Jun 2026 00:39:57 +0530 Subject: [PATCH 1/2] fix: resolve race condition and state accumulator in file browser --- .../components/file-browser/file-browser.js | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/public/js/components/file-browser/file-browser.js b/public/js/components/file-browser/file-browser.js index c569052..0887caf 100644 --- a/public/js/components/file-browser/file-browser.js +++ b/public/js/components/file-browser/file-browser.js @@ -105,55 +105,57 @@ function FileBrowserController($http, $scope) { ctrl.querySparql = async function (query) { ctrl.isLoading = true; - ctrl.totalSize = 0; - ctrl.numFiles = 0; + const revision = ++ctrl.lastRequestRevision; try { - - var req = { - method: 'POST', + const req = { + method: "POST", url: DatabusConstants.DATABUS_SPARQL_ENDPOINT_URL, data: "format=json&query=" + encodeURIComponent(query), headers: { "Content-type": "application/x-www-form-urlencoded" - }, - } - - var updateResponse = await ctrl.$http(req); - - var data = updateResponse.data; + } + }; - ctrl.isLoading = false; + const updateResponse = await ctrl.$http(req); + if (revision !== ctrl.lastRequestRevision) { + return; + } - ctrl.queryResult.bindings = data.results.bindings; + const bindings = updateResponse.data.results.bindings; - ctrl.queryResult.uriList = ""; + let totalSize = 0; + let numFiles = 0; + let uriList = ""; - for (var b in ctrl.queryResult.bindings) { - var binding = ctrl.queryResult.bindings[b]; - binding.size.numericalValue = parseInt(binding.size.value); - ctrl.queryResult.uriList += binding.file.value + "\n"; + for (const binding of bindings) { + binding.size.numericalValue = parseInt(binding.size.value, 10); + uriList += binding.file.value + "\n"; - if (binding.variant != undefined) { + if (binding.variant) { binding.variant.value = ctrl.formatVariant(binding.variant.value); } + totalSize += binding.size.numericalValue; + numFiles++; + } + ctrl.queryResult.bindings = bindings; + ctrl.queryResult.uriList = uriList; + ctrl.totalSize = ctrl.formatUploadSize(totalSize); + ctrl.numFiles = numFiles; - ctrl.totalSize += binding.size.numericalValue; - ctrl.numFiles++; - } - - ctrl.totalSize = ctrl.formatUploadSize(ctrl.totalSize); + ctrl.isLoading = false; - if (!$scope.$root.$$phase) { + if (!ctrl.$scope.$root.$$phase) { ctrl.$scope.$apply(); } } catch (e) { - console.log(e); + console.error(e); + ctrl.isLoading = false; } } From 30cac3a52766c619babb847af9a9fe860ad508a1 Mon Sep 17 00:00:00 2001 From: HUmnanANirudh Date: Mon, 29 Jun 2026 00:59:12 +0530 Subject: [PATCH 2/2] fix: prevent UI state desynchronization by adding revision check and scope apply to error handler --- public/js/components/file-browser/file-browser.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/public/js/components/file-browser/file-browser.js b/public/js/components/file-browser/file-browser.js index 0887caf..0f133ad 100644 --- a/public/js/components/file-browser/file-browser.js +++ b/public/js/components/file-browser/file-browser.js @@ -155,7 +155,12 @@ function FileBrowserController($http, $scope) { } catch (e) { console.error(e); - ctrl.isLoading = false; + if (revision === ctrl.lastRequestRevision) { + ctrl.isLoading = false; + if (!ctrl.$scope.$root.$$phase) { + ctrl.$scope.$apply(); + } + } } }