diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-11-12 18:13:11 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-12 18:13:11 -0800 |
commit | b445c15cc99a56c2baf727d05cf53b44aef4542b (patch) | |
tree | a8b18769ba4987557d4e9b4cd72871f12fb2e1a3 /src/state/queries/preferences/index.ts | |
parent | c584a3378d66459c04eee7d98560920e09c5f09f (diff) | |
download | voidsky-b445c15cc99a56c2baf727d05cf53b44aef4542b.tar.zst |
Refactor notifications to use react-query (#1878)
* Move broadcast channel to lib * Refactor view/com/post/Post and remove temporary 2 components * Add useModerationOpts hook * Refactor notifications to use react-query * Fix: only trigger updates in useModerationOpts when the values have changed * Implement unread notification tracking * Add moderation filtering to notifications * Handle native/push notifications * Remove dead code --------- Co-authored-by: Eric Bailey <git@esb.lol>
Diffstat (limited to 'src/state/queries/preferences/index.ts')
-rw-r--r-- | src/state/queries/preferences/index.ts | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/src/state/queries/preferences/index.ts b/src/state/queries/preferences/index.ts index d64bbd954..4f10b01a6 100644 --- a/src/state/queries/preferences/index.ts +++ b/src/state/queries/preferences/index.ts @@ -1,5 +1,11 @@ +import {useEffect, useState} from 'react' import {useQuery, useMutation, useQueryClient} from '@tanstack/react-query' -import {LabelPreference, BskyFeedViewPreference} from '@atproto/api' +import { + LabelPreference, + BskyFeedViewPreference, + ModerationOpts, +} from '@atproto/api' +import isEqual from 'lodash.isequal' import {track} from '#/lib/analytics/analytics' import {getAge} from '#/lib/strings/time' @@ -15,6 +21,7 @@ import { DEFAULT_HOME_FEED_PREFS, DEFAULT_THREAD_VIEW_PREFS, } from '#/state/queries/preferences/const' +import {getModerationOpts} from '#/state/queries/preferences/moderation' export * from '#/state/queries/preferences/types' export * from '#/state/queries/preferences/moderation' @@ -23,7 +30,7 @@ export * from '#/state/queries/preferences/const' export const usePreferencesQueryKey = ['getPreferences'] export function usePreferencesQuery() { - const {agent} = useSession() + const {agent, hasSession} = useSession() return useQuery({ queryKey: usePreferencesQueryKey, queryFn: async () => { @@ -76,9 +83,30 @@ export function usePreferencesQuery() { } return preferences }, + enabled: hasSession, }) } +export function useModerationOpts() { + const {currentAccount} = useSession() + const [opts, setOpts] = useState<ModerationOpts | undefined>() + const prefs = usePreferencesQuery() + useEffect(() => { + if (!prefs.data) { + return + } + // only update this hook when the moderation options change + const newOpts = getModerationOpts({ + userDid: currentAccount?.did || '', + preferences: prefs.data, + }) + if (!isEqual(opts, newOpts)) { + setOpts(newOpts) + } + }, [prefs.data, currentAccount, opts, setOpts]) + return opts +} + export function useClearPreferencesMutation() { const {agent} = useSession() const queryClient = useQueryClient() |