From a9920d963041e53be5c454da30f8109c2a145d19 Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Fri, 3 Mar 2023 15:13:31 -0600 Subject: Add translate link to post menu (#261) * Add a google translate menu item to posts * Fix: make sure the dropdown menu is always visible (when low on the screen) --- src/view/com/post-thread/PostThreadItem.tsx | 10 +++++++++- src/view/com/post/Post.tsx | 7 +++++++ src/view/com/posts/FeedItem.tsx | 8 +++++++- src/view/com/util/PostCtrls.tsx | 2 ++ src/view/com/util/forms/DropdownButton.tsx | 18 +++++++++++++++++- src/view/index.ts | 2 ++ 6 files changed, 44 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx index 4e14a84b7..8eda0962a 100644 --- a/src/view/com/post-thread/PostThreadItem.tsx +++ b/src/view/com/post-thread/PostThreadItem.tsx @@ -1,6 +1,6 @@ import React from 'react' import {observer} from 'mobx-react-lite' -import {StyleSheet, View} from 'react-native' +import {Linking, StyleSheet, View} from 'react-native' import Clipboard from '@react-native-clipboard/clipboard' import {AtUri} from '../../../third-party/uri' import { @@ -89,6 +89,11 @@ export const PostThreadItem = observer(function PostThreadItem({ Clipboard.setString(record?.text || '') Toast.show('Copied to clipboard') }, [record]) + const onOpenTranslate = React.useCallback(() => { + Linking.openURL( + encodeURI(`https://translate.google.com/#auto|en|${record?.text || ''}`), + ) + }, [record]) const onDeletePost = React.useCallback(() => { item.delete().then( () => { @@ -167,6 +172,7 @@ export const PostThreadItem = observer(function PostThreadItem({ itemTitle={itemTitle} isAuthor={item.post.author.did === store.me.did} onCopyPostText={onCopyPostText} + onOpenTranslate={onOpenTranslate} onDeletePost={onDeletePost}> @@ -353,6 +360,7 @@ export const PostThreadItem = observer(function PostThreadItem({ onPressToggleRepost={onPressToggleRepost} onPressToggleUpvote={onPressToggleUpvote} onCopyPostText={onCopyPostText} + onOpenTranslate={onOpenTranslate} onDeletePost={onDeletePost} /> diff --git a/src/view/com/post/Post.tsx b/src/view/com/post/Post.tsx index e8e6781f7..bf8dfed05 100644 --- a/src/view/com/post/Post.tsx +++ b/src/view/com/post/Post.tsx @@ -1,6 +1,7 @@ import React, {useState, useEffect} from 'react' import { ActivityIndicator, + Linking, StyleProp, StyleSheet, View, @@ -120,6 +121,11 @@ export const Post = observer(function Post({ Clipboard.setString(record.text) Toast.show('Copied to clipboard') } + const onOpenTranslate = () => { + Linking.openURL( + encodeURI(`https://translate.google.com/#auto|en|${record?.text || ''}`), + ) + } const onDeletePost = () => { item.delete().then( () => { @@ -214,6 +220,7 @@ export const Post = observer(function Post({ onPressToggleRepost={onPressToggleRepost} onPressToggleUpvote={onPressToggleUpvote} onCopyPostText={onCopyPostText} + onOpenTranslate={onOpenTranslate} onDeletePost={onDeletePost} /> diff --git a/src/view/com/posts/FeedItem.tsx b/src/view/com/posts/FeedItem.tsx index 1847827c3..1006645a9 100644 --- a/src/view/com/posts/FeedItem.tsx +++ b/src/view/com/posts/FeedItem.tsx @@ -1,6 +1,6 @@ import React, {useMemo, useState} from 'react' import {observer} from 'mobx-react-lite' -import {StyleSheet, View} from 'react-native' +import {Linking, StyleSheet, View} from 'react-native' import Clipboard from '@react-native-clipboard/clipboard' import Svg, {Circle, Line} from 'react-native-svg' import {AtUri} from '../../../third-party/uri' @@ -86,6 +86,11 @@ export const FeedItem = observer(function ({ Clipboard.setString(record?.text || '') Toast.show('Copied to clipboard') } + const onOpenTranslate = React.useCallback(() => { + Linking.openURL( + encodeURI(`https://translate.google.com/#auto|en|${record?.text || ''}`), + ) + }, [record]) const onDeletePost = () => { track('FeedItem:PostDelete') item.delete().then( @@ -243,6 +248,7 @@ export const FeedItem = observer(function ({ onPressToggleRepost={onPressToggleRepost} onPressToggleUpvote={onPressToggleUpvote} onCopyPostText={onCopyPostText} + onOpenTranslate={onOpenTranslate} onDeletePost={onDeletePost} /> diff --git a/src/view/com/util/PostCtrls.tsx b/src/view/com/util/PostCtrls.tsx index cb4dfab26..00e35eef7 100644 --- a/src/view/com/util/PostCtrls.tsx +++ b/src/view/com/util/PostCtrls.tsx @@ -52,6 +52,7 @@ interface PostCtrlsOpts { onPressToggleRepost: () => Promise onPressToggleUpvote: () => Promise onCopyPostText: () => void + onOpenTranslate: () => void onDeletePost: () => void } @@ -297,6 +298,7 @@ export function PostCtrls(opts: PostCtrlsOpts) { itemTitle={opts.itemTitle} isAuthor={opts.isAuthor} onCopyPostText={opts.onCopyPostText} + onOpenTranslate={opts.onOpenTranslate} onDeletePost={opts.onDeletePost}> winHeight) { + newY -= estimatedMenuHeight + } createDropdownMenu( newX, newY, @@ -114,6 +121,7 @@ export function PostDropdownBtn({ itemHref, isAuthor, onCopyPostText, + onOpenTranslate, onDeletePost, }: { style?: StyleProp @@ -124,6 +132,7 @@ export function PostDropdownBtn({ itemTitle: string isAuthor: boolean onCopyPostText: () => void + onOpenTranslate: () => void onDeletePost: () => void }) { const store = useStores() @@ -152,6 +161,13 @@ export function PostDropdownBtn({ Share.share({url: toShareUrl(itemHref)}) }, }, + { + icon: 'language', + label: 'Translate...', + onPress() { + onOpenTranslate() + }, + }, { icon: 'circle-exclamation', label: 'Report post', diff --git a/src/view/index.ts b/src/view/index.ts index c2ad84671..d1e9d2036 100644 --- a/src/view/index.ts +++ b/src/view/index.ts @@ -42,6 +42,7 @@ import {faHouse} from '@fortawesome/free-solid-svg-icons/faHouse' import {faImage as farImage} from '@fortawesome/free-regular-svg-icons/faImage' import {faImage} from '@fortawesome/free-solid-svg-icons/faImage' import {faInfo} from '@fortawesome/free-solid-svg-icons/faInfo' +import {faLanguage} from '@fortawesome/free-solid-svg-icons/faLanguage' import {faLink} from '@fortawesome/free-solid-svg-icons/faLink' import {faLock} from '@fortawesome/free-solid-svg-icons/faLock' import {faMagnifyingGlass} from '@fortawesome/free-solid-svg-icons/faMagnifyingGlass' @@ -113,6 +114,7 @@ export function setup() { faImage, farImage, faInfo, + faLanguage, faLink, faLock, faMagnifyingGlass, -- cgit 1.4.1