diff options
Diffstat (limited to 'src/view/com/util')
-rw-r--r-- | src/view/com/util/AccountDropdownBtn.tsx | 2 | ||||
-rw-r--r-- | src/view/com/util/LoadingPlaceholder.tsx | 9 | ||||
-rw-r--r-- | src/view/com/util/UserAvatar.tsx | 8 | ||||
-rw-r--r-- | src/view/com/util/UserBanner.tsx | 2 | ||||
-rw-r--r-- | src/view/com/util/ViewHeader.tsx | 10 | ||||
-rw-r--r-- | src/view/com/util/Views.d.ts | 1 | ||||
-rw-r--r-- | src/view/com/util/Views.jsx | 9 | ||||
-rw-r--r-- | src/view/com/util/Views.tsx | 1 | ||||
-rw-r--r-- | src/view/com/util/Views.web.tsx | 60 | ||||
-rw-r--r-- | src/view/com/util/load-latest/LoadLatestBtn.tsx | 4 | ||||
-rw-r--r-- | src/view/com/util/moderation/PostHider.tsx | 2 | ||||
-rw-r--r-- | src/view/com/util/moderation/ProfileHeaderAlerts.tsx | 2 | ||||
-rw-r--r-- | src/view/com/util/post-embeds/CustomFeedEmbed.tsx | 15 | ||||
-rw-r--r-- | src/view/com/util/post-embeds/index.tsx | 2 |
14 files changed, 77 insertions, 50 deletions
diff --git a/src/view/com/util/AccountDropdownBtn.tsx b/src/view/com/util/AccountDropdownBtn.tsx index 761fec216..29571696b 100644 --- a/src/view/com/util/AccountDropdownBtn.tsx +++ b/src/view/com/util/AccountDropdownBtn.tsx @@ -25,7 +25,7 @@ export function AccountDropdownBtn({handle}: {handle: string}) { name: 'trash', }, android: 'ic_delete', - web: 'trash', + web: ['far', 'trash-can'], }, }, ] diff --git a/src/view/com/util/LoadingPlaceholder.tsx b/src/view/com/util/LoadingPlaceholder.tsx index d7ab1be54..461cbcbe5 100644 --- a/src/view/com/util/LoadingPlaceholder.tsx +++ b/src/view/com/util/LoadingPlaceholder.tsx @@ -83,19 +83,14 @@ export function PostLoadingPlaceholder({ export function PostFeedLoadingPlaceholder() { return ( - <> - <PostLoadingPlaceholder /> - <PostLoadingPlaceholder /> - <PostLoadingPlaceholder /> + <View> <PostLoadingPlaceholder /> <PostLoadingPlaceholder /> <PostLoadingPlaceholder /> <PostLoadingPlaceholder /> <PostLoadingPlaceholder /> <PostLoadingPlaceholder /> - <PostLoadingPlaceholder /> - <PostLoadingPlaceholder /> - </> + </View> ) } diff --git a/src/view/com/util/UserAvatar.tsx b/src/view/com/util/UserAvatar.tsx index fbc0b5e11..7b23547c6 100644 --- a/src/view/com/util/UserAvatar.tsx +++ b/src/view/com/util/UserAvatar.tsx @@ -17,10 +17,10 @@ import {Image as RNImage} from 'react-native-image-crop-picker' import {UserPreviewLink} from './UserPreviewLink' import {DropdownItem, NativeDropdown} from './forms/NativeDropdown' -type Type = 'user' | 'algo' | 'list' +export type UserAvatarType = 'user' | 'algo' | 'list' interface BaseUserAvatarProps { - type?: Type + type?: UserAvatarType size: number avatar?: string | null } @@ -41,7 +41,7 @@ interface PreviewableUserAvatarProps extends BaseUserAvatarProps { const BLUR_AMOUNT = isWeb ? 5 : 100 -function DefaultAvatar({type, size}: {type: Type; size: number}) { +function DefaultAvatar({type, size}: {type: UserAvatarType; size: number}) { if (type === 'algo') { // Font Awesome Pro 6.4.0 by @fontawesome -https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. return ( @@ -261,7 +261,7 @@ export function EditableUserAvatar({ name: 'trash', }, android: 'ic_delete', - web: 'trash', + web: ['far', 'trash-can'], }, onPress: async () => { onSelectNewAvatar(null) diff --git a/src/view/com/util/UserBanner.tsx b/src/view/com/util/UserBanner.tsx index 9a99dc5ad..4bdfad06c 100644 --- a/src/view/com/util/UserBanner.tsx +++ b/src/view/com/util/UserBanner.tsx @@ -91,7 +91,7 @@ export function UserBanner({ name: 'trash', }, android: 'ic_delete', - web: 'trash', + web: ['far', 'trash-can'], }, onPress: () => { onSelectNewBanner?.(null) diff --git a/src/view/com/util/ViewHeader.tsx b/src/view/com/util/ViewHeader.tsx index ec459b4eb..4cc9efb78 100644 --- a/src/view/com/util/ViewHeader.tsx +++ b/src/view/com/util/ViewHeader.tsx @@ -124,7 +124,6 @@ function DesktopWebHeader({ <CenteredView style={[ styles.header, - styles.headerFixed, styles.desktopHeader, pal.border, { @@ -158,7 +157,6 @@ const Container = observer(function ContainerImpl({ <View style={[ styles.header, - styles.headerFixed, pal.view, pal.border, showBorder && styles.border, @@ -190,11 +188,6 @@ const styles = StyleSheet.create({ paddingVertical: 6, width: '100%', }, - headerFixed: { - maxWidth: 600, - marginLeft: 'auto', - marginRight: 'auto', - }, headerFloating: { position: 'absolute', top: 0, @@ -202,6 +195,9 @@ const styles = StyleSheet.create({ }, desktopHeader: { paddingVertical: 12, + maxWidth: 600, + marginLeft: 'auto', + marginRight: 'auto', }, border: { borderBottomWidth: 1, diff --git a/src/view/com/util/Views.d.ts b/src/view/com/util/Views.d.ts new file mode 100644 index 000000000..292a985cd --- /dev/null +++ b/src/view/com/util/Views.d.ts @@ -0,0 +1 @@ +export {FlatList, ScrollView, View as CenteredView} from 'react-native' diff --git a/src/view/com/util/Views.jsx b/src/view/com/util/Views.jsx new file mode 100644 index 000000000..8a93ce511 --- /dev/null +++ b/src/view/com/util/Views.jsx @@ -0,0 +1,9 @@ +import React from 'react' +import {View} from 'react-native' +import Animated from 'react-native-reanimated' + +export const FlatList = Animated.FlatList +export const ScrollView = Animated.ScrollView +export function CenteredView(props) { + return <View {...props} /> +} diff --git a/src/view/com/util/Views.tsx b/src/view/com/util/Views.tsx deleted file mode 100644 index 07dcc4deb..000000000 --- a/src/view/com/util/Views.tsx +++ /dev/null @@ -1 +0,0 @@ -export {View as CenteredView, FlatList, ScrollView} from 'react-native' diff --git a/src/view/com/util/Views.web.tsx b/src/view/com/util/Views.web.tsx index fda0a9b86..1c2edc0cc 100644 --- a/src/view/com/util/Views.web.tsx +++ b/src/view/com/util/Views.web.tsx @@ -14,9 +14,7 @@ import React from 'react' import { - FlatList as RNFlatList, FlatListProps, - ScrollView as RNScrollView, ScrollViewProps, StyleSheet, View, @@ -25,16 +23,29 @@ import { import {addStyle} from 'lib/styles' import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' +import Animated from 'react-native-reanimated' interface AddedProps { - desktopFixedHeight?: boolean + desktopFixedHeight?: boolean | number } export function CenteredView({ style, + sideBorders, ...props -}: React.PropsWithChildren<ViewProps>) { - style = addStyle(style, styles.container) +}: React.PropsWithChildren<ViewProps & {sideBorders?: boolean}>) { + const pal = usePalette('default') + const {isMobile} = useWebMediaQueries() + if (!isMobile) { + style = addStyle(style, styles.container) + } + if (sideBorders) { + style = addStyle(style, { + borderLeftWidth: 1, + borderRightWidth: 1, + }) + style = addStyle(style, pal.border) + } return <View style={style} {...props} /> } @@ -46,14 +57,16 @@ export const FlatList = React.forwardRef(function FlatListImpl<ItemT>( desktopFixedHeight, ...props }: React.PropsWithChildren<FlatListProps<ItemT> & AddedProps>, - ref: React.Ref<RNFlatList>, + ref: React.Ref<Animated.FlatList<ItemT>>, ) { const pal = usePalette('default') const {isMobile} = useWebMediaQueries() - contentContainerStyle = addStyle( - contentContainerStyle, - styles.containerScroll, - ) + if (!isMobile) { + contentContainerStyle = addStyle( + contentContainerStyle, + styles.containerScroll, + ) + } if (contentOffset && contentOffset?.y !== 0) { // NOTE // we use paddingTop & contentOffset to space around the floating header @@ -68,7 +81,14 @@ export const FlatList = React.forwardRef(function FlatListImpl<ItemT>( }) } if (desktopFixedHeight) { - style = addStyle(style, styles.fixedHeight) + if (typeof desktopFixedHeight === 'number') { + // @ts-ignore Web only -prf + style = addStyle(style, { + height: `calc(100vh - ${desktopFixedHeight}px)`, + }) + } else { + style = addStyle(style, styles.fixedHeight) + } if (!isMobile) { // NOTE // react native web produces *three* wrapping divs @@ -85,7 +105,7 @@ export const FlatList = React.forwardRef(function FlatListImpl<ItemT>( } } return ( - <RNFlatList + <Animated.FlatList ref={ref} contentContainerStyle={[ contentContainerStyle, @@ -101,21 +121,25 @@ export const FlatList = React.forwardRef(function FlatListImpl<ItemT>( export const ScrollView = React.forwardRef(function ScrollViewImpl( {contentContainerStyle, ...props}: React.PropsWithChildren<ScrollViewProps>, - ref: React.Ref<RNScrollView>, + ref: React.Ref<Animated.ScrollView>, ) { const pal = usePalette('default') - contentContainerStyle = addStyle( - contentContainerStyle, - styles.containerScroll, - ) + const {isMobile} = useWebMediaQueries() + if (!isMobile) { + contentContainerStyle = addStyle( + contentContainerStyle, + styles.containerScroll, + ) + } return ( - <RNScrollView + <Animated.ScrollView contentContainerStyle={[ contentContainerStyle, pal.border, styles.contentContainer, ]} + // @ts-ignore something is wrong with the reanimated types -prf ref={ref} {...props} /> diff --git a/src/view/com/util/load-latest/LoadLatestBtn.tsx b/src/view/com/util/load-latest/LoadLatestBtn.tsx index b16a42396..f9a9387bb 100644 --- a/src/view/com/util/load-latest/LoadLatestBtn.tsx +++ b/src/view/com/util/load-latest/LoadLatestBtn.tsx @@ -10,6 +10,7 @@ import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode' import Animated from 'react-native-reanimated' const AnimatedTouchableOpacity = Animated.createAnimatedComponent(TouchableOpacity) +import {isWeb} from 'platform/detection' export const LoadLatestBtn = observer(function LoadLatestBtnImpl({ onPress, @@ -47,7 +48,8 @@ export const LoadLatestBtn = observer(function LoadLatestBtnImpl({ const styles = StyleSheet.create({ loadLatest: { - position: 'absolute', + // @ts-ignore 'fixed' is web only -prf + position: isWeb ? 'fixed' : 'absolute', left: 18, bottom: 44, borderWidth: 1, diff --git a/src/view/com/util/moderation/PostHider.tsx b/src/view/com/util/moderation/PostHider.tsx index 443885dfa..d224286b0 100644 --- a/src/view/com/util/moderation/PostHider.tsx +++ b/src/view/com/util/moderation/PostHider.tsx @@ -74,7 +74,7 @@ export function PostHider({ accessibilityHint=""> <ShieldExclamation size={18} style={pal.text} /> </Pressable> - <Text type="lg" style={pal.text}> + <Text type="lg" style={[{flex: 1}, pal.text]} numberOfLines={1}> {desc.name} </Text> {!moderation.noOverride && ( diff --git a/src/view/com/util/moderation/ProfileHeaderAlerts.tsx b/src/view/com/util/moderation/ProfileHeaderAlerts.tsx index b7781e06d..6b7f4e7ec 100644 --- a/src/view/com/util/moderation/ProfileHeaderAlerts.tsx +++ b/src/view/com/util/moderation/ProfileHeaderAlerts.tsx @@ -45,7 +45,7 @@ export function ProfileHeaderAlerts({ accessibilityHint="" style={[styles.container, pal.viewLight, style]}> <ShieldExclamation style={pal.text} size={24} /> - <Text type="lg" style={pal.text}> + <Text type="lg" style={[{flex: 1}, pal.text]}> {desc.name} </Text> <Text type="lg" style={[pal.link, styles.learnMoreBtn]}> diff --git a/src/view/com/util/post-embeds/CustomFeedEmbed.tsx b/src/view/com/util/post-embeds/CustomFeedEmbed.tsx index 5abdf2f77..624157436 100644 --- a/src/view/com/util/post-embeds/CustomFeedEmbed.tsx +++ b/src/view/com/util/post-embeds/CustomFeedEmbed.tsx @@ -3,8 +3,8 @@ import {AppBskyFeedDefs} from '@atproto/api' import {usePalette} from 'lib/hooks/usePalette' import {StyleSheet} from 'react-native' import {useStores} from 'state/index' -import {CustomFeedModel} from 'state/models/feeds/custom-feed' -import {CustomFeed} from 'view/com/feeds/CustomFeed' +import {FeedSourceModel} from 'state/models/content/feed-source' +import {FeedSourceCard} from 'view/com/feeds/FeedSourceCard' export function CustomFeedEmbed({ record, @@ -13,12 +13,13 @@ export function CustomFeedEmbed({ }) { const pal = usePalette('default') const store = useStores() - const item = useMemo( - () => new CustomFeedModel(store, record), - [store, record], - ) + const item = useMemo(() => { + const model = new FeedSourceModel(store, record.uri) + model.hydrateFeedGenerator(record) + return model + }, [store, record]) return ( - <CustomFeed + <FeedSourceCard item={item} style={[pal.view, pal.border, styles.customFeedOuter]} showLikes diff --git a/src/view/com/util/post-embeds/index.tsx b/src/view/com/util/post-embeds/index.tsx index 2d79eed8f..6c13bc2bb 100644 --- a/src/view/com/util/post-embeds/index.tsx +++ b/src/view/com/util/post-embeds/index.tsx @@ -75,7 +75,7 @@ export function PostEmbeds({ return <CustomFeedEmbed record={embed.record} /> } - // list embed (e.g. mute lists; i.e. ListView) + // list embed if (AppBskyGraphDefs.isListView(embed.record)) { return <ListEmbed item={embed.record} /> } |