diff --git a/packages/frontend-2/components/project/models-page/Header.vue b/packages/frontend-2/components/project/models-page/Header.vue index f0f20523e..5cff7e855 100644 --- a/packages/frontend-2/components/project/models-page/Header.vue +++ b/packages/frontend-2/components/project/models-page/Header.vue @@ -155,7 +155,12 @@ const search = ref('') const mp = useMixpanel() const trackFederateAll = () => - mp.track('Viewer Action', { type: 'action', name: 'view-all-models' }) + mp.track('Viewer Action', { + type: 'action', + name: 'federation', + action: 'view-all', + source: 'project page' + }) const canContribute = computed(() => canModifyModels(props.project)) const showNewDialog = ref(false) diff --git a/packages/frontend-2/components/project/page/latest-items/Models.vue b/packages/frontend-2/components/project/page/latest-items/Models.vue index 0e673987e..ea2a79398 100644 --- a/packages/frontend-2/components/project/page/latest-items/Models.vue +++ b/packages/frontend-2/components/project/page/latest-items/Models.vue @@ -105,7 +105,12 @@ const props = defineProps<{ const mp = useMixpanel() const trackFederateAll = () => - mp.track('Viewer Action', { type: 'action', name: 'view-all-models' }) + mp.track('Viewer Action', { + type: 'action', + name: 'federation', + action: 'view-all', + source: 'all models page' + }) const queryLoading = ref(false) const search = ref('') diff --git a/packages/frontend-2/components/project/page/models/StructureItem.vue b/packages/frontend-2/components/project/page/models/StructureItem.vue index eaa3d00c7..eb5bb2851 100644 --- a/packages/frontend-2/components/project/page/models/StructureItem.vue +++ b/packages/frontend-2/components/project/page/models/StructureItem.vue @@ -284,7 +284,12 @@ const importArea = ref( const mp = useMixpanel() const trackFederateModels = () => - mp.track('Viewer Action', { type: 'action', name: 'view-all-submodels' }) + mp.track('Viewer Action', { + type: 'action', + name: 'federation', + action: 'view-all', + source: 'model grid item' + }) const expanded = ref(false) const showActionsMenu = ref(false) diff --git a/packages/frontend-2/components/viewer/AnchoredPoints.vue b/packages/frontend-2/components/viewer/AnchoredPoints.vue index ec778fba5..8e306c1c4 100644 --- a/packages/frontend-2/components/viewer/AnchoredPoints.vue +++ b/packages/frontend-2/components/viewer/AnchoredPoints.vue @@ -98,6 +98,7 @@ import { Nullable } from '@speckle/shared' import { useActiveUser } from '~~/lib/auth/composables/activeUser' import { LimitedUser } from '~~/lib/common/generated/gql/graphql' import { SetFullyRequired } from '~~/lib/common/helpers/type' +import { useMixpanel } from '~~/lib/core/composables/mp' import { useViewerUserActivityTracking } from '~~/lib/viewer/composables/activity' import { CommentBubbleModel, @@ -200,10 +201,25 @@ const spotlightUser = computed(() => { ) }) +const mp = useMixpanel() function setUserSpotlight(sessionId: string) { - if (spotlightUserSessionId.value === sessionId) - return (spotlightUserSessionId.value = null) + if (spotlightUserSessionId.value === sessionId) { + spotlightUserSessionId.value = null + mp.track('Viewer Action', { + type: 'action', + name: 'spotlight-mode', + action: 'stop', + source: 'navbar' + }) + return + } spotlightUserSessionId.value = sessionId + mp.track('Viewer Action', { + type: 'action', + name: 'spotlight-mode', + action: 'start', + source: 'navbar' + }) } diff --git a/packages/frontend-2/components/viewer/anchored-point/Thread.vue b/packages/frontend-2/components/viewer/anchored-point/Thread.vue index 03146efe2..79c1ff0bd 100644 --- a/packages/frontend-2/components/viewer/anchored-point/Thread.vue +++ b/packages/frontend-2/components/viewer/anchored-point/Thread.vue @@ -323,7 +323,12 @@ const changeExpanded = (newVal: boolean) => { isExpanded: newVal }) emit('update:expanded', newVal) - mp.track('Comment Action', { type: 'action', name: 'toggle', status: newVal }) + mp.track('Comment Action', { + type: 'action', + name: 'toggle', + status: newVal, + source: 'bubble' + }) } const canArchiveOrUnarchive = computed( diff --git a/packages/frontend-2/components/viewer/anchored-point/User.vue b/packages/frontend-2/components/viewer/anchored-point/User.vue index f86998d72..585ac9914 100644 --- a/packages/frontend-2/components/viewer/anchored-point/User.vue +++ b/packages/frontend-2/components/viewer/anchored-point/User.vue @@ -28,6 +28,7 @@ diff --git a/packages/frontend-2/components/viewer/resources/add-model/DialogObjectTab.vue b/packages/frontend-2/components/viewer/resources/add-model/DialogObjectTab.vue index 6ce6c2ef7..d3dd1139a 100644 --- a/packages/frontend-2/components/viewer/resources/add-model/DialogObjectTab.vue +++ b/packages/frontend-2/components/viewer/resources/add-model/DialogObjectTab.vue @@ -80,7 +80,6 @@ const onSubmit = handleSubmit((payload) => { const { objectIdsOrUrl } = payload const ids = removeRedundantIds(extractObjectIds(objectIdsOrUrl) || []) if (!ids?.length) return - emit('chosen', { objectIds: ids }) }) diff --git a/packages/frontend-2/components/viewer/sun/Menu.vue b/packages/frontend-2/components/viewer/sun/Menu.vue index 41de639ca..2debfd692 100644 --- a/packages/frontend-2/components/viewer/sun/Menu.vue +++ b/packages/frontend-2/components/viewer/sun/Menu.vue @@ -77,15 +77,27 @@ import { Popover, PopoverButton, PopoverPanel } from '@headlessui/vue' import { SunLightConfiguration } from '@speckle/viewer' import { SunIcon } from '@heroicons/vue/24/outline' import { useInjectedViewerState } from '~~/lib/viewer/composables/setup' +import { useMixpanel } from '~~/lib/core/composables/mp' +import { debounce } from 'lodash-es' + +const mp = useMixpanel() +const debounceTrackLightConfigChange = debounce(() => { + mp.track('Viewer Action', { + type: 'action', + name: 'light-config-change' + }) +}, 1000) const createLightConfigComputed = (key: K) => computed({ get: () => lightConfig.value[key], - set: (newVal) => - (lightConfig.value = { + set: (newVal) => { + lightConfig.value = { ...lightConfig.value, [key]: newVal - }) + } + debounceTrackLightConfigChange() + } }) const { diff --git a/packages/frontend-2/middleware/mixpanel.global.ts b/packages/frontend-2/middleware/mixpanel.global.ts index e0be2f36d..da67fb56d 100644 --- a/packages/frontend-2/middleware/mixpanel.global.ts +++ b/packages/frontend-2/middleware/mixpanel.global.ts @@ -2,12 +2,11 @@ import { useMixpanel } from '~~/lib/core/composables/mp' export default defineNuxtRouteMiddleware((to) => { if (process.server) return - const mixpanel = useMixpanel() + const mp = useMixpanel() const pathDefinition = to.matched[to.matched.length - 1].path const path = to.path - mixpanel.track('Route Visited', { + mp.track('Route Visited', { path, pathDefinition }) - console.log(path, pathDefinition) })