mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at utm-source 65 lines 1.7 kB view raw
1import {ComAtprotoServerDefs} from '@atproto/api' 2import {useQuery} from '@tanstack/react-query' 3 4import {cleanError} from '#/lib/strings/errors' 5import {STALE} from '#/state/queries' 6import {useAgent} from '#/state/session' 7 8function isInviteAvailable(invite: ComAtprotoServerDefs.InviteCode): boolean { 9 return invite.available - invite.uses.length > 0 && !invite.disabled 10} 11 12const inviteCodesQueryKeyRoot = 'inviteCodes' 13 14export type InviteCodesQueryResponse = Exclude< 15 ReturnType<typeof useInviteCodesQuery>['data'], 16 undefined 17> 18export function useInviteCodesQuery() { 19 const agent = useAgent() 20 return useQuery({ 21 staleTime: STALE.MINUTES.FIVE, 22 queryKey: [inviteCodesQueryKeyRoot], 23 queryFn: async () => { 24 const res = await agent.com.atproto.server 25 .getAccountInviteCodes({}) 26 .catch(e => { 27 if (cleanError(e) === 'Bad token scope') { 28 return null 29 } else { 30 throw e 31 } 32 }) 33 34 if (res === null) { 35 return { 36 disabled: true, 37 all: [], 38 available: [], 39 used: [], 40 } 41 } 42 43 if (!res.data?.codes) { 44 throw new Error(`useInviteCodesQuery: no codes returned`) 45 } 46 47 const available = res.data.codes.filter(isInviteAvailable) 48 const used = res.data.codes 49 .filter(code => !isInviteAvailable(code)) 50 .sort((a, b) => { 51 return ( 52 new Date(b.uses[0].usedAt).getTime() - 53 new Date(a.uses[0].usedAt).getTime() 54 ) 55 }) 56 57 return { 58 disabled: false, 59 all: [...available, ...used], 60 available, 61 used, 62 } 63 }, 64 }) 65}