From d07daf153860ecab30b5338d3e0c6869fb0ca966 Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Sat, 19 Apr 2025 12:51:54 +0100 Subject: [PATCH 1/6] Workspace Join Request Sent --- packages/frontend-2/components/workspace/JoinPage.vue | 1 + .../components/workspace/discoverableWorkspaces/Card.vue | 3 ++- .../components/workspace/discoverableWorkspaces/Modal.vue | 1 + .../workspace/invite/DiscoverableWorkspaceBanner.vue | 2 +- .../lib/workspaces/composables/discoverableWorkspaces.ts | 4 ++-- 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/frontend-2/components/workspace/JoinPage.vue b/packages/frontend-2/components/workspace/JoinPage.vue index 4186a4a01..da86c2970 100644 --- a/packages/frontend-2/components/workspace/JoinPage.vue +++ b/packages/frontend-2/components/workspace/JoinPage.vue @@ -28,6 +28,7 @@ v-for="workspace in discoverableWorkspacesAndJoinRequests" :key="`discoverable-${workspace.id}`" :workspace="workspace" + location="workspace join page" />
() const { requestToJoinWorkspace, dismissDiscoverableWorkspace } = @@ -54,7 +55,7 @@ const { requestToJoinWorkspace, dismissDiscoverableWorkspace } = const mixpanel = useMixpanel() const onRequest = () => { - requestToJoinWorkspace(props.workspace.id) + requestToJoinWorkspace(props.workspace.id, props.location || 'discovery card') } const onDismiss = async () => { diff --git a/packages/frontend-2/components/workspace/discoverableWorkspaces/Modal.vue b/packages/frontend-2/components/workspace/discoverableWorkspaces/Modal.vue index f57825e10..25a87da8a 100644 --- a/packages/frontend-2/components/workspace/discoverableWorkspaces/Modal.vue +++ b/packages/frontend-2/components/workspace/discoverableWorkspaces/Modal.vue @@ -14,6 +14,7 @@ :key="workspace.id" :workspace="workspace" show-dismiss-button + location="workspace switcher" />
diff --git a/packages/frontend-2/components/workspace/invite/DiscoverableWorkspaceBanner.vue b/packages/frontend-2/components/workspace/invite/DiscoverableWorkspaceBanner.vue index ad34dc30d..78a15f554 100644 --- a/packages/frontend-2/components/workspace/invite/DiscoverableWorkspaceBanner.vue +++ b/packages/frontend-2/components/workspace/invite/DiscoverableWorkspaceBanner.vue @@ -31,7 +31,7 @@ const invite = computed(() => ({ const handleRequest = async (accept: boolean) => { if (accept) { - await requestToJoinWorkspace(props.workspace.id) + await requestToJoinWorkspace(props.workspace.id, 'discovery banner') } else { await dismissDiscoverableWorkspace(props.workspace.id) mixpanel.track('Workspace Discovery Banner Dismissed', { diff --git a/packages/frontend-2/lib/workspaces/composables/discoverableWorkspaces.ts b/packages/frontend-2/lib/workspaces/composables/discoverableWorkspaces.ts index 1a55d51a3..cd1f0b69b 100644 --- a/packages/frontend-2/lib/workspaces/composables/discoverableWorkspaces.ts +++ b/packages/frontend-2/lib/workspaces/composables/discoverableWorkspaces.ts @@ -130,7 +130,7 @@ export const useDiscoverableWorkspaces = () => { () => discoverableWorkspacesCount.value + discoverableJoinRequestsCount.value ) - const requestToJoinWorkspace = async (workspaceId: string) => { + const requestToJoinWorkspace = async (workspaceId: string, location: string) => { const cache = apollo.cache const activeUserId = activeUser.value?.id @@ -177,7 +177,7 @@ export const useDiscoverableWorkspaces = () => { mixpanel.track('Workspace Join Request Sent', { workspaceId, - location: 'onboarding', + location, // eslint-disable-next-line camelcase workspace_id: workspaceId }) From ed224bebfb28ab69b9bf930ffde0c5da81d475dc Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Sat, 19 Apr 2025 13:11:40 +0100 Subject: [PATCH 2/6] Move Project CTA Clicked --- .../frontend-2/components/projects/Dashboard.vue | 15 ++++++++++++--- .../components/workspace/ProjectList.vue | 16 ++++++++++++++-- .../frontend-2/pages/projects/[id]/index.vue | 15 ++++++++++----- 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/packages/frontend-2/components/projects/Dashboard.vue b/packages/frontend-2/components/projects/Dashboard.vue index 889362d5a..5cd09fcc9 100644 --- a/packages/frontend-2/components/projects/Dashboard.vue +++ b/packages/frontend-2/components/projects/Dashboard.vue @@ -4,7 +4,7 @@
@@ -66,7 +66,7 @@ { } } -const onMoveProject = (projectId: string) => { +const mixpanel = useMixpanel() + +const onMoveProject = (projectId: string, location: string) => { + mixpanel.track('Move Project CTA Clicked', { + location, + // eslint-disable-next-line camelcase + workspace_id: + projects.value?.items.find((p) => p.id === projectId)?.workspace?.id || undefined + }) emittedProjectId.value = projectId showMoveProjectDialog.value = true } diff --git a/packages/frontend-2/components/workspace/ProjectList.vue b/packages/frontend-2/components/workspace/ProjectList.vue index a39679934..63a098f7f 100644 --- a/packages/frontend-2/components/workspace/ProjectList.vue +++ b/packages/frontend-2/components/workspace/ProjectList.vue @@ -22,7 +22,7 @@ v-if="workspace" :icon="Squares2X2Icon" :workspace-info="workspace" - @show-move-projects-dialog="showMoveProjectsDialog = true" + @show-move-projects-dialog="onMoveProject" @show-new-project-dialog="openNewProject = true" @show-invite-dialog="showInviteDialog = true" /> @@ -61,7 +61,7 @@ :can-create-project="canCreateProject" :can-move-project-to-workspace="canMoveProjectToWorkspace" @new-project="openNewProject = true" - @move-project="showMoveProjectsDialog = true" + @move-project="onMoveProject" /> @@ -101,6 +101,7 @@ import { workspaceRoute } from '~/lib/common/helpers/route' import { useBillingActions } from '~/lib/billing/composables/actions' import { useWorkspacesWizard } from '~/lib/workspaces/composables/wizard' import type { WorkspaceWizardState } from '~/lib/workspaces/helpers/types' +import { useMixpanel } from '~/lib/core/composables/mp' graphql(` fragment WorkspaceProjectList_Workspace on Workspace { @@ -227,6 +228,17 @@ const clearSearch = () => { const hasFinalized = ref(false) +const mixpanel = useMixpanel() + +const onMoveProject = () => { + mixpanel.track('Move Project CTA Clicked', { + location: 'workspace', + // eslint-disable-next-line camelcase + workspace_id: props.workspaceSlug + }) + showMoveProjectsDialog.value = true +} + onResult((queryResult) => { if ( queryResult.data?.workspaceBySlug.creationState?.completed === false && diff --git a/packages/frontend-2/pages/projects/[id]/index.vue b/packages/frontend-2/pages/projects/[id]/index.vue index 395ff238a..890e151cf 100644 --- a/packages/frontend-2/pages/projects/[id]/index.vue +++ b/packages/frontend-2/pages/projects/[id]/index.vue @@ -85,6 +85,7 @@ import type { LayoutMenuItem } from '~~/lib/layout/helpers/components' import { EllipsisHorizontalIcon } from '@heroicons/vue/24/solid' import { HorizontalDirection } from '~~/lib/common/composables/window' import { useCopyProjectLink } from '~~/lib/projects/composables/projectManagement' +import { useMixpanel } from '~/lib/core/composables/mp' graphql(` fragment ProjectPageProject on Project { @@ -146,6 +147,7 @@ const route = useRoute() const router = useRouter() const copyProjectLink = useCopyProjectLink() const { isLoggedIn } = useActiveUser() +const mixpanel = useMixpanel() const projectId = computed(() => route.params.id as string) const token = computed(() => route.query.token as Optional) @@ -322,6 +324,13 @@ const disableLegacyMoveProjectButton = computed( () => !project.value?.permissions.canMoveToWorkspace.authorized ) +const onMoveProject = () => { + mixpanel.track('Move Project CTA Clicked', { + location: 'project' + }) + showMoveDialog.value = true +} + const onActionChosen = (params: { item: LayoutMenuItem; event: MouseEvent }) => { const { item } = params @@ -330,12 +339,8 @@ const onActionChosen = (params: { item: LayoutMenuItem; event: MouseEvent }) => copyProjectLink(projectId.value) break case ActionTypes.Move: - showMoveDialog.value = true + onMoveProject() break } } - -const onMoveProject = () => { - showMoveDialog.value = true -} From b8b0a51b7f6c604809173618022442319486a0cb Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Sat, 19 Apr 2025 13:15:46 +0100 Subject: [PATCH 3/6] Add New Workspaces Explainer CTA Clicked --- packages/frontend-2/components/promo-banners/Workspace.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/frontend-2/components/promo-banners/Workspace.vue b/packages/frontend-2/components/promo-banners/Workspace.vue index 738f811b2..978b9d4b1 100644 --- a/packages/frontend-2/components/promo-banners/Workspace.vue +++ b/packages/frontend-2/components/promo-banners/Workspace.vue @@ -56,7 +56,7 @@ watch( showBanner, (newVal) => { if (newVal) { - mixpanel.track('Workspace Limit Announcement Banner Viewed', { + mixpanel.track('New Workspaces Explainer Banner Viewed', { source: 'promo-banner' }) } @@ -69,6 +69,9 @@ const handleDismiss = async () => { } const handleReadAnnouncement = async () => { + mixpanel.track('New Workspaces Explainer Banner CTA Clicked', { + source: 'promo-banner' + }) await navigateTo( 'https://speckle.systems/blog/projects-get-a-new-home-and-pricing-plans', { From f676bcf368599031f9f029fe3d88dae277cb4059 Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Sat, 19 Apr 2025 13:16:24 +0100 Subject: [PATCH 4/6] consistent naming --- packages/frontend-2/components/promo-banners/Workspace.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/frontend-2/components/promo-banners/Workspace.vue b/packages/frontend-2/components/promo-banners/Workspace.vue index 978b9d4b1..849a30860 100644 --- a/packages/frontend-2/components/promo-banners/Workspace.vue +++ b/packages/frontend-2/components/promo-banners/Workspace.vue @@ -57,7 +57,7 @@ watch( (newVal) => { if (newVal) { mixpanel.track('New Workspaces Explainer Banner Viewed', { - source: 'promo-banner' + location: 'promo_banner' }) } }, @@ -70,7 +70,7 @@ const handleDismiss = async () => { const handleReadAnnouncement = async () => { mixpanel.track('New Workspaces Explainer Banner CTA Clicked', { - source: 'promo-banner' + location: 'promo_banner' }) await navigateTo( 'https://speckle.systems/blog/projects-get-a-new-home-and-pricing-plans', From 63e035f9200f56e97dcd4e250f198cdc309ac6fb Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Sat, 19 Apr 2025 13:18:16 +0100 Subject: [PATCH 5/6] Better naming --- .../components/workspace/discoverableWorkspaces/Card.vue | 4 ++-- .../components/workspace/discoverableWorkspaces/Modal.vue | 2 +- .../workspace/invite/DiscoverableWorkspaceBanner.vue | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/frontend-2/components/workspace/discoverableWorkspaces/Card.vue b/packages/frontend-2/components/workspace/discoverableWorkspaces/Card.vue index 61f292df6..193e96cc4 100644 --- a/packages/frontend-2/components/workspace/discoverableWorkspaces/Card.vue +++ b/packages/frontend-2/components/workspace/discoverableWorkspaces/Card.vue @@ -55,14 +55,14 @@ const { requestToJoinWorkspace, dismissDiscoverableWorkspace } = const mixpanel = useMixpanel() const onRequest = () => { - requestToJoinWorkspace(props.workspace.id, props.location || 'discovery card') + requestToJoinWorkspace(props.workspace.id, props.location || 'discovery_card') } const onDismiss = async () => { await dismissDiscoverableWorkspace(props.workspace.id) mixpanel.track('Workspace Discovery Banner Dismissed', { workspaceId: props.workspace.id, - location: 'discovery card', + location: 'discovery_card', // eslint-disable-next-line camelcase workspace_id: props.workspace.id }) diff --git a/packages/frontend-2/components/workspace/discoverableWorkspaces/Modal.vue b/packages/frontend-2/components/workspace/discoverableWorkspaces/Modal.vue index 25a87da8a..4ada7e476 100644 --- a/packages/frontend-2/components/workspace/discoverableWorkspaces/Modal.vue +++ b/packages/frontend-2/components/workspace/discoverableWorkspaces/Modal.vue @@ -14,7 +14,7 @@ :key="workspace.id" :workspace="workspace" show-dismiss-button - location="workspace switcher" + location="workspace_switcher" />
diff --git a/packages/frontend-2/components/workspace/invite/DiscoverableWorkspaceBanner.vue b/packages/frontend-2/components/workspace/invite/DiscoverableWorkspaceBanner.vue index 78a15f554..2e8d9974e 100644 --- a/packages/frontend-2/components/workspace/invite/DiscoverableWorkspaceBanner.vue +++ b/packages/frontend-2/components/workspace/invite/DiscoverableWorkspaceBanner.vue @@ -36,7 +36,7 @@ const handleRequest = async (accept: boolean) => { await dismissDiscoverableWorkspace(props.workspace.id) mixpanel.track('Workspace Discovery Banner Dismissed', { workspaceId: props.workspace.id, - location: 'discovery banner', + location: 'discovery_banner', // eslint-disable-next-line camelcase workspace_id: props.workspace.id }) From 5aac348b77a0ba41848bedb99063d5a3a3f84cc0 Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Sat, 19 Apr 2025 13:19:12 +0100 Subject: [PATCH 6/6] fix --- packages/frontend-2/components/workspace/JoinPage.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend-2/components/workspace/JoinPage.vue b/packages/frontend-2/components/workspace/JoinPage.vue index da86c2970..c0c9ff0d6 100644 --- a/packages/frontend-2/components/workspace/JoinPage.vue +++ b/packages/frontend-2/components/workspace/JoinPage.vue @@ -28,7 +28,7 @@ v-for="workspace in discoverableWorkspacesAndJoinRequests" :key="`discoverable-${workspace.id}`" :workspace="workspace" - location="workspace join page" + location="workspace_join_page" />