From 191135b8cbe5728ca55f521bca3ed472985d9616 Mon Sep 17 00:00:00 2001 From: Stephen Davies Date: Tue, 27 Feb 2024 14:44:07 +1100 Subject: [PATCH] Squashed commit of the following: commit 6788fa7bc7709d64aaad07f10dfece254930d80a Author: Stephen Davies Date: Fri Feb 23 14:06:29 2024 +1100 Untested strategy to recover from sparse MagdaReference share data ending up in models --- .../CatalogReferences/MagdaReference.ts | 58 +++++++++---------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/lib/Models/Catalog/CatalogReferences/MagdaReference.ts b/lib/Models/Catalog/CatalogReferences/MagdaReference.ts index 32d2b9a71ad..8da886f45d6 100644 --- a/lib/Models/Catalog/CatalogReferences/MagdaReference.ts +++ b/lib/Models/Catalog/CatalogReferences/MagdaReference.ts @@ -423,7 +423,7 @@ export default class MagdaReference extends AccessControlMixin( ) as JsonObject | undefined; } - const model = MagdaReference.createMemberFromRecord( + let model = MagdaReference.createMemberFromRecord( terria, undefined, distributionFormats, @@ -442,25 +442,35 @@ export default class MagdaReference extends AccessControlMixin( shareKeys = member.aspects.terria.shareKeys.filter(isJsonString); } + model = terria.getModelById(BaseModel, member.id) + if (!model) { // Can't create an item or group yet, so create a reference. - const ref = new MagdaReference(member.id, terria, undefined); - + model = new MagdaReference(member.id, terria, undefined); + terria.addModel(model, shareKeys); + } + if ( + model instanceof MagdaReference && + !(isDefined(model.url) && isDefined(model.recordId)) && + !isDefined(model.magdaRecord) + ) { + // MagdaReference has just been created, or comes from share data with + // not enough information to load itself if (magdaUri) { - ref.setTrait(CommonStrata.definition, "url", magdaUri.toString()); + model.setTrait(CommonStrata.definition, "url", magdaUri.toString()); } - ref.setTrait(CommonStrata.definition, "recordId", memberId); + model.setTrait(CommonStrata.definition, "recordId", memberId); if ( isJsonObject(member.aspects, false) && isJsonObject(member.aspects.group, false) ) { // This is most likely a group. - ref.setTrait(CommonStrata.definition, "isGroup", true); + model.setTrait(CommonStrata.definition, "isGroup", true); } else { // This is most likely a mappable or chartable item. - ref.setTrait(CommonStrata.definition, "isMappable", true); - ref.setTrait(CommonStrata.definition, "isChartable", true); + model.setTrait(CommonStrata.definition, "isMappable", true); + model.setTrait(CommonStrata.definition, "isChartable", true); } // Use the name from the terria aspect if there is one. @@ -470,37 +480,25 @@ export default class MagdaReference extends AccessControlMixin( isJsonObject(member.aspects.terria.definition, false) && isJsonString(member.aspects.terria.definition.name) ) { - ref.setTrait( + model.setTrait( CommonStrata.definition, "name", member.aspects.terria.definition.name ); } else if (isJsonString(member.name)) { - ref.setTrait(CommonStrata.definition, "name", member.name); - } - - if (overriddenMember) { - ref.setTrait(CommonStrata.definition, "override", overriddenMember); - } - - if (terria.getModelById(BaseModel, member.id) === undefined) { - terria.addModel(ref, shareKeys); + model.setTrait(CommonStrata.definition, "name", member.name); } + } - if (AccessControlMixin.isMixedInto(ref)) { - ref.setAccessType(getAccessTypeFromMagdaRecord(member)); - } + if (overriddenMember) { + model.setTrait(CommonStrata.definition, "override", overriddenMember); + } - return ref.uniqueId; - } else { - if (terria.getModelById(BaseModel, member.id) === undefined) { - terria.addModel(model, shareKeys); - } - if (AccessControlMixin.isMixedInto(model)) { - model.setAccessType(getAccessTypeFromMagdaRecord(member)); - } - return model.uniqueId; + if (AccessControlMixin.isMixedInto(model)) { + model.setAccessType(getAccessTypeFromMagdaRecord(member)); } + + return model.uniqueId; }); if (isJsonString(record.name)) {