mirror of
https://github.com/tooot-app/app
synced 2025-04-08 07:31:05 +02:00
Experiment with #558
This commit is contained in:
parent
d26d8f3c14
commit
50b07fc5eb
@ -98,7 +98,6 @@ const TimelineConversation: React.FC<Props> = ({ conversation, queryKey, highlig
|
|||||||
</View>
|
</View>
|
||||||
|
|
||||||
{conversation.last_status ? (
|
{conversation.last_status ? (
|
||||||
<>
|
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
paddingTop: highlighted ? StyleConstants.Spacing.S : 0,
|
paddingTop: highlighted ? StyleConstants.Spacing.S : 0,
|
||||||
@ -107,10 +106,9 @@ const TimelineConversation: React.FC<Props> = ({ conversation, queryKey, highlig
|
|||||||
>
|
>
|
||||||
<TimelineContent />
|
<TimelineContent />
|
||||||
<TimelinePoll />
|
<TimelinePoll />
|
||||||
</View>
|
|
||||||
|
|
||||||
<TimelineActions />
|
<TimelineActions />
|
||||||
</>
|
</View>
|
||||||
) : null}
|
) : null}
|
||||||
</Pressable>
|
</Pressable>
|
||||||
</StatusContext.Provider>
|
</StatusContext.Provider>
|
||||||
|
@ -103,8 +103,9 @@ const TimelineDefault: React.FC<Props> = ({
|
|||||||
paddingTop: highlighted ? StyleConstants.Spacing.S : 0,
|
paddingTop: highlighted ? StyleConstants.Spacing.S : 0,
|
||||||
paddingLeft: highlighted
|
paddingLeft: highlighted
|
||||||
? 0
|
? 0
|
||||||
: (disableDetails ? StyleConstants.Avatar.XS : StyleConstants.Avatar.M) +
|
: (disableDetails || isConversation
|
||||||
StyleConstants.Spacing.S,
|
? StyleConstants.Avatar.XS
|
||||||
|
: StyleConstants.Avatar.M) + StyleConstants.Spacing.S,
|
||||||
...(disableDetails && { marginTop: -StyleConstants.Spacing.S })
|
...(disableDetails && { marginTop: -StyleConstants.Spacing.S })
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@ -115,9 +116,9 @@ const TimelineDefault: React.FC<Props> = ({
|
|||||||
<TimelineFullConversation />
|
<TimelineFullConversation />
|
||||||
<TimelineTranslate />
|
<TimelineTranslate />
|
||||||
<TimelineFeedback />
|
<TimelineFeedback />
|
||||||
</View>
|
|
||||||
|
|
||||||
<TimelineActions />
|
<TimelineActions />
|
||||||
|
</View>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -47,10 +47,6 @@ const TimelineNotifications: React.FC<Props> = ({ notification, queryKey }) => {
|
|||||||
const spoilerHidden = notification.status?.spoiler_text?.length
|
const spoilerHidden = notification.status?.spoiler_text?.length
|
||||||
? !instanceAccount.preferences?.['reading:expand:spoilers'] && !spoilerExpanded
|
? !instanceAccount.preferences?.['reading:expand:spoilers'] && !spoilerExpanded
|
||||||
: false
|
: false
|
||||||
const copiableContent = useRef<{ content: string; complete: boolean }>({
|
|
||||||
content: '',
|
|
||||||
complete: false
|
|
||||||
})
|
|
||||||
|
|
||||||
const { colors } = useTheme()
|
const { colors } = useTheme()
|
||||||
const navigation = useNavigation<StackNavigationProp<TabLocalStackParamList>>()
|
const navigation = useNavigation<StackNavigationProp<TabLocalStackParamList>>()
|
||||||
@ -101,11 +97,11 @@ const TimelineNotifications: React.FC<Props> = ({ notification, queryKey }) => {
|
|||||||
<TimelineAttachment />
|
<TimelineAttachment />
|
||||||
<TimelineCard />
|
<TimelineCard />
|
||||||
<TimelineFullConversation />
|
<TimelineFullConversation />
|
||||||
|
|
||||||
|
<TimelineActions />
|
||||||
</View>
|
</View>
|
||||||
) : null}
|
) : null}
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
<TimelineActions />
|
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -263,11 +263,6 @@ const TimelineActions: React.FC = () => {
|
|||||||
}, [status.bookmarked])
|
}, [status.bookmarked])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View
|
|
||||||
style={{
|
|
||||||
paddingLeft: highlighted ? 0 : StyleConstants.Avatar.M + StyleConstants.Spacing.S
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<View style={{ flexDirection: 'row' }}>
|
<View style={{ flexDirection: 'row' }}>
|
||||||
<Pressable
|
<Pressable
|
||||||
{...(highlighted
|
{...(highlighted
|
||||||
@ -320,7 +315,6 @@ const TimelineActions: React.FC = () => {
|
|||||||
children={childrenBookmark}
|
children={childrenBookmark}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,8 +48,7 @@ const TimelineAvatar: React.FC<Props> = ({ account }) => {
|
|||||||
style={{
|
style={{
|
||||||
borderRadius: StyleConstants.Avatar.M,
|
borderRadius: StyleConstants.Avatar.M,
|
||||||
overflow: 'hidden',
|
overflow: 'hidden',
|
||||||
marginRight: StyleConstants.Spacing.S,
|
marginRight: StyleConstants.Spacing.S
|
||||||
marginLeft: isConversation ? StyleConstants.Avatar.M - StyleConstants.Avatar.XS : undefined
|
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
|
@ -5,11 +5,7 @@ import CustomText from '@components/Text'
|
|||||||
import TimelineDefault from '@components/Timeline/Default'
|
import TimelineDefault from '@components/Timeline/Default'
|
||||||
import { useAppDispatch } from '@root/store'
|
import { useAppDispatch } from '@root/store'
|
||||||
import { TabMeStackScreenProps } from '@utils/navigation/navigators'
|
import { TabMeStackScreenProps } from '@utils/navigation/navigators'
|
||||||
import {
|
import { changeFontsize, getSettingsFontsize, SettingsState } from '@utils/slices/settingsSlice'
|
||||||
changeFontsize,
|
|
||||||
getSettingsFontsize,
|
|
||||||
SettingsState
|
|
||||||
} from '@utils/slices/settingsSlice'
|
|
||||||
import { StyleConstants } from '@utils/styles/constants'
|
import { StyleConstants } from '@utils/styles/constants'
|
||||||
import { adaptiveScale } from '@utils/styles/scaling'
|
import { adaptiveScale } from '@utils/styles/scaling'
|
||||||
import { useTheme } from '@utils/styles/ThemeManager'
|
import { useTheme } from '@utils/styles/ThemeManager'
|
||||||
@ -34,9 +30,7 @@ export const mapFontsizeToName = (size: SettingsState['fontsize']) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const TabMeSettingsFontsize: React.FC<
|
const TabMeSettingsFontsize: React.FC<TabMeStackScreenProps<'Tab-Me-Settings-Fontsize'>> = () => {
|
||||||
TabMeStackScreenProps<'Tab-Me-Settings-Fontsize'>
|
|
||||||
> = () => {
|
|
||||||
const { colors, theme } = useTheme()
|
const { colors, theme } = useTheme()
|
||||||
const { t } = useTranslation('screenTabs')
|
const { t } = useTranslation('screenTabs')
|
||||||
const initialSize = useSelector(getSettingsFontsize)
|
const initialSize = useSelector(getSettingsFontsize)
|
||||||
@ -86,8 +80,7 @@ const TabMeSettingsFontsize: React.FC<
|
|||||||
marginBottom: StyleConstants.Spacing.M,
|
marginBottom: StyleConstants.Spacing.M,
|
||||||
fontSize: adaptiveScale(StyleConstants.Font.Size.M, size),
|
fontSize: adaptiveScale(StyleConstants.Font.Size.M, size),
|
||||||
lineHeight: adaptiveScale(StyleConstants.Font.LineHeight.M, size),
|
lineHeight: adaptiveScale(StyleConstants.Font.LineHeight.M, size),
|
||||||
color:
|
color: initialSize === size ? colors.primaryDefault : colors.secondary,
|
||||||
initialSize === size ? colors.primaryDefault : colors.secondary,
|
|
||||||
borderWidth: StyleSheet.hairlineWidth,
|
borderWidth: StyleSheet.hairlineWidth,
|
||||||
borderColor: colors.border
|
borderColor: colors.border
|
||||||
}}
|
}}
|
||||||
|
@ -5,8 +5,10 @@ import { TabSharedStackScreenProps } from '@utils/navigation/navigators'
|
|||||||
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
|
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
|
||||||
import React, { useEffect, useRef, useState } from 'react'
|
import React, { useEffect, useRef, useState } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { FlatList } from 'react-native'
|
import { FlatList, View } from 'react-native'
|
||||||
import { InfiniteQueryObserver, useQueryClient } from '@tanstack/react-query'
|
import { InfiniteQueryObserver, useQueryClient } from '@tanstack/react-query'
|
||||||
|
import ComponentSeparator from '@components/Separator'
|
||||||
|
import { StyleConstants } from '@utils/styles/constants'
|
||||||
|
|
||||||
const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
|
const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
|
||||||
navigation,
|
navigation,
|
||||||
@ -98,94 +100,49 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
|
|||||||
queryKey={queryKey}
|
queryKey={queryKey}
|
||||||
queryOptions={{ staleTime: 0, refetchOnMount: true }}
|
queryOptions={{ staleTime: 0, refetchOnMount: true }}
|
||||||
customProps={{
|
customProps={{
|
||||||
renderItem: ({ item }) => {
|
ItemSeparatorComponent: ({ leadingItem }) => {
|
||||||
|
const levels = {
|
||||||
|
current:
|
||||||
|
replyLevels.current.find(reply => reply.id === leadingItem.in_reply_to_id)?.level || 0
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
|
<ComponentSeparator
|
||||||
|
extraMarginLeft={
|
||||||
|
toot.id === leadingItem.id
|
||||||
|
? 0
|
||||||
|
: StyleConstants.Avatar.XS +
|
||||||
|
StyleConstants.Spacing.S +
|
||||||
|
Math.max(0, levels.current - 1) * 8
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
renderItem: ({ item, index }) => {
|
||||||
|
const levels = {
|
||||||
|
previous:
|
||||||
|
replyLevels.current.find(
|
||||||
|
reply => reply.id === data.current?.[index - 1]?.in_reply_to_id
|
||||||
|
)?.level || 0,
|
||||||
|
current:
|
||||||
|
replyLevels.current.find(reply => reply.id === item.in_reply_to_id)?.level || 0,
|
||||||
|
next:
|
||||||
|
replyLevels.current.find(
|
||||||
|
reply => reply.id === data.current?.[index + 1]?.in_reply_to_id
|
||||||
|
)?.level || 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View style={{ marginLeft: Math.max(0, levels.current - 1) * StyleConstants.Spacing.S }}>
|
||||||
<TimelineDefault
|
<TimelineDefault
|
||||||
item={item}
|
item={item}
|
||||||
queryKey={queryKey}
|
queryKey={queryKey}
|
||||||
rootQueryKey={rootQueryKey}
|
rootQueryKey={rootQueryKey}
|
||||||
highlighted={toot.id === item.id}
|
highlighted={toot.id === item.id}
|
||||||
|
isConversation={toot.id !== item.id}
|
||||||
/>
|
/>
|
||||||
|
</View>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
// renderItem: ({ item, index }) => {
|
|
||||||
// const levels = {
|
|
||||||
// previous:
|
|
||||||
// replyLevels.current.find(
|
|
||||||
// reply => reply.id === data.current?.[index - 1]?.in_reply_to_id
|
|
||||||
// )?.level || 0,
|
|
||||||
// current:
|
|
||||||
// replyLevels.current.find(reply => reply.id === item.in_reply_to_id)?.level || 0,
|
|
||||||
// next:
|
|
||||||
// replyLevels.current.find(
|
|
||||||
// reply => reply.id === data.current?.[index + 1]?.in_reply_to_id
|
|
||||||
// )?.level || 0
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return (
|
|
||||||
// <>
|
|
||||||
// <TimelineDefault
|
|
||||||
// item={item}
|
|
||||||
// queryKey={queryKey}
|
|
||||||
// rootQueryKey={rootQueryKey}
|
|
||||||
// highlighted={toot.id === item.id}
|
|
||||||
// isConversation={toot.id !== item.id}
|
|
||||||
// />
|
|
||||||
// {Array.from(Array(levels.current)).map((_, i) => {
|
|
||||||
// if (index < highlightIndex.current) return null
|
|
||||||
// if (
|
|
||||||
// levels.previous + 1 === levels.current ||
|
|
||||||
// (levels.previous && levels.current && levels.previous === levels.current)
|
|
||||||
// ) {
|
|
||||||
// return (
|
|
||||||
// <View
|
|
||||||
// key={i}
|
|
||||||
// style={{
|
|
||||||
// position: 'absolute',
|
|
||||||
// top: 0,
|
|
||||||
// left: StyleConstants.Spacing.Global.PagePadding / 2 + 8 * i,
|
|
||||||
// height:
|
|
||||||
// levels.current === levels.next
|
|
||||||
// ? StyleConstants.Spacing.Global.PagePadding
|
|
||||||
// : StyleConstants.Spacing.Global.PagePadding + StyleConstants.Avatar.XS,
|
|
||||||
// borderLeftColor: colors.border,
|
|
||||||
// borderLeftWidth: 1
|
|
||||||
// }}
|
|
||||||
// />
|
|
||||||
// )
|
|
||||||
// } else {
|
|
||||||
// return null
|
|
||||||
// }
|
|
||||||
// })}
|
|
||||||
// {Array.from(Array(levels.next)).map((_, i) => {
|
|
||||||
// if (index < highlightIndex.current) return null
|
|
||||||
// if (
|
|
||||||
// levels.current + 1 === levels.next ||
|
|
||||||
// (levels.current && levels.next && levels.current === levels.next)
|
|
||||||
// ) {
|
|
||||||
// return (
|
|
||||||
// <View
|
|
||||||
// key={i}
|
|
||||||
// style={{
|
|
||||||
// position: 'absolute',
|
|
||||||
// top:
|
|
||||||
// levels.current + 1 === levels.next && levels.next > i + 1
|
|
||||||
// ? StyleConstants.Spacing.Global.PagePadding + StyleConstants.Avatar.XS
|
|
||||||
// : StyleConstants.Spacing.Global.PagePadding,
|
|
||||||
// left: StyleConstants.Spacing.Global.PagePadding / 2 + 8 * i,
|
|
||||||
// height: 200,
|
|
||||||
// borderLeftColor: colors.border,
|
|
||||||
// borderLeftWidth: 1
|
|
||||||
// }}
|
|
||||||
// />
|
|
||||||
// )
|
|
||||||
// } else {
|
|
||||||
// return null
|
|
||||||
// }
|
|
||||||
// })}
|
|
||||||
// </>
|
|
||||||
// )
|
|
||||||
// },
|
|
||||||
onScrollToIndexFailed: error => {
|
onScrollToIndexFailed: error => {
|
||||||
const offset = error.averageItemLength * error.index
|
const offset = error.averageItemLength * error.index
|
||||||
flRef.current?.scrollToOffset({ offset })
|
flRef.current?.scrollToOffset({ offset })
|
||||||
|
Loading…
x
Reference in New Issue
Block a user