Skip to content

Commit dc98d60

Browse files
[OGUI-1774] Bugfix: get object by ID properly if in object view from a layout (#3084)
* get object by name or id, based on a context * patch qcg to v3.15.1
1 parent 44c43af commit dc98d60

4 files changed

Lines changed: 44 additions & 13 deletions

File tree

QualityControl/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

QualityControl/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@aliceo2/qc",
3-
"version": "3.15.0",
3+
"version": "3.15.1",
44
"description": "O2 Quality Control Web User Interface",
55
"author": "George Raduta",
66
"contributors": [

QualityControl/public/object/QCObject.js

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ export default class QCObject extends BaseViewModel {
122122
* @returns {undefined}
123123
*/
124124
sortListByField(listSource, field, order) {
125-
listSource.sort((a, b) => typeof a[field] === 'string' ?
125+
listSource?.sort((a, b) => typeof a[field] === 'string' ?
126126
this._compareStrings(a[field], b[field], order) :
127127
this._compareNumbers(a[field], b[field], order));
128128
}
@@ -310,7 +310,8 @@ export default class QCObject extends BaseViewModel {
310310
await Promise.allSettled(objectsName.map(async (objectName) => {
311311
let fetchedData = null;
312312
if (this.objects[objectName]?.isSuccess() && this.objects[objectName]?.payload?.name) {
313-
const { refreshNeeded, data } = await this.checkIfRefreshObject(this.objects[objectName].payload);
313+
const context = { objectName };
314+
const { refreshNeeded, data } = await this.checkIfRefreshObject(this.objects[objectName].payload, context);
314315
fetchedData = data;
315316
if (!refreshNeeded) {
316317
return;
@@ -571,11 +572,32 @@ export default class QCObject extends BaseViewModel {
571572
* @param {object} object - The object to check for refresh.
572573
* @param {string} object.name - The name of the object to look up.
573574
* @param {string|number} object.id - The current ID of the object being validated.
575+
* @param {object} context - Additional context to determine fetch method
576+
* @param {string} context.objectName - Object name from URL params
577+
* @param {string} context.objectId - Object ID from URL params
574578
* @returns {Promise<boolean,RemoteData>} A promise that resolves to `true` if the object should be refreshed
575579
*/
576-
async checkIfRefreshObject(object) {
577-
const fetchFn = async () =>
578-
await this.model.services.object.getObjectByName(object.name, undefined, undefined, this);
580+
async checkIfRefreshObject(object, context = {}) {
581+
const { objectName, objectId } = context;
582+
583+
const fetchFn = async () => {
584+
if (objectId) {
585+
return await this.model.services.object.getObjectById(
586+
objectId,
587+
undefined,
588+
undefined,
589+
this,
590+
);
591+
} else {
592+
return await this.model.services.object.getObjectByName(
593+
objectName || object.name,
594+
undefined,
595+
undefined,
596+
this,
597+
);
598+
}
599+
};
600+
579601
const validateFn = (result) =>
580602
result.isSuccess() && result.payload.id !== object.id;
581603
return this.model.filterModel.refreshCheck(fetchFn, validateFn);
@@ -590,7 +612,9 @@ export default class QCObject extends BaseViewModel {
590612
this.selected = null;
591613
}
592614
if (this.selected && this.selected.name) {
593-
const { refreshNeeded, data } = await this.checkIfRefreshObject(this.objects[this.selected.name].payload);
615+
const context = { objectName: this.selected.name };
616+
const { refreshNeeded, data } =
617+
await this.checkIfRefreshObject(this.objects[this.selected.name].payload, context);
594618
if (refreshNeeded && data?.payload) {
595619
this.select({ name: this.selected.name }, data.payload);
596620
}

QualityControl/public/pages/objectView/ObjectViewModel.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ export default class ObjectViewModel extends BaseViewModel {
7171
async updateObjectSelection(object, validFrom = undefined, id = '') {
7272
const { objectName = undefined, objectId = undefined } = object;
7373
const { params } = this.model.router;
74-
const { refreshNeeded, data } = await this.model.object.checkIfRefreshObject(this.selected.payload);
74+
const context = { objectName: objectName || params.objectName, objectId: objectId || params.objectId };
75+
const { refreshNeeded, data } = await this.model.object.checkIfRefreshObject(this.selected.payload, context);
7576
if (!refreshNeeded) {
7677
return;
7778
}
@@ -85,9 +86,15 @@ export default class ObjectViewModel extends BaseViewModel {
8586
}
8687

8788
let currentParams = '?page=objectView';
88-
this.selected = data ?? params.objectName
89-
? await this.model.services.object.getObjectByName(params.objectName, id, validFrom, this)
90-
: await this.model.services.object.getObjectById(params.objectId, id, validFrom, this);
89+
90+
// Use refreshed data if available, otherwise fetch based on available parameters
91+
if (data) {
92+
this.selected = data;
93+
} else if (params.objectName) {
94+
this.selected = await this.model.services.object.getObjectByName(params.objectName, id, validFrom, this);
95+
} else if (params.objectId) {
96+
this.selected = await this.model.services.object.getObjectById(params.objectId, id, validFrom, this);
97+
}
9198

9299
setBrowserTabTitle(this.selected.payload.name);
93100

0 commit comments

Comments
 (0)