Collection of small UI fixes & improvements (#1104)

* Fix black bar appearing in link card images

* Include QPs in posts cache

* Fix like color for feed likes in notifications

* Fix post embed spacing
zio/stable
Paul Frazee 2023-08-04 12:14:21 -07:00 committed by GitHub
parent c42b9c1b4e
commit d9cf37aecf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 70 additions and 17 deletions

View File

@ -1,6 +1,11 @@
import {LRUMap} from 'lru_map' import {LRUMap} from 'lru_map'
import {RootStoreModel} from '../root-store' import {RootStoreModel} from '../root-store'
import {AppBskyFeedDefs} from '@atproto/api' import {
AppBskyFeedDefs,
AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia,
AppBskyFeedPost,
} from '@atproto/api'
type PostView = AppBskyFeedDefs.PostView type PostView = AppBskyFeedDefs.PostView
@ -27,5 +32,39 @@ export class PostsCache {
) { ) {
this.set(feedItem.reply.parent.uri, feedItem.reply.parent) this.set(feedItem.reply.parent.uri, feedItem.reply.parent)
} }
const embed = feedItem.post.embed
if (
AppBskyEmbedRecord.isView(embed) &&
AppBskyEmbedRecord.isViewRecord(embed.record) &&
AppBskyFeedPost.isRecord(embed.record.value) &&
AppBskyFeedPost.validateRecord(embed.record.value).success
) {
this.set(embed.record.uri, embedViewToPostView(embed.record))
}
if (
AppBskyEmbedRecordWithMedia.isView(embed) &&
AppBskyEmbedRecord.isViewRecord(embed.record?.record) &&
AppBskyFeedPost.isRecord(embed.record.record.value) &&
AppBskyFeedPost.validateRecord(embed.record.record.value).success
) {
this.set(
embed.record.record.uri,
embedViewToPostView(embed.record.record),
)
}
}
}
function embedViewToPostView(
embedView: AppBskyEmbedRecord.ViewRecord,
): PostView {
return {
$type: 'app.bsky.feed.post#view',
uri: embedView.uri,
cid: embedView.cid,
author: embedView.author,
record: embedView.value,
indexedAt: embedView.indexedAt,
labels: embedView.labels,
} }
} }

View File

@ -171,7 +171,7 @@ export const FeedItem = observer(function ({
action = `liked your custom feed '${new AtUri(item.subjectUri).rkey}'` action = `liked your custom feed '${new AtUri(item.subjectUri).rkey}'`
icon = 'HeartIconSolid' icon = 'HeartIconSolid'
iconStyle = [ iconStyle = [
s.red3 as FontAwesomeIconStyle, s.likeColor as FontAwesomeIconStyle,
{position: 'relative', top: -4}, {position: 'relative', top: -4},
] ]
} else { } else {

View File

@ -252,7 +252,7 @@ export const PostThreadItem = observer(function PostThreadItem({
) : undefined} ) : undefined}
{item.post.embed && ( {item.post.embed && (
<ContentHider moderation={item.moderation.embed} style={s.mb10}> <ContentHider moderation={item.moderation.embed} style={s.mb10}>
<PostEmbeds embed={item.post.embed} style={s.mb10} /> <PostEmbeds embed={item.post.embed} />
</ContentHider> </ContentHider>
)} )}
</ContentHider> </ContentHider>
@ -386,7 +386,7 @@ export const PostThreadItem = observer(function PostThreadItem({
) : undefined} ) : undefined}
{item.post.embed && ( {item.post.embed && (
<ContentHider style={s.mb10} moderation={item.moderation.embed}> <ContentHider style={s.mb10} moderation={item.moderation.embed}>
<PostEmbeds embed={item.post.embed} style={s.mb10} /> <PostEmbeds embed={item.post.embed} />
</ContentHider> </ContentHider>
)} )}
{needsTranslation && ( {needsTranslation && (

View File

@ -265,9 +265,11 @@ const PostLoaded = observer(
/> />
</View> </View>
) : undefined} ) : undefined}
<ContentHider moderation={item.moderation.embed} style={s.mb10}> {item.post.embed ? (
<PostEmbeds embed={item.post.embed} style={s.mb10} /> <ContentHider moderation={item.moderation.embed} style={s.mb10}>
</ContentHider> <PostEmbeds embed={item.post.embed} />
</ContentHider>
) : null}
{needsTranslation && ( {needsTranslation && (
<View style={[pal.borderDark, styles.translateLink]}> <View style={[pal.borderDark, styles.translateLink]}>
<Link href={translatorUrl} title="Translate"> <Link href={translatorUrl} title="Translate">

View File

@ -289,11 +289,13 @@ export const FeedItem = observer(function ({
/> />
</View> </View>
) : undefined} ) : undefined}
<ContentHider {item.post.embed ? (
moderation={item.moderation.embed} <ContentHider
style={styles.embed}> moderation={item.moderation.embed}
<PostEmbeds embed={item.post.embed} style={styles.embed} /> style={styles.embed}>
</ContentHider> <PostEmbeds embed={item.post.embed} />
</ContentHider>
) : null}
{needsTranslation && ( {needsTranslation && (
<View style={[pal.borderDark, styles.translateLink]}> <View style={[pal.borderDark, styles.translateLink]}>
<Link href={translatorUrl} title="Translate"> <Link href={translatorUrl} title="Translate">

View File

@ -1,6 +1,6 @@
import React from 'react' import React from 'react'
import {Image} from 'expo-image'
import {Text} from '../text/Text' import {Text} from '../text/Text'
import {AutoSizedImage} from '../images/AutoSizedImage'
import {StyleSheet, View} from 'react-native' import {StyleSheet, View} from 'react-native'
import {usePalette} from 'lib/hooks/usePalette' import {usePalette} from 'lib/hooks/usePalette'
import {AppBskyEmbedExternal} from '@atproto/api' import {AppBskyEmbedExternal} from '@atproto/api'
@ -16,9 +16,14 @@ export const ExternalLinkEmbed = ({
return ( return (
<> <>
{link.thumb ? ( {link.thumb ? (
<AutoSizedImage uri={link.thumb} style={styles.extImage}> <View style={styles.extImageContainer}>
<Image
style={styles.extImage}
source={{uri: link.thumb}}
accessibilityIgnoresInvertColors
/>
{imageChild} {imageChild}
</AutoSizedImage> </View>
) : undefined} ) : undefined}
<View style={styles.extInner}> <View style={styles.extInner}>
<Text type="md-bold" numberOfLines={2} style={[pal.text]}> <Text type="md-bold" numberOfLines={2} style={[pal.text]}>
@ -47,11 +52,16 @@ const styles = StyleSheet.create({
extInner: { extInner: {
padding: 10, padding: 10,
}, },
extImage: { extImageContainer: {
borderTopLeftRadius: 6, borderTopLeftRadius: 6,
borderTopRightRadius: 6, borderTopRightRadius: 6,
width: '100%', width: '100%',
maxHeight: 200, height: 200,
overflow: 'hidden',
},
extImage: {
width: '100%',
height: 200,
}, },
extUri: { extUri: {
marginTop: 2, marginTop: 2,