import {memo, useMemo} from 'react' import {AtUri} from '@atproto/api' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useNavigation} from '@react-navigation/native' import type React from 'react' 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 {useAgeAssurance} from '#/state/ageAssurance/useAgeAssurance' import {useProfileShadow} from '#/state/cache/profile-shadow' import {useSession} from '#/state/session' import {useBreakpoints} from '#/alf' import {useDialogControl} from '#/components/Dialog' import {EmbedDialog} from '#/components/dialogs/Embed' import {SendViaChatDialog} from '#/components/dms/dialogs/ShareViaChatDialog' import {ChainLink_Stroke2_Corner0_Rounded as ChainLinkIcon} from '#/components/icons/ChainLink' import {Clipboard_Stroke2_Corner2_Rounded as ClipboardIcon} from '#/components/icons/Clipboard' import {CodeBrackets_Stroke2_Corner0_Rounded as CodeBracketsIcon} from '#/components/icons/CodeBrackets' import {PaperPlane_Stroke2_Corner0_Rounded as Send} from '#/components/icons/PaperPlane' import * as Menu from '#/components/Menu' import {useDevMode} from '#/storage/hooks/dev-mode' import {type ShareMenuItemsProps} from './ShareMenuItems.types' let ShareMenuItems = ({ post, record, timestamp, onShare: onShareProp, }: ShareMenuItemsProps): React.ReactNode => { const {hasSession} = useSession() const {gtMobile} = useBreakpoints() const {_} = useLingui() const navigation = useNavigation() const embedPostControl = useDialogControl() const sendViaChatControl = useDialogControl() const [devModeEnabled] = useDevMode() const {isAgeRestricted} = useAgeAssurance() const postUri = post.uri const postCid = post.cid const postAuthor = useProfileShadow(post.author) const href = useMemo(() => { const urip = new AtUri(postUri) return makeProfileLink(postAuthor, 'post', urip.rkey) }, [postUri, postAuthor]) const hideInPWI = useMemo(() => { return !!postAuthor.labels?.find( label => label.val === '!no-unauthenticated', ) }, [postAuthor]) 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, }) } const canEmbed = isWeb && gtMobile && !hideInPWI const onShareATURI = () => { shareText(postUri) } const onShareAuthorDID = () => { shareText(postAuthor.did) } const copyLinkItem = ( Copy link to post ) return ( <> {!hideInPWI && copyLinkItem} {hasSession && !isAgeRestricted && ( { logger.metric('share:press:openDmSearch', {}, {statsig: true}) sendViaChatControl.open() }}> Send via direct message )} {canEmbed && ( { logger.metric('share:press:embed', {}, {statsig: true}) embedPostControl.open() }}> {_(msg`Embed post`)} )} {hideInPWI && ( <> {hasSession && } {copyLinkItem} Note: This post is only visible to logged-in users. )} {devModeEnabled && ( <> Copy post at:// URI Copy author DID )} {canEmbed && ( )} ) } ShareMenuItems = memo(ShareMenuItems) export {ShareMenuItems}