diff --git a/src/components/PostControls/ShareMenu/RecentChats.tsx b/src/components/PostControls/ShareMenu/RecentChats.tsx
index 17e90e6ef0..ca5d0029ec 100644
--- a/src/components/PostControls/ShareMenu/RecentChats.tsx
+++ b/src/components/PostControls/ShareMenu/RecentChats.tsx
@@ -7,6 +7,7 @@ import {useNavigation} from '@react-navigation/native'
import {type NavigationProp} from '#/lib/routes/types'
import {sanitizeDisplayName} from '#/lib/strings/display-names'
import {sanitizeHandle} from '#/lib/strings/handles'
+import {logger} from '#/logger'
import {useModerationOpts} from '#/state/preferences/moderation-opts'
import {useListConvosQuery} from '#/state/queries/messages/list-conversations'
import {useSession} from '#/state/session'
@@ -30,6 +31,7 @@ export function RecentChats({postUri}: {postUri: string}) {
const onSelectChat = (convoId: string) => {
control.close(() => {
+ logger.metric('share:press:recentDm', {}, {statsig: true})
navigation.navigate('MessagesConversation', {
conversation: convoId,
embed: postUri,
diff --git a/src/components/PostControls/ShareMenu/ShareMenuItems.tsx b/src/components/PostControls/ShareMenu/ShareMenuItems.tsx
index c5f530e8db..1d12f87649 100644
--- a/src/components/PostControls/ShareMenu/ShareMenuItems.tsx
+++ b/src/components/PostControls/ShareMenu/ShareMenuItems.tsx
@@ -9,6 +9,7 @@ import {makeProfileLink} from '#/lib/routes/links'
import {type NavigationProp} from '#/lib/routes/types'
import {shareText, shareUrl} from '#/lib/sharing'
import {toShareUrl} from '#/lib/strings/url-helpers'
+import {logger} from '#/logger'
import {useProfileShadow} from '#/state/cache/profile-shadow'
import {useSession} from '#/state/session'
import * as Toast from '#/view/com/util/Toast'
@@ -54,12 +55,14 @@ let ShareMenuItems = ({
postAuthor.did !== currentAccount?.did && hideInPWI
const onSharePost = () => {
+ logger.metric('share:press:nativeShare', {}, {statsig: true})
const url = toShareUrl(href)
shareUrl(url)
onShareProp()
}
const onCopyLink = () => {
+ logger.metric('share:press:copyLink', {}, {statsig: true})
const url = toShareUrl(href)
ExpoClipboard.setUrlAsync(url).then(() =>
Toast.show(_(msg`Copied to clipboard`), 'clipboard-check'),
@@ -93,7 +96,10 @@ let ShareMenuItems = ({
sendViaChatControl.open()}>
+ onPress={() => {
+ logger.metric('share:press:openDmSearch', {}, {statsig: true})
+ sendViaChatControl.open()
+ }}>
Send via direct message
diff --git a/src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx b/src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx
index 5a8a2e7db7..4eb90576c8 100644
--- a/src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx
+++ b/src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx
@@ -9,6 +9,7 @@ import {makeProfileLink} from '#/lib/routes/links'
import {type NavigationProp} from '#/lib/routes/types'
import {shareText, shareUrl} from '#/lib/sharing'
import {toShareUrl} from '#/lib/strings/url-helpers'
+import {logger} from '#/logger'
import {isWeb} from '#/platform/detection'
import {useProfileShadow} from '#/state/cache/profile-shadow'
import {useSession} from '#/state/session'
@@ -58,13 +59,15 @@ let ShareMenuItems = ({
const showLoggedOutWarning =
postAuthor.did !== currentAccount?.did && hideInPWI
- const onSharePost = () => {
+ const onCopyLink = () => {
+ logger.metric('share:press:copyLink', {}, {statsig: true})
const url = toShareUrl(href)
shareUrl(url)
onShareProp()
}
const onSelectChatToShareTo = (conversation: string) => {
+ logger.metric('share:press:dmSelected', {}, {statsig: true})
navigation.navigate('MessagesConversation', {
conversation,
embed: postUri,
@@ -92,7 +95,7 @@ let ShareMenuItems = ({
if (showLoggedOutWarning) {
loggedOutWarningPromptControl.open()
} else {
- onSharePost()
+ onCopyLink()
}
}}>
@@ -105,7 +108,10 @@ let ShareMenuItems = ({
sendViaChatControl.open()}>
+ onPress={() => {
+ logger.metric('share:press:openDmSearch', {}, {statsig: true})
+ sendViaChatControl.open()
+ }}>
Send via direct message
@@ -117,7 +123,10 @@ let ShareMenuItems = ({
embedPostControl.open()}>
+ onPress={() => {
+ logger.metric('share:press:embed', {}, {statsig: true})
+ embedPostControl.open()
+ }}>
{_(msg`Embed post`)}
@@ -157,7 +166,7 @@ let ShareMenuItems = ({
description={_(
msg`This post is only visible to logged-in users. It won't be visible to people who aren't signed in.`,
)}
- onConfirm={onSharePost}
+ onConfirm={onCopyLink}
confirmButtonCta={_(msg`Share anyway`)}
/>
diff --git a/src/components/PostControls/ShareMenu/index.tsx b/src/components/PostControls/ShareMenu/index.tsx
index 961f225ef5..c60f371f4a 100644
--- a/src/components/PostControls/ShareMenu/index.tsx
+++ b/src/components/PostControls/ShareMenu/index.tsx
@@ -13,6 +13,7 @@ import type React from 'react'
import {makeProfileLink} from '#/lib/routes/links'
import {shareUrl} from '#/lib/sharing'
import {toShareUrl} from '#/lib/strings/url-helpers'
+import {logger} from '#/logger'
import {type Shadow} from '#/state/cache/post-shadow'
import {EventStopper} from '#/view/com/util/EventStopper'
import {native} from '#/alf'
@@ -53,12 +54,19 @@ let ShareMenuButton = ({
// HACK. We need the state update to be flushed by the time
// menuControl.open() fires but RN doesn't expose flushSync.
setTimeout(menuControl.open)
+
+ logger.metric(
+ 'share:open',
+ {context: big ? 'thread' : 'feed'},
+ {statsig: true},
+ )
},
}),
- [menuControl, setHasBeenOpen],
+ [menuControl, setHasBeenOpen, big],
)
const onNativeLongPress = () => {
+ logger.metric('share:press:nativeShare', {}, {statsig: true})
const urip = new AtUri(post.uri)
const href = makeProfileLink(post.author, 'post', urip.rkey)
const url = toShareUrl(href)
diff --git a/src/logger/metrics.ts b/src/logger/metrics.ts
index d64e44b40b..dfb8cd5416 100644
--- a/src/logger/metrics.ts
+++ b/src/logger/metrics.ts
@@ -395,4 +395,12 @@ export type MetricEvents = {
'live:card:openProfile': {subject: string}
'live:view:profile': {subject: string}
'live:view:post': {subject: string; feed?: string}
+
+ 'share:open': {context: 'feed' | 'thread'}
+ 'share:press:copyLink': {}
+ 'share:press:nativeShare': {}
+ 'share:press:openDmSearch': {}
+ 'share:press:dmSelected': {}
+ 'share:press:recentDm': {}
+ 'share:press:embed': {}
}