From aaff6cccf62db00a0b26c000c476d4485c662a26 Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Tue, 27 May 2025 13:57:11 +0200 Subject: [PATCH 1/4] fix(fe): use loadedVersion for limits dialog and improve resource string handling --- .../frontend-2/components/viewer/PreSetupWrapper.vue | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/frontend-2/components/viewer/PreSetupWrapper.vue b/packages/frontend-2/components/viewer/PreSetupWrapper.vue index 9620a4c58..4866f9948 100644 --- a/packages/frontend-2/components/viewer/PreSetupWrapper.vue +++ b/packages/frontend-2/components/viewer/PreSetupWrapper.vue @@ -126,6 +126,7 @@ import { useFilterUtilities } from '~/lib/viewer/composables/ui' import { projectsRoute, workspaceRoute } from '~~/lib/common/helpers/route' import { useMixpanel } from '~/lib/core/composables/mp' import { writableAsyncComputed } from '~/lib/common/composables/async' +import { resourceBuilder } from '@speckle/shared/viewer/route' graphql(` fragment ModelPageProject on Project { @@ -200,11 +201,14 @@ const hasMissingReferencedObject = computed(() => { const resourceIds = resourceIdString.value.split(',') const result = modelsAndVersionIds.value.some((item) => { - const version = item.model?.versions?.items?.find((v) => v.id === item.versionId) + const version = item.model?.loadedVersion?.items?.find( + (v) => v.id === item.versionId + ) - if (version && version.referencedObject === null) { - // Check if this model+version is in the URL (latest version always available) - const modelVersionString = `${item.model.id}@${item.versionId}`.toLowerCase() + if (!version || version.referencedObject === null) { + const modelVersionString = resourceBuilder() + .addModel(item.model.id, item.versionId) + .toString() const isInUrl = resourceIds.some((r) => r.toLowerCase() === modelVersionString) return isInUrl From 634fdc0baab706fb3905d1f2de324af30a26bfd8 Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Tue, 27 May 2025 14:01:31 +0200 Subject: [PATCH 2/4] Use parseUrlParameters --- .../components/viewer/PreSetupWrapper.vue | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/frontend-2/components/viewer/PreSetupWrapper.vue b/packages/frontend-2/components/viewer/PreSetupWrapper.vue index 4866f9948..d1e930ce2 100644 --- a/packages/frontend-2/components/viewer/PreSetupWrapper.vue +++ b/packages/frontend-2/components/viewer/PreSetupWrapper.vue @@ -126,7 +126,7 @@ import { useFilterUtilities } from '~/lib/viewer/composables/ui' import { projectsRoute, workspaceRoute } from '~~/lib/common/helpers/route' import { useMixpanel } from '~/lib/core/composables/mp' import { writableAsyncComputed } from '~/lib/common/composables/async' -import { resourceBuilder } from '@speckle/shared/viewer/route' +import { parseUrlParameters, resourceBuilder } from '@speckle/shared/viewer/route' graphql(` fragment ModelPageProject on Project { @@ -198,7 +198,7 @@ const limitsDialogType = ref<'version' | 'comment' | 'federated'>('version') // Check for missing referencedObject in url referenced versions (out of plan limits) const hasMissingReferencedObject = computed(() => { - const resourceIds = resourceIdString.value.split(',') + const resources = parseUrlParameters(resourceIdString.value) const result = modelsAndVersionIds.value.some((item) => { const version = item.model?.loadedVersion?.items?.find( @@ -209,7 +209,9 @@ const hasMissingReferencedObject = computed(() => { const modelVersionString = resourceBuilder() .addModel(item.model.id, item.versionId) .toString() - const isInUrl = resourceIds.some((r) => r.toLowerCase() === modelVersionString) + const isInUrl = resources.some( + (r) => r.toString().toLowerCase() === modelVersionString + ) return isInUrl } @@ -318,4 +320,12 @@ watch( }, { immediate: true } ) + +watch( + [hasMissingReferencedObject, modelsAndVersionIds], + ([hasMissing]) => { + showLimitsDialog.value = hasMissing + }, + { immediate: true } +) From b88b8cb11a921dc5b7b14e089dcf46a00b33008d Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Tue, 27 May 2025 14:59:30 +0200 Subject: [PATCH 3/4] Merge watches --- .../components/viewer/PreSetupWrapper.vue | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/frontend-2/components/viewer/PreSetupWrapper.vue b/packages/frontend-2/components/viewer/PreSetupWrapper.vue index d1e930ce2..e32ffafcc 100644 --- a/packages/frontend-2/components/viewer/PreSetupWrapper.vue +++ b/packages/frontend-2/components/viewer/PreSetupWrapper.vue @@ -294,7 +294,13 @@ onMounted(() => { // Watch for plan limit conditions and show dialog if needed watch( - [hasMissingReferencedObject, hasMissingThread, resourceItems, project], + [ + hasMissingReferencedObject, + hasMissingThread, + resourceItems, + project, + modelsAndVersionIds + ], ([missingObject, missingThread]) => { if (missingObject) { if (isFederated.value) { @@ -316,16 +322,10 @@ watch( if (missingThread && isFederated.value && hasMissingReferencedObject.value) { limitsDialogType.value = 'comment' showLimitsDialog.value = true + } else { + showLimitsDialog.value = false } }, { immediate: true } ) - -watch( - [hasMissingReferencedObject, modelsAndVersionIds], - ([hasMissing]) => { - showLimitsDialog.value = hasMissing - }, - { immediate: true } -) From 41cbeeb9ab039438f42d820dafbfe72fd8cc3872 Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Tue, 27 May 2025 15:37:30 +0200 Subject: [PATCH 4/4] Changes from fabs --- .../components/viewer/PreSetupWrapper.vue | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/packages/frontend-2/components/viewer/PreSetupWrapper.vue b/packages/frontend-2/components/viewer/PreSetupWrapper.vue index e32ffafcc..74217a9b6 100644 --- a/packages/frontend-2/components/viewer/PreSetupWrapper.vue +++ b/packages/frontend-2/components/viewer/PreSetupWrapper.vue @@ -294,13 +294,7 @@ onMounted(() => { // Watch for plan limit conditions and show dialog if needed watch( - [ - hasMissingReferencedObject, - hasMissingThread, - resourceItems, - project, - modelsAndVersionIds - ], + [hasMissingReferencedObject, hasMissingThread, resourceItems, project], ([missingObject, missingThread]) => { if (missingObject) { if (isFederated.value) { @@ -310,16 +304,7 @@ watch( } showLimitsDialog.value = true return - } - - // If no workspace and no missing objects, don't show dialog - if (!project.value?.workspace) { - showLimitsDialog.value = false - return - } - - // Only show comment dialog if it's a federated view AND we have a missing referenced object - if (missingThread && isFederated.value && hasMissingReferencedObject.value) { + } else if (missingThread && isFederated.value && hasMissingReferencedObject.value) { limitsDialogType.value = 'comment' showLimitsDialog.value = true } else {