Fix debounce of threads prefs
This commit is contained in:
@@ -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,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user