From 866d1e1a9713e2684fcd2a0961be635571d31725 Mon Sep 17 00:00:00 2001 From: Alejandro Mariscal Romero <87366244+mariscalromeroalejandro@users.noreply.github.com> Date: Fri, 26 Sep 2025 12:35:24 +0200 Subject: [PATCH 1/2] get object by name or id, based on a context --- QualityControl/public/object/QCObject.js | 36 +++++++++++++++---- .../pages/objectView/ObjectViewModel.js | 15 +++++--- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/QualityControl/public/object/QCObject.js b/QualityControl/public/object/QCObject.js index 8050280fc..e661f874e 100644 --- a/QualityControl/public/object/QCObject.js +++ b/QualityControl/public/object/QCObject.js @@ -122,7 +122,7 @@ export default class QCObject extends BaseViewModel { * @returns {undefined} */ sortListByField(listSource, field, order) { - listSource.sort((a, b) => typeof a[field] === 'string' ? + listSource?.sort((a, b) => typeof a[field] === 'string' ? this._compareStrings(a[field], b[field], order) : this._compareNumbers(a[field], b[field], order)); } @@ -310,7 +310,8 @@ export default class QCObject extends BaseViewModel { await Promise.allSettled(objectsName.map(async (objectName) => { let fetchedData = null; if (this.objects[objectName]?.isSuccess() && this.objects[objectName]?.payload?.name) { - const { refreshNeeded, data } = await this.checkIfRefreshObject(this.objects[objectName].payload); + const context = { objectName }; + const { refreshNeeded, data } = await this.checkIfRefreshObject(this.objects[objectName].payload, context); fetchedData = data; if (!refreshNeeded) { return; @@ -571,11 +572,32 @@ export default class QCObject extends BaseViewModel { * @param {object} object - The object to check for refresh. * @param {string} object.name - The name of the object to look up. * @param {string|number} object.id - The current ID of the object being validated. + * @param {object} context - Additional context to determine fetch method + * @param {string} context.objectName - Object name from URL params + * @param {string} context.objectId - Object ID from URL params * @returns {Promise} A promise that resolves to `true` if the object should be refreshed */ - async checkIfRefreshObject(object) { - const fetchFn = async () => - await this.model.services.object.getObjectByName(object.name, undefined, undefined, this); + async checkIfRefreshObject(object, context = {}) { + const { objectName, objectId } = context; + + const fetchFn = async () => { + if (objectId) { + return await this.model.services.object.getObjectById( + objectId, + undefined, + undefined, + this, + ); + } else { + return await this.model.services.object.getObjectByName( + objectName || object.name, + undefined, + undefined, + this, + ); + } + }; + const validateFn = (result) => result.isSuccess() && result.payload.id !== object.id; return this.model.filterModel.refreshCheck(fetchFn, validateFn); @@ -590,7 +612,9 @@ export default class QCObject extends BaseViewModel { this.selected = null; } if (this.selected && this.selected.name) { - const { refreshNeeded, data } = await this.checkIfRefreshObject(this.objects[this.selected.name].payload); + const context = { objectName: this.selected.name }; + const { refreshNeeded, data } = + await this.checkIfRefreshObject(this.objects[this.selected.name].payload, context); if (refreshNeeded && data?.payload) { this.select({ name: this.selected.name }, data.payload); } diff --git a/QualityControl/public/pages/objectView/ObjectViewModel.js b/QualityControl/public/pages/objectView/ObjectViewModel.js index 76b2ca773..c9e92f020 100644 --- a/QualityControl/public/pages/objectView/ObjectViewModel.js +++ b/QualityControl/public/pages/objectView/ObjectViewModel.js @@ -71,7 +71,8 @@ export default class ObjectViewModel extends BaseViewModel { async updateObjectSelection(object, validFrom = undefined, id = '') { const { objectName = undefined, objectId = undefined } = object; const { params } = this.model.router; - const { refreshNeeded, data } = await this.model.object.checkIfRefreshObject(this.selected.payload); + const context = { objectName: objectName || params.objectName, objectId: objectId || params.objectId }; + const { refreshNeeded, data } = await this.model.object.checkIfRefreshObject(this.selected.payload, context); if (!refreshNeeded) { return; } @@ -85,9 +86,15 @@ export default class ObjectViewModel extends BaseViewModel { } let currentParams = '?page=objectView'; - this.selected = data ?? params.objectName - ? await this.model.services.object.getObjectByName(params.objectName, id, validFrom, this) - : await this.model.services.object.getObjectById(params.objectId, id, validFrom, this); + + // Use refreshed data if available, otherwise fetch based on available parameters + if (data) { + this.selected = data; + } else if (params.objectName) { + this.selected = await this.model.services.object.getObjectByName(params.objectName, id, validFrom, this); + } else if (params.objectId) { + this.selected = await this.model.services.object.getObjectById(params.objectId, id, validFrom, this); + } setBrowserTabTitle(this.selected.payload.name); From 33088952082996714cd4375b4d5c18761d490fb1 Mon Sep 17 00:00:00 2001 From: Alejandro Mariscal Romero <87366244+mariscalromeroalejandro@users.noreply.github.com> Date: Fri, 26 Sep 2025 13:29:04 +0200 Subject: [PATCH 2/2] patch qcg to v3.15.1 --- QualityControl/package-lock.json | 4 ++-- QualityControl/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/QualityControl/package-lock.json b/QualityControl/package-lock.json index 700a47e68..5799de790 100644 --- a/QualityControl/package-lock.json +++ b/QualityControl/package-lock.json @@ -1,12 +1,12 @@ { "name": "@aliceo2/qc", - "version": "3.15.0", + "version": "3.15.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@aliceo2/qc", - "version": "3.15.0", + "version": "3.15.1", "bundleDependencies": [ "@aliceo2/web-ui", "jsroot", diff --git a/QualityControl/package.json b/QualityControl/package.json index 93ac77dcb..066e26224 100644 --- a/QualityControl/package.json +++ b/QualityControl/package.json @@ -1,6 +1,6 @@ { "name": "@aliceo2/qc", - "version": "3.15.0", + "version": "3.15.1", "description": "O2 Quality Control Web User Interface", "author": "George Raduta", "contributors": [