Move home feed and thread preferences to server (#1507)

* Move home feed and thread preferences to server

* Fix thread usage of prefs

* Remove log

* Bump @atproto/api@0.6.16

* Improve type usage
This commit is contained in:
Paul Frazee 2023-09-21 21:00:32 -07:00 committed by GitHub
parent 28b692a118
commit 8584009bae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 205 additions and 162 deletions

View file

@ -76,7 +76,7 @@ export const PostThreadScreen = withAuthRequired(
uri={uri}
view={view}
onPressReply={onPressReply}
treeView={store.preferences.threadTreeViewEnabled}
treeView={!!store.preferences.thread.lab_treeViewEnabled}
/>
</View>
{isMobile && !store.shell.minimalShellMode && (

View file

@ -13,11 +13,23 @@ import {ToggleButton} from 'view/com/util/forms/ToggleButton'
import {CommonNavigatorParams, NativeStackScreenProps} from 'lib/routes/types'
import {ViewHeader} from 'view/com/util/ViewHeader'
import {CenteredView} from 'view/com/util/Views'
import debounce from 'lodash.debounce'
function RepliesThresholdInput({enabled}: {enabled: boolean}) {
const store = useStores()
const pal = usePalette('default')
const [value, setValue] = useState(store.preferences.homeFeedRepliesThreshold)
const [value, setValue] = useState(
store.preferences.homeFeed.hideRepliesByLikeCount,
)
const save = React.useMemo(
() =>
debounce(
threshold =>
store.preferences.setHomeFeedHideRepliesByLikeCount(threshold),
500,
), // debouce for 500ms
[store],
)
return (
<View style={[!enabled && styles.dimmed]}>
@ -26,7 +38,7 @@ function RepliesThresholdInput({enabled}: {enabled: boolean}) {
onValueChange={(v: number | number[]) => {
const threshold = Math.floor(Array.isArray(v) ? v[0] : v)
setValue(threshold)
store.preferences.setHomeFeedRepliesThreshold(threshold)
save(threshold)
}}
minimumValue={0}
maximumValue={25}
@ -88,16 +100,16 @@ export const PreferencesHomeFeed = observer(function PreferencesHomeFeedImpl({
<ToggleButton
testID="toggleRepliesBtn"
type="default-light"
label={store.preferences.homeFeedRepliesEnabled ? 'Yes' : 'No'}
isSelected={store.preferences.homeFeedRepliesEnabled}
onPress={store.preferences.toggleHomeFeedRepliesEnabled}
label={store.preferences.homeFeed.hideReplies ? 'No' : 'Yes'}
isSelected={!store.preferences.homeFeed.hideReplies}
onPress={store.preferences.toggleHomeFeedHideReplies}
/>
</View>
<View
style={[
pal.viewLight,
styles.card,
!store.preferences.homeFeedRepliesEnabled && styles.dimmed,
store.preferences.homeFeed.hideReplies && styles.dimmed,
]}>
<Text type="title-sm" style={[pal.text, s.pb5]}>
Reply Filters
@ -108,12 +120,10 @@ export const PreferencesHomeFeed = observer(function PreferencesHomeFeedImpl({
<ToggleButton
type="default-light"
label="Followed users only"
isSelected={
store.preferences.homeFeedRepliesByFollowedOnlyEnabled
}
isSelected={store.preferences.homeFeed.hideRepliesByUnfollowed}
onPress={
store.preferences.homeFeedRepliesEnabled
? store.preferences.toggleHomeFeedRepliesByFollowedOnlyEnabled
!store.preferences.homeFeed.hideReplies
? store.preferences.toggleHomeFeedHideRepliesByUnfollowed
: undefined
}
style={[s.mb10]}
@ -123,7 +133,7 @@ export const PreferencesHomeFeed = observer(function PreferencesHomeFeedImpl({
feed.
</Text>
<RepliesThresholdInput
enabled={store.preferences.homeFeedRepliesEnabled}
enabled={!store.preferences.homeFeed.hideReplies}
/>
</View>
@ -136,9 +146,9 @@ export const PreferencesHomeFeed = observer(function PreferencesHomeFeedImpl({
</Text>
<ToggleButton
type="default-light"
label={store.preferences.homeFeedRepostsEnabled ? 'Yes' : 'No'}
isSelected={store.preferences.homeFeedRepostsEnabled}
onPress={store.preferences.toggleHomeFeedRepostsEnabled}
label={store.preferences.homeFeed.hideReposts ? 'No' : 'Yes'}
isSelected={!store.preferences.homeFeed.hideReposts}
onPress={store.preferences.toggleHomeFeedHideReposts}
/>
</View>
@ -152,9 +162,9 @@ export const PreferencesHomeFeed = observer(function PreferencesHomeFeedImpl({
</Text>
<ToggleButton
type="default-light"
label={store.preferences.homeFeedQuotePostsEnabled ? 'Yes' : 'No'}
isSelected={store.preferences.homeFeedQuotePostsEnabled}
onPress={store.preferences.toggleHomeFeedQuotePostsEnabled}
label={store.preferences.homeFeed.hideQuotePosts ? 'No' : 'Yes'}
isSelected={!store.preferences.homeFeed.hideQuotePosts}
onPress={store.preferences.toggleHomeFeedHideQuotePosts}
/>
</View>
@ -169,8 +179,10 @@ export const PreferencesHomeFeed = observer(function PreferencesHomeFeedImpl({
</Text>
<ToggleButton
type="default-light"
label={store.preferences.homeFeedMergeFeedEnabled ? 'Yes' : 'No'}
isSelected={store.preferences.homeFeedMergeFeedEnabled}
label={
store.preferences.homeFeed.lab_mergeFeedEnabled ? 'Yes' : 'No'
}
isSelected={!!store.preferences.homeFeed.lab_mergeFeedEnabled}
onPress={store.preferences.toggleHomeFeedMergeFeedEnabled}
/>
</View>

View file

@ -59,8 +59,8 @@ export const PreferencesThreads = observer(function PreferencesThreadsImpl({
{key: 'most-likes', label: 'Most-liked replies first'},
{key: 'random', label: 'Random (aka "Poster\'s Roulette")'},
]}
onSelect={store.preferences.setThreadDefaultSort}
initialSelection={store.preferences.threadDefaultSort}
onSelect={store.preferences.setThreadSort}
initialSelection={store.preferences.thread.sort}
/>
</View>
</View>
@ -74,9 +74,11 @@ export const PreferencesThreads = observer(function PreferencesThreadsImpl({
</Text>
<ToggleButton
type="default-light"
label={store.preferences.threadFollowedUsersFirst ? 'Yes' : 'No'}
isSelected={store.preferences.threadFollowedUsersFirst}
onPress={store.preferences.toggleThreadFollowedUsersFirst}
label={
store.preferences.thread.prioritizeFollowedUsers ? 'Yes' : 'No'
}
isSelected={store.preferences.thread.prioritizeFollowedUsers}
onPress={store.preferences.togglePrioritizedFollowedUsers}
/>
</View>
@ -91,8 +93,10 @@ export const PreferencesThreads = observer(function PreferencesThreadsImpl({
</Text>
<ToggleButton
type="default-light"
label={store.preferences.threadTreeViewEnabled ? 'Yes' : 'No'}
isSelected={store.preferences.threadTreeViewEnabled}
label={
store.preferences.thread.lab_treeViewEnabled ? 'Yes' : 'No'
}
isSelected={!!store.preferences.thread.lab_treeViewEnabled}
onPress={store.preferences.toggleThreadTreeViewEnabled}
/>
</View>