Bluesky app fork with some witchin' additions 💫
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add translate metrics (#8171)

* Add translate metrics

* Format

authored by

Eric Bailey and committed by
GitHub
53711146 4c0213b3

+64 -14
+7
src/components/dms/MessageContextMenu.tsx
··· 8 8 import {useOpenLink} from '#/lib/hooks/useOpenLink' 9 9 import {richTextToString} from '#/lib/strings/rich-text-helpers' 10 10 import {getTranslatorLink} from '#/locale/helpers' 11 + import {logger} from '#/logger' 11 12 import {isNative} from '#/platform/detection' 12 13 import {useConvoActive} from '#/state/messages/convo' 13 14 import {useLanguagePrefs} from '#/state/preferences' ··· 61 62 langPrefs.primaryLanguage, 62 63 ) 63 64 openLink(translatorUrl, true) 65 + 66 + logger.metric('translate', { 67 + sourceLanguages: [], 68 + targetLanguage: langPrefs.primaryLanguage, 69 + textLength: message.text.length, 70 + }) 64 71 }, [langPrefs.primaryLanguage, message.text, openLink]) 65 72 66 73 const onDelete = useCallback(() => {
+6
src/logger/metrics.ts
··· 364 364 details: boolean 365 365 } 366 366 'reportDialog:failure': {} 367 + 368 + translate: { 369 + sourceLanguages: string[] 370 + targetLanguage: string 371 + textLength: number 372 + } 367 373 }
+28 -8
src/view/com/post-thread/PostThreadItem.tsx
··· 1 1 import React, {memo, useMemo} from 'react' 2 2 import { 3 - GestureResponderEvent, 3 + type GestureResponderEvent, 4 4 StyleSheet, 5 5 Text as RNText, 6 6 View, 7 7 } from 'react-native' 8 8 import { 9 - AppBskyFeedDefs, 9 + type AppBskyFeedDefs, 10 10 AppBskyFeedPost, 11 - AppBskyFeedThreadgate, 11 + type AppBskyFeedThreadgate, 12 12 AtUri, 13 - ModerationDecision, 13 + type ModerationDecision, 14 14 RichText as RichTextAPI, 15 15 } from '@atproto/api' 16 16 import {msg, Plural, Trans} from '@lingui/macro' ··· 26 26 import {niceDate} from '#/lib/strings/time' 27 27 import {s} from '#/lib/styles' 28 28 import {getTranslatorLink, isPostInLanguage} from '#/locale/helpers' 29 - import {POST_TOMBSTONE, Shadow, usePostShadow} from '#/state/cache/post-shadow' 29 + import {logger} from '#/logger' 30 + import { 31 + POST_TOMBSTONE, 32 + type Shadow, 33 + usePostShadow, 34 + } from '#/state/cache/post-shadow' 30 35 import {useLanguagePrefs} from '#/state/preferences' 31 - import {ThreadPost} from '#/state/queries/post-thread' 36 + import {type ThreadPost} from '#/state/queries/post-thread' 32 37 import {useSession} from '#/state/session' 33 38 import {useComposerControls} from '#/state/shell/composer' 34 39 import {useMergedThreadgateHiddenReplies} from '#/state/threadgate-hidden-replies' ··· 52 57 import {LabelsOnMyPost} from '#/components/moderation/LabelsOnMe' 53 58 import {PostAlerts} from '#/components/moderation/PostAlerts' 54 59 import {PostHider} from '#/components/moderation/PostHider' 55 - import {AppModerationCause} from '#/components/Pills' 60 + import {type AppModerationCause} from '#/components/Pills' 56 61 import * as Prompt from '#/components/Prompt' 57 62 import {RichText} from '#/components/RichText' 58 63 import {SubtleWebHover} from '#/components/SubtleWebHover' ··· 747 752 const {_, i18n} = useLingui() 748 753 const openLink = useOpenLink() 749 754 const isRootPost = !('reply' in post.record) 755 + const langPrefs = useLanguagePrefs() 750 756 751 757 const onTranslatePress = React.useCallback( 752 758 (e: GestureResponderEvent) => { 753 759 e.preventDefault() 754 760 openLink(translatorUrl, true) 761 + 762 + if ( 763 + bsky.dangerousIsType<AppBskyFeedPost.Record>( 764 + post.record, 765 + AppBskyFeedPost.isRecord, 766 + ) 767 + ) { 768 + logger.metric('translate', { 769 + sourceLanguages: post.record.langs ?? [], 770 + targetLanguage: langPrefs.primaryLanguage, 771 + textLength: post.record.text.length, 772 + }) 773 + } 774 + 755 775 return false 756 776 }, 757 - [openLink, translatorUrl], 777 + [openLink, translatorUrl, langPrefs, post], 758 778 ) 759 779 760 780 return (
+23 -6
src/view/com/util/forms/PostDropdownBtnMenuItems.tsx
··· 7 7 } from 'react-native' 8 8 import * as Clipboard from 'expo-clipboard' 9 9 import { 10 - AppBskyFeedDefs, 10 + type AppBskyFeedDefs, 11 11 AppBskyFeedPost, 12 - AppBskyFeedThreadgate, 12 + type AppBskyFeedThreadgate, 13 13 AtUri, 14 - RichText as RichTextAPI, 14 + type RichText as RichTextAPI, 15 15 } from '@atproto/api' 16 16 import {msg, Trans} from '@lingui/macro' 17 17 import {useLingui} from '@lingui/react' ··· 20 20 import {useOpenLink} from '#/lib/hooks/useOpenLink' 21 21 import {getCurrentRoute} from '#/lib/routes/helpers' 22 22 import {makeProfileLink} from '#/lib/routes/links' 23 - import {CommonNavigatorParams, NavigationProp} from '#/lib/routes/types' 23 + import { 24 + type CommonNavigatorParams, 25 + type NavigationProp, 26 + } from '#/lib/routes/types' 24 27 import {shareText, shareUrl} from '#/lib/sharing' 25 28 import {logEvent} from '#/lib/statsig/statsig' 26 29 import {richTextToString} from '#/lib/strings/rich-text-helpers' ··· 28 31 import {getTranslatorLink} from '#/locale/helpers' 29 32 import {logger} from '#/logger' 30 33 import {isWeb} from '#/platform/detection' 31 - import {Shadow} from '#/state/cache/post-shadow' 34 + import {type Shadow} from '#/state/cache/post-shadow' 32 35 import {useProfileShadow} from '#/state/cache/profile-shadow' 33 36 import {useFeedFeedbackContext} from '#/state/feed-feedback' 34 37 import {useLanguagePrefs} from '#/state/preferences' ··· 85 88 useReportDialogControl, 86 89 } from '#/components/moderation/ReportDialog' 87 90 import * as Prompt from '#/components/Prompt' 91 + import * as bsky from '#/types/bsky' 88 92 import * as Toast from '../Toast' 89 93 90 94 let PostDropdownMenuItems = ({ ··· 248 252 249 253 const onPressTranslate = React.useCallback(async () => { 250 254 await openLink(translatorUrl, true) 251 - }, [openLink, translatorUrl]) 255 + 256 + if ( 257 + bsky.dangerousIsType<AppBskyFeedPost.Record>( 258 + post.record, 259 + AppBskyFeedPost.isRecord, 260 + ) 261 + ) { 262 + logger.metric('translate', { 263 + sourceLanguages: post.record.langs ?? [], 264 + targetLanguage: langPrefs.primaryLanguage, 265 + textLength: post.record.text.length, 266 + }) 267 + } 268 + }, [openLink, translatorUrl, langPrefs, post]) 252 269 253 270 const onHidePost = React.useCallback(() => { 254 271 hidePost({uri: postUri})