📓 Bookmarks (#8976)

* Add button to controls, respace

* Hook up shadow and mutation

* Add Bookmarks screen

* Build out Bookmarks screen

* Handle removals via shadow

* Use truncateAndInvalidate strategy

* Add empty state

* Add toasts

* Add undo buttons to toasts

* Stage NUX, needs image

* Finesse post controls

* New reply icon

* Use curvier variant of repost icon

* Prevent layout shift with align_start

* Update api pkg

* Swap in new image

* Limit spacing on desktop

* Rm decimals over 10k

* Better optimistic adding/removing

* Add metrics

* Comment

* Remove unused code block

* Remove debug limit

* Fork shadow for web/native

* Tweak alt

* add preventExpansion: true

* Refine hitslop

* Add count to anchor

* Reduce space in compact mode

---------

Co-authored-by: Samuel Newman <mozzius@protonmail.com>
This commit is contained in:
Eric Bailey
2025-09-04 17:30:15 -05:00
committed by GitHub
parent 04b869714e
commit 535d4d6cf7
38 changed files with 1251 additions and 163 deletions
+7 -1
View File
@@ -43,11 +43,13 @@ export function Post({
showReplyLine,
hideTopBorder,
style,
onBeforePress,
}: {
post: AppBskyFeedDefs.PostView
showReplyLine?: boolean
hideTopBorder?: boolean
style?: StyleProp<ViewStyle>
onBeforePress?: () => void
}) {
const moderationOpts = useModerationOpts()
const record = useMemo<AppBskyFeedPost.Record | undefined>(
@@ -85,6 +87,7 @@ export function Post({
showReplyLine={showReplyLine}
hideTopBorder={hideTopBorder}
style={style}
onBeforePress={onBeforePress}
/>
)
}
@@ -99,6 +102,7 @@ function PostInner({
showReplyLine,
hideTopBorder,
style,
onBeforePress: outerOnBeforePress,
}: {
post: Shadow<AppBskyFeedDefs.PostView>
record: AppBskyFeedPost.Record
@@ -107,6 +111,7 @@ function PostInner({
showReplyLine?: boolean
hideTopBorder?: boolean
style?: StyleProp<ViewStyle>
onBeforePress?: () => void
}) {
const queryClient = useQueryClient()
const pal = usePalette('default')
@@ -142,7 +147,8 @@ function PostInner({
const onBeforePress = useCallback(() => {
unstableCacheProfileView(queryClient, post.author)
}, [queryClient, post.author])
outerOnBeforePress?.()
}, [queryClient, post.author, outerOnBeforePress])
const [hover, setHover] = useState(false)
return (