From a1d5fdd632a135d29a09174ba117b335b1a3b62b Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Mon, 9 Jun 2025 13:58:54 -0500 Subject: [PATCH] Fix debounce of threads prefs --- .../preferences/useThreadPreferences.ts | 52 +++++++++++-------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/src/state/queries/preferences/useThreadPreferences.ts b/src/state/queries/preferences/useThreadPreferences.ts index c668480167..41cdcb90c6 100644 --- a/src/state/queries/preferences/useThreadPreferences.ts +++ b/src/state/queries/preferences/useThreadPreferences.ts @@ -1,4 +1,4 @@ -import {useCallback, useMemo, useState} from 'react' +import {useCallback, useMemo, useRef, useState} from 'react' import {type AppBskyUnspeccedGetPostThreadV2} from '@atproto/api' import debounce from 'lodash.debounce' @@ -65,6 +65,7 @@ export function useThreadPreferences({ ) } + const userUpdatedPrefs = useRef(false) const [isSaving, setIsSaving] = useState(false) const {mutateAsync} = useSetThreadViewPreferencesMutation() const savePrefs = useMemo(() => { @@ -82,29 +83,36 @@ export function useThreadPreferences({ }, 4e3) }, [mutateAsync]) - if (save && !isSaving) { - if ( - serverPrefs?.sort !== sort || - serverPrefs?.prioritizeFollowedUsers !== prioritizeFollowedUsers || - serverPrefs?.lab_treeViewEnabled !== (view === 'tree' ? true : false) - ) { - savePrefs({ - sort, - prioritizeFollowedUsers, - lab_treeViewEnabled: view === 'tree', - }) - } + if (save && userUpdatedPrefs.current) { + savePrefs({ + sort, + prioritizeFollowedUsers, + lab_treeViewEnabled: view === 'tree', + }) + userUpdatedPrefs.current = false } - /* - * Wrapped for easier migration - */ const setSortWrapped = useCallback( (next: string) => { + userUpdatedPrefs.current = true setSort(normalizeSort(next)) }, [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( () => ({ @@ -112,20 +120,20 @@ export function useThreadPreferences({ isSaving, sort, setSort: setSortWrapped, - prioritizeFollowedUsers, - setPrioritizeFollowedUsers, view, - setView, + setView: setViewWrapped, + prioritizeFollowedUsers, + setPrioritizeFollowedUsers: setPrioritizeFollowedUsersWrapped, }), [ isLoaded, isSaving, sort, setSortWrapped, - prioritizeFollowedUsers, - setPrioritizeFollowedUsers, view, - setView, + setViewWrapped, + prioritizeFollowedUsers, + setPrioritizeFollowedUsersWrapped, ], ) }