Bluesky app fork with some witchin' additions 💫 witchsky.app
bluesky fork client

Clean up `getPostThreadV2` settings/params in prep for future work (#9179)

* Deprecate prioritizeFollowedUsers

* Bump API package

authored by

Eric Bailey and committed by
GitHub
7bf00424 ec2c580a

+10 -79
+1 -1
package.json
··· 72 "icons:optimize": "svgo -f ./assets/icons" 73 }, 74 "dependencies": { 75 - "@atproto/api": "^0.17.6", 76 "@bitdrift/react-native": "^0.6.8", 77 "@braintree/sanitize-url": "^6.0.2", 78 "@bsky.app/alf": "^0.1.5",
··· 72 "icons:optimize": "svgo -f ./assets/icons" 73 }, 74 "dependencies": { 75 + "@atproto/api": "^0.18.0", 76 "@bitdrift/react-native": "^0.6.8", 77 "@braintree/sanitize-url": "^6.0.2", 78 "@bsky.app/alf": "^0.1.5",
+1 -30
src/screens/Settings/ThreadPreferences.tsx
··· 14 import {atoms as a, useTheme} from '#/alf' 15 import * as Toggle from '#/components/forms/Toggle' 16 import {Bubbles_Stroke2_Corner2_Rounded as BubblesIcon} from '#/components/icons/Bubble' 17 - import {PersonGroup_Stroke2_Corner2_Rounded as PersonGroupIcon} from '#/components/icons/Person' 18 import {Tree_Stroke2_Corner0_Rounded as TreeIcon} from '#/components/icons/Tree' 19 import * as Layout from '#/components/Layout' 20 import {Text} from '#/components/Typography' ··· 24 export function ThreadPreferencesScreen({}: Props) { 25 const t = useTheme() 26 const {_} = useLingui() 27 - const { 28 - sort, 29 - setSort, 30 - view, 31 - setView, 32 - prioritizeFollowedUsers, 33 - setPrioritizeFollowedUsers, 34 - } = useThreadPreferences({save: true}) 35 36 return ( 37 <Layout.Screen testID="threadPreferencesScreen"> ··· 86 </View> 87 </Toggle.Group> 88 </View> 89 - </SettingsList.Group> 90 - 91 - <SettingsList.Group contentContainerStyle={{minHeight: 0}}> 92 - <SettingsList.ItemIcon icon={PersonGroupIcon} /> 93 - <SettingsList.ItemText> 94 - <Trans>Prioritize your Follows</Trans> 95 - </SettingsList.ItemText> 96 - <Toggle.Item 97 - type="checkbox" 98 - name="prioritize-follows" 99 - label={_(msg`Prioritize your Follows`)} 100 - value={prioritizeFollowedUsers} 101 - onChange={value => setPrioritizeFollowedUsers(value)} 102 - style={[a.w_full, a.gap_md]}> 103 - <Toggle.LabelText style={[a.flex_1]}> 104 - <Trans> 105 - Show replies by people you follow before all other replies 106 - </Trans> 107 - </Toggle.LabelText> 108 - <Toggle.Platform /> 109 - </Toggle.Item> 110 </SettingsList.Group> 111 112 <SettingsList.Group>
··· 14 import {atoms as a, useTheme} from '#/alf' 15 import * as Toggle from '#/components/forms/Toggle' 16 import {Bubbles_Stroke2_Corner2_Rounded as BubblesIcon} from '#/components/icons/Bubble' 17 import {Tree_Stroke2_Corner0_Rounded as TreeIcon} from '#/components/icons/Tree' 18 import * as Layout from '#/components/Layout' 19 import {Text} from '#/components/Typography' ··· 23 export function ThreadPreferencesScreen({}: Props) { 24 const t = useTheme() 25 const {_} = useLingui() 26 + const {sort, setSort, view, setView} = useThreadPreferences({save: true}) 27 28 return ( 29 <Layout.Screen testID="threadPreferencesScreen"> ··· 78 </View> 79 </Toggle.Group> 80 </View> 81 </SettingsList.Group> 82 83 <SettingsList.Group>
-1
src/state/queries/preferences/const.ts
··· 16 17 export const DEFAULT_THREAD_VIEW_PREFS: ThreadViewPreferences = { 18 sort: 'hotness', 19 - prioritizeFollowedUsers: true, 20 lab_treeViewEnabled: false, 21 } 22
··· 16 17 export const DEFAULT_THREAD_VIEW_PREFS: ThreadViewPreferences = { 18 sort: 'hotness', 19 lab_treeViewEnabled: false, 20 } 21
+2 -9
src/state/queries/preferences/types.ts
··· 1 - import { 2 - type BskyFeedViewPreference, 3 - type BskyPreferences, 4 - type BskyThreadViewPreference, 5 - } from '@atproto/api' 6 7 export type UsePreferencesQueryResponse = Omit< 8 BskyPreferences, ··· 18 userAge: number | undefined 19 } 20 21 - export type ThreadViewPreferences = Pick< 22 - BskyThreadViewPreference, 23 - 'prioritizeFollowedUsers' 24 - > & { 25 sort: 'hotness' | 'oldest' | 'newest' | 'most-likes' | 'random' | string 26 lab_treeViewEnabled?: boolean 27 }
··· 1 + import {type BskyFeedViewPreference, type BskyPreferences} from '@atproto/api' 2 3 export type UsePreferencesQueryResponse = Omit< 4 BskyPreferences, ··· 14 userAge: number | undefined 15 } 16 17 + export type ThreadViewPreferences = { 18 sort: 'hotness' | 'oldest' | 'newest' | 'most-likes' | 'random' | string 19 lab_treeViewEnabled?: boolean 20 }
+1 -28
src/state/queries/preferences/useThreadPreferences.ts
··· 23 setSort: (sort: string) => void 24 view: ThreadViewOption 25 setView: (view: ThreadViewOption) => void 26 - prioritizeFollowedUsers: boolean 27 - setPrioritizeFollowedUsers: (prioritize: boolean) => void 28 } 29 30 export function useThreadPreferences({ ··· 43 treeViewEnabled: !!serverPrefs?.lab_treeViewEnabled, 44 }), 45 ) 46 - const [prioritizeFollowedUsers, setPrioritizeFollowedUsers] = useState( 47 - !!serverPrefs?.prioritizeFollowedUsers, 48 - ) 49 50 /** 51 * If we get a server update, update local state ··· 59 * Update 60 */ 61 setSort(normalizeSort(serverPrefs.sort)) 62 - setPrioritizeFollowedUsers(serverPrefs.prioritizeFollowedUsers) 63 setView( 64 normalizeView({ 65 treeViewEnabled: !!serverPrefs.lab_treeViewEnabled, ··· 70 logger.metric('thread:preferences:load', { 71 sort: serverPrefs.sort, 72 view: serverPrefs.lab_treeViewEnabled ? 'tree' : 'linear', 73 - prioritizeFollowedUsers: serverPrefs.prioritizeFollowedUsers, 74 }) 75 }) 76 } ··· 86 logger.metric('thread:preferences:update', { 87 sort: prefs.sort, 88 view: prefs.lab_treeViewEnabled ? 'tree' : 'linear', 89 - prioritizeFollowedUsers: prefs.prioritizeFollowedUsers, 90 }) 91 } catch (e) { 92 logger.error('useThreadPreferences failed to save', { ··· 101 if (save && userUpdatedPrefs.current) { 102 savePrefs({ 103 sort, 104 - prioritizeFollowedUsers, 105 lab_treeViewEnabled: view === 'tree', 106 }) 107 userUpdatedPrefs.current = false ··· 121 }, 122 [setView], 123 ) 124 - const setPrioritizeFollowedUsersWrapped = useCallback( 125 - (next: boolean) => { 126 - userUpdatedPrefs.current = true 127 - setPrioritizeFollowedUsers(next) 128 - }, 129 - [setPrioritizeFollowedUsers], 130 - ) 131 132 return useMemo( 133 () => ({ ··· 137 setSort: setSortWrapped, 138 view, 139 setView: setViewWrapped, 140 - prioritizeFollowedUsers, 141 - setPrioritizeFollowedUsers: setPrioritizeFollowedUsersWrapped, 142 }), 143 - [ 144 - isLoaded, 145 - isSaving, 146 - sort, 147 - setSortWrapped, 148 - view, 149 - setViewWrapped, 150 - prioritizeFollowedUsers, 151 - setPrioritizeFollowedUsersWrapped, 152 - ], 153 ) 154 } 155
··· 23 setSort: (sort: string) => void 24 view: ThreadViewOption 25 setView: (view: ThreadViewOption) => void 26 } 27 28 export function useThreadPreferences({ ··· 41 treeViewEnabled: !!serverPrefs?.lab_treeViewEnabled, 42 }), 43 ) 44 45 /** 46 * If we get a server update, update local state ··· 54 * Update 55 */ 56 setSort(normalizeSort(serverPrefs.sort)) 57 setView( 58 normalizeView({ 59 treeViewEnabled: !!serverPrefs.lab_treeViewEnabled, ··· 64 logger.metric('thread:preferences:load', { 65 sort: serverPrefs.sort, 66 view: serverPrefs.lab_treeViewEnabled ? 'tree' : 'linear', 67 }) 68 }) 69 } ··· 79 logger.metric('thread:preferences:update', { 80 sort: prefs.sort, 81 view: prefs.lab_treeViewEnabled ? 'tree' : 'linear', 82 }) 83 } catch (e) { 84 logger.error('useThreadPreferences failed to save', { ··· 93 if (save && userUpdatedPrefs.current) { 94 savePrefs({ 95 sort, 96 lab_treeViewEnabled: view === 'tree', 97 }) 98 userUpdatedPrefs.current = false ··· 112 }, 113 [setView], 114 ) 115 116 return useMemo( 117 () => ({ ··· 121 setSort: setSortWrapped, 122 view, 123 setView: setViewWrapped, 124 }), 125 + [isLoaded, isSaving, sort, setSortWrapped, view, setViewWrapped], 126 ) 127 } 128
-5
src/state/queries/usePostThread/index.ts
··· 49 setSort: baseSetSort, 50 view, 51 setView: baseSetView, 52 - prioritizeFollowedUsers, 53 } = useThreadPreferences() 54 const below = useMemo(() => { 55 return view === 'linear' ··· 63 anchor, 64 sort, 65 view, 66 - prioritizeFollowedUsers, 67 }) 68 const postThreadOtherQueryKey = createPostThreadOtherQueryKey({ 69 anchor, 70 - prioritizeFollowedUsers, 71 }) 72 73 const query = useQuery<UsePostThreadQueryResult>({ ··· 79 branchingFactor: view === 'linear' ? LINEAR_VIEW_BF : TREE_VIEW_BF, 80 below, 81 sort: sort, 82 - prioritizeFollowedUsers: prioritizeFollowedUsers, 83 }) 84 85 /* ··· 167 async queryFn() { 168 const {data} = await agent.app.bsky.unspecced.getPostThreadOtherV2({ 169 anchor: anchor!, 170 - prioritizeFollowedUsers, 171 }) 172 return data 173 },
··· 49 setSort: baseSetSort, 50 view, 51 setView: baseSetView, 52 } = useThreadPreferences() 53 const below = useMemo(() => { 54 return view === 'linear' ··· 62 anchor, 63 sort, 64 view, 65 }) 66 const postThreadOtherQueryKey = createPostThreadOtherQueryKey({ 67 anchor, 68 }) 69 70 const query = useQuery<UsePostThreadQueryResult>({ ··· 76 branchingFactor: view === 'linear' ? LINEAR_VIEW_BF : TREE_VIEW_BF, 77 below, 78 sort: sort, 79 }) 80 81 /* ··· 163 async queryFn() { 164 const {data} = await agent.app.bsky.unspecced.getPostThreadOtherV2({ 165 anchor: anchor!, 166 }) 167 return data 168 },
+1 -1
src/state/queries/usePostThread/types.ts
··· 25 26 export type PostThreadParams = Pick< 27 AppBskyUnspeccedGetPostThreadV2.QueryParams, 28 - 'sort' | 'prioritizeFollowedUsers' 29 > & { 30 anchor?: string 31 view: 'tree' | 'linear'
··· 25 26 export type PostThreadParams = Pick< 27 AppBskyUnspeccedGetPostThreadV2.QueryParams, 28 + 'sort' 29 > & { 30 anchor?: string 31 view: 'tree' | 'linear'
+4 -4
yarn.lock
··· 84 tlds "^1.234.0" 85 zod "^3.23.8" 86 87 - "@atproto/api@^0.17.6": 88 - version "0.17.6" 89 - resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.17.6.tgz#1fccd939f5f1010397c4d57110b1a0d8673058a6" 90 - integrity sha512-0iYCD8+LOsHjHjwJcqGPfJN/h4b+IpU3GjOV0TSLk0XdCaxpHBKNu3wgCJVst4DhVjXcgsr2qQoRZ3Jja2LupA== 91 dependencies: 92 "@atproto/common-web" "^0.4.3" 93 "@atproto/lexicon" "^0.5.1"
··· 84 tlds "^1.234.0" 85 zod "^3.23.8" 86 87 + "@atproto/api@^0.18.0": 88 + version "0.18.0" 89 + resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.18.0.tgz#d8c54ddc4521d915f0af238a4bfebd119e18197f" 90 + integrity sha512-2GxKPhhvMocDjRU7VpNj+cvCdmCHVAmRwyfNgRLMrJtPZvrosFoi9VATX+7eKN0FZvYvy8KdLSkCcpP2owH3IA== 91 dependencies: 92 "@atproto/common-web" "^0.4.3" 93 "@atproto/lexicon" "^0.5.1"