Fix debounce of threads prefs

This commit is contained in:
Eric Bailey
2025-06-09 13:58:54 -05:00
parent d16e1cf217
commit a1d5fdd632
@@ -1,4 +1,4 @@
import {useCallback, useMemo, useState} from 'react' import {useCallback, useMemo, useRef, useState} from 'react'
import {type AppBskyUnspeccedGetPostThreadV2} from '@atproto/api' import {type AppBskyUnspeccedGetPostThreadV2} from '@atproto/api'
import debounce from 'lodash.debounce' import debounce from 'lodash.debounce'
@@ -65,6 +65,7 @@ export function useThreadPreferences({
) )
} }
const userUpdatedPrefs = useRef(false)
const [isSaving, setIsSaving] = useState(false) const [isSaving, setIsSaving] = useState(false)
const {mutateAsync} = useSetThreadViewPreferencesMutation() const {mutateAsync} = useSetThreadViewPreferencesMutation()
const savePrefs = useMemo(() => { const savePrefs = useMemo(() => {
@@ -82,29 +83,36 @@ export function useThreadPreferences({
}, 4e3) }, 4e3)
}, [mutateAsync]) }, [mutateAsync])
if (save && !isSaving) { if (save && userUpdatedPrefs.current) {
if ( savePrefs({
serverPrefs?.sort !== sort || sort,
serverPrefs?.prioritizeFollowedUsers !== prioritizeFollowedUsers || prioritizeFollowedUsers,
serverPrefs?.lab_treeViewEnabled !== (view === 'tree' ? true : false) lab_treeViewEnabled: view === 'tree',
) { })
savePrefs({ userUpdatedPrefs.current = false
sort,
prioritizeFollowedUsers,
lab_treeViewEnabled: view === 'tree',
})
}
} }
/*
* Wrapped for easier migration
*/
const setSortWrapped = useCallback( const setSortWrapped = useCallback(
(next: string) => { (next: string) => {
userUpdatedPrefs.current = true
setSort(normalizeSort(next)) setSort(normalizeSort(next))
}, },
[setSort], [setSort],
) )
const setViewWrapped = useCallback(
(next: ThreadViewOption) => {
userUpdatedPrefs.current = true
setView(next)
},
[setView],
)
const setPrioritizeFollowedUsersWrapped = useCallback(
(next: boolean) => {
userUpdatedPrefs.current = true
setPrioritizeFollowedUsers(next)
},
[setPrioritizeFollowedUsers],
)
return useMemo( return useMemo(
() => ({ () => ({
@@ -112,20 +120,20 @@ export function useThreadPreferences({
isSaving, isSaving,
sort, sort,
setSort: setSortWrapped, setSort: setSortWrapped,
prioritizeFollowedUsers,
setPrioritizeFollowedUsers,
view, view,
setView, setView: setViewWrapped,
prioritizeFollowedUsers,
setPrioritizeFollowedUsers: setPrioritizeFollowedUsersWrapped,
}), }),
[ [
isLoaded, isLoaded,
isSaving, isSaving,
sort, sort,
setSortWrapped, setSortWrapped,
prioritizeFollowedUsers,
setPrioritizeFollowedUsers,
view, view,
setView, setViewWrapped,
prioritizeFollowedUsers,
setPrioritizeFollowedUsersWrapped,
], ],
) )
} }