diff --git a/src/components/Timeline/Default.tsx b/src/components/Timeline/Default.tsx index 684ab133..50455acf 100644 --- a/src/components/Timeline/Default.tsx +++ b/src/components/Timeline/Default.tsx @@ -17,6 +17,7 @@ import { uniqBy } from 'lodash' import React, { useCallback } from 'react' import { Pressable, StyleSheet, View } from 'react-native' import { useSelector } from 'react-redux' +import TimelineFullConversation from './Shared/FullConversation' export interface Props { item: Mastodon.Status & { _pinned?: boolean } // For account page, internal property @@ -124,6 +125,7 @@ const TimelineDefault: React.FC = ({ {!disableDetails && actualStatus.card && ( )} + {queryKey && !disableDetails && ( diff --git a/src/components/Timeline/Notifications.tsx b/src/components/Timeline/Notifications.tsx index e9ca3346..36af6fd0 100644 --- a/src/components/Timeline/Notifications.tsx +++ b/src/components/Timeline/Notifications.tsx @@ -17,6 +17,7 @@ import { uniqBy } from 'lodash' import React, { useCallback } from 'react' import { Pressable, StyleSheet, View } from 'react-native' import { useSelector } from 'react-redux' +import TimelineFullConversation from './Shared/FullConversation' export interface Props { notification: Mastodon.Notification @@ -52,7 +53,15 @@ const TimelineNotifications: React.FC = ({ return ( {notification.type !== 'mention' ? ( @@ -112,6 +121,7 @@ const TimelineNotifications: React.FC = ({ {notification.status.card && ( )} + ) : null} @@ -144,8 +154,7 @@ const TimelineNotifications: React.FC = ({ const styles = StyleSheet.create({ notificationView: { - padding: StyleConstants.Spacing.Global.PagePadding, - paddingBottom: 0 + padding: StyleConstants.Spacing.Global.PagePadding }, header: { flex: 1, diff --git a/src/components/Timeline/Shared/FullConversation.tsx b/src/components/Timeline/Shared/FullConversation.tsx new file mode 100644 index 00000000..16be2d91 --- /dev/null +++ b/src/components/Timeline/Shared/FullConversation.tsx @@ -0,0 +1,35 @@ +import { StyleConstants } from '@utils/styles/constants' +import { useTheme } from '@utils/styles/ThemeManager' +import React from 'react' +import { useTranslation } from 'react-i18next' +import { Text } from 'react-native' + +export interface Props { + status: Mastodon.Status +} + +const TimelineFullConversation = React.memo( + ({ status }: Props) => { + const { t } = useTranslation('componentTimeline') + const { theme } = useTheme() + + return status.in_reply_to_account_id && + (status.mentions.length === 0 || + status.mentions.filter( + mention => mention.id !== status.in_reply_to_account_id + ).length) ? ( + + {t('shared.fullConversation')} + + ) : null + }, + () => true +) + +export default TimelineFullConversation diff --git a/src/i18n/en/components/timeline.ts b/src/i18n/en/components/timeline.ts index e60a6305..4a7aeb56 100644 --- a/src/i18n/en/components/timeline.ts +++ b/src/i18n/en/components/timeline.ts @@ -51,6 +51,7 @@ export default { content: { expandHint: 'hidden content' }, + fullConversation: 'Read conversations', header: { shared: { application: 'Tooted with {{application}}' diff --git a/src/i18n/zh-Hans/components/timeline.ts b/src/i18n/zh-Hans/components/timeline.ts index 4ace3499..817afa19 100644 --- a/src/i18n/zh-Hans/components/timeline.ts +++ b/src/i18n/zh-Hans/components/timeline.ts @@ -51,6 +51,7 @@ export default { content: { expandHint: '隐藏内容' }, + fullConversation: '阅读全部对话', header: { shared: { application: '发自于 {{application}}'