Bluesky app fork with some witchin' additions 💫

Merge branch 'main' of https://github.com/bluesky-social/social-app

+70 -52
+1
src/lib/statsig/gates.ts
··· 7 7 | 'debug_subscriptions' 8 8 | 'disable_onboarding_policy_update_notice' 9 9 | 'explore_show_suggested_feeds' 10 + | 'feed_reply_button_open_thread' 10 11 | 'old_postonboarding' 11 12 | 'onboarding_add_video_feed' 12 13 | 'onboarding_suggested_accounts'
+32 -32
src/locale/locales/en/messages.po
··· 493 493 msgid "<0>{date}</0> at {time}" 494 494 msgstr "" 495 495 496 - #: src/screens/Search/SearchResults.tsx:255 496 + #: src/screens/Search/SearchResults.tsx:257 497 497 msgid "<0>Sign in</0><1> or </1><2>create an account</2><3> </3><4>to search for news, sports, politics, and everything else happening on Bluesky.</4>" 498 498 msgstr "" 499 499 ··· 568 568 msgid "Accept Request" 569 569 msgstr "" 570 570 571 - #: src/view/com/composer/select-language/SuggestedLanguage.tsx:179 571 + #: src/view/com/composer/select-language/SuggestedLanguage.tsx:178 572 572 msgid "Accept this language suggestion" 573 573 msgstr "" 574 574 ··· 1564 1564 #: src/components/LabelingServiceCard/index.tsx:62 1565 1565 #: src/components/moderation/ReportDialog/index.tsx:686 1566 1566 #: src/screens/Search/components/StarterPackCard.tsx:106 1567 - #: src/screens/Search/Explore.tsx:930 1567 + #: src/screens/Search/Explore.tsx:940 1568 1568 msgid "By {0}" 1569 1569 msgstr "" 1570 1570 ··· 1620 1620 #: src/screens/Deactivated.tsx:158 1621 1621 #: src/screens/Profile/Header/EditProfileDialog.tsx:218 1622 1622 #: src/screens/Profile/Header/EditProfileDialog.tsx:226 1623 - #: src/screens/Search/Shell.tsx:349 1623 + #: src/screens/Search/Shell.tsx:369 1624 1624 #: src/screens/Settings/AppIconSettings/index.tsx:44 1625 1625 #: src/screens/Settings/AppIconSettings/index.tsx:230 1626 1626 #: src/screens/Settings/components/ChangeHandleDialog.tsx:78 ··· 1657 1657 msgid "Cancel reactivation and sign out" 1658 1658 msgstr "" 1659 1659 1660 - #: src/screens/Search/Shell.tsx:341 1660 + #: src/screens/Search/Shell.tsx:361 1661 1661 msgid "Cancel search" 1662 1662 msgstr "" 1663 1663 ··· 2452 2452 2453 2453 #: src/components/dialogs/Signin.tsx:86 2454 2454 #: src/components/dialogs/Signin.tsx:88 2455 - #: src/screens/Search/SearchResults.tsx:266 2455 + #: src/screens/Search/SearchResults.tsx:268 2456 2456 msgid "Create an account" 2457 2457 msgstr "" 2458 2458 ··· 3252 3252 msgid "Error:" 3253 3253 msgstr "" 3254 3254 3255 - #: src/screens/Search/SearchResults.tsx:144 3255 + #: src/screens/Search/SearchResults.tsx:146 3256 3256 msgid "Error: {error}" 3257 3257 msgstr "" 3258 3258 ··· 3365 3365 msgstr "" 3366 3366 3367 3367 #: src/Navigation.tsx:759 3368 - #: src/screens/Search/Shell.tsx:307 3368 + #: src/screens/Search/Shell.tsx:327 3369 3369 #: src/view/shell/desktop/LeftNav.tsx:690 3370 3370 #: src/view/shell/Drawer.tsx:414 3371 3371 msgid "Explore" ··· 3647 3647 3648 3648 #: src/Navigation.tsx:574 3649 3649 #: src/screens/SavedFeeds.tsx:108 3650 - #: src/screens/Search/SearchResults.tsx:73 3650 + #: src/screens/Search/SearchResults.tsx:75 3651 3651 #: src/screens/StarterPack/StarterPackScreen.tsx:190 3652 3652 #: src/view/screens/Feeds.tsx:511 3653 3653 #: src/view/screens/Profile.tsx:230 ··· 3719 3719 msgid "Find people to follow" 3720 3720 msgstr "" 3721 3721 3722 - #: src/screens/Search/Shell.tsx:475 3722 + #: src/screens/Search/Shell.tsx:525 3723 3723 msgid "Find posts, users, and feeds on Bluesky" 3724 3724 msgstr "" 3725 3725 ··· 3958 3958 msgid "From @{sanitizedAuthor}" 3959 3959 msgstr "" 3960 3960 3961 - #: src/view/com/posts/PostFeedItem.tsx:327 3961 + #: src/view/com/posts/PostFeedItem.tsx:345 3962 3962 msgctxt "from-feed" 3963 3963 msgid "From <0/>" 3964 3964 msgstr "" ··· 4693 4693 msgstr "" 4694 4694 4695 4695 #: src/screens/Hashtag.tsx:95 4696 - #: src/screens/Search/SearchResults.tsx:57 4696 + #: src/screens/Search/SearchResults.tsx:59 4697 4697 #: src/screens/Topic.tsx:77 4698 4698 msgid "Latest" 4699 4699 msgstr "" ··· 5685 5685 msgid "No results" 5686 5686 msgstr "" 5687 5687 5688 - #: src/screens/Search/Explore.tsx:787 5688 + #: src/screens/Search/Explore.tsx:797 5689 5689 msgid "No results for \"{0}\"." 5690 5690 msgstr "" 5691 5691 ··· 5697 5697 msgid "No results found for \"{query}\"" 5698 5698 msgstr "" 5699 5699 5700 - #: src/screens/Search/SearchResults.tsx:311 5701 - #: src/screens/Search/SearchResults.tsx:347 5702 - #: src/screens/Search/SearchResults.tsx:392 5700 + #: src/screens/Search/SearchResults.tsx:313 5701 + #: src/screens/Search/SearchResults.tsx:349 5702 + #: src/screens/Search/SearchResults.tsx:394 5703 5703 msgid "No results found for {query}" 5704 5704 msgstr "" 5705 5705 5706 - #: src/screens/Search/Explore.tsx:791 5706 + #: src/screens/Search/Explore.tsx:801 5707 5707 msgid "No results." 5708 5708 msgstr "" 5709 5709 ··· 6200 6200 msgstr "" 6201 6201 6202 6202 #: src/screens/ProfileList/index.tsx:166 6203 - #: src/screens/Search/SearchResults.tsx:67 6203 + #: src/screens/Search/SearchResults.tsx:69 6204 6204 #: src/screens/StarterPack/StarterPackScreen.tsx:189 6205 6205 msgid "People" 6206 6206 msgstr "" ··· 6263 6263 msgid "Pin to your profile" 6264 6264 msgstr "" 6265 6265 6266 - #: src/view/com/posts/PostFeedItem.tsx:408 6266 + #: src/view/com/posts/PostFeedItem.tsx:426 6267 6267 msgid "Pinned" 6268 6268 msgstr "" 6269 6269 ··· 7246 7246 msgid "Reposted By" 7247 7247 msgstr "" 7248 7248 7249 - #: src/view/com/posts/PostFeedItem.tsx:348 7249 + #: src/view/com/posts/PostFeedItem.tsx:366 7250 7250 msgid "Reposted by {0}" 7251 7251 msgstr "" 7252 7252 7253 - #: src/view/com/posts/PostFeedItem.tsx:367 7253 + #: src/view/com/posts/PostFeedItem.tsx:385 7254 7254 msgid "Reposted by <0><1/></0>" 7255 7255 msgstr "" 7256 7256 7257 - #: src/view/com/posts/PostFeedItem.tsx:346 7258 - #: src/view/com/posts/PostFeedItem.tsx:365 7257 + #: src/view/com/posts/PostFeedItem.tsx:364 7258 + #: src/view/com/posts/PostFeedItem.tsx:383 7259 7259 msgid "Reposted by you" 7260 7260 msgstr "" 7261 7261 ··· 7500 7500 #: src/components/dialogs/SearchablePeopleList.tsx:514 7501 7501 #: src/components/forms/SearchInput.tsx:34 7502 7502 #: src/components/forms/SearchInput.tsx:36 7503 - #: src/screens/Search/Shell.tsx:307 7504 - #: src/screens/Search/Shell.tsx:463 7503 + #: src/screens/Search/Shell.tsx:327 7504 + #: src/screens/Search/Shell.tsx:513 7505 7505 #: src/view/shell/bottom-bar/BottomBar.tsx:198 7506 7506 msgid "Search" 7507 7507 msgstr "" ··· 7549 7549 msgid "Search for more feeds" 7550 7550 msgstr "" 7551 7551 7552 - #: src/screens/Search/Shell.tsx:334 7552 + #: src/screens/Search/Shell.tsx:354 7553 7553 msgid "Search for posts, users, or feeds" 7554 7554 msgstr "" 7555 7555 ··· 7557 7557 msgid "Search GIFs" 7558 7558 msgstr "" 7559 7559 7560 - #: src/screens/Search/SearchResults.tsx:253 7560 + #: src/screens/Search/SearchResults.tsx:255 7561 7561 msgid "Search is currently unavailable when logged out" 7562 7562 msgstr "" 7563 7563 ··· 8132 8132 #: src/screens/Login/index.tsx:136 8133 8133 #: src/screens/Login/index.tsx:157 8134 8134 #: src/screens/Login/LoginForm.tsx:181 8135 - #: src/screens/Search/SearchResults.tsx:258 8135 + #: src/screens/Search/SearchResults.tsx:260 8136 8136 #: src/view/com/auth/SplashScreen.tsx:81 8137 8137 #: src/view/com/auth/SplashScreen.tsx:89 8138 8138 #: src/view/com/auth/SplashScreen.web.tsx:127 ··· 8820 8820 msgid "There was an issue fetching notifications. Tap here to try again." 8821 8821 msgstr "" 8822 8822 8823 - #: src/screens/Search/Explore.tsx:986 8823 + #: src/screens/Search/Explore.tsx:996 8824 8824 #: src/view/com/posts/PostFeed.tsx:709 8825 8825 msgid "There was an issue fetching posts. Tap here to try again." 8826 8826 msgstr "" ··· 9199 9199 msgstr "" 9200 9200 9201 9201 #: src/screens/Hashtag.tsx:84 9202 - #: src/screens/Search/SearchResults.tsx:47 9202 + #: src/screens/Search/SearchResults.tsx:49 9203 9203 #: src/screens/Topic.tsx:71 9204 9204 msgid "Top" 9205 9205 msgstr "" ··· 10143 10143 msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again." 10144 10144 msgstr "" 10145 10145 10146 - #: src/screens/Search/SearchResults.tsx:285 10146 + #: src/screens/Search/SearchResults.tsx:287 10147 10147 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." 10148 10148 msgstr "" 10149 10149 ··· 10299 10299 msgid "www.mylivestream.tv" 10300 10300 msgstr "" 10301 10301 10302 - #: src/view/com/composer/select-language/SuggestedLanguage.tsx:181 10302 + #: src/view/com/composer/select-language/SuggestedLanguage.tsx:180 10303 10303 msgid "Yes" 10304 10304 msgstr "" 10305 10305
-1
src/view/com/composer/select-language/SuggestedLanguage.tsx
··· 162 162 <View style={[a.flex_1]}> 163 163 <Text 164 164 style={[ 165 - a.flex_1, 166 165 a.leading_snug, 167 166 { 168 167 maxWidth: 400,
+37 -19
src/view/com/posts/PostFeedItem.tsx
··· 11 11 } from '@atproto/api' 12 12 import {msg, Trans} from '@lingui/macro' 13 13 import {useLingui} from '@lingui/react' 14 + import {useNavigation} from '@react-navigation/native' 14 15 import {useQueryClient} from '@tanstack/react-query' 15 16 16 17 import {useActorStatus} from '#/lib/actor-status' ··· 19 20 import {useOpenComposer} from '#/lib/hooks/useOpenComposer' 20 21 import {usePalette} from '#/lib/hooks/usePalette' 21 22 import {makeProfileLink} from '#/lib/routes/links' 23 + import {type NavigationProp} from '#/lib/routes/types' 24 + import {useGate} from '#/lib/statsig/statsig' 22 25 import {sanitizeDisplayName} from '#/lib/strings/display-names' 23 26 import {sanitizeHandle} from '#/lib/strings/handles' 24 27 import {countLines} from '#/lib/strings/helpers' ··· 171 174 }): React.ReactNode => { 172 175 const queryClient = useQueryClient() 173 176 const {openComposer} = useOpenComposer() 177 + const navigation = useNavigation<NavigationProp>() 174 178 const pal = usePalette('default') 179 + const gate = useGate() 175 180 const {_} = useLingui() 176 181 177 182 const [hover, setHover] = useState(false) 178 183 179 - const href = useMemo(() => { 184 + const [href, rkey] = useMemo(() => { 180 185 const urip = new AtUri(post.uri) 181 - return makeProfileLink(post.author, 'post', urip.rkey) 186 + return [makeProfileLink(post.author, 'post', urip.rkey), urip.rkey] 182 187 }, [post.uri, post.author]) 183 188 const {sendInteraction, feedSourceInfo} = useFeedFeedbackContext() 184 189 185 190 const onPressReply = () => { 186 - sendInteraction({ 187 - item: post.uri, 188 - event: 'app.bsky.feed.defs#interactionReply', 189 - feedContext, 190 - reqId, 191 - }) 192 - openComposer({ 193 - replyTo: { 194 - uri: post.uri, 195 - cid: post.cid, 196 - text: record.text || '', 197 - author: post.author, 198 - embed: post.embed, 199 - moderation, 200 - langs: record.langs, 201 - }, 202 - }) 191 + if (gate('feed_reply_button_open_thread')) { 192 + sendInteraction({ 193 + item: post.uri, 194 + event: 'app.bsky.feed.defs#clickthroughItem', 195 + feedContext, 196 + reqId, 197 + }) 198 + navigation.navigate('PostThread', { 199 + name: post.author.did, 200 + rkey, 201 + }) 202 + } else { 203 + sendInteraction({ 204 + item: post.uri, 205 + event: 'app.bsky.feed.defs#interactionReply', 206 + feedContext, 207 + reqId, 208 + }) 209 + openComposer({ 210 + replyTo: { 211 + uri: post.uri, 212 + cid: post.cid, 213 + text: record.text || '', 214 + author: post.author, 215 + embed: post.embed, 216 + moderation, 217 + langs: record.langs, 218 + }, 219 + }) 220 + } 203 221 } 204 222 205 223 const onOpenAuthor = () => {