From d394e1cd9b9e42c0256d73ca678507cbe19951cf Mon Sep 17 00:00:00 2001 From: Kristaps Fabians Geikins Date: Fri, 3 Oct 2025 11:39:59 +0200 Subject: [PATCH] fix: various presentations mode fixes related to resetting (#5635) * better workspace feature flag ops * user activity is correctly tracked * more fixes --- .../components/header/nav/Share.vue | 35 +---- .../presentation/controls/Controls.vue | 4 +- .../presentation/slideList/Slide.vue | 5 +- .../presentation/viewer/PostSetup.vue | 12 ++ .../presentation/viewer/Wrapper.vue | 10 +- .../components/viewer/AnchoredPoints.vue | 2 +- .../lib/common/generated/gql/graphql.ts | 4 +- .../lib/common/helpers/debugging.ts | 2 +- .../lib/presentations/composables/setup.ts | 31 ---- .../lib/presentations/composables/utils.ts | 27 ++++ .../composables/viewerPostSetup.ts | 44 ++++++ .../lib/viewer/composables/activity.ts | 140 +++++++++++------- .../viewer/composables/savedViews/state.ts | 17 ++- packages/frontend-2/plugins/010-logger.ts | 1 - .../typedefs/workspaces.graphql | 6 +- .../modules/core/graph/generated/graphql.ts | 4 +- .../modules/gatekeeper/domain/billing.ts | 10 +- .../gatekeeper/repositories/billing.ts | 21 ++- .../workspaces/graph/resolvers/workspaces.ts | 26 +++- workspace.code-workspace | 3 +- 20 files changed, 258 insertions(+), 146 deletions(-) create mode 100644 packages/frontend-2/components/presentation/viewer/PostSetup.vue create mode 100644 packages/frontend-2/lib/presentations/composables/utils.ts create mode 100644 packages/frontend-2/lib/presentations/composables/viewerPostSetup.ts diff --git a/packages/frontend-2/components/header/nav/Share.vue b/packages/frontend-2/components/header/nav/Share.vue index 86c6f3851..5e67c5d23 100644 --- a/packages/frontend-2/components/header/nav/Share.vue +++ b/packages/frontend-2/components/header/nav/Share.vue @@ -74,7 +74,6 @@ import { SpeckleViewer } from '@speckle/shared' import { keyboardClick } from '@speckle/ui-components' import { graphql } from '~/lib/common/generated/gql/gql' import type { HeaderNavShare_ProjectFragment } from '~~/lib/common/generated/gql/graphql' -import { useCopyModelLink } from '~~/lib/projects/composables/modelManagement' graphql(` fragment HeaderNavShare_Project on Project { @@ -90,7 +89,6 @@ const props = defineProps<{ }>() const { copy } = useClipboard() -const copyModelLink = useCopyModelLink() const menuButtonId = useId() const embedDialogOpen = ref(false) @@ -99,37 +97,16 @@ const parsedResourceIds = computed(() => SpeckleViewer.ViewerRoute.parseUrlParameters(props.resourceIdString) ) -const firstResource = computed(() => parsedResourceIds.value[0] || {}) - -const versionId = computed(() => { - if (SpeckleViewer.ViewerRoute.isModelResource(firstResource.value)) { - return firstResource.value.versionId - } - return '' -}) - -const modelId = computed(() => { - if (SpeckleViewer.ViewerRoute.isModelResource(firstResource.value)) { - return firstResource.value.modelId // Assuming your firstResource object has a modelId property - } - return '' -}) - const isFederated = computed(() => parsedResourceIds.value.length > 1) -const handleCopyId = () => { - copy(props.resourceIdString, { successMessage: 'ID copied to clipboard' }) +const handleCopyId = async () => { + await copy(props.resourceIdString, { successMessage: 'ID copied to clipboard' }) } -const handleCopyLink = () => { - const modelIdValue = modelId.value - const versionIdValue = versionId.value ? versionId.value : undefined - void copyModelLink({ - model: { - projectId: props.project.id, - id: modelIdValue - }, - versionId: versionIdValue +const handleCopyLink = async () => { + if (import.meta.server) return + await copy(window.location.href, { + successMessage: 'Copied link to clipboard' }) } diff --git a/packages/frontend-2/components/presentation/controls/Controls.vue b/packages/frontend-2/components/presentation/controls/Controls.vue index 275ac6f20..f6817dfc3 100644 --- a/packages/frontend-2/components/presentation/controls/Controls.vue +++ b/packages/frontend-2/components/presentation/controls/Controls.vue @@ -29,6 +29,7 @@ import { LucideChevronLeft, LucideChevronRight, LucideRotateCcw } from 'lucide-v import { useInjectedPresentationState } from '~/lib/presentations/composables/setup' import { clamp } from 'lodash-es' import { useEventListener } from '@vueuse/core' +import { useResetViewUtils } from '~/lib/presentations/composables/utils' defineProps<{ hideUi?: boolean @@ -36,8 +37,9 @@ defineProps<{ const { ui: { slideIdx: currentVisibleIndex, slideCount }, - viewer: { resetView, hasViewChanged } + viewer: { hasViewChanged } } = useInjectedPresentationState() +const { resetView } = useResetViewUtils() const disablePrevious = computed(() => currentVisibleIndex.value === 0) const disableNext = computed(() => diff --git a/packages/frontend-2/components/presentation/slideList/Slide.vue b/packages/frontend-2/components/presentation/slideList/Slide.vue index 50f7a2933..da7d98c7b 100644 --- a/packages/frontend-2/components/presentation/slideList/Slide.vue +++ b/packages/frontend-2/components/presentation/slideList/Slide.vue @@ -26,6 +26,7 @@ import { graphql } from '~~/lib/common/generated/gql' import type { PresentationSlideListSlide_SavedViewFragment } from '~~/lib/common/generated/gql/graphql' import { useInjectedPresentationState } from '~/lib/presentations/composables/setup' import { useAuthManager } from '~~/lib/auth/composables/auth' +import { useResetViewUtils } from '~/lib/presentations/composables/utils' graphql(` fragment PresentationSlideListSlide_SavedView on SavedView { @@ -42,10 +43,10 @@ const props = defineProps<{ }>() const { - ui: { slideIdx: currentSlideIdx, slide: currentSlide }, - viewer: { resetView } + ui: { slideIdx: currentSlideIdx, slide: currentSlide } } = useInjectedPresentationState() const { presentationToken } = useAuthManager() +const { resetView } = useResetViewUtils() const isCurrentSlide = computed(() => currentSlide.value?.id === props.slide.id) diff --git a/packages/frontend-2/components/presentation/viewer/PostSetup.vue b/packages/frontend-2/components/presentation/viewer/PostSetup.vue new file mode 100644 index 000000000..7b9a7fed1 --- /dev/null +++ b/packages/frontend-2/components/presentation/viewer/PostSetup.vue @@ -0,0 +1,12 @@ + + diff --git a/packages/frontend-2/components/presentation/viewer/Wrapper.vue b/packages/frontend-2/components/presentation/viewer/Wrapper.vue index 02ae024fb..48dfbaf83 100644 --- a/packages/frontend-2/components/presentation/viewer/Wrapper.vue +++ b/packages/frontend-2/components/presentation/viewer/Wrapper.vue @@ -1,9 +1,11 @@