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)
})